OSDN Git Service

PR c++/14246
[pf3gnuchains/gcc-fork.git] / gcc / cp / mangle.c
1 /* Name mangling for the 3.0 C++ ABI.
2    Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
3    Written by Alex Samuel <sameul@codesourcery.com>
4
5    This file is part of GCC.
6
7    GCC is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2, or (at your option)
10    any later version.
11
12    GCC is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GCC; see the file COPYING.  If not, write to the Free
19    Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 /* This file implements mangling of C++ names according to the IA64
23    C++ ABI specification.  A mangled name encodes a function or
24    variable's name, scope, type, and/or template arguments into a text
25    identifier.  This identifier is used as the function's or
26    variable's linkage name, to preserve compatibility between C++'s
27    language features (templates, scoping, and overloading) and C
28    linkers.
29
30    Additionally, g++ uses mangled names internally.  To support this,
31    mangling of types is allowed, even though the mangled name of a
32    type should not appear by itself as an exported name.  Ditto for
33    uninstantiated templates.
34
35    The primary entry point for this module is mangle_decl, which
36    returns an identifier containing the mangled name for a decl.
37    Additional entry points are provided to build mangled names of
38    particular constructs when the appropriate decl for that construct
39    is not available.  These are:
40
41      mangle_typeinfo_for_type:        typeinfo data
42      mangle_typeinfo_string_for_type: typeinfo type name
43      mangle_vtbl_for_type:            virtual table data
44      mangle_vtt_for_type:             VTT data
45      mangle_ctor_vtbl_for_type:       `C-in-B' constructor virtual table data
46      mangle_thunk:                    thunk function or entry
47
48 */
49
50 #include "config.h"
51 #include "system.h"
52 #include "coretypes.h"
53 #include "tm.h"
54 #include "tree.h"
55 #include "tm_p.h"
56 #include "cp-tree.h"
57 #include "real.h"
58 #include "obstack.h"
59 #include "toplev.h"
60 #include "varray.h"
61 #include "flags.h"
62
63 /* Debugging support.  */
64
65 /* Define DEBUG_MANGLE to enable very verbose trace messages.  */
66 #ifndef DEBUG_MANGLE
67 #define DEBUG_MANGLE 0
68 #endif
69
70 /* Macros for tracing the write_* functions.  */
71 #if DEBUG_MANGLE
72 # define MANGLE_TRACE(FN, INPUT) \
73   fprintf (stderr, "  %-24s: %-24s\n", (FN), (INPUT))
74 # define MANGLE_TRACE_TREE(FN, NODE) \
75   fprintf (stderr, "  %-24s: %-24s (%p)\n", \
76            (FN), tree_code_name[TREE_CODE (NODE)], (void *) (NODE))
77 #else
78 # define MANGLE_TRACE(FN, INPUT)
79 # define MANGLE_TRACE_TREE(FN, NODE)
80 #endif
81
82 /* Nonzero if NODE is a class template-id.  We can't rely on
83    CLASSTYPE_USE_TEMPLATE here because of tricky bugs in the parser
84    that hard to distinguish A<T> from A, where A<T> is the type as
85    instantiated outside of the template, and A is the type used
86    without parameters inside the template.  */
87 #define CLASSTYPE_TEMPLATE_ID_P(NODE)                                   \
88   (TYPE_LANG_SPECIFIC (NODE) != NULL                                    \
89    && (TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM                 \
90        || (CLASSTYPE_TEMPLATE_INFO (NODE) != NULL                       \
91            && (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE))))))
92
93 /* Things we only need one of.  This module is not reentrant.  */
94 static struct globals
95 {
96   /* The name in which we're building the mangled name.  */
97   struct obstack name_obstack;
98
99   /* An array of the current substitution candidates, in the order
100      we've seen them.  */
101   varray_type substitutions;
102
103   /* The entity that is being mangled.  */
104   tree entity;
105
106   /* True if the mangling will be different in a future version of the
107      ABI.  */
108   bool need_abi_warning;
109 } G;
110
111 /* Indices into subst_identifiers.  These are identifiers used in
112    special substitution rules.  */
113 typedef enum
114 {
115   SUBID_ALLOCATOR,
116   SUBID_BASIC_STRING,
117   SUBID_CHAR_TRAITS,
118   SUBID_BASIC_ISTREAM,
119   SUBID_BASIC_OSTREAM,
120   SUBID_BASIC_IOSTREAM,
121   SUBID_MAX
122 }
123 substitution_identifier_index_t;
124
125 /* For quick substitution checks, look up these common identifiers
126    once only.  */
127 static GTY(()) tree subst_identifiers[SUBID_MAX];
128
129 /* Single-letter codes for builtin integer types, defined in
130    <builtin-type>.  These are indexed by integer_type_kind values.  */
131 static const char
132 integer_type_codes[itk_none] =
133 {
134   'c',  /* itk_char */
135   'a',  /* itk_signed_char */
136   'h',  /* itk_unsigned_char */
137   's',  /* itk_short */
138   't',  /* itk_unsigned_short */
139   'i',  /* itk_int */
140   'j',  /* itk_unsigned_int */
141   'l',  /* itk_long */
142   'm',  /* itk_unsigned_long */
143   'x',  /* itk_long_long */
144   'y'   /* itk_unsigned_long_long */
145 };
146
147 static int decl_is_template_id (const tree, tree* const);
148
149 /* Functions for handling substitutions.  */
150
151 static inline tree canonicalize_for_substitution (tree);
152 static void add_substitution (tree);
153 static inline int is_std_substitution (const tree,
154                                        const substitution_identifier_index_t);
155 static inline int is_std_substitution_char (const tree,
156                                             const substitution_identifier_index_t);
157 static int find_substitution (tree);
158 static void mangle_call_offset (const tree, const tree);
159
160 /* Functions for emitting mangled representations of things.  */
161
162 static void write_mangled_name (const tree, bool);
163 static void write_encoding (const tree);
164 static void write_name (tree, const int);
165 static void write_unscoped_name (const tree);
166 static void write_unscoped_template_name (const tree);
167 static void write_nested_name (const tree);
168 static void write_prefix (const tree);
169 static void write_template_prefix (const tree);
170 static void write_unqualified_name (const tree);
171 static void write_conversion_operator_name (const tree);
172 static void write_source_name (tree);
173 static int hwint_to_ascii (unsigned HOST_WIDE_INT, const unsigned int, char *,
174                            const unsigned int);
175 static void write_number (unsigned HOST_WIDE_INT, const int,
176                           const unsigned int);
177 static void write_integer_cst (const tree);
178 static void write_real_cst (const tree);
179 static void write_identifier (const char *);
180 static void write_special_name_constructor (const tree);
181 static void write_special_name_destructor (const tree);
182 static void write_type (tree);
183 static int write_CV_qualifiers_for_type (const tree);
184 static void write_builtin_type (tree);
185 static void write_function_type (const tree);
186 static void write_bare_function_type (const tree, const int, const tree);
187 static void write_method_parms (tree, const int, const tree);
188 static void write_class_enum_type (const tree);
189 static void write_template_args (tree);
190 static void write_expression (tree);
191 static void write_template_arg_literal (const tree);
192 static void write_template_arg (tree);
193 static void write_template_template_arg (const tree);
194 static void write_array_type (const tree);
195 static void write_pointer_to_member_type (const tree);
196 static void write_template_param (const tree);
197 static void write_template_template_param (const tree);
198 static void write_substitution (const int);
199 static int discriminator_for_local_entity (tree);
200 static int discriminator_for_string_literal (tree, tree);
201 static void write_discriminator (const int);
202 static void write_local_name (const tree, const tree, const tree);
203 static void dump_substitution_candidates (void);
204 static const char *mangle_decl_string (const tree);
205
206 /* Control functions.  */
207
208 static inline void start_mangling (const tree);
209 static inline const char *finish_mangling (const bool);
210 static tree mangle_special_for_type (const tree, const char *);
211
212 /* Foreign language functions.  */
213
214 static void write_java_integer_type_codes (const tree);
215
216 /* Append a single character to the end of the mangled
217    representation.  */
218 #define write_char(CHAR)                                              \
219   obstack_1grow (&G.name_obstack, (CHAR))
220
221 /* Append a sized buffer to the end of the mangled representation.  */
222 #define write_chars(CHAR, LEN)                                        \
223   obstack_grow (&G.name_obstack, (CHAR), (LEN))
224
225 /* Append a NUL-terminated string to the end of the mangled
226    representation.  */
227 #define write_string(STRING)                                          \
228   obstack_grow (&G.name_obstack, (STRING), strlen (STRING))
229
230 /* Nonzero if NODE1 and NODE2 are both TREE_LIST nodes and have the
231    same purpose (context, which may be a type) and value (template
232    decl).  See write_template_prefix for more information on what this
233    is used for.  */
234 #define NESTED_TEMPLATE_MATCH(NODE1, NODE2)                         \
235   (TREE_CODE (NODE1) == TREE_LIST                                     \
236    && TREE_CODE (NODE2) == TREE_LIST                                  \
237    && ((TYPE_P (TREE_PURPOSE (NODE1))                                 \
238         && same_type_p (TREE_PURPOSE (NODE1), TREE_PURPOSE (NODE2)))\
239        || TREE_PURPOSE (NODE1) == TREE_PURPOSE (NODE2))             \
240    && TREE_VALUE (NODE1) == TREE_VALUE (NODE2))
241
242 /* Write out an unsigned quantity in base 10.  */
243 #define write_unsigned_number(NUMBER) \
244   write_number ((NUMBER), /*unsigned_p=*/1, 10)
245
246 /* If DECL is a template instance, return nonzero and, if
247    TEMPLATE_INFO is non-NULL, set *TEMPLATE_INFO to its template info.
248    Otherwise return zero.  */
249
250 static int
251 decl_is_template_id (const tree decl, tree* const template_info)
252 {
253   if (TREE_CODE (decl) == TYPE_DECL)
254     {
255       /* TYPE_DECLs are handled specially.  Look at its type to decide
256          if this is a template instantiation.  */
257       const tree type = TREE_TYPE (decl);
258
259       if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_ID_P (type))
260         {
261           if (template_info != NULL)
262             /* For a templated TYPE_DECL, the template info is hanging
263                off the type.  */
264             *template_info = TYPE_TEMPLATE_INFO (type);
265           return 1;
266         }
267     } 
268   else
269     {
270       /* Check if this is a primary template.  */
271       if (DECL_LANG_SPECIFIC (decl) != NULL
272           && DECL_USE_TEMPLATE (decl)
273           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
274           && TREE_CODE (decl) != TEMPLATE_DECL)
275         {
276           if (template_info != NULL)
277             /* For most templated decls, the template info is hanging
278                off the decl.  */
279             *template_info = DECL_TEMPLATE_INFO (decl);
280           return 1;
281         }
282     }
283
284   /* It's not a template id.  */
285   return 0;
286 }
287
288 /* Produce debugging output of current substitution candidates.  */
289
290 static void
291 dump_substitution_candidates (void)
292 {
293   unsigned i;
294
295   fprintf (stderr, "  ++ substitutions  ");
296   for (i = 0; i < VARRAY_ACTIVE_SIZE (G.substitutions); ++i)
297     {
298       tree el = VARRAY_TREE (G.substitutions, i);
299       const char *name = "???";
300
301       if (i > 0)
302         fprintf (stderr, "                    ");
303       if (DECL_P (el))
304         name = IDENTIFIER_POINTER (DECL_NAME (el));
305       else if (TREE_CODE (el) == TREE_LIST)
306         name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (el)));
307       else if (TYPE_NAME (el))
308         name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (el)));
309       fprintf (stderr, " S%d_ = ", i - 1);
310       if (TYPE_P (el) && 
311           (CP_TYPE_RESTRICT_P (el) 
312            || CP_TYPE_VOLATILE_P (el) 
313            || CP_TYPE_CONST_P (el)))
314         fprintf (stderr, "CV-");
315       fprintf (stderr, "%s (%s at %p)\n", 
316                name, tree_code_name[TREE_CODE (el)], (void *) el);
317     }
318 }
319
320 /* Both decls and types can be substitution candidates, but sometimes
321    they refer to the same thing.  For instance, a TYPE_DECL and
322    RECORD_TYPE for the same class refer to the same thing, and should
323    be treated accordingly in substitutions.  This function returns a
324    canonicalized tree node representing NODE that is used when adding
325    and substitution candidates and finding matches.  */
326
327 static inline tree
328 canonicalize_for_substitution (tree node)
329 {
330   /* For a TYPE_DECL, use the type instead.  */
331   if (TREE_CODE (node) == TYPE_DECL)
332     node = TREE_TYPE (node);
333   if (TYPE_P (node))
334     node = canonical_type_variant (node);
335
336   return node;
337 }
338
339 /* Add NODE as a substitution candidate.  NODE must not already be on
340    the list of candidates.  */
341
342 static void
343 add_substitution (tree node)
344 {
345   tree c;
346
347   if (DEBUG_MANGLE)
348     fprintf (stderr, "  ++ add_substitution (%s at %10p)\n", 
349              tree_code_name[TREE_CODE (node)], (void *) node);
350
351   /* Get the canonicalized substitution candidate for NODE.  */
352   c = canonicalize_for_substitution (node);
353   if (DEBUG_MANGLE && c != node)
354     fprintf (stderr, "  ++ using candidate (%s at %10p)\n",
355              tree_code_name[TREE_CODE (node)], (void *) node);
356   node = c;
357
358 #if ENABLE_CHECKING
359   /* Make sure NODE isn't already a candidate.  */
360   {
361     int i;
362     for (i = VARRAY_ACTIVE_SIZE (G.substitutions); --i >= 0; )
363       {
364         const tree candidate = VARRAY_TREE (G.substitutions, i);
365         if ((DECL_P (node) 
366              && node == candidate)
367             || (TYPE_P (node) 
368                 && TYPE_P (candidate) 
369                 && same_type_p (node, candidate)))
370           abort ();
371       }
372   }
373 #endif /* ENABLE_CHECKING */
374
375   /* Put the decl onto the varray of substitution candidates.  */
376   VARRAY_PUSH_TREE (G.substitutions, node);
377
378   if (DEBUG_MANGLE)
379     dump_substitution_candidates ();
380 }
381
382 /* Helper function for find_substitution.  Returns nonzero if NODE,
383    which may be a decl or a CLASS_TYPE, is a template-id with template
384    name of substitution_index[INDEX] in the ::std namespace.  */
385
386 static inline int 
387 is_std_substitution (const tree node,
388                      const substitution_identifier_index_t index)
389 {
390   tree type = NULL;
391   tree decl = NULL;
392
393   if (DECL_P (node))
394     {
395       type = TREE_TYPE (node);
396       decl = node;
397     }
398   else if (CLASS_TYPE_P (node))
399     {
400       type = node;
401       decl = TYPE_NAME (node);
402     }
403   else 
404     /* These are not the droids you're looking for.  */
405     return 0;
406
407   return (DECL_NAMESPACE_STD_P (CP_DECL_CONTEXT (decl))
408           && TYPE_LANG_SPECIFIC (type) 
409           && TYPE_TEMPLATE_INFO (type)
410           && (DECL_NAME (TYPE_TI_TEMPLATE (type)) 
411               == subst_identifiers[index]));
412 }
413
414 /* Helper function for find_substitution.  Returns nonzero if NODE,
415    which may be a decl or a CLASS_TYPE, is the template-id
416    ::std::identifier<char>, where identifier is
417    substitution_index[INDEX].  */
418
419 static inline int
420 is_std_substitution_char (const tree node,
421                           const substitution_identifier_index_t index)
422 {
423   tree args;
424   /* Check NODE's name is ::std::identifier.  */
425   if (!is_std_substitution (node, index))
426     return 0;
427   /* Figure out its template args.  */
428   if (DECL_P (node))
429     args = DECL_TI_ARGS (node);  
430   else if (CLASS_TYPE_P (node))
431     args = CLASSTYPE_TI_ARGS (node);
432   else
433     /* Oops, not a template.  */
434     return 0;
435   /* NODE's template arg list should be <char>.  */
436   return 
437     TREE_VEC_LENGTH (args) == 1
438     && TREE_VEC_ELT (args, 0) == char_type_node;
439 }
440
441 /* Check whether a substitution should be used to represent NODE in
442    the mangling.
443
444    First, check standard special-case substitutions.
445
446      <substitution> ::= St     
447          # ::std
448
449                     ::= Sa     
450          # ::std::allocator
451
452                     ::= Sb     
453          # ::std::basic_string
454
455                     ::= Ss 
456          # ::std::basic_string<char,
457                                ::std::char_traits<char>,
458                                ::std::allocator<char> >
459
460                     ::= Si 
461          # ::std::basic_istream<char, ::std::char_traits<char> >
462
463                     ::= So 
464          # ::std::basic_ostream<char, ::std::char_traits<char> >
465
466                     ::= Sd 
467          # ::std::basic_iostream<char, ::std::char_traits<char> >   
468
469    Then examine the stack of currently available substitution
470    candidates for entities appearing earlier in the same mangling
471
472    If a substitution is found, write its mangled representation and
473    return nonzero.  If none is found, just return zero.  */
474
475 static int
476 find_substitution (tree node)
477 {
478   int i;
479   const int size = VARRAY_ACTIVE_SIZE (G.substitutions);
480   tree decl;
481   tree type;
482
483   if (DEBUG_MANGLE)
484     fprintf (stderr, "  ++ find_substitution (%s at %p)\n",
485              tree_code_name[TREE_CODE (node)], (void *) node);
486
487   /* Obtain the canonicalized substitution representation for NODE.
488      This is what we'll compare against.  */
489   node = canonicalize_for_substitution (node);
490
491   /* Check for builtin substitutions.  */
492
493   decl = TYPE_P (node) ? TYPE_NAME (node) : node;
494   type = TYPE_P (node) ? node : TREE_TYPE (node);
495
496   /* Check for std::allocator.  */
497   if (decl 
498       && is_std_substitution (decl, SUBID_ALLOCATOR)
499       && !CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)))
500     {
501       write_string ("Sa");
502       return 1;
503     }
504
505   /* Check for std::basic_string.  */
506   if (decl && is_std_substitution (decl, SUBID_BASIC_STRING))
507     {
508       if (TYPE_P (node))
509         {
510           /* If this is a type (i.e. a fully-qualified template-id), 
511              check for 
512                  std::basic_string <char,
513                                     std::char_traits<char>,
514                                     std::allocator<char> > .  */
515           if (cp_type_quals (type) == TYPE_UNQUALIFIED
516               && CLASSTYPE_USE_TEMPLATE (type))
517             {
518               tree args = CLASSTYPE_TI_ARGS (type);
519               if (TREE_VEC_LENGTH (args) == 3
520                   && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
521                   && is_std_substitution_char (TREE_VEC_ELT (args, 1),
522                                                SUBID_CHAR_TRAITS)
523                   && is_std_substitution_char (TREE_VEC_ELT (args, 2),
524                                                SUBID_ALLOCATOR))
525                 {
526                   write_string ("Ss");
527                   return 1;
528                 }
529             }
530         }
531       else
532         /* Substitute for the template name only if this isn't a type.  */
533         {
534           write_string ("Sb");
535           return 1;
536         }
537     }
538
539   /* Check for basic_{i,o,io}stream.  */
540   if (TYPE_P (node)
541       && cp_type_quals (type) == TYPE_UNQUALIFIED
542       && CLASS_TYPE_P (type)
543       && CLASSTYPE_USE_TEMPLATE (type)
544       && CLASSTYPE_TEMPLATE_INFO (type) != NULL)
545     {
546       /* First, check for the template 
547          args <char, std::char_traits<char> > .  */
548       tree args = CLASSTYPE_TI_ARGS (type);
549       if (TREE_VEC_LENGTH (args) == 2
550           && TYPE_P (TREE_VEC_ELT (args, 0))
551           && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
552           && is_std_substitution_char (TREE_VEC_ELT (args, 1),
553                                        SUBID_CHAR_TRAITS))
554         {
555           /* Got them.  Is this basic_istream?  */
556           tree name = DECL_NAME (CLASSTYPE_TI_TEMPLATE (type));
557           if (name == subst_identifiers[SUBID_BASIC_ISTREAM])
558             {
559               write_string ("Si");
560               return 1;
561             }
562           /* Or basic_ostream?  */
563           else if (name == subst_identifiers[SUBID_BASIC_OSTREAM])
564             {
565               write_string ("So");
566               return 1;
567             }
568           /* Or basic_iostream?  */
569           else if (name == subst_identifiers[SUBID_BASIC_IOSTREAM])
570             {
571               write_string ("Sd");
572               return 1;
573             }
574         }
575     }
576
577   /* Check for namespace std.  */
578   if (decl && DECL_NAMESPACE_STD_P (decl))
579     {
580       write_string ("St");
581       return 1;
582     }
583
584   /* Now check the list of available substitutions for this mangling
585      operation.  */
586   for (i = 0; i < size; ++i)
587     {
588       tree candidate = VARRAY_TREE (G.substitutions, i);
589       /* NODE is a matched to a candidate if it's the same decl node or
590          if it's the same type.  */
591       if (decl == candidate
592           || (TYPE_P (candidate) && type && TYPE_P (type)
593               && same_type_p (type, candidate))
594           || NESTED_TEMPLATE_MATCH (node, candidate))
595         {
596           write_substitution (i);
597           return 1;
598         }
599     }
600
601   /* No substitution found.  */
602   return 0;
603 }
604
605
606 /* TOP_LEVEL is true, if this is being called at outermost level of
607   mangling. It should be false when mangling a decl appearing in an
608   expression within some other mangling.
609   
610   <mangled-name>      ::= _Z <encoding>  */
611
612 static void
613 write_mangled_name (const tree decl, bool top_level)
614 {
615   MANGLE_TRACE_TREE ("mangled-name", decl);
616
617   if (/* The names of `extern "C"' functions are not mangled.  */
618       DECL_EXTERN_C_FUNCTION_P (decl)
619       /* But overloaded operator names *are* mangled.  */
620       && !DECL_OVERLOADED_OPERATOR_P (decl))
621     {
622     unmangled_name:;
623       
624       if (top_level)
625         write_string (IDENTIFIER_POINTER (DECL_NAME (decl)));
626       else
627         {
628           /* The standard notes: "The <encoding> of an extern "C"
629              function is treated like global-scope data, i.e. as its
630              <source-name> without a type."  We cannot write
631              overloaded operators that way though, because it contains
632              characters invalid in assembler.  */
633           if (abi_version_at_least (2))
634             write_string ("_Z");
635           else
636             G.need_abi_warning = true;
637           write_source_name (DECL_NAME (decl));
638         }
639     }
640   else if (TREE_CODE (decl) == VAR_DECL
641            /* The names of global variables aren't mangled.  */
642            && (CP_DECL_CONTEXT (decl) == global_namespace
643                /* And neither are `extern "C"' variables.  */
644                || DECL_EXTERN_C_P (decl)))
645     {
646       if (top_level || abi_version_at_least (2))
647         goto unmangled_name;
648       else
649         {
650           G.need_abi_warning = true;
651           goto mangled_name;
652         }
653     }
654   else
655     {
656     mangled_name:;
657       write_string ("_Z");
658       write_encoding (decl);
659       if (DECL_LANG_SPECIFIC (decl)
660           && (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
661               || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)))
662         /* We need a distinct mangled name for these entities, but
663            we should never actually output it.  So, we append some
664            characters the assembler won't like.  */
665         write_string (" *INTERNAL* ");
666     }
667 }
668
669 /*   <encoding>         ::= <function name> <bare-function-type>
670                         ::= <data name>  */
671
672 static void
673 write_encoding (const tree decl)
674 {
675   MANGLE_TRACE_TREE ("encoding", decl);
676
677   if (DECL_LANG_SPECIFIC (decl) && DECL_EXTERN_C_FUNCTION_P (decl))
678     {
679       /* For overloaded operators write just the mangled name
680          without arguments.  */
681       if (DECL_OVERLOADED_OPERATOR_P (decl))
682         write_name (decl, /*ignore_local_scope=*/0);
683       else
684         write_source_name (DECL_NAME (decl));
685       return;
686     }
687
688   write_name (decl, /*ignore_local_scope=*/0);
689   if (TREE_CODE (decl) == FUNCTION_DECL)
690     {
691       tree fn_type;
692       tree d;
693
694       if (decl_is_template_id (decl, NULL))
695         {
696           fn_type = get_mostly_instantiated_function_type (decl);
697           /* FN_TYPE will not have parameter types for in-charge or
698              VTT parameters.  Therefore, we pass NULL_TREE to
699              write_bare_function_type -- otherwise, it will get
700              confused about which artificial parameters to skip.  */
701           d = NULL_TREE;
702         }
703       else
704         {
705           fn_type = TREE_TYPE (decl);
706           d = decl;
707         }
708
709       write_bare_function_type (fn_type, 
710                                 (!DECL_CONSTRUCTOR_P (decl)
711                                  && !DECL_DESTRUCTOR_P (decl)
712                                  && !DECL_CONV_FN_P (decl)
713                                  && decl_is_template_id (decl, NULL)),
714                                 d);
715     }
716 }
717
718 /* <name> ::= <unscoped-name>
719           ::= <unscoped-template-name> <template-args>
720           ::= <nested-name>
721           ::= <local-name>  
722
723    If IGNORE_LOCAL_SCOPE is nonzero, this production of <name> is
724    called from <local-name>, which mangles the enclosing scope
725    elsewhere and then uses this function to mangle just the part
726    underneath the function scope.  So don't use the <local-name>
727    production, to avoid an infinite recursion.  */
728
729 static void
730 write_name (tree decl, const int ignore_local_scope)
731 {
732   tree context;
733
734   MANGLE_TRACE_TREE ("name", decl);
735
736   if (TREE_CODE (decl) == TYPE_DECL)
737     {
738       /* In case this is a typedef, fish out the corresponding
739          TYPE_DECL for the main variant.  */
740       decl = TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl)));
741       context = TYPE_CONTEXT (TYPE_MAIN_VARIANT (TREE_TYPE (decl)));
742     }
743   else
744     context = (DECL_CONTEXT (decl) == NULL) ? NULL : CP_DECL_CONTEXT (decl);
745
746   /* A decl in :: or ::std scope is treated specially.  The former is
747      mangled using <unscoped-name> or <unscoped-template-name>, the
748      latter with a special substitution.  Also, a name that is
749      directly in a local function scope is also mangled with
750      <unscoped-name> rather than a full <nested-name>.  */
751   if (context == NULL 
752       || context == global_namespace 
753       || DECL_NAMESPACE_STD_P (context)
754       || (ignore_local_scope && TREE_CODE (context) == FUNCTION_DECL))
755     {
756       tree template_info;
757       /* Is this a template instance?  */
758       if (decl_is_template_id (decl, &template_info))
759         {
760           /* Yes: use <unscoped-template-name>.  */
761           write_unscoped_template_name (TI_TEMPLATE (template_info));
762           write_template_args (TI_ARGS (template_info));
763         }
764       else
765         /* Everything else gets an <unqualified-name>.  */
766         write_unscoped_name (decl);
767     }
768   else
769     {
770       /* Handle local names, unless we asked not to (that is, invoked
771          under <local-name>, to handle only the part of the name under
772          the local scope).  */
773       if (!ignore_local_scope)
774         {
775           /* Scan up the list of scope context, looking for a
776              function.  If we find one, this entity is in local
777              function scope.  local_entity tracks context one scope
778              level down, so it will contain the element that's
779              directly in that function's scope, either decl or one of
780              its enclosing scopes.  */
781           tree local_entity = decl;
782           while (context != NULL && context != global_namespace)
783             {
784               /* Make sure we're always dealing with decls.  */
785               if (context != NULL && TYPE_P (context))
786                 context = TYPE_NAME (context);
787               /* Is this a function?  */
788               if (TREE_CODE (context) == FUNCTION_DECL)
789                 {
790                   /* Yes, we have local scope.  Use the <local-name>
791                      production for the innermost function scope.  */
792                   write_local_name (context, local_entity, decl);
793                   return;
794                 }
795               /* Up one scope level.  */
796               local_entity = context;
797               context = CP_DECL_CONTEXT (context);
798             }
799
800           /* No local scope found?  Fall through to <nested-name>.  */
801         }
802
803       /* Other decls get a <nested-name> to encode their scope.  */
804       write_nested_name (decl);
805     }
806 }
807
808 /* <unscoped-name> ::= <unqualified-name>
809                    ::= St <unqualified-name>   # ::std::  */
810
811 static void
812 write_unscoped_name (const tree decl)
813 {
814   tree context = CP_DECL_CONTEXT (decl);
815
816   MANGLE_TRACE_TREE ("unscoped-name", decl);
817
818   /* Is DECL in ::std?  */
819   if (DECL_NAMESPACE_STD_P (context))
820     {
821       write_string ("St");
822       write_unqualified_name (decl);
823     }
824   /* If not, it should be either in the global namespace, or directly
825      in a local function scope.  */
826   else if (context == global_namespace 
827            || context == NULL
828            || TREE_CODE (context) == FUNCTION_DECL)
829     write_unqualified_name (decl);
830   else 
831     abort ();
832 }
833
834 /* <unscoped-template-name> ::= <unscoped-name>
835                             ::= <substitution>  */
836
837 static void
838 write_unscoped_template_name (const tree decl)
839 {
840   MANGLE_TRACE_TREE ("unscoped-template-name", decl);
841
842   if (find_substitution (decl))
843     return;
844   write_unscoped_name (decl);
845   add_substitution (decl);
846 }
847
848 /* Write the nested name, including CV-qualifiers, of DECL.
849
850    <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E  
851                  ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
852
853    <CV-qualifiers> ::= [r] [V] [K]  */
854
855 static void
856 write_nested_name (const tree decl)
857 {
858   tree template_info;
859
860   MANGLE_TRACE_TREE ("nested-name", decl);
861
862   write_char ('N');
863   
864   /* Write CV-qualifiers, if this is a member function.  */
865   if (TREE_CODE (decl) == FUNCTION_DECL 
866       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
867     {
868       if (DECL_VOLATILE_MEMFUNC_P (decl))
869         write_char ('V');
870       if (DECL_CONST_MEMFUNC_P (decl))
871         write_char ('K');
872     }
873
874   /* Is this a template instance?  */
875   if (decl_is_template_id (decl, &template_info))
876     {
877       /* Yes, use <template-prefix>.  */
878       write_template_prefix (decl);
879       write_template_args (TI_ARGS (template_info));
880     }
881   else
882     {
883       /* No, just use <prefix>  */
884       write_prefix (DECL_CONTEXT (decl));
885       write_unqualified_name (decl);
886     }
887   write_char ('E');
888 }
889
890 /* <prefix> ::= <prefix> <unqualified-name>
891             ::= <template-param>
892             ::= <template-prefix> <template-args>
893             ::= # empty
894             ::= <substitution>  */
895
896 static void
897 write_prefix (const tree node)
898 {
899   tree decl;
900   /* Non-NULL if NODE represents a template-id.  */
901   tree template_info = NULL;
902
903   MANGLE_TRACE_TREE ("prefix", node);
904
905   if (node == NULL
906       || node == global_namespace)
907     return;
908
909   if (find_substitution (node))
910     return;
911
912   if (DECL_P (node))
913     {
914       /* If this is a function decl, that means we've hit function
915          scope, so this prefix must be for a local name.  In this
916          case, we're under the <local-name> production, which encodes
917          the enclosing function scope elsewhere.  So don't continue
918          here.  */
919       if (TREE_CODE (node) == FUNCTION_DECL)
920         return;
921
922       decl = node;
923       decl_is_template_id (decl, &template_info);
924     }
925   else
926     {
927       /* Node is a type.  */
928       decl = TYPE_NAME (node);
929       if (CLASSTYPE_TEMPLATE_ID_P (node))
930         template_info = TYPE_TEMPLATE_INFO (node);
931     }
932
933   /* In G++ 3.2, the name of the template parameter was used.  */
934   if (TREE_CODE (node) == TEMPLATE_TYPE_PARM 
935       && !abi_version_at_least (2))
936     G.need_abi_warning = true;
937
938   if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
939       && abi_version_at_least (2))
940     write_template_param (node);
941   else if (template_info != NULL)
942     /* Templated.  */
943     {
944       write_template_prefix (decl);
945       write_template_args (TI_ARGS (template_info));
946     }
947   else
948     /* Not templated.  */
949     {
950       write_prefix (CP_DECL_CONTEXT (decl));
951       write_unqualified_name (decl);
952     }
953
954   add_substitution (node);
955 }
956
957 /* <template-prefix> ::= <prefix> <template component>
958                      ::= <template-param>
959                      ::= <substitution>  */
960
961 static void
962 write_template_prefix (const tree node)
963 {
964   tree decl = DECL_P (node) ? node : TYPE_NAME (node);
965   tree type = DECL_P (node) ? TREE_TYPE (node) : node;
966   tree context = CP_DECL_CONTEXT (decl);
967   tree template_info;
968   tree template;
969   tree substitution;
970
971   MANGLE_TRACE_TREE ("template-prefix", node);
972
973   /* Find the template decl.  */
974   if (decl_is_template_id (decl, &template_info))
975     template = TI_TEMPLATE (template_info);
976   else if (CLASSTYPE_TEMPLATE_ID_P (type))
977     template = TYPE_TI_TEMPLATE (type);
978   else
979     /* Oops, not a template.  */
980     abort ();
981
982   /* For a member template, though, the template name for the
983      innermost name must have all the outer template levels
984      instantiated.  For instance, consider
985
986        template<typename T> struct Outer {
987          template<typename U> struct Inner {};
988        };
989
990      The template name for `Inner' in `Outer<int>::Inner<float>' is
991      `Outer<int>::Inner<U>'.  In g++, we don't instantiate the template
992      levels separately, so there's no TEMPLATE_DECL available for this
993      (there's only `Outer<T>::Inner<U>').
994
995      In order to get the substitutions right, we create a special
996      TREE_LIST to represent the substitution candidate for a nested
997      template.  The TREE_PURPOSE is the template's context, fully
998      instantiated, and the TREE_VALUE is the TEMPLATE_DECL for the inner
999      template.
1000
1001      So, for the example above, `Outer<int>::Inner' is represented as a
1002      substitution candidate by a TREE_LIST whose purpose is `Outer<int>'
1003      and whose value is `Outer<T>::Inner<U>'.  */
1004   if (TYPE_P (context))
1005     substitution = build_tree_list (context, template);
1006   else
1007     substitution = template;
1008
1009   if (find_substitution (substitution))
1010     return;
1011
1012   /* In G++ 3.2, the name of the template template parameter was used.  */
1013   if (TREE_CODE (TREE_TYPE (template)) == TEMPLATE_TEMPLATE_PARM
1014       && !abi_version_at_least (2))
1015     G.need_abi_warning = true;
1016
1017   if (TREE_CODE (TREE_TYPE (template)) == TEMPLATE_TEMPLATE_PARM
1018       && abi_version_at_least (2))
1019     write_template_param (TREE_TYPE (template));
1020   else
1021     {
1022       write_prefix (context);
1023       write_unqualified_name (decl);
1024     }
1025
1026   add_substitution (substitution);
1027 }
1028
1029 /* We don't need to handle thunks, vtables, or VTTs here.  Those are
1030    mangled through special entry points.  
1031
1032     <unqualified-name>  ::= <operator-name>
1033                         ::= <special-name>  
1034                         ::= <source-name>  */
1035
1036 static void
1037 write_unqualified_name (const tree decl)
1038 {
1039   MANGLE_TRACE_TREE ("unqualified-name", decl);
1040
1041   if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_CONSTRUCTOR_P (decl))
1042     write_special_name_constructor (decl);
1043   else if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_DESTRUCTOR_P (decl))
1044     write_special_name_destructor (decl);
1045   else if (DECL_NAME (decl) == NULL_TREE)
1046     write_source_name (DECL_ASSEMBLER_NAME (decl));
1047   else if (DECL_CONV_FN_P (decl)) 
1048     {
1049       /* Conversion operator. Handle it right here.  
1050            <operator> ::= cv <type>  */
1051       tree type;
1052       if (decl_is_template_id (decl, NULL))
1053         {
1054           tree fn_type = get_mostly_instantiated_function_type (decl);
1055           type = TREE_TYPE (fn_type);
1056         }
1057       else
1058         type = DECL_CONV_FN_TYPE (decl);
1059       write_conversion_operator_name (type);
1060     }
1061   else if (DECL_OVERLOADED_OPERATOR_P (decl))
1062     {
1063       operator_name_info_t *oni;
1064       if (DECL_ASSIGNMENT_OPERATOR_P (decl))
1065         oni = assignment_operator_name_info;
1066       else
1067         oni = operator_name_info;
1068       
1069       write_string (oni[DECL_OVERLOADED_OPERATOR_P (decl)].mangled_name);
1070     }
1071   else
1072     write_source_name (DECL_NAME (decl));
1073 }
1074
1075 /* Write the unqualified-name for a conversion operator to TYPE.  */
1076
1077 static void
1078 write_conversion_operator_name (const tree type)
1079 {
1080   write_string ("cv");
1081   write_type (type);
1082 }
1083
1084 /* Non-terminal <source-name>.  IDENTIFIER is an IDENTIFIER_NODE.  
1085
1086      <source-name> ::= </length/ number> <identifier>  */
1087
1088 static void
1089 write_source_name (tree identifier)
1090 {
1091   MANGLE_TRACE_TREE ("source-name", identifier);
1092
1093   /* Never write the whole template-id name including the template
1094      arguments; we only want the template name.  */
1095   if (IDENTIFIER_TEMPLATE (identifier))
1096     identifier = IDENTIFIER_TEMPLATE (identifier);
1097
1098   write_unsigned_number (IDENTIFIER_LENGTH (identifier));
1099   write_identifier (IDENTIFIER_POINTER (identifier));
1100 }
1101
1102 /* Convert NUMBER to ascii using base BASE and generating at least
1103    MIN_DIGITS characters. BUFFER points to the _end_ of the buffer
1104    into which to store the characters. Returns the number of
1105    characters generated (these will be layed out in advance of where
1106    BUFFER points).  */
1107
1108 static int
1109 hwint_to_ascii (unsigned HOST_WIDE_INT number, const unsigned int base,
1110                 char *buffer, const unsigned int min_digits)
1111 {
1112   static const char base_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1113   unsigned digits = 0;
1114   
1115   while (number)
1116     {
1117       unsigned HOST_WIDE_INT d = number / base;
1118       
1119       *--buffer = base_digits[number - d * base];
1120       digits++;
1121       number = d;
1122     }
1123   while (digits < min_digits)
1124     {
1125       *--buffer = base_digits[0];
1126       digits++;
1127     }
1128   return digits;
1129 }
1130
1131 /* Non-terminal <number>.
1132
1133      <number> ::= [n] </decimal integer/>  */
1134
1135 static void
1136 write_number (unsigned HOST_WIDE_INT number, const int unsigned_p,
1137               const unsigned int base)
1138 {
1139   char buffer[sizeof (HOST_WIDE_INT) * 8];
1140   unsigned count = 0;
1141
1142   if (!unsigned_p && (HOST_WIDE_INT) number < 0)
1143     {
1144       write_char ('n');
1145       number = -((HOST_WIDE_INT) number);
1146     }
1147   count = hwint_to_ascii (number, base, buffer + sizeof (buffer), 1);
1148   write_chars (buffer + sizeof (buffer) - count, count);
1149 }
1150
1151 /* Write out an integral CST in decimal. Most numbers are small, and
1152    representable in a HOST_WIDE_INT. Occasionally we'll have numbers
1153    bigger than that, which we must deal with.  */
1154
1155 static inline void
1156 write_integer_cst (const tree cst)
1157 {
1158   int sign = tree_int_cst_sgn (cst);
1159
1160   if (TREE_INT_CST_HIGH (cst) + (sign < 0))
1161     {
1162       /* A bignum. We do this in chunks, each of which fits in a
1163          HOST_WIDE_INT.  */
1164       char buffer[sizeof (HOST_WIDE_INT) * 8 * 2];
1165       unsigned HOST_WIDE_INT chunk;
1166       unsigned chunk_digits;
1167       char *ptr = buffer + sizeof (buffer);
1168       unsigned count = 0;
1169       tree n, base, type;
1170       int done;
1171
1172       /* HOST_WIDE_INT must be at least 32 bits, so 10^9 is
1173          representable.  */
1174       chunk = 1000000000;
1175       chunk_digits = 9;
1176       
1177       if (sizeof (HOST_WIDE_INT) >= 8)
1178         {
1179           /* It is at least 64 bits, so 10^18 is representable.  */
1180           chunk_digits = 18;
1181           chunk *= chunk;
1182         }
1183       
1184       type = c_common_signed_or_unsigned_type (1, TREE_TYPE (cst));
1185       base = build_int_2 (chunk, 0);
1186       n = build_int_2 (TREE_INT_CST_LOW (cst), TREE_INT_CST_HIGH (cst));
1187       TREE_TYPE (n) = TREE_TYPE (base) = type;
1188
1189       if (sign < 0)
1190         {
1191           write_char ('n');
1192           n = fold (build1 (NEGATE_EXPR, type, n));
1193         }
1194       do
1195         {
1196           tree d = fold (build (FLOOR_DIV_EXPR, type, n, base));
1197           tree tmp = fold (build (MULT_EXPR, type, d, base));
1198           unsigned c;
1199
1200           done = integer_zerop (d);
1201           tmp = fold (build (MINUS_EXPR, type, n, tmp));
1202           c = hwint_to_ascii (TREE_INT_CST_LOW (tmp), 10, ptr,
1203                                 done ? 1 : chunk_digits);
1204           ptr -= c;
1205           count += c;
1206           n = d;
1207         }
1208       while (!done);
1209       write_chars (ptr, count);
1210     }
1211   else 
1212     {
1213       /* A small num.  */
1214       unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (cst);
1215       
1216       if (sign < 0)
1217         {
1218           write_char ('n');
1219           low = -low;
1220         }
1221       write_unsigned_number (low);
1222     }
1223 }
1224
1225 /* Write out a floating-point literal.  
1226     
1227     "Floating-point literals are encoded using the bit pattern of the
1228     target processor's internal representation of that number, as a
1229     fixed-length lowercase hexadecimal string, high-order bytes first
1230     (even if the target processor would store low-order bytes first).
1231     The "n" prefix is not used for floating-point literals; the sign
1232     bit is encoded with the rest of the number.
1233
1234     Here are some examples, assuming the IEEE standard representation
1235     for floating point numbers.  (Spaces are for readability, not
1236     part of the encoding.)
1237
1238         1.0f                    Lf 3f80 0000 E
1239        -1.0f                    Lf bf80 0000 E
1240         1.17549435e-38f         Lf 0080 0000 E
1241         1.40129846e-45f         Lf 0000 0001 E
1242         0.0f                    Lf 0000 0000 E"
1243
1244    Caller is responsible for the Lx and the E.  */
1245 static void
1246 write_real_cst (const tree value)
1247 {
1248   if (abi_version_at_least (2))
1249     {
1250       long target_real[4];  /* largest supported float */
1251       char buffer[9];       /* eight hex digits in a 32-bit number */
1252       int i, limit, dir;
1253
1254       tree type = TREE_TYPE (value);
1255       int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32;
1256
1257       real_to_target (target_real, &TREE_REAL_CST (value),
1258                       TYPE_MODE (type));
1259
1260       /* The value in target_real is in the target word order,
1261          so we must write it out backward if that happens to be
1262          little-endian.  write_number cannot be used, it will
1263          produce uppercase.  */
1264       if (FLOAT_WORDS_BIG_ENDIAN)
1265         i = 0, limit = words, dir = 1;
1266       else
1267         i = words - 1, limit = -1, dir = -1;
1268
1269       for (; i != limit; i += dir)
1270         {
1271           sprintf (buffer, "%08lx", target_real[i]);
1272           write_chars (buffer, 8);
1273         }
1274     }
1275   else
1276     {
1277       /* In G++ 3.3 and before the REAL_VALUE_TYPE was written out
1278          literally.  Note that compatibility with 3.2 is impossible,
1279          because the old floating-point emulator used a different
1280          format for REAL_VALUE_TYPE.  */
1281       size_t i;
1282       for (i = 0; i < sizeof (TREE_REAL_CST (value)); ++i)
1283         write_number (((unsigned char *) &TREE_REAL_CST (value))[i], 
1284                       /*unsigned_p*/ 1,
1285                       /*base*/ 16);
1286       G.need_abi_warning = 1;
1287     }
1288 }
1289
1290 /* Non-terminal <identifier>.
1291
1292      <identifier> ::= </unqualified source code identifier>  */
1293
1294 static void
1295 write_identifier (const char *identifier)
1296 {
1297   MANGLE_TRACE ("identifier", identifier);
1298   write_string (identifier);
1299 }
1300
1301 /* Handle constructor productions of non-terminal <special-name>.
1302    CTOR is a constructor FUNCTION_DECL. 
1303
1304      <special-name> ::= C1   # complete object constructor
1305                     ::= C2   # base object constructor
1306                     ::= C3   # complete object allocating constructor
1307
1308    Currently, allocating constructors are never used. 
1309
1310    We also need to provide mangled names for the maybe-in-charge
1311    constructor, so we treat it here too.  mangle_decl_string will
1312    append *INTERNAL* to that, to make sure we never emit it.  */
1313
1314 static void
1315 write_special_name_constructor (const tree ctor)
1316 {
1317   if (DECL_COMPLETE_CONSTRUCTOR_P (ctor)
1318       /* Even though we don't ever emit a definition of the
1319          old-style destructor, we still have to consider entities
1320          (like static variables) nested inside it.  */
1321       || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (ctor))
1322     write_string ("C1");
1323   else if (DECL_BASE_CONSTRUCTOR_P (ctor))
1324     write_string ("C2");
1325   else
1326     abort ();
1327 }
1328
1329 /* Handle destructor productions of non-terminal <special-name>.
1330    DTOR is a destructor FUNCTION_DECL. 
1331
1332      <special-name> ::= D0 # deleting (in-charge) destructor
1333                     ::= D1 # complete object (in-charge) destructor
1334                     ::= D2 # base object (not-in-charge) destructor
1335
1336    We also need to provide mangled names for the maybe-incharge
1337    destructor, so we treat it here too.  mangle_decl_string will
1338    append *INTERNAL* to that, to make sure we never emit it.  */
1339
1340 static void
1341 write_special_name_destructor (const tree dtor)
1342 {
1343   if (DECL_DELETING_DESTRUCTOR_P (dtor))
1344     write_string ("D0");
1345   else if (DECL_COMPLETE_DESTRUCTOR_P (dtor)
1346            /* Even though we don't ever emit a definition of the
1347               old-style destructor, we still have to consider entities
1348               (like static variables) nested inside it.  */
1349            || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (dtor))
1350     write_string ("D1");
1351   else if (DECL_BASE_DESTRUCTOR_P (dtor))
1352     write_string ("D2");
1353   else
1354     abort ();
1355 }
1356
1357 /* Return the discriminator for ENTITY appearing inside
1358    FUNCTION.  The discriminator is the lexical ordinal of VAR among
1359    entities with the same name in the same FUNCTION.  */
1360
1361 static int
1362 discriminator_for_local_entity (tree entity)
1363 {
1364   tree *type;
1365
1366   /* Assume this is the only local entity with this name.  */
1367   int discriminator = 0;
1368
1369   if (DECL_DISCRIMINATOR_P (entity) && DECL_LANG_SPECIFIC (entity))
1370     discriminator = DECL_DISCRIMINATOR (entity);
1371   else if (TREE_CODE (entity) == TYPE_DECL)
1372     {
1373       /* Scan the list of local classes.  */
1374       entity = TREE_TYPE (entity);
1375       for (type = &VARRAY_TREE (local_classes, 0); *type != entity; ++type)
1376         if (TYPE_IDENTIFIER (*type) == TYPE_IDENTIFIER (entity)
1377             && TYPE_CONTEXT (*type) == TYPE_CONTEXT (entity))
1378           ++discriminator;
1379     }  
1380
1381   return discriminator;
1382 }
1383
1384 /* Return the discriminator for STRING, a string literal used inside
1385    FUNCTION.  The discriminator is the lexical ordinal of STRING among
1386    string literals used in FUNCTION.  */
1387
1388 static int
1389 discriminator_for_string_literal (tree function ATTRIBUTE_UNUSED,
1390                                   tree string ATTRIBUTE_UNUSED)
1391 {
1392   /* For now, we don't discriminate amongst string literals.  */
1393   return 0;
1394 }
1395
1396 /*   <discriminator> := _ <number>   
1397
1398    The discriminator is used only for the second and later occurrences
1399    of the same name within a single function. In this case <number> is
1400    n - 2, if this is the nth occurrence, in lexical order.  */
1401
1402 static void
1403 write_discriminator (const int discriminator)
1404 {
1405   /* If discriminator is zero, don't write anything.  Otherwise...  */
1406   if (discriminator > 0)
1407     {
1408       write_char ('_');
1409       write_unsigned_number (discriminator - 1);
1410     }
1411 }
1412
1413 /* Mangle the name of a function-scope entity.  FUNCTION is the
1414    FUNCTION_DECL for the enclosing function.  ENTITY is the decl for
1415    the entity itself.  LOCAL_ENTITY is the entity that's directly
1416    scoped in FUNCTION_DECL, either ENTITY itself or an enclosing scope
1417    of ENTITY.
1418
1419      <local-name> := Z <function encoding> E <entity name> [<discriminator>]
1420                   := Z <function encoding> E s [<discriminator>]  */
1421
1422 static void
1423 write_local_name (const tree function, const tree local_entity,
1424                   const tree entity)
1425 {
1426   MANGLE_TRACE_TREE ("local-name", entity);
1427
1428   write_char ('Z');
1429   write_encoding (function);
1430   write_char ('E');
1431   if (TREE_CODE (entity) == STRING_CST)
1432     {
1433       write_char ('s');
1434       write_discriminator (discriminator_for_string_literal (function, 
1435                                                              entity));
1436     }
1437   else
1438     {
1439       /* Now the <entity name>.  Let write_name know its being called
1440          from <local-name>, so it doesn't try to process the enclosing
1441          function scope again.  */
1442       write_name (entity, /*ignore_local_scope=*/1);
1443       write_discriminator (discriminator_for_local_entity (local_entity));
1444     }
1445 }
1446
1447 /* Non-terminals <type> and <CV-qualifier>.  
1448
1449      <type> ::= <builtin-type>
1450             ::= <function-type>
1451             ::= <class-enum-type>
1452             ::= <array-type>
1453             ::= <pointer-to-member-type>
1454             ::= <template-param>
1455             ::= <substitution>
1456             ::= <CV-qualifier>
1457             ::= P <type>    # pointer-to
1458             ::= R <type>    # reference-to
1459             ::= C <type>    # complex pair (C 2000)
1460             ::= G <type>    # imaginary (C 2000)     [not supported]
1461             ::= U <source-name> <type>   # vendor extended type qualifier 
1462
1463    TYPE is a type node.  */
1464
1465 static void 
1466 write_type (tree type)
1467 {
1468   /* This gets set to nonzero if TYPE turns out to be a (possibly
1469      CV-qualified) builtin type.  */
1470   int is_builtin_type = 0;
1471
1472   MANGLE_TRACE_TREE ("type", type);
1473
1474   if (type == error_mark_node)
1475     return;
1476
1477   if (find_substitution (type))
1478     return;
1479   
1480   if (write_CV_qualifiers_for_type (type) > 0)
1481     /* If TYPE was CV-qualified, we just wrote the qualifiers; now
1482        mangle the unqualified type.  The recursive call is needed here
1483        since both the qualified and unqualified types are substitution
1484        candidates.  */
1485     write_type (TYPE_MAIN_VARIANT (type));
1486   else if (TREE_CODE (type) == ARRAY_TYPE)
1487     /* It is important not to use the TYPE_MAIN_VARIANT of TYPE here
1488        so that the cv-qualification of the element type is available
1489        in write_array_type.  */
1490     write_array_type (type);
1491   else
1492     {
1493       /* See through any typedefs.  */
1494       type = TYPE_MAIN_VARIANT (type);
1495
1496       if (TYPE_PTRMEM_P (type))
1497         write_pointer_to_member_type (type);
1498       else switch (TREE_CODE (type))
1499         {
1500         case VOID_TYPE:
1501         case BOOLEAN_TYPE:
1502         case INTEGER_TYPE:  /* Includes wchar_t.  */
1503         case REAL_TYPE:
1504           /* If this is a typedef, TYPE may not be one of
1505              the standard builtin type nodes, but an alias of one.  Use
1506              TYPE_MAIN_VARIANT to get to the underlying builtin type.  */
1507           write_builtin_type (TYPE_MAIN_VARIANT (type));
1508           ++is_builtin_type;
1509           break;
1510
1511         case COMPLEX_TYPE:
1512           write_char ('C');
1513           write_type (TREE_TYPE (type));
1514           break;
1515
1516         case FUNCTION_TYPE:
1517         case METHOD_TYPE:
1518           write_function_type (type);
1519           break;
1520
1521         case UNION_TYPE:
1522         case RECORD_TYPE:
1523         case ENUMERAL_TYPE:
1524           /* A pointer-to-member function is represented as a special
1525              RECORD_TYPE, so check for this first.  */
1526           if (TYPE_PTRMEMFUNC_P (type))
1527             write_pointer_to_member_type (type);
1528           else
1529             write_class_enum_type (type);
1530           break;
1531
1532         case TYPENAME_TYPE:
1533         case UNBOUND_CLASS_TEMPLATE:
1534           /* We handle TYPENAME_TYPEs and UNBOUND_CLASS_TEMPLATEs like
1535              ordinary nested names.  */
1536           write_nested_name (TYPE_STUB_DECL (type));
1537           break;
1538
1539         case POINTER_TYPE:
1540           write_char ('P');
1541           write_type (TREE_TYPE (type));
1542           break;
1543
1544         case REFERENCE_TYPE:
1545           write_char ('R');
1546           write_type (TREE_TYPE (type));
1547           break;
1548
1549         case TEMPLATE_TYPE_PARM:
1550         case TEMPLATE_PARM_INDEX:
1551           write_template_param (type);
1552           break;
1553
1554         case TEMPLATE_TEMPLATE_PARM:
1555           write_template_template_param (type);
1556           break;
1557
1558         case BOUND_TEMPLATE_TEMPLATE_PARM:
1559           write_template_template_param (type);
1560           write_template_args 
1561             (TI_ARGS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (type)));
1562           break;
1563
1564         case VECTOR_TYPE:
1565           write_string ("U8__vector");
1566           write_type (TREE_TYPE (type));
1567           break;
1568
1569         default:
1570           abort ();
1571         }
1572     }
1573
1574   /* Types other than builtin types are substitution candidates.  */
1575   if (!is_builtin_type)
1576     add_substitution (type);
1577 }
1578
1579 /* Non-terminal <CV-qualifiers> for type nodes.  Returns the number of
1580    CV-qualifiers written for TYPE.
1581
1582      <CV-qualifiers> ::= [r] [V] [K]  */
1583
1584 static int
1585 write_CV_qualifiers_for_type (const tree type)
1586 {
1587   int num_qualifiers = 0;
1588
1589   /* The order is specified by:
1590
1591        "In cases where multiple order-insensitive qualifiers are
1592        present, they should be ordered 'K' (closest to the base type),
1593        'V', 'r', and 'U' (farthest from the base type) ..."  
1594
1595      Note that we do not use cp_type_quals below; given "const
1596      int[3]", the "const" is emitted with the "int", not with the
1597      array.  */
1598
1599   if (TYPE_QUALS (type) & TYPE_QUAL_RESTRICT)
1600     {
1601       write_char ('r');
1602       ++num_qualifiers;
1603     }
1604   if (TYPE_QUALS (type) & TYPE_QUAL_VOLATILE)
1605     {
1606       write_char ('V');
1607       ++num_qualifiers;
1608     }
1609   if (TYPE_QUALS (type) & TYPE_QUAL_CONST)
1610     {
1611       write_char ('K');
1612       ++num_qualifiers;
1613     }
1614
1615   return num_qualifiers;
1616 }
1617
1618 /* Non-terminal <builtin-type>. 
1619
1620      <builtin-type> ::= v   # void 
1621                     ::= b   # bool
1622                     ::= w   # wchar_t
1623                     ::= c   # char
1624                     ::= a   # signed char
1625                     ::= h   # unsigned char
1626                     ::= s   # short
1627                     ::= t   # unsigned short
1628                     ::= i   # int
1629                     ::= j   # unsigned int
1630                     ::= l   # long
1631                     ::= m   # unsigned long
1632                     ::= x   # long long, __int64
1633                     ::= y   # unsigned long long, __int64  
1634                     ::= n   # __int128
1635                     ::= o   # unsigned __int128
1636                     ::= f   # float
1637                     ::= d   # double
1638                     ::= e   # long double, __float80 
1639                     ::= g   # __float128          [not supported]
1640                     ::= u <source-name>  # vendor extended type */
1641
1642 static void 
1643 write_builtin_type (tree type)
1644 {
1645   switch (TREE_CODE (type))
1646     {
1647     case VOID_TYPE:
1648       write_char ('v');
1649       break;
1650
1651     case BOOLEAN_TYPE:
1652       write_char ('b');
1653       break;
1654
1655     case INTEGER_TYPE:
1656       /* If this is size_t, get the underlying int type.  */
1657       if (TYPE_IS_SIZETYPE (type))
1658         type = TYPE_DOMAIN (type);
1659
1660       /* TYPE may still be wchar_t, since that isn't in
1661          integer_type_nodes.  */
1662       if (type == wchar_type_node)
1663         write_char ('w');
1664       else if (TYPE_FOR_JAVA (type))
1665         write_java_integer_type_codes (type);
1666       else
1667         {
1668           size_t itk;
1669           /* Assume TYPE is one of the shared integer type nodes.  Find
1670              it in the array of these nodes.  */
1671         iagain:
1672           for (itk = 0; itk < itk_none; ++itk)
1673             if (type == integer_types[itk])
1674               {
1675                 /* Print the corresponding single-letter code.  */
1676                 write_char (integer_type_codes[itk]);
1677                 break;
1678               }
1679
1680           if (itk == itk_none)
1681             {
1682               tree t = c_common_type_for_mode (TYPE_MODE (type),
1683                                                TREE_UNSIGNED (type));
1684               if (type == t)
1685                 {
1686                   if (TYPE_PRECISION (type) == 128)
1687                     write_char (TREE_UNSIGNED (type) ? 'o' : 'n');
1688                   else
1689                     /* Couldn't find this type.  */
1690                     abort ();
1691                 }
1692               else
1693                 {
1694                   type = t;
1695                   goto iagain;
1696                 }
1697             }
1698         }
1699       break;
1700
1701     case REAL_TYPE:
1702       if (type == float_type_node
1703           || type == java_float_type_node)
1704         write_char ('f');
1705       else if (type == double_type_node
1706                || type == java_double_type_node)
1707         write_char ('d');
1708       else if (type == long_double_type_node)
1709         write_char ('e');
1710       else
1711         abort ();
1712       break;
1713
1714     default:
1715       abort ();
1716     }
1717 }
1718
1719 /* Non-terminal <function-type>.  NODE is a FUNCTION_TYPE or
1720    METHOD_TYPE.  The return type is mangled before the parameter
1721    types.
1722
1723      <function-type> ::= F [Y] <bare-function-type> E   */
1724
1725 static void
1726 write_function_type (const tree type)
1727 {
1728   MANGLE_TRACE_TREE ("function-type", type);
1729
1730   /* For a pointer to member function, the function type may have
1731      cv-qualifiers, indicating the quals for the artificial 'this'
1732      parameter.  */
1733   if (TREE_CODE (type) == METHOD_TYPE)
1734     {
1735       /* The first parameter must be a POINTER_TYPE pointing to the
1736          `this' parameter.  */
1737       tree this_type = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
1738       write_CV_qualifiers_for_type (this_type);
1739     }
1740
1741   write_char ('F');
1742   /* We don't track whether or not a type is `extern "C"'.  Note that
1743      you can have an `extern "C"' function that does not have
1744      `extern "C"' type, and vice versa:
1745
1746        extern "C" typedef void function_t();
1747        function_t f; // f has C++ linkage, but its type is
1748                      // `extern "C"'
1749
1750        typedef void function_t();
1751        extern "C" function_t f; // Vice versa.
1752
1753      See [dcl.link].  */
1754   write_bare_function_type (type, /*include_return_type_p=*/1, 
1755                             /*decl=*/NULL);
1756   write_char ('E');
1757 }
1758
1759 /* Non-terminal <bare-function-type>.  TYPE is a FUNCTION_TYPE or
1760    METHOD_TYPE.  If INCLUDE_RETURN_TYPE is nonzero, the return value
1761    is mangled before the parameter types.  If non-NULL, DECL is
1762    FUNCTION_DECL for the function whose type is being emitted.
1763
1764      <bare-function-type> ::= </signature/ type>+  */
1765
1766 static void
1767 write_bare_function_type (const tree type, const int include_return_type_p,
1768                           const tree decl)
1769 {
1770   MANGLE_TRACE_TREE ("bare-function-type", type);
1771
1772   /* Mangle the return type, if requested.  */
1773   if (include_return_type_p)
1774     write_type (TREE_TYPE (type));
1775
1776   /* Now mangle the types of the arguments.  */
1777   write_method_parms (TYPE_ARG_TYPES (type), 
1778                       TREE_CODE (type) == METHOD_TYPE,
1779                       decl);
1780 }
1781
1782 /* Write the mangled representation of a method parameter list of
1783    types given in PARM_TYPES.  If METHOD_P is nonzero, the function is
1784    considered a non-static method, and the this parameter is omitted.
1785    If non-NULL, DECL is the FUNCTION_DECL for the function whose
1786    parameters are being emitted.  */
1787
1788 static void
1789 write_method_parms (tree parm_types, const int method_p, const tree decl)
1790 {
1791   tree first_parm_type;
1792   tree parm_decl = decl ? DECL_ARGUMENTS (decl) : NULL_TREE;
1793
1794   /* Assume this parameter type list is variable-length.  If it ends
1795      with a void type, then it's not.  */
1796   int varargs_p = 1;
1797
1798   /* If this is a member function, skip the first arg, which is the
1799      this pointer.  
1800        "Member functions do not encode the type of their implicit this
1801        parameter."  
1802   
1803      Similarly, there's no need to mangle artificial parameters, like
1804      the VTT parameters for constructors and destructors.  */
1805   if (method_p)
1806     {
1807       parm_types = TREE_CHAIN (parm_types);
1808       parm_decl = parm_decl ? TREE_CHAIN (parm_decl) : NULL_TREE;
1809
1810       while (parm_decl && DECL_ARTIFICIAL (parm_decl))
1811         {
1812           parm_types = TREE_CHAIN (parm_types);
1813           parm_decl = TREE_CHAIN (parm_decl);
1814         }
1815     }
1816
1817   for (first_parm_type = parm_types; 
1818        parm_types; 
1819        parm_types = TREE_CHAIN (parm_types))
1820     {
1821       tree parm = TREE_VALUE (parm_types);
1822       if (parm == void_type_node)
1823         {
1824           /* "Empty parameter lists, whether declared as () or
1825              conventionally as (void), are encoded with a void parameter
1826              (v)."  */
1827           if (parm_types == first_parm_type)
1828             write_type (parm);
1829           /* If the parm list is terminated with a void type, it's
1830              fixed-length.  */
1831           varargs_p = 0;
1832           /* A void type better be the last one.  */
1833           my_friendly_assert (TREE_CHAIN (parm_types) == NULL, 20000523);
1834         }
1835       else
1836         write_type (parm);
1837     }
1838
1839   if (varargs_p)
1840     /* <builtin-type> ::= z  # ellipsis  */
1841     write_char ('z');
1842 }
1843
1844 /* <class-enum-type> ::= <name>  */
1845
1846 static void 
1847 write_class_enum_type (const tree type)
1848 {
1849   write_name (TYPE_NAME (type), /*ignore_local_scope=*/0);
1850 }
1851
1852 /* Non-terminal <template-args>.  ARGS is a TREE_VEC of template
1853    arguments.
1854
1855      <template-args> ::= I <template-arg>+ E  */
1856
1857 static void
1858 write_template_args (tree args)
1859 {
1860   int i;
1861   int length = TREE_VEC_LENGTH (args);
1862   
1863   MANGLE_TRACE_TREE ("template-args", args);
1864
1865   write_char ('I');
1866
1867   my_friendly_assert (length > 0, 20000422);
1868
1869   if (TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
1870     {
1871       /* We have nested template args.  We want the innermost template
1872          argument list.  */
1873       args = TREE_VEC_ELT (args, length - 1);
1874       length = TREE_VEC_LENGTH (args);
1875     }
1876   for (i = 0; i < length; ++i)
1877     write_template_arg (TREE_VEC_ELT (args, i));
1878   
1879   write_char ('E');
1880 }
1881
1882 /* <expression> ::= <unary operator-name> <expression>
1883                 ::= <binary operator-name> <expression> <expression>
1884                 ::= <expr-primary>
1885
1886    <expr-primary> ::= <template-param>
1887                   ::= L <type> <value number> E  # literal
1888                   ::= L <mangled-name> E         # external name  
1889                   ::= sr <type> <unqualified-name>
1890                   ::= sr <type> <unqualified-name> <template-args> */
1891
1892 static void
1893 write_expression (tree expr)
1894 {
1895   enum tree_code code;
1896
1897   code = TREE_CODE (expr);
1898
1899   /* Handle pointers-to-members by making them look like expression
1900      nodes.  */
1901   if (code == PTRMEM_CST)
1902     {
1903       expr = build_nt (ADDR_EXPR,
1904                        build_nt (SCOPE_REF,
1905                                  PTRMEM_CST_CLASS (expr),
1906                                  PTRMEM_CST_MEMBER (expr)));
1907       code = TREE_CODE (expr);
1908     }
1909
1910   /* Skip NOP_EXPRs.  They can occur when (say) a pointer argument
1911      is converted (via qualification conversions) to another
1912      type.  */
1913   while (TREE_CODE (expr) == NOP_EXPR
1914          || TREE_CODE (expr) == NON_LVALUE_EXPR)
1915     {
1916       expr = TREE_OPERAND (expr, 0);
1917       code = TREE_CODE (expr);
1918     }
1919
1920   /* Handle template parameters.  */
1921   if (code == TEMPLATE_TYPE_PARM 
1922       || code == TEMPLATE_TEMPLATE_PARM
1923       || code == BOUND_TEMPLATE_TEMPLATE_PARM
1924       || code == TEMPLATE_PARM_INDEX)
1925     write_template_param (expr);
1926   /* Handle literals.  */
1927   else if (TREE_CODE_CLASS (code) == 'c' 
1928            || (abi_version_at_least (2) && code == CONST_DECL))
1929     write_template_arg_literal (expr);
1930   else if (DECL_P (expr))
1931     {
1932       /* G++ 3.2 incorrectly mangled non-type template arguments of
1933          enumeration type using their names.  */
1934       if (code == CONST_DECL)
1935         G.need_abi_warning = 1;
1936       write_char ('L');
1937       write_mangled_name (expr, false);
1938       write_char ('E');
1939     }
1940   else if (TREE_CODE (expr) == SIZEOF_EXPR 
1941            && TYPE_P (TREE_OPERAND (expr, 0)))
1942     {
1943       write_string ("st");
1944       write_type (TREE_OPERAND (expr, 0));
1945     }
1946   else if (abi_version_at_least (2) && TREE_CODE (expr) == SCOPE_REF)
1947     {
1948       tree scope = TREE_OPERAND (expr, 0);
1949       tree member = TREE_OPERAND (expr, 1);
1950
1951       /* If the MEMBER is a real declaration, then the qualifying
1952          scope was not dependent.  Ideally, we would not have a
1953          SCOPE_REF in those cases, but sometimes we do.  If the second
1954          argument is a DECL, then the name must not have been
1955          dependent.  */
1956       if (DECL_P (member))
1957         write_expression (member);
1958       else
1959         {
1960           tree template_args;
1961
1962           write_string ("sr");
1963           write_type (scope);
1964           /* If MEMBER is a template-id, separate the template
1965              from the arguments.  */
1966           if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
1967             {
1968               template_args = TREE_OPERAND (member, 1);
1969               member = TREE_OPERAND (member, 0);
1970             }
1971           else
1972             template_args = NULL_TREE;
1973           /* Write out the name of the MEMBER.  */
1974           if (IDENTIFIER_TYPENAME_P (member))
1975             write_conversion_operator_name (TREE_TYPE (member));
1976           else if (IDENTIFIER_OPNAME_P (member))
1977             {
1978               int i;
1979               const char *mangled_name = NULL;
1980
1981               /* Unfortunately, there is no easy way to go from the
1982                  name of the operator back to the corresponding tree
1983                  code.  */
1984               for (i = 0; i < LAST_CPLUS_TREE_CODE; ++i)
1985                 if (operator_name_info[i].identifier == member)
1986                   {
1987                     /* The ABI says that we prefer binary operator
1988                        names to unary operator names.  */
1989                     if (operator_name_info[i].arity == 2)
1990                       {
1991                         mangled_name = operator_name_info[i].mangled_name;
1992                         break;
1993                       }
1994                     else if (!mangled_name)
1995                       mangled_name = operator_name_info[i].mangled_name;
1996                   }
1997                 else if (assignment_operator_name_info[i].identifier
1998                          == member)
1999                   {
2000                     mangled_name 
2001                       = assignment_operator_name_info[i].mangled_name;
2002                     break;
2003                   }
2004               write_string (mangled_name);
2005             }
2006           else
2007             write_source_name (member);
2008           /* Write out the template arguments.  */
2009           if (template_args)
2010             write_template_args (template_args);
2011         }
2012     }
2013   else
2014     {
2015       int i;
2016
2017       /* When we bind a variable or function to a non-type template
2018          argument with reference type, we create an ADDR_EXPR to show
2019          the fact that the entity's address has been taken.  But, we
2020          don't actually want to output a mangling code for the `&'.  */
2021       if (TREE_CODE (expr) == ADDR_EXPR
2022           && TREE_TYPE (expr)
2023           && TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE)
2024         {
2025           expr = TREE_OPERAND (expr, 0);
2026           if (DECL_P (expr))
2027             {
2028               write_expression (expr);
2029               return;
2030             }
2031
2032           code = TREE_CODE (expr);
2033         }
2034
2035       /* If it wasn't any of those, recursively expand the expression.  */
2036       write_string (operator_name_info[(int) code].mangled_name);
2037
2038       switch (code)
2039         {
2040         case CALL_EXPR:
2041           sorry ("call_expr cannot be mangled due to a defect in the C++ ABI");
2042           break;
2043
2044         case CAST_EXPR:
2045           write_type (TREE_TYPE (expr));
2046           write_expression (TREE_VALUE (TREE_OPERAND (expr, 0)));
2047           break;
2048
2049         case STATIC_CAST_EXPR:
2050         case CONST_CAST_EXPR:
2051           write_type (TREE_TYPE (expr));
2052           write_expression (TREE_OPERAND (expr, 0));
2053           break;
2054
2055           
2056         /* Handle pointers-to-members specially.  */
2057         case SCOPE_REF:
2058           write_type (TREE_OPERAND (expr, 0));
2059           if (TREE_CODE (TREE_OPERAND (expr, 1)) == IDENTIFIER_NODE)
2060             write_source_name (TREE_OPERAND (expr, 1));
2061           else if (TREE_CODE (TREE_OPERAND (expr, 1)) == TEMPLATE_ID_EXPR)
2062             {
2063               tree template_id;
2064               tree name;
2065
2066               template_id = TREE_OPERAND (expr, 1);
2067               name = TREE_OPERAND (template_id, 0);
2068               /* FIXME: What about operators?  */
2069               my_friendly_assert (TREE_CODE (name) == IDENTIFIER_NODE,
2070                                   20030707);
2071               write_source_name (TREE_OPERAND (template_id, 0));
2072               write_template_args (TREE_OPERAND (template_id, 1));
2073             }
2074           else
2075             {
2076               /* G++ 3.2 incorrectly put out both the "sr" code and
2077                  the nested name of the qualified name.  */
2078               G.need_abi_warning = 1;
2079               write_encoding (TREE_OPERAND (expr, 1));
2080             }
2081           break;
2082
2083         default:
2084           for (i = 0; i < TREE_CODE_LENGTH (code); ++i)
2085             {
2086               tree operand = TREE_OPERAND (expr, i);
2087               /* As a GNU expression, the middle operand of a
2088                  conditional may be omitted.  Since expression
2089                  manglings are supposed to represent the input token
2090                  stream, there's no good way to mangle such an
2091                  expression without extending the C++ ABI.  */
2092               if (code == COND_EXPR && i == 1 && !operand)
2093                 {
2094                   error ("omitted middle operand to `?:' operand "
2095                          "cannot be mangled");
2096                   continue;
2097                 }
2098               write_expression (operand);
2099             }
2100         }
2101     }
2102 }
2103
2104 /* Literal subcase of non-terminal <template-arg>.  
2105
2106      "Literal arguments, e.g. "A<42L>", are encoded with their type
2107      and value. Negative integer values are preceded with "n"; for
2108      example, "A<-42L>" becomes "1AILln42EE". The bool value false is
2109      encoded as 0, true as 1."  */
2110
2111 static void
2112 write_template_arg_literal (const tree value)
2113 {
2114   tree type = TREE_TYPE (value);
2115   write_char ('L');
2116   write_type (type);
2117
2118   if (TREE_CODE (value) == CONST_DECL)
2119     write_integer_cst (DECL_INITIAL (value));
2120   else if (TREE_CODE (value) == INTEGER_CST)
2121     {
2122       if (same_type_p (type, boolean_type_node))
2123         {
2124           if (integer_zerop (value))
2125             write_unsigned_number (0);
2126           else if (integer_onep (value))
2127             write_unsigned_number (1);
2128           else 
2129             abort ();
2130         }
2131       else
2132         write_integer_cst (value);
2133     }
2134   else if (TREE_CODE (value) == REAL_CST)
2135     write_real_cst (value);
2136   else
2137     abort ();
2138
2139   write_char ('E');
2140 }
2141
2142 /* Non-terminal <tempalate-arg>.  
2143
2144      <template-arg> ::= <type>                        # type
2145                     ::= L <type> </value/ number> E   # literal
2146                     ::= LZ <name> E                   # external name
2147                     ::= X <expression> E              # expression  */
2148
2149 static void
2150 write_template_arg (tree node)
2151 {
2152   enum tree_code code = TREE_CODE (node);
2153
2154   MANGLE_TRACE_TREE ("template-arg", node);
2155
2156   /* A template template parameter's argument list contains TREE_LIST
2157      nodes of which the value field is the the actual argument.  */
2158   if (code == TREE_LIST)
2159     {
2160       node = TREE_VALUE (node);
2161       /* If it's a decl, deal with its type instead.  */
2162       if (DECL_P (node))
2163         {
2164           node = TREE_TYPE (node);
2165           code = TREE_CODE (node);
2166         }
2167     }
2168   
2169   if (TREE_CODE (node) == NOP_EXPR
2170       && TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
2171     {
2172       /* Template parameters can be of reference type. To maintain
2173          internal consistency, such arguments use a conversion from
2174          address of object to reference type.  */
2175       my_friendly_assert (TREE_CODE (TREE_OPERAND (node, 0)) == ADDR_EXPR,
2176                           20031215);
2177       if (abi_version_at_least (2))
2178         node = TREE_OPERAND (TREE_OPERAND (node, 0), 0);
2179       else
2180         G.need_abi_warning = 1;
2181     }
2182
2183   if (TYPE_P (node))
2184     write_type (node);
2185   else if (code == TEMPLATE_DECL)
2186     /* A template appearing as a template arg is a template template arg.  */
2187     write_template_template_arg (node);
2188   else if ((TREE_CODE_CLASS (code) == 'c' && code != PTRMEM_CST)
2189            || (abi_version_at_least (2) && code == CONST_DECL))
2190     write_template_arg_literal (node);
2191   else if (DECL_P (node))
2192     {
2193       /* G++ 3.2 incorrectly mangled non-type template arguments of
2194          enumeration type using their names.  */
2195       if (code == CONST_DECL)
2196         G.need_abi_warning = 1;
2197       write_char ('L');
2198       write_char ('Z');
2199       write_encoding (node);
2200       write_char ('E');
2201     }
2202   else
2203     {
2204       /* Template arguments may be expressions.  */
2205       write_char ('X');
2206       write_expression (node);
2207       write_char ('E');
2208     }
2209 }
2210
2211 /*  <template-template-arg>
2212                         ::= <name>
2213                         ::= <substitution>  */
2214
2215 static void
2216 write_template_template_arg (const tree decl)
2217 {
2218   MANGLE_TRACE_TREE ("template-template-arg", decl);
2219
2220   if (find_substitution (decl))
2221     return;
2222   write_name (decl, /*ignore_local_scope=*/0);
2223   add_substitution (decl);
2224 }
2225
2226
2227 /* Non-terminal <array-type>.  TYPE is an ARRAY_TYPE.  
2228
2229      <array-type> ::= A [</dimension/ number>] _ </element/ type>  
2230                   ::= A <expression> _ </element/ type>
2231
2232      "Array types encode the dimension (number of elements) and the
2233      element type. For variable length arrays, the dimension (but not
2234      the '_' separator) is omitted."  */
2235
2236 static void
2237 write_array_type (const tree type)
2238 {
2239   write_char ('A');
2240   if (TYPE_DOMAIN (type))
2241     {
2242       tree index_type;
2243       tree max;
2244
2245       index_type = TYPE_DOMAIN (type);
2246       /* The INDEX_TYPE gives the upper and lower bounds of the
2247          array.  */
2248       max = TYPE_MAX_VALUE (index_type);
2249       if (TREE_CODE (max) == INTEGER_CST)
2250         {
2251           /* The ABI specifies that we should mangle the number of
2252              elements in the array, not the largest allowed index.  */
2253           max = size_binop (PLUS_EXPR, max, size_one_node);
2254           write_unsigned_number (tree_low_cst (max, 1));
2255         }
2256       else
2257         {
2258           max = TREE_OPERAND (max, 0);
2259           if (!abi_version_at_least (2))
2260             {
2261               /* value_dependent_expression_p presumes nothing is
2262                  dependent when PROCESSING_TEMPLATE_DECL is zero.  */
2263               ++processing_template_decl;
2264               if (!value_dependent_expression_p (max))
2265                 G.need_abi_warning = 1;
2266               --processing_template_decl;
2267             }
2268           write_expression (max);
2269         }
2270       
2271     }
2272   write_char ('_');
2273   write_type (TREE_TYPE (type));
2274 }
2275
2276 /* Non-terminal <pointer-to-member-type> for pointer-to-member
2277    variables.  TYPE is a pointer-to-member POINTER_TYPE.
2278
2279      <pointer-to-member-type> ::= M </class/ type> </member/ type>  */
2280
2281 static void
2282 write_pointer_to_member_type (const tree type)
2283 {
2284   write_char ('M');
2285   write_type (TYPE_PTRMEM_CLASS_TYPE (type));
2286   write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
2287 }
2288
2289 /* Non-terminal <template-param>.  PARM is a TEMPLATE_TYPE_PARM,
2290    TEMPLATE_TEMPLATE_PARM, BOUND_TEMPLATE_TEMPLATE_PARM or a
2291    TEMPLATE_PARM_INDEX.
2292
2293      <template-param> ::= T </parameter/ number> _  */
2294
2295 static void
2296 write_template_param (const tree parm)
2297 {
2298   int parm_index;
2299   int parm_level;
2300   tree parm_type = NULL_TREE;
2301
2302   MANGLE_TRACE_TREE ("template-parm", parm);
2303
2304   switch (TREE_CODE (parm))
2305     {
2306     case TEMPLATE_TYPE_PARM:
2307     case TEMPLATE_TEMPLATE_PARM:
2308     case BOUND_TEMPLATE_TEMPLATE_PARM:
2309       parm_index = TEMPLATE_TYPE_IDX (parm);
2310       parm_level = TEMPLATE_TYPE_LEVEL (parm);
2311       break;
2312
2313     case TEMPLATE_PARM_INDEX:
2314       parm_index = TEMPLATE_PARM_IDX (parm);
2315       parm_level = TEMPLATE_PARM_LEVEL (parm);
2316       parm_type = TREE_TYPE (TEMPLATE_PARM_DECL (parm));
2317       break;
2318
2319     default:
2320       abort ();
2321     }
2322
2323   write_char ('T');
2324   /* NUMBER as it appears in the mangling is (-1)-indexed, with the
2325      earliest template param denoted by `_'.  */
2326   if (parm_index > 0)
2327     write_unsigned_number (parm_index - 1);
2328   write_char ('_');
2329 }
2330
2331 /*  <template-template-param>
2332                         ::= <template-param> 
2333                         ::= <substitution>  */
2334
2335 static void
2336 write_template_template_param (const tree parm)
2337 {
2338   tree template = NULL_TREE;
2339
2340   /* PARM, a TEMPLATE_TEMPLATE_PARM, is an instantiation of the
2341      template template parameter.  The substitution candidate here is
2342      only the template.  */
2343   if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
2344     {
2345       template 
2346         = TI_TEMPLATE (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm));
2347       if (find_substitution (template))
2348         return;
2349     }
2350
2351   /* <template-param> encodes only the template parameter position,
2352      not its template arguments, which is fine here.  */
2353   write_template_param (parm);
2354   if (template)
2355     add_substitution (template);
2356 }
2357
2358 /* Non-terminal <substitution>.  
2359
2360       <substitution> ::= S <seq-id> _
2361                      ::= S_  */
2362
2363 static void
2364 write_substitution (const int seq_id)
2365 {
2366   MANGLE_TRACE ("substitution", "");
2367
2368   write_char ('S');
2369   if (seq_id > 0)
2370     write_number (seq_id - 1, /*unsigned=*/1, 36);
2371   write_char ('_');
2372 }
2373
2374 /* Start mangling ENTITY.  */
2375
2376 static inline void
2377 start_mangling (const tree entity)
2378 {
2379   G.entity = entity;
2380   G.need_abi_warning = false;
2381   VARRAY_TREE_INIT (G.substitutions, 1, "mangling substitutions");
2382   obstack_free (&G.name_obstack, obstack_base (&G.name_obstack));
2383 }
2384
2385 /* Done with mangling.  Return the generated mangled name.  If WARN is
2386    true, and the name of G.entity will be mangled differently in a
2387    future version of the ABI, issue a warning.  */
2388
2389 static inline const char *
2390 finish_mangling (const bool warn)
2391 {
2392   if (warn_abi && warn && G.need_abi_warning)
2393     warning ("the mangled name of `%D' will change in a future "
2394              "version of GCC",
2395              G.entity);
2396
2397   /* Clear all the substitutions.  */
2398   G.substitutions = 0;
2399
2400   /* Null-terminate the string.  */
2401   write_char ('\0');
2402
2403   return (const char *) obstack_base (&G.name_obstack);
2404 }
2405
2406 /* Initialize data structures for mangling.  */
2407
2408 void
2409 init_mangle (void)
2410 {
2411   gcc_obstack_init (&G.name_obstack);
2412
2413   /* Cache these identifiers for quick comparison when checking for
2414      standard substitutions.  */
2415   subst_identifiers[SUBID_ALLOCATOR] = get_identifier ("allocator");
2416   subst_identifiers[SUBID_BASIC_STRING] = get_identifier ("basic_string");
2417   subst_identifiers[SUBID_CHAR_TRAITS] = get_identifier ("char_traits");
2418   subst_identifiers[SUBID_BASIC_ISTREAM] = get_identifier ("basic_istream");
2419   subst_identifiers[SUBID_BASIC_OSTREAM] = get_identifier ("basic_ostream");
2420   subst_identifiers[SUBID_BASIC_IOSTREAM] = get_identifier ("basic_iostream");
2421 }
2422
2423 /* Generate the mangled name of DECL.  */
2424
2425 static const char *
2426 mangle_decl_string (const tree decl)
2427 {
2428   const char *result;
2429
2430   start_mangling (decl);
2431
2432   if (TREE_CODE (decl) == TYPE_DECL)
2433     write_type (TREE_TYPE (decl));
2434   else
2435     write_mangled_name (decl, true);
2436   
2437   result = finish_mangling (/*warn=*/true);
2438   if (DEBUG_MANGLE)
2439     fprintf (stderr, "mangle_decl_string = '%s'\n\n", result);
2440   return result;
2441 }
2442
2443 /* Create an identifier for the external mangled name of DECL.  */
2444
2445 void
2446 mangle_decl (const tree decl)
2447 {
2448   tree id = get_identifier (mangle_decl_string (decl));
2449
2450   SET_DECL_ASSEMBLER_NAME (decl, id);
2451 }
2452
2453 /* Generate the mangled representation of TYPE.  */
2454
2455 const char *
2456 mangle_type_string (const tree type)
2457 {
2458   const char *result;
2459
2460   start_mangling (type);
2461   write_type (type);
2462   result = finish_mangling (/*warn=*/false);
2463   if (DEBUG_MANGLE)
2464     fprintf (stderr, "mangle_type_string = '%s'\n\n", result);
2465   return result;
2466 }
2467
2468 /* Create an identifier for the mangled representation of TYPE.  */
2469
2470 tree
2471 mangle_type (const tree type)
2472 {
2473   return get_identifier (mangle_type_string (type));
2474 }
2475
2476 /* Create an identifier for the mangled name of a special component
2477    for belonging to TYPE.  CODE is the ABI-specified code for this
2478    component.  */
2479
2480 static tree
2481 mangle_special_for_type (const tree type, const char *code)
2482 {
2483   const char *result;
2484
2485   /* We don't have an actual decl here for the special component, so
2486      we can't just process the <encoded-name>.  Instead, fake it.  */
2487   start_mangling (type);
2488
2489   /* Start the mangling.  */
2490   write_string ("_Z");
2491   write_string (code);
2492
2493   /* Add the type.  */
2494   write_type (type);
2495   result = finish_mangling (/*warn=*/false);
2496
2497   if (DEBUG_MANGLE)
2498     fprintf (stderr, "mangle_special_for_type = %s\n\n", result);
2499
2500   return get_identifier (result);
2501 }
2502
2503 /* Create an identifier for the mangled representation of the typeinfo
2504    structure for TYPE.  */
2505
2506 tree
2507 mangle_typeinfo_for_type (const tree type)
2508 {
2509   return mangle_special_for_type (type, "TI");
2510 }
2511
2512 /* Create an identifier for the mangled name of the NTBS containing
2513    the mangled name of TYPE.  */
2514
2515 tree
2516 mangle_typeinfo_string_for_type (const tree type)
2517 {
2518   return mangle_special_for_type (type, "TS");
2519 }
2520
2521 /* Create an identifier for the mangled name of the vtable for TYPE.  */
2522
2523 tree
2524 mangle_vtbl_for_type (const tree type)
2525 {
2526   return mangle_special_for_type (type, "TV");
2527 }
2528
2529 /* Returns an identifier for the mangled name of the VTT for TYPE.  */
2530
2531 tree
2532 mangle_vtt_for_type (const tree type)
2533 {
2534   return mangle_special_for_type (type, "TT");
2535 }
2536
2537 /* Return an identifier for a construction vtable group.  TYPE is
2538    the most derived class in the hierarchy; BINFO is the base
2539    subobject for which this construction vtable group will be used.  
2540
2541    This mangling isn't part of the ABI specification; in the ABI
2542    specification, the vtable group is dumped in the same COMDAT as the
2543    main vtable, and is referenced only from that vtable, so it doesn't
2544    need an external name.  For binary formats without COMDAT sections,
2545    though, we need external names for the vtable groups.  
2546
2547    We use the production
2548
2549     <special-name> ::= CT <type> <offset number> _ <base type>  */
2550
2551 tree
2552 mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
2553 {
2554   const char *result;
2555
2556   start_mangling (type);
2557
2558   write_string ("_Z");
2559   write_string ("TC");
2560   write_type (type);
2561   write_integer_cst (BINFO_OFFSET (binfo));
2562   write_char ('_');
2563   write_type (BINFO_TYPE (binfo));
2564
2565   result = finish_mangling (/*warn=*/false);
2566   if (DEBUG_MANGLE)
2567     fprintf (stderr, "mangle_ctor_vtbl_for_type = %s\n\n", result);
2568   return get_identifier (result);
2569 }
2570
2571 /* Mangle a this pointer or result pointer adjustment.
2572    
2573    <call-offset> ::= h <fixed offset number> _
2574                  ::= v <fixed offset number> _ <virtual offset number> _ */
2575    
2576 static void
2577 mangle_call_offset (const tree fixed_offset, const tree virtual_offset)
2578 {
2579   write_char (virtual_offset ? 'v' : 'h');
2580
2581   /* For either flavor, write the fixed offset.  */
2582   write_integer_cst (fixed_offset);
2583   write_char ('_');
2584
2585   /* For a virtual thunk, add the virtual offset.  */
2586   if (virtual_offset)
2587     {
2588       write_integer_cst (virtual_offset);
2589       write_char ('_');
2590     }
2591 }
2592
2593 /* Return an identifier for the mangled name of a this-adjusting or
2594    covariant thunk to FN_DECL.  FIXED_OFFSET is the initial adjustment
2595    to this used to find the vptr.  If VIRTUAL_OFFSET is non-NULL, this
2596    is a virtual thunk, and it is the vtbl offset in
2597    bytes. THIS_ADJUSTING is nonzero for a this adjusting thunk and
2598    zero for a covariant thunk. Note, that FN_DECL might be a covariant
2599    thunk itself. A covariant thunk name always includes the adjustment
2600    for the this pointer, even if there is none.
2601
2602    <special-name> ::= T <call-offset> <base encoding>
2603                   ::= Tc <this_adjust call-offset> <result_adjust call-offset>
2604                                         <base encoding>
2605 */
2606
2607 tree
2608 mangle_thunk (tree fn_decl, const int this_adjusting, tree fixed_offset,
2609               tree virtual_offset)
2610 {
2611   const char *result;
2612   
2613   start_mangling (fn_decl);
2614
2615   write_string ("_Z");
2616   write_char ('T');
2617   
2618   if (!this_adjusting)
2619     {
2620       /* Covariant thunk with no this adjustment */
2621       write_char ('c');
2622       mangle_call_offset (integer_zero_node, NULL_TREE);
2623       mangle_call_offset (fixed_offset, virtual_offset);
2624     }
2625   else if (!DECL_THUNK_P (fn_decl))
2626     /* Plain this adjusting thunk.  */
2627     mangle_call_offset (fixed_offset, virtual_offset);
2628   else
2629     {
2630       /* This adjusting thunk to covariant thunk.  */
2631       write_char ('c');
2632       mangle_call_offset (fixed_offset, virtual_offset);
2633       fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn_decl));
2634       virtual_offset = THUNK_VIRTUAL_OFFSET (fn_decl);
2635       if (virtual_offset)
2636         virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
2637       mangle_call_offset (fixed_offset, virtual_offset);
2638       fn_decl = THUNK_TARGET (fn_decl);
2639     }
2640
2641   /* Scoped name.  */
2642   write_encoding (fn_decl);
2643
2644   result = finish_mangling (/*warn=*/false);
2645   if (DEBUG_MANGLE)
2646     fprintf (stderr, "mangle_thunk = %s\n\n", result);
2647   return get_identifier (result);
2648 }
2649
2650 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
2651    operator to TYPE.  The nodes are IDENTIFIERs whose TREE_TYPE is the
2652    TYPE.  */
2653
2654 static GTY ((param_is (union tree_node))) htab_t conv_type_names;
2655
2656 /* Hash a node (VAL1) in the table.  */
2657
2658 static hashval_t
2659 hash_type (const void *val)
2660 {
2661   return (hashval_t) TYPE_UID (TREE_TYPE ((tree) val));
2662 }
2663
2664 /* Compare VAL1 (a node in the table) with VAL2 (a TYPE).  */
2665
2666 static int
2667 compare_type (const void *val1, const void *val2)
2668 {
2669   return TREE_TYPE ((tree) val1) == (tree) val2;
2670 }
2671
2672 /* Return an identifier for the mangled unqualified name for a
2673    conversion operator to TYPE.  This mangling is not specified by the
2674    ABI spec; it is only used internally.  */
2675
2676 tree
2677 mangle_conv_op_name_for_type (const tree type)
2678 {
2679   void **slot;
2680   tree identifier;
2681
2682   if (conv_type_names == NULL) 
2683     conv_type_names = htab_create_ggc (31, &hash_type, &compare_type, NULL);
2684
2685   slot = htab_find_slot_with_hash (conv_type_names, type, 
2686                                    (hashval_t) TYPE_UID (type), INSERT);
2687   identifier = (tree)*slot;
2688   if (!identifier)
2689     {
2690       char buffer[64];
2691       
2692        /* Create a unique name corresponding to TYPE.  */
2693       sprintf (buffer, "operator %lu",
2694                (unsigned long) htab_elements (conv_type_names));
2695       identifier = get_identifier (buffer);
2696       *slot = identifier;
2697
2698       /* Hang TYPE off the identifier so it can be found easily later
2699          when performing conversions.  */
2700       TREE_TYPE (identifier) = type;
2701
2702       /* Set bits on the identifier so we know later it's a conversion.  */
2703       IDENTIFIER_OPNAME_P (identifier) = 1;
2704       IDENTIFIER_TYPENAME_P (identifier) = 1;
2705     }
2706   
2707   return identifier;
2708 }
2709
2710 /* Return an identifier for the name of an initialization guard
2711    variable for indicated VARIABLE.  */
2712
2713 tree
2714 mangle_guard_variable (const tree variable)
2715 {
2716   start_mangling (variable);
2717   write_string ("_ZGV");
2718   if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
2719     /* The name of a guard variable for a reference temporary should refer
2720        to the reference, not the temporary.  */
2721     write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
2722   else
2723     write_name (variable, /*ignore_local_scope=*/0);
2724   return get_identifier (finish_mangling (/*warn=*/false));
2725 }
2726
2727 /* Return an identifier for the name of a temporary variable used to
2728    initialize a static reference.  This isn't part of the ABI, but we might
2729    as well call them something readable.  */
2730
2731 tree
2732 mangle_ref_init_variable (const tree variable)
2733 {
2734   start_mangling (variable);
2735   write_string ("_ZGR");
2736   write_name (variable, /*ignore_local_scope=*/0);
2737   return get_identifier (finish_mangling (/*warn=*/false));
2738 }
2739 \f
2740
2741 /* Foreign language type mangling section.  */
2742
2743 /* How to write the type codes for the integer Java type.  */
2744
2745 static void
2746 write_java_integer_type_codes (const tree type)
2747 {
2748   if (type == java_int_type_node)
2749     write_char ('i');
2750   else if (type == java_short_type_node)
2751     write_char ('s');
2752   else if (type == java_byte_type_node)
2753     write_char ('c');
2754   else if (type == java_char_type_node)
2755     write_char ('w');
2756   else if (type == java_long_type_node)
2757     write_char ('x');
2758   else if (type == java_boolean_type_node)
2759     write_char ('b');
2760   else
2761     abort ();
2762 }
2763
2764 #include "gt-cp-mangle.h"