OSDN Git Service

34f19efc42e0432237ed333e11e4dc6c3d696b07
[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, 2005, 2007, 2008, 2009, 2010,
3    2011  Free Software Foundation, Inc.
4    Written by Alex Samuel <samuel@codesourcery.com>
5
6    This file is part of GCC.
7
8    GCC is free software; you can redistribute it and/or modify it
9    under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    GCC is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3.  If not see
20 <http://www.gnu.org/licenses/>.  */
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 #include "config.h"
49 #include "system.h"
50 #include "coretypes.h"
51 #include "tm.h"
52 #include "tree.h"
53 #include "tm_p.h"
54 #include "cp-tree.h"
55 #include "obstack.h"
56 #include "flags.h"
57 #include "target.h"
58 #include "cgraph.h"
59
60 /* Debugging support.  */
61
62 /* Define DEBUG_MANGLE to enable very verbose trace messages.  */
63 #ifndef DEBUG_MANGLE
64 #define DEBUG_MANGLE 0
65 #endif
66
67 /* Macros for tracing the write_* functions.  */
68 #if DEBUG_MANGLE
69 # define MANGLE_TRACE(FN, INPUT) \
70   fprintf (stderr, "  %-24s: %-24s\n", (FN), (INPUT))
71 # define MANGLE_TRACE_TREE(FN, NODE) \
72   fprintf (stderr, "  %-24s: %-24s (%p)\n", \
73            (FN), tree_code_name[TREE_CODE (NODE)], (void *) (NODE))
74 #else
75 # define MANGLE_TRACE(FN, INPUT)
76 # define MANGLE_TRACE_TREE(FN, NODE)
77 #endif
78
79 /* Nonzero if NODE is a class template-id.  We can't rely on
80    CLASSTYPE_USE_TEMPLATE here because of tricky bugs in the parser
81    that hard to distinguish A<T> from A, where A<T> is the type as
82    instantiated outside of the template, and A is the type used
83    without parameters inside the template.  */
84 #define CLASSTYPE_TEMPLATE_ID_P(NODE)                                   \
85   (TYPE_LANG_SPECIFIC (NODE) != NULL                                    \
86    && (TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM                 \
87        || (CLASSTYPE_TEMPLATE_INFO (NODE) != NULL                       \
88            && (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE))))))
89
90 /* Things we only need one of.  This module is not reentrant.  */
91 typedef struct GTY(()) globals {
92   /* An array of the current substitution candidates, in the order
93      we've seen them.  */
94   VEC(tree,gc) *substitutions;
95
96   /* The entity that is being mangled.  */
97   tree GTY ((skip)) entity;
98
99   /* How many parameter scopes we are inside.  */
100   int parm_depth;
101
102   /* True if the mangling will be different in a future version of the
103      ABI.  */
104   bool need_abi_warning;
105 } globals;
106
107 static GTY (()) globals G;
108
109 /* The obstack on which we build mangled names.  */
110 static struct obstack *mangle_obstack;
111
112 /* The obstack on which we build mangled names that are not going to
113    be IDENTIFIER_NODEs.  */
114 static struct obstack name_obstack;
115
116 /* The first object on the name_obstack; we use this to free memory
117    allocated on the name_obstack.  */
118 static void *name_base;
119
120 /* Indices into subst_identifiers.  These are identifiers used in
121    special substitution rules.  */
122 typedef enum
123 {
124   SUBID_ALLOCATOR,
125   SUBID_BASIC_STRING,
126   SUBID_CHAR_TRAITS,
127   SUBID_BASIC_ISTREAM,
128   SUBID_BASIC_OSTREAM,
129   SUBID_BASIC_IOSTREAM,
130   SUBID_MAX
131 }
132 substitution_identifier_index_t;
133
134 /* For quick substitution checks, look up these common identifiers
135    once only.  */
136 static GTY(()) tree subst_identifiers[SUBID_MAX];
137
138 /* Single-letter codes for builtin integer types, defined in
139    <builtin-type>.  These are indexed by integer_type_kind values.  */
140 static const char
141 integer_type_codes[itk_none] =
142 {
143   'c',  /* itk_char */
144   'a',  /* itk_signed_char */
145   'h',  /* itk_unsigned_char */
146   's',  /* itk_short */
147   't',  /* itk_unsigned_short */
148   'i',  /* itk_int */
149   'j',  /* itk_unsigned_int */
150   'l',  /* itk_long */
151   'm',  /* itk_unsigned_long */
152   'x',  /* itk_long_long */
153   'y',  /* itk_unsigned_long_long */
154   'n',  /* itk_int128 */
155   'o',  /* itk_unsigned_int128  */
156 };
157
158 static int decl_is_template_id (const tree, tree* const);
159
160 /* Functions for handling substitutions.  */
161
162 static inline tree canonicalize_for_substitution (tree);
163 static void add_substitution (tree);
164 static inline int is_std_substitution (const tree,
165                                        const substitution_identifier_index_t);
166 static inline int is_std_substitution_char (const tree,
167                                             const substitution_identifier_index_t);
168 static int find_substitution (tree);
169 static void mangle_call_offset (const tree, const tree);
170
171 /* Functions for emitting mangled representations of things.  */
172
173 static void write_mangled_name (const tree, bool);
174 static void write_encoding (const tree);
175 static void write_name (tree, const int);
176 static void write_unscoped_name (const tree);
177 static void write_unscoped_template_name (const tree);
178 static void write_nested_name (const tree);
179 static void write_prefix (const tree);
180 static void write_template_prefix (const tree);
181 static void write_unqualified_name (const tree);
182 static void write_conversion_operator_name (const tree);
183 static void write_source_name (tree);
184 static void write_literal_operator_name (tree);
185 static void write_unnamed_type_name (const tree);
186 static void write_closure_type_name (const tree);
187 static int hwint_to_ascii (unsigned HOST_WIDE_INT, const unsigned int, char *,
188                            const unsigned int);
189 static void write_number (unsigned HOST_WIDE_INT, const int,
190                           const unsigned int);
191 static void write_compact_number (int num);
192 static void write_integer_cst (const tree);
193 static void write_real_cst (const tree);
194 static void write_identifier (const char *);
195 static void write_special_name_constructor (const tree);
196 static void write_special_name_destructor (const tree);
197 static void write_type (tree);
198 static int write_CV_qualifiers_for_type (const tree);
199 static void write_builtin_type (tree);
200 static void write_function_type (const tree);
201 static void write_bare_function_type (const tree, const int, const tree);
202 static void write_method_parms (tree, const int, const tree);
203 static void write_class_enum_type (const tree);
204 static void write_template_args (tree);
205 static void write_expression (tree);
206 static void write_template_arg_literal (const tree);
207 static void write_template_arg (tree);
208 static void write_template_template_arg (const tree);
209 static void write_array_type (const tree);
210 static void write_pointer_to_member_type (const tree);
211 static void write_template_param (const tree);
212 static void write_template_template_param (const tree);
213 static void write_substitution (const int);
214 static int discriminator_for_local_entity (tree);
215 static int discriminator_for_string_literal (tree, tree);
216 static void write_discriminator (const int);
217 static void write_local_name (tree, const tree, const tree);
218 static void dump_substitution_candidates (void);
219 static tree mangle_decl_string (const tree);
220 static int local_class_index (tree);
221
222 /* Control functions.  */
223
224 static inline void start_mangling (const tree);
225 static inline const char *finish_mangling (const bool);
226 static tree mangle_special_for_type (const tree, const char *);
227
228 /* Foreign language functions.  */
229
230 static void write_java_integer_type_codes (const tree);
231
232 /* Append a single character to the end of the mangled
233    representation.  */
234 #define write_char(CHAR)                                                \
235   obstack_1grow (mangle_obstack, (CHAR))
236
237 /* Append a sized buffer to the end of the mangled representation.  */
238 #define write_chars(CHAR, LEN)                                          \
239   obstack_grow (mangle_obstack, (CHAR), (LEN))
240
241 /* Append a NUL-terminated string to the end of the mangled
242    representation.  */
243 #define write_string(STRING)                                            \
244   obstack_grow (mangle_obstack, (STRING), strlen (STRING))
245
246 /* Nonzero if NODE1 and NODE2 are both TREE_LIST nodes and have the
247    same purpose (context, which may be a type) and value (template
248    decl).  See write_template_prefix for more information on what this
249    is used for.  */
250 #define NESTED_TEMPLATE_MATCH(NODE1, NODE2)                             \
251   (TREE_CODE (NODE1) == TREE_LIST                                       \
252    && TREE_CODE (NODE2) == TREE_LIST                                    \
253    && ((TYPE_P (TREE_PURPOSE (NODE1))                                   \
254         && same_type_p (TREE_PURPOSE (NODE1), TREE_PURPOSE (NODE2)))    \
255        || TREE_PURPOSE (NODE1) == TREE_PURPOSE (NODE2))                 \
256    && TREE_VALUE (NODE1) == TREE_VALUE (NODE2))
257
258 /* Write out an unsigned quantity in base 10.  */
259 #define write_unsigned_number(NUMBER)                                   \
260   write_number ((NUMBER), /*unsigned_p=*/1, 10)
261
262 /* If DECL is a template instance, return nonzero and, if
263    TEMPLATE_INFO is non-NULL, set *TEMPLATE_INFO to its template info.
264    Otherwise return zero.  */
265
266 static int
267 decl_is_template_id (const tree decl, tree* const template_info)
268 {
269   if (TREE_CODE (decl) == TYPE_DECL)
270     {
271       /* TYPE_DECLs are handled specially.  Look at its type to decide
272          if this is a template instantiation.  */
273       const tree type = TREE_TYPE (decl);
274
275       if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_ID_P (type))
276         {
277           if (template_info != NULL)
278             /* For a templated TYPE_DECL, the template info is hanging
279                off the type.  */
280             *template_info = TYPE_TEMPLATE_INFO (type);
281           return 1;
282         }
283     }
284   else
285     {
286       /* Check if this is a primary template.  */
287       if (DECL_LANG_SPECIFIC (decl) != NULL
288           && DECL_USE_TEMPLATE (decl)
289           && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
290           && TREE_CODE (decl) != TEMPLATE_DECL)
291         {
292           if (template_info != NULL)
293             /* For most templated decls, the template info is hanging
294                off the decl.  */
295             *template_info = DECL_TEMPLATE_INFO (decl);
296           return 1;
297         }
298     }
299
300   /* It's not a template id.  */
301   return 0;
302 }
303
304 /* Produce debugging output of current substitution candidates.  */
305
306 static void
307 dump_substitution_candidates (void)
308 {
309   unsigned i;
310   tree el;
311
312   fprintf (stderr, "  ++ substitutions  ");
313   FOR_EACH_VEC_ELT (tree, G.substitutions, i, el)
314     {
315       const char *name = "???";
316
317       if (i > 0)
318         fprintf (stderr, "                    ");
319       if (DECL_P (el))
320         name = IDENTIFIER_POINTER (DECL_NAME (el));
321       else if (TREE_CODE (el) == TREE_LIST)
322         name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (el)));
323       else if (TYPE_NAME (el))
324         name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (el)));
325       fprintf (stderr, " S%d_ = ", i - 1);
326       if (TYPE_P (el) &&
327           (CP_TYPE_RESTRICT_P (el)
328            || CP_TYPE_VOLATILE_P (el)
329            || CP_TYPE_CONST_P (el)))
330         fprintf (stderr, "CV-");
331       fprintf (stderr, "%s (%s at %p)\n",
332                name, tree_code_name[TREE_CODE (el)], (void *) el);
333     }
334 }
335
336 /* Both decls and types can be substitution candidates, but sometimes
337    they refer to the same thing.  For instance, a TYPE_DECL and
338    RECORD_TYPE for the same class refer to the same thing, and should
339    be treated accordingly in substitutions.  This function returns a
340    canonicalized tree node representing NODE that is used when adding
341    and substitution candidates and finding matches.  */
342
343 static inline tree
344 canonicalize_for_substitution (tree node)
345 {
346   /* For a TYPE_DECL, use the type instead.  */
347   if (TREE_CODE (node) == TYPE_DECL)
348     node = TREE_TYPE (node);
349   if (TYPE_P (node)
350       && TYPE_CANONICAL (node) != node
351       && TYPE_MAIN_VARIANT (node) != node)
352     {
353       /* Here we want to strip the topmost typedef only.
354          We need to do that so is_std_substitution can do proper
355          name matching.  */
356       if (TREE_CODE (node) == FUNCTION_TYPE)
357         /* Use build_qualified_type and TYPE_QUALS here to preserve
358            the old buggy mangling of attribute noreturn with abi<5.  */
359         node = build_qualified_type (TYPE_MAIN_VARIANT (node),
360                                      TYPE_QUALS (node));
361       else
362         node = cp_build_qualified_type (TYPE_MAIN_VARIANT (node),
363                                         cp_type_quals (node));
364     }
365   return node;
366 }
367
368 /* Add NODE as a substitution candidate.  NODE must not already be on
369    the list of candidates.  */
370
371 static void
372 add_substitution (tree node)
373 {
374   tree c;
375
376   if (DEBUG_MANGLE)
377     fprintf (stderr, "  ++ add_substitution (%s at %10p)\n",
378              tree_code_name[TREE_CODE (node)], (void *) node);
379
380   /* Get the canonicalized substitution candidate for NODE.  */
381   c = canonicalize_for_substitution (node);
382   if (DEBUG_MANGLE && c != node)
383     fprintf (stderr, "  ++ using candidate (%s at %10p)\n",
384              tree_code_name[TREE_CODE (node)], (void *) node);
385   node = c;
386
387 #if ENABLE_CHECKING
388   /* Make sure NODE isn't already a candidate.  */
389   {
390     int i;
391     tree candidate;
392
393     FOR_EACH_VEC_ELT (tree, G.substitutions, i, candidate)
394       {
395         gcc_assert (!(DECL_P (node) && node == candidate));
396         gcc_assert (!(TYPE_P (node) && TYPE_P (candidate)
397                       && same_type_p (node, candidate)));
398       }
399   }
400 #endif /* ENABLE_CHECKING */
401
402   /* Put the decl onto the varray of substitution candidates.  */
403   VEC_safe_push (tree, gc, G.substitutions, node);
404
405   if (DEBUG_MANGLE)
406     dump_substitution_candidates ();
407 }
408
409 /* Helper function for find_substitution.  Returns nonzero if NODE,
410    which may be a decl or a CLASS_TYPE, is a template-id with template
411    name of substitution_index[INDEX] in the ::std namespace.  */
412
413 static inline int
414 is_std_substitution (const tree node,
415                      const substitution_identifier_index_t index)
416 {
417   tree type = NULL;
418   tree decl = NULL;
419
420   if (DECL_P (node))
421     {
422       type = TREE_TYPE (node);
423       decl = node;
424     }
425   else if (CLASS_TYPE_P (node))
426     {
427       type = node;
428       decl = TYPE_NAME (node);
429     }
430   else
431     /* These are not the droids you're looking for.  */
432     return 0;
433
434   return (DECL_NAMESPACE_STD_P (CP_DECL_CONTEXT (decl))
435           && TYPE_LANG_SPECIFIC (type)
436           && TYPE_TEMPLATE_INFO (type)
437           && (DECL_NAME (TYPE_TI_TEMPLATE (type))
438               == subst_identifiers[index]));
439 }
440
441 /* Helper function for find_substitution.  Returns nonzero if NODE,
442    which may be a decl or a CLASS_TYPE, is the template-id
443    ::std::identifier<char>, where identifier is
444    substitution_index[INDEX].  */
445
446 static inline int
447 is_std_substitution_char (const tree node,
448                           const substitution_identifier_index_t index)
449 {
450   tree args;
451   /* Check NODE's name is ::std::identifier.  */
452   if (!is_std_substitution (node, index))
453     return 0;
454   /* Figure out its template args.  */
455   if (DECL_P (node))
456     args = DECL_TI_ARGS (node);
457   else if (CLASS_TYPE_P (node))
458     args = CLASSTYPE_TI_ARGS (node);
459   else
460     /* Oops, not a template.  */
461     return 0;
462   /* NODE's template arg list should be <char>.  */
463   return
464     TREE_VEC_LENGTH (args) == 1
465     && TREE_VEC_ELT (args, 0) == char_type_node;
466 }
467
468 /* Check whether a substitution should be used to represent NODE in
469    the mangling.
470
471    First, check standard special-case substitutions.
472
473      <substitution> ::= St
474          # ::std
475
476                     ::= Sa
477          # ::std::allocator
478
479                     ::= Sb
480          # ::std::basic_string
481
482                     ::= Ss
483          # ::std::basic_string<char,
484                                ::std::char_traits<char>,
485                                ::std::allocator<char> >
486
487                     ::= Si
488          # ::std::basic_istream<char, ::std::char_traits<char> >
489
490                     ::= So
491          # ::std::basic_ostream<char, ::std::char_traits<char> >
492
493                     ::= Sd
494          # ::std::basic_iostream<char, ::std::char_traits<char> >
495
496    Then examine the stack of currently available substitution
497    candidates for entities appearing earlier in the same mangling
498
499    If a substitution is found, write its mangled representation and
500    return nonzero.  If none is found, just return zero.  */
501
502 static int
503 find_substitution (tree node)
504 {
505   int i;
506   const int size = VEC_length (tree, G.substitutions);
507   tree decl;
508   tree type;
509
510   if (DEBUG_MANGLE)
511     fprintf (stderr, "  ++ find_substitution (%s at %p)\n",
512              tree_code_name[TREE_CODE (node)], (void *) node);
513
514   /* Obtain the canonicalized substitution representation for NODE.
515      This is what we'll compare against.  */
516   node = canonicalize_for_substitution (node);
517
518   /* Check for builtin substitutions.  */
519
520   decl = TYPE_P (node) ? TYPE_NAME (node) : node;
521   type = TYPE_P (node) ? node : TREE_TYPE (node);
522
523   /* Check for std::allocator.  */
524   if (decl
525       && is_std_substitution (decl, SUBID_ALLOCATOR)
526       && !CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)))
527     {
528       write_string ("Sa");
529       return 1;
530     }
531
532   /* Check for std::basic_string.  */
533   if (decl && is_std_substitution (decl, SUBID_BASIC_STRING))
534     {
535       if (TYPE_P (node))
536         {
537           /* If this is a type (i.e. a fully-qualified template-id),
538              check for
539                  std::basic_string <char,
540                                     std::char_traits<char>,
541                                     std::allocator<char> > .  */
542           if (cp_type_quals (type) == TYPE_UNQUALIFIED
543               && CLASSTYPE_USE_TEMPLATE (type))
544             {
545               tree args = CLASSTYPE_TI_ARGS (type);
546               if (TREE_VEC_LENGTH (args) == 3
547                   && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
548                   && is_std_substitution_char (TREE_VEC_ELT (args, 1),
549                                                SUBID_CHAR_TRAITS)
550                   && is_std_substitution_char (TREE_VEC_ELT (args, 2),
551                                                SUBID_ALLOCATOR))
552                 {
553                   write_string ("Ss");
554                   return 1;
555                 }
556             }
557         }
558       else
559         /* Substitute for the template name only if this isn't a type.  */
560         {
561           write_string ("Sb");
562           return 1;
563         }
564     }
565
566   /* Check for basic_{i,o,io}stream.  */
567   if (TYPE_P (node)
568       && cp_type_quals (type) == TYPE_UNQUALIFIED
569       && CLASS_TYPE_P (type)
570       && CLASSTYPE_USE_TEMPLATE (type)
571       && CLASSTYPE_TEMPLATE_INFO (type) != NULL)
572     {
573       /* First, check for the template
574          args <char, std::char_traits<char> > .  */
575       tree args = CLASSTYPE_TI_ARGS (type);
576       if (TREE_VEC_LENGTH (args) == 2
577           && TYPE_P (TREE_VEC_ELT (args, 0))
578           && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
579           && is_std_substitution_char (TREE_VEC_ELT (args, 1),
580                                        SUBID_CHAR_TRAITS))
581         {
582           /* Got them.  Is this basic_istream?  */
583           if (is_std_substitution (decl, SUBID_BASIC_ISTREAM))
584             {
585               write_string ("Si");
586               return 1;
587             }
588           /* Or basic_ostream?  */
589           else if (is_std_substitution (decl, SUBID_BASIC_OSTREAM))
590             {
591               write_string ("So");
592               return 1;
593             }
594           /* Or basic_iostream?  */
595           else if (is_std_substitution (decl, SUBID_BASIC_IOSTREAM))
596             {
597               write_string ("Sd");
598               return 1;
599             }
600         }
601     }
602
603   /* Check for namespace std.  */
604   if (decl && DECL_NAMESPACE_STD_P (decl))
605     {
606       write_string ("St");
607       return 1;
608     }
609
610   /* Now check the list of available substitutions for this mangling
611      operation.  */
612   for (i = 0; i < size; ++i)
613     {
614       tree candidate = VEC_index (tree, G.substitutions, i);
615       /* NODE is a matched to a candidate if it's the same decl node or
616          if it's the same type.  */
617       if (decl == candidate
618           || (TYPE_P (candidate) && type && TYPE_P (node)
619               && same_type_p (type, candidate))
620           || NESTED_TEMPLATE_MATCH (node, candidate))
621         {
622           write_substitution (i);
623           return 1;
624         }
625     }
626
627   /* No substitution found.  */
628   return 0;
629 }
630
631
632 /* TOP_LEVEL is true, if this is being called at outermost level of
633   mangling. It should be false when mangling a decl appearing in an
634   expression within some other mangling.
635
636   <mangled-name>      ::= _Z <encoding>  */
637
638 static void
639 write_mangled_name (const tree decl, bool top_level)
640 {
641   MANGLE_TRACE_TREE ("mangled-name", decl);
642
643   if (/* The names of `extern "C"' functions are not mangled.  */
644       DECL_EXTERN_C_FUNCTION_P (decl)
645       /* But overloaded operator names *are* mangled.  */
646       && !DECL_OVERLOADED_OPERATOR_P (decl))
647     {
648     unmangled_name:;
649
650       if (top_level)
651         write_string (IDENTIFIER_POINTER (DECL_NAME (decl)));
652       else
653         {
654           /* The standard notes: "The <encoding> of an extern "C"
655              function is treated like global-scope data, i.e. as its
656              <source-name> without a type."  We cannot write
657              overloaded operators that way though, because it contains
658              characters invalid in assembler.  */
659           if (abi_version_at_least (2))
660             write_string ("_Z");
661           else
662             G.need_abi_warning = true;
663           write_source_name (DECL_NAME (decl));
664         }
665     }
666   else if (TREE_CODE (decl) == VAR_DECL
667            /* The names of non-static global variables aren't mangled.  */
668            && DECL_EXTERNAL_LINKAGE_P (decl)
669            && (CP_DECL_CONTEXT (decl) == global_namespace
670                /* And neither are `extern "C"' variables.  */
671                || DECL_EXTERN_C_P (decl)))
672     {
673       if (top_level || abi_version_at_least (2))
674         goto unmangled_name;
675       else
676         {
677           G.need_abi_warning = true;
678           goto mangled_name;
679         }
680     }
681   else
682     {
683     mangled_name:;
684       write_string ("_Z");
685       write_encoding (decl);
686       if (DECL_LANG_SPECIFIC (decl)
687           && (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
688               || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)))
689         /* We need a distinct mangled name for these entities, but
690            we should never actually output it.  So, we append some
691            characters the assembler won't like.  */
692         write_string (" *INTERNAL* ");
693     }
694 }
695
696 /*   <encoding>         ::= <function name> <bare-function-type>
697                         ::= <data name>  */
698
699 static void
700 write_encoding (const tree decl)
701 {
702   MANGLE_TRACE_TREE ("encoding", decl);
703
704   if (DECL_LANG_SPECIFIC (decl) && DECL_EXTERN_C_FUNCTION_P (decl))
705     {
706       /* For overloaded operators write just the mangled name
707          without arguments.  */
708       if (DECL_OVERLOADED_OPERATOR_P (decl))
709         write_name (decl, /*ignore_local_scope=*/0);
710       else
711         write_source_name (DECL_NAME (decl));
712       return;
713     }
714
715   write_name (decl, /*ignore_local_scope=*/0);
716   if (TREE_CODE (decl) == FUNCTION_DECL)
717     {
718       tree fn_type;
719       tree d;
720
721       if (decl_is_template_id (decl, NULL))
722         {
723           fn_type = get_mostly_instantiated_function_type (decl);
724           /* FN_TYPE will not have parameter types for in-charge or
725              VTT parameters.  Therefore, we pass NULL_TREE to
726              write_bare_function_type -- otherwise, it will get
727              confused about which artificial parameters to skip.  */
728           d = NULL_TREE;
729         }
730       else
731         {
732           fn_type = TREE_TYPE (decl);
733           d = decl;
734         }
735
736       write_bare_function_type (fn_type,
737                                 (!DECL_CONSTRUCTOR_P (decl)
738                                  && !DECL_DESTRUCTOR_P (decl)
739                                  && !DECL_CONV_FN_P (decl)
740                                  && decl_is_template_id (decl, NULL)),
741                                 d);
742     }
743 }
744
745 /* Lambdas can have a bit more context for mangling, specifically VAR_DECL
746    or PARM_DECL context, which doesn't belong in DECL_CONTEXT.  */
747
748 static tree
749 decl_mangling_context (tree decl)
750 {
751   tree tcontext = targetm.cxx.decl_mangling_context (decl);
752
753   if (tcontext != NULL_TREE)
754     return tcontext;
755
756   if (TREE_CODE (decl) == TYPE_DECL
757       && LAMBDA_TYPE_P (TREE_TYPE (decl)))
758     {
759       tree extra = LAMBDA_TYPE_EXTRA_SCOPE (TREE_TYPE (decl));
760       if (extra)
761         return extra;
762     }
763     else if (TREE_CODE (decl) == TYPE_DECL
764              && TREE_CODE (TREE_TYPE (decl)) == TEMPLATE_TYPE_PARM)
765      /* template type parms have no mangling context.  */
766       return NULL_TREE;
767   return CP_DECL_CONTEXT (decl);
768 }
769
770 /* <name> ::= <unscoped-name>
771           ::= <unscoped-template-name> <template-args>
772           ::= <nested-name>
773           ::= <local-name>
774
775    If IGNORE_LOCAL_SCOPE is nonzero, this production of <name> is
776    called from <local-name>, which mangles the enclosing scope
777    elsewhere and then uses this function to mangle just the part
778    underneath the function scope.  So don't use the <local-name>
779    production, to avoid an infinite recursion.  */
780
781 static void
782 write_name (tree decl, const int ignore_local_scope)
783 {
784   tree context;
785
786   MANGLE_TRACE_TREE ("name", decl);
787
788   if (TREE_CODE (decl) == TYPE_DECL)
789     {
790       /* In case this is a typedef, fish out the corresponding
791          TYPE_DECL for the main variant.  */
792       decl = TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl)));
793     }
794
795   context = decl_mangling_context (decl);
796
797   /* A decl in :: or ::std scope is treated specially.  The former is
798      mangled using <unscoped-name> or <unscoped-template-name>, the
799      latter with a special substitution.  Also, a name that is
800      directly in a local function scope is also mangled with
801      <unscoped-name> rather than a full <nested-name>.  */
802   if (context == NULL
803       || context == global_namespace
804       || DECL_NAMESPACE_STD_P (context)
805       || (ignore_local_scope && TREE_CODE (context) == FUNCTION_DECL))
806     {
807       tree template_info;
808       /* Is this a template instance?  */
809       if (decl_is_template_id (decl, &template_info))
810         {
811           /* Yes: use <unscoped-template-name>.  */
812           write_unscoped_template_name (TI_TEMPLATE (template_info));
813           write_template_args (TI_ARGS (template_info));
814         }
815       else
816         /* Everything else gets an <unqualified-name>.  */
817         write_unscoped_name (decl);
818     }
819   else
820     {
821       /* Handle local names, unless we asked not to (that is, invoked
822          under <local-name>, to handle only the part of the name under
823          the local scope).  */
824       if (!ignore_local_scope)
825         {
826           /* Scan up the list of scope context, looking for a
827              function.  If we find one, this entity is in local
828              function scope.  local_entity tracks context one scope
829              level down, so it will contain the element that's
830              directly in that function's scope, either decl or one of
831              its enclosing scopes.  */
832           tree local_entity = decl;
833           while (context != NULL && context != global_namespace)
834             {
835               /* Make sure we're always dealing with decls.  */
836               if (context != NULL && TYPE_P (context))
837                 context = TYPE_NAME (context);
838               /* Is this a function?  */
839               if (TREE_CODE (context) == FUNCTION_DECL
840                   || TREE_CODE (context) == PARM_DECL)
841                 {
842                   /* Yes, we have local scope.  Use the <local-name>
843                      production for the innermost function scope.  */
844                   write_local_name (context, local_entity, decl);
845                   return;
846                 }
847               /* Up one scope level.  */
848               local_entity = context;
849               context = decl_mangling_context (context);
850             }
851
852           /* No local scope found?  Fall through to <nested-name>.  */
853         }
854
855       /* Other decls get a <nested-name> to encode their scope.  */
856       write_nested_name (decl);
857     }
858 }
859
860 /* <unscoped-name> ::= <unqualified-name>
861                    ::= St <unqualified-name>   # ::std::  */
862
863 static void
864 write_unscoped_name (const tree decl)
865 {
866   tree context = decl_mangling_context (decl);
867
868   MANGLE_TRACE_TREE ("unscoped-name", decl);
869
870   /* Is DECL in ::std?  */
871   if (DECL_NAMESPACE_STD_P (context))
872     {
873       write_string ("St");
874       write_unqualified_name (decl);
875     }
876   else
877     {
878       /* If not, it should be either in the global namespace, or directly
879          in a local function scope.  */
880       gcc_assert (context == global_namespace
881                   || context != NULL
882                   || TREE_CODE (context) == FUNCTION_DECL);
883
884       write_unqualified_name (decl);
885     }
886 }
887
888 /* <unscoped-template-name> ::= <unscoped-name>
889                             ::= <substitution>  */
890
891 static void
892 write_unscoped_template_name (const tree decl)
893 {
894   MANGLE_TRACE_TREE ("unscoped-template-name", decl);
895
896   if (find_substitution (decl))
897     return;
898   write_unscoped_name (decl);
899   add_substitution (decl);
900 }
901
902 /* Write the nested name, including CV-qualifiers, of DECL.
903
904    <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
905                  ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
906
907    <CV-qualifiers> ::= [r] [V] [K]  */
908
909 static void
910 write_nested_name (const tree decl)
911 {
912   tree template_info;
913
914   MANGLE_TRACE_TREE ("nested-name", decl);
915
916   write_char ('N');
917
918   /* Write CV-qualifiers, if this is a member function.  */
919   if (TREE_CODE (decl) == FUNCTION_DECL
920       && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
921     {
922       if (DECL_VOLATILE_MEMFUNC_P (decl))
923         write_char ('V');
924       if (DECL_CONST_MEMFUNC_P (decl))
925         write_char ('K');
926     }
927
928   /* Is this a template instance?  */
929   if (decl_is_template_id (decl, &template_info))
930     {
931       /* Yes, use <template-prefix>.  */
932       write_template_prefix (decl);
933       write_template_args (TI_ARGS (template_info));
934     }
935   else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
936     {
937       tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
938       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
939         {
940           write_template_prefix (decl);
941           write_template_args (TREE_OPERAND (name, 1));
942         }
943       else
944         {
945           write_prefix (CP_DECL_CONTEXT (decl));
946           write_unqualified_name (decl);
947         }
948     }
949   else
950     {
951       /* No, just use <prefix>  */
952       write_prefix (decl_mangling_context (decl));
953       write_unqualified_name (decl);
954     }
955   write_char ('E');
956 }
957
958 /* <prefix> ::= <prefix> <unqualified-name>
959             ::= <template-param>
960             ::= <template-prefix> <template-args>
961             ::= <decltype>
962             ::= # empty
963             ::= <substitution>  */
964
965 static void
966 write_prefix (const tree node)
967 {
968   tree decl;
969   /* Non-NULL if NODE represents a template-id.  */
970   tree template_info = NULL;
971
972   if (node == NULL
973       || node == global_namespace)
974     return;
975
976   MANGLE_TRACE_TREE ("prefix", node);
977
978   if (TREE_CODE (node) == DECLTYPE_TYPE)
979     {
980       write_type (node);
981       return;
982     }
983
984   if (find_substitution (node))
985     return;
986
987   if (DECL_P (node))
988     {
989       /* If this is a function or parm decl, that means we've hit function
990          scope, so this prefix must be for a local name.  In this
991          case, we're under the <local-name> production, which encodes
992          the enclosing function scope elsewhere.  So don't continue
993          here.  */
994       if (TREE_CODE (node) == FUNCTION_DECL
995           || TREE_CODE (node) == PARM_DECL)
996         return;
997
998       decl = node;
999       decl_is_template_id (decl, &template_info);
1000     }
1001   else
1002     {
1003       /* Node is a type.  */
1004       decl = TYPE_NAME (node);
1005       if (CLASSTYPE_TEMPLATE_ID_P (node))
1006         template_info = TYPE_TEMPLATE_INFO (node);
1007     }
1008
1009   /* In G++ 3.2, the name of the template parameter was used.  */
1010   if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
1011       && !abi_version_at_least (2))
1012     G.need_abi_warning = true;
1013
1014   if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
1015       && abi_version_at_least (2))
1016     write_template_param (node);
1017   else if (template_info != NULL)
1018     /* Templated.  */
1019     {
1020       write_template_prefix (decl);
1021       write_template_args (TI_ARGS (template_info));
1022     }
1023   else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
1024     {
1025       tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
1026       if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
1027         {
1028           write_template_prefix (decl);
1029           write_template_args (TREE_OPERAND (name, 1));
1030         }
1031       else
1032         {
1033           write_prefix (CP_DECL_CONTEXT (decl));
1034           write_unqualified_name (decl);
1035         }
1036     }
1037   else
1038     /* Not templated.  */
1039     {
1040       write_prefix (decl_mangling_context (decl));
1041       write_unqualified_name (decl);
1042       if (TREE_CODE (decl) == VAR_DECL
1043           || TREE_CODE (decl) == FIELD_DECL)
1044         {
1045           /* <data-member-prefix> := <member source-name> M */
1046           write_char ('M');
1047           return;
1048         }
1049     }
1050
1051   add_substitution (node);
1052 }
1053
1054 /* <template-prefix> ::= <prefix> <template component>
1055                      ::= <template-param>
1056                      ::= <substitution>  */
1057
1058 static void
1059 write_template_prefix (const tree node)
1060 {
1061   tree decl = DECL_P (node) ? node : TYPE_NAME (node);
1062   tree type = DECL_P (node) ? TREE_TYPE (node) : node;
1063   tree context = CP_DECL_CONTEXT (decl);
1064   tree template_info;
1065   tree templ;
1066   tree substitution;
1067
1068   MANGLE_TRACE_TREE ("template-prefix", node);
1069
1070   /* Find the template decl.  */
1071   if (decl_is_template_id (decl, &template_info))
1072     templ = TI_TEMPLATE (template_info);
1073   else if (TREE_CODE (type) == TYPENAME_TYPE)
1074     /* For a typename type, all we have is the name.  */
1075     templ = DECL_NAME (decl);
1076   else
1077     {
1078       gcc_assert (CLASSTYPE_TEMPLATE_ID_P (type));
1079
1080       templ = TYPE_TI_TEMPLATE (type);
1081     }
1082
1083   /* For a member template, though, the template name for the
1084      innermost name must have all the outer template levels
1085      instantiated.  For instance, consider
1086
1087        template<typename T> struct Outer {
1088          template<typename U> struct Inner {};
1089        };
1090
1091      The template name for `Inner' in `Outer<int>::Inner<float>' is
1092      `Outer<int>::Inner<U>'.  In g++, we don't instantiate the template
1093      levels separately, so there's no TEMPLATE_DECL available for this
1094      (there's only `Outer<T>::Inner<U>').
1095
1096      In order to get the substitutions right, we create a special
1097      TREE_LIST to represent the substitution candidate for a nested
1098      template.  The TREE_PURPOSE is the template's context, fully
1099      instantiated, and the TREE_VALUE is the TEMPLATE_DECL for the inner
1100      template.
1101
1102      So, for the example above, `Outer<int>::Inner' is represented as a
1103      substitution candidate by a TREE_LIST whose purpose is `Outer<int>'
1104      and whose value is `Outer<T>::Inner<U>'.  */
1105   if (TYPE_P (context))
1106     substitution = build_tree_list (context, templ);
1107   else
1108     substitution = templ;
1109
1110   if (find_substitution (substitution))
1111     return;
1112
1113   /* In G++ 3.2, the name of the template template parameter was used.  */
1114   if (TREE_TYPE (templ)
1115       && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM
1116       && !abi_version_at_least (2))
1117     G.need_abi_warning = true;
1118
1119   if (TREE_TYPE (templ)
1120       && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM
1121       && abi_version_at_least (2))
1122     write_template_param (TREE_TYPE (templ));
1123   else
1124     {
1125       write_prefix (context);
1126       write_unqualified_name (decl);
1127     }
1128
1129   add_substitution (substitution);
1130 }
1131
1132 /* We don't need to handle thunks, vtables, or VTTs here.  Those are
1133    mangled through special entry points.
1134
1135     <unqualified-name>  ::= <operator-name>
1136                         ::= <special-name>
1137                         ::= <source-name>
1138                         ::= <unnamed-type-name>
1139                         ::= <local-source-name> 
1140
1141     <local-source-name> ::= L <source-name> <discriminator> */
1142
1143 static void
1144 write_unqualified_id (tree identifier)
1145 {
1146   if (IDENTIFIER_TYPENAME_P (identifier))
1147     write_conversion_operator_name (TREE_TYPE (identifier));
1148   else if (IDENTIFIER_OPNAME_P (identifier))
1149     {
1150       int i;
1151       const char *mangled_name = NULL;
1152
1153       /* Unfortunately, there is no easy way to go from the
1154          name of the operator back to the corresponding tree
1155          code.  */
1156       for (i = 0; i < MAX_TREE_CODES; ++i)
1157         if (operator_name_info[i].identifier == identifier)
1158           {
1159             /* The ABI says that we prefer binary operator
1160                names to unary operator names.  */
1161             if (operator_name_info[i].arity == 2)
1162               {
1163                 mangled_name = operator_name_info[i].mangled_name;
1164                 break;
1165               }
1166             else if (!mangled_name)
1167               mangled_name = operator_name_info[i].mangled_name;
1168           }
1169         else if (assignment_operator_name_info[i].identifier
1170                  == identifier)
1171           {
1172             mangled_name
1173               = assignment_operator_name_info[i].mangled_name;
1174             break;
1175           }
1176       write_string (mangled_name);
1177     }
1178   else if (UDLIT_OPER_P (identifier))
1179     write_literal_operator_name (identifier);
1180   else
1181     write_source_name (identifier);
1182 }
1183
1184 static void
1185 write_unqualified_name (const tree decl)
1186 {
1187   MANGLE_TRACE_TREE ("unqualified-name", decl);
1188
1189   if (TREE_CODE (decl) == IDENTIFIER_NODE)
1190     {
1191       write_unqualified_id (decl);
1192       return;
1193     }
1194
1195   if (DECL_NAME (decl) == NULL_TREE)
1196     {
1197       gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
1198       write_source_name (DECL_ASSEMBLER_NAME (decl));
1199       return;
1200     }
1201   else if (DECL_DECLARES_FUNCTION_P (decl))
1202     {
1203       bool found = true;
1204       if (DECL_CONSTRUCTOR_P (decl))
1205         write_special_name_constructor (decl);
1206       else if (DECL_DESTRUCTOR_P (decl))
1207         write_special_name_destructor (decl);
1208       else if (DECL_CONV_FN_P (decl))
1209         {
1210           /* Conversion operator. Handle it right here.
1211              <operator> ::= cv <type>  */
1212           tree type;
1213           if (decl_is_template_id (decl, NULL))
1214             {
1215               tree fn_type;
1216               fn_type = get_mostly_instantiated_function_type (decl);
1217               type = TREE_TYPE (fn_type);
1218             }
1219           else
1220             type = DECL_CONV_FN_TYPE (decl);
1221           write_conversion_operator_name (type);
1222         }
1223       else if (DECL_OVERLOADED_OPERATOR_P (decl))
1224         {
1225           operator_name_info_t *oni;
1226           if (DECL_ASSIGNMENT_OPERATOR_P (decl))
1227             oni = assignment_operator_name_info;
1228           else
1229             oni = operator_name_info;
1230
1231           write_string (oni[DECL_OVERLOADED_OPERATOR_P (decl)].mangled_name);
1232         }
1233       else if (UDLIT_OPER_P (DECL_NAME (decl)))
1234         write_literal_operator_name (DECL_NAME (decl));
1235       else
1236         found = false;
1237
1238       if (found)
1239         return;
1240     }
1241
1242   if (VAR_OR_FUNCTION_DECL_P (decl) && ! TREE_PUBLIC (decl)
1243       && DECL_NAMESPACE_SCOPE_P (decl)
1244       && decl_linkage (decl) == lk_internal)
1245     {
1246       MANGLE_TRACE_TREE ("local-source-name", decl);
1247       write_char ('L');
1248       write_source_name (DECL_NAME (decl));
1249       /* The default discriminator is 1, and that's all we ever use,
1250          so there's no code to output one here.  */
1251     }
1252   else
1253     {
1254       tree type = TREE_TYPE (decl);
1255
1256       if (TREE_CODE (decl) == TYPE_DECL
1257           && TYPE_ANONYMOUS_P (type))
1258         write_unnamed_type_name (type);
1259       else if (TREE_CODE (decl) == TYPE_DECL
1260                && LAMBDA_TYPE_P (type))
1261         write_closure_type_name (type);
1262       else
1263         write_source_name (DECL_NAME (decl));
1264     }
1265 }
1266
1267 /* Write the unqualified-name for a conversion operator to TYPE.  */
1268
1269 static void
1270 write_conversion_operator_name (const tree type)
1271 {
1272   write_string ("cv");
1273   write_type (type);
1274 }
1275
1276 /* Non-terminal <source-name>.  IDENTIFIER is an IDENTIFIER_NODE.
1277
1278      <source-name> ::= </length/ number> <identifier>  */
1279
1280 static void
1281 write_source_name (tree identifier)
1282 {
1283   MANGLE_TRACE_TREE ("source-name", identifier);
1284
1285   /* Never write the whole template-id name including the template
1286      arguments; we only want the template name.  */
1287   if (IDENTIFIER_TEMPLATE (identifier))
1288     identifier = IDENTIFIER_TEMPLATE (identifier);
1289
1290   write_unsigned_number (IDENTIFIER_LENGTH (identifier));
1291   write_identifier (IDENTIFIER_POINTER (identifier));
1292 }
1293
1294 /* Write a user-defined literal operator.
1295    IDENTIFIER is an LITERAL_IDENTIFIER_NODE.  */
1296
1297 static void
1298 write_literal_operator_name (tree identifier)
1299 {
1300   const char* suffix = UDLIT_OP_SUFFIX (identifier);
1301   char* buffer = XNEWVEC (char, strlen (UDLIT_OP_MANGLED_PREFIX)
1302                               + strlen (suffix) + 10);
1303   sprintf (buffer, UDLIT_OP_MANGLED_FORMAT, suffix);
1304
1305   write_unsigned_number (strlen (buffer));
1306   write_identifier (buffer);
1307 }
1308
1309 /* Encode 0 as _, and 1+ as n-1_.  */
1310
1311 static void
1312 write_compact_number (int num)
1313 {
1314   if (num > 0)
1315     write_unsigned_number (num - 1);
1316   write_char ('_');
1317 }
1318
1319 /* Return how many unnamed types precede TYPE in its enclosing class.  */
1320
1321 static int
1322 nested_anon_class_index (tree type)
1323 {
1324   int index = 0;
1325   tree member = TYPE_FIELDS (TYPE_CONTEXT (type));
1326   for (; member; member = DECL_CHAIN (member))
1327     if (DECL_IMPLICIT_TYPEDEF_P (member))
1328       {
1329         tree memtype = TREE_TYPE (member);
1330         if (memtype == type)
1331           return index;
1332         else if (TYPE_ANONYMOUS_P (memtype))
1333           ++index;
1334       }
1335
1336   gcc_unreachable ();
1337 }
1338
1339 /* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
1340
1341 static void
1342 write_unnamed_type_name (const tree type ATTRIBUTE_UNUSED)
1343 {
1344   int discriminator;
1345   MANGLE_TRACE_TREE ("unnamed-type-name", type);
1346
1347   if (TYPE_FUNCTION_SCOPE_P (type))
1348     discriminator = local_class_index (type);
1349   else if (TYPE_CLASS_SCOPE_P (type))
1350     discriminator = nested_anon_class_index (type);
1351   else
1352     {
1353       gcc_assert (no_linkage_check (type, /*relaxed_p=*/true));
1354       /* Just use the old mangling at namespace scope.  */
1355       write_source_name (TYPE_IDENTIFIER (type));
1356       return;
1357     }
1358
1359   write_string ("Ut");
1360   write_compact_number (discriminator);
1361 }
1362
1363 /* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _
1364    <lambda-sig> ::= <parameter type>+  # Parameter types or "v" if the lambda has no parameters */
1365
1366 static void
1367 write_closure_type_name (const tree type)
1368 {
1369   tree fn = lambda_function (type);
1370   tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
1371   tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
1372
1373   MANGLE_TRACE_TREE ("closure-type-name", type);
1374
1375   write_string ("Ul");
1376   write_method_parms (parms, /*method_p=*/1, fn);
1377   write_char ('E');
1378   write_compact_number (LAMBDA_EXPR_DISCRIMINATOR (lambda));
1379 }
1380
1381 /* Convert NUMBER to ascii using base BASE and generating at least
1382    MIN_DIGITS characters. BUFFER points to the _end_ of the buffer
1383    into which to store the characters. Returns the number of
1384    characters generated (these will be layed out in advance of where
1385    BUFFER points).  */
1386
1387 static int
1388 hwint_to_ascii (unsigned HOST_WIDE_INT number, const unsigned int base,
1389                 char *buffer, const unsigned int min_digits)
1390 {
1391   static const char base_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1392   unsigned digits = 0;
1393
1394   while (number)
1395     {
1396       unsigned HOST_WIDE_INT d = number / base;
1397
1398       *--buffer = base_digits[number - d * base];
1399       digits++;
1400       number = d;
1401     }
1402   while (digits < min_digits)
1403     {
1404       *--buffer = base_digits[0];
1405       digits++;
1406     }
1407   return digits;
1408 }
1409
1410 /* Non-terminal <number>.
1411
1412      <number> ::= [n] </decimal integer/>  */
1413
1414 static void
1415 write_number (unsigned HOST_WIDE_INT number, const int unsigned_p,
1416               const unsigned int base)
1417 {
1418   char buffer[sizeof (HOST_WIDE_INT) * 8];
1419   unsigned count = 0;
1420
1421   if (!unsigned_p && (HOST_WIDE_INT) number < 0)
1422     {
1423       write_char ('n');
1424       number = -((HOST_WIDE_INT) number);
1425     }
1426   count = hwint_to_ascii (number, base, buffer + sizeof (buffer), 1);
1427   write_chars (buffer + sizeof (buffer) - count, count);
1428 }
1429
1430 /* Write out an integral CST in decimal. Most numbers are small, and
1431    representable in a HOST_WIDE_INT. Occasionally we'll have numbers
1432    bigger than that, which we must deal with.  */
1433
1434 static inline void
1435 write_integer_cst (const tree cst)
1436 {
1437   int sign = tree_int_cst_sgn (cst);
1438
1439   if (TREE_INT_CST_HIGH (cst) + (sign < 0))
1440     {
1441       /* A bignum. We do this in chunks, each of which fits in a
1442          HOST_WIDE_INT.  */
1443       char buffer[sizeof (HOST_WIDE_INT) * 8 * 2];
1444       unsigned HOST_WIDE_INT chunk;
1445       unsigned chunk_digits;
1446       char *ptr = buffer + sizeof (buffer);
1447       unsigned count = 0;
1448       tree n, base, type;
1449       int done;
1450
1451       /* HOST_WIDE_INT must be at least 32 bits, so 10^9 is
1452          representable.  */
1453       chunk = 1000000000;
1454       chunk_digits = 9;
1455
1456       if (sizeof (HOST_WIDE_INT) >= 8)
1457         {
1458           /* It is at least 64 bits, so 10^18 is representable.  */
1459           chunk_digits = 18;
1460           chunk *= chunk;
1461         }
1462
1463       type = c_common_signed_or_unsigned_type (1, TREE_TYPE (cst));
1464       base = build_int_cstu (type, chunk);
1465       n = build_int_cst_wide (type,
1466                               TREE_INT_CST_LOW (cst), TREE_INT_CST_HIGH (cst));
1467
1468       if (sign < 0)
1469         {
1470           write_char ('n');
1471           n = fold_build1_loc (input_location, NEGATE_EXPR, type, n);
1472         }
1473       do
1474         {
1475           tree d = fold_build2_loc (input_location, FLOOR_DIV_EXPR, type, n, base);
1476           tree tmp = fold_build2_loc (input_location, MULT_EXPR, type, d, base);
1477           unsigned c;
1478
1479           done = integer_zerop (d);
1480           tmp = fold_build2_loc (input_location, MINUS_EXPR, type, n, tmp);
1481           c = hwint_to_ascii (TREE_INT_CST_LOW (tmp), 10, ptr,
1482                               done ? 1 : chunk_digits);
1483           ptr -= c;
1484           count += c;
1485           n = d;
1486         }
1487       while (!done);
1488       write_chars (ptr, count);
1489     }
1490   else
1491     {
1492       /* A small num.  */
1493       unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (cst);
1494
1495       if (sign < 0)
1496         {
1497           write_char ('n');
1498           low = -low;
1499         }
1500       write_unsigned_number (low);
1501     }
1502 }
1503
1504 /* Write out a floating-point literal.
1505
1506     "Floating-point literals are encoded using the bit pattern of the
1507     target processor's internal representation of that number, as a
1508     fixed-length lowercase hexadecimal string, high-order bytes first
1509     (even if the target processor would store low-order bytes first).
1510     The "n" prefix is not used for floating-point literals; the sign
1511     bit is encoded with the rest of the number.
1512
1513     Here are some examples, assuming the IEEE standard representation
1514     for floating point numbers.  (Spaces are for readability, not
1515     part of the encoding.)
1516
1517         1.0f                    Lf 3f80 0000 E
1518        -1.0f                    Lf bf80 0000 E
1519         1.17549435e-38f         Lf 0080 0000 E
1520         1.40129846e-45f         Lf 0000 0001 E
1521         0.0f                    Lf 0000 0000 E"
1522
1523    Caller is responsible for the Lx and the E.  */
1524 static void
1525 write_real_cst (const tree value)
1526 {
1527   if (abi_version_at_least (2))
1528     {
1529       long target_real[4];  /* largest supported float */
1530       char buffer[9];       /* eight hex digits in a 32-bit number */
1531       int i, limit, dir;
1532
1533       tree type = TREE_TYPE (value);
1534       int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32;
1535
1536       real_to_target (target_real, &TREE_REAL_CST (value),
1537                       TYPE_MODE (type));
1538
1539       /* The value in target_real is in the target word order,
1540          so we must write it out backward if that happens to be
1541          little-endian.  write_number cannot be used, it will
1542          produce uppercase.  */
1543       if (FLOAT_WORDS_BIG_ENDIAN)
1544         i = 0, limit = words, dir = 1;
1545       else
1546         i = words - 1, limit = -1, dir = -1;
1547
1548       for (; i != limit; i += dir)
1549         {
1550           sprintf (buffer, "%08lx", (unsigned long) target_real[i]);
1551           write_chars (buffer, 8);
1552         }
1553     }
1554   else
1555     {
1556       /* In G++ 3.3 and before the REAL_VALUE_TYPE was written out
1557          literally.  Note that compatibility with 3.2 is impossible,
1558          because the old floating-point emulator used a different
1559          format for REAL_VALUE_TYPE.  */
1560       size_t i;
1561       for (i = 0; i < sizeof (TREE_REAL_CST (value)); ++i)
1562         write_number (((unsigned char *) &TREE_REAL_CST (value))[i],
1563                       /*unsigned_p*/ 1,
1564                       /*base*/ 16);
1565       G.need_abi_warning = 1;
1566     }
1567 }
1568
1569 /* Non-terminal <identifier>.
1570
1571      <identifier> ::= </unqualified source code identifier>  */
1572
1573 static void
1574 write_identifier (const char *identifier)
1575 {
1576   MANGLE_TRACE ("identifier", identifier);
1577   write_string (identifier);
1578 }
1579
1580 /* Handle constructor productions of non-terminal <special-name>.
1581    CTOR is a constructor FUNCTION_DECL.
1582
1583      <special-name> ::= C1   # complete object constructor
1584                     ::= C2   # base object constructor
1585                     ::= C3   # complete object allocating constructor
1586
1587    Currently, allocating constructors are never used.
1588
1589    We also need to provide mangled names for the maybe-in-charge
1590    constructor, so we treat it here too.  mangle_decl_string will
1591    append *INTERNAL* to that, to make sure we never emit it.  */
1592
1593 static void
1594 write_special_name_constructor (const tree ctor)
1595 {
1596   if (DECL_BASE_CONSTRUCTOR_P (ctor))
1597     write_string ("C2");
1598   else
1599     {
1600       gcc_assert (DECL_COMPLETE_CONSTRUCTOR_P (ctor)
1601                   /* Even though we don't ever emit a definition of
1602                      the old-style destructor, we still have to
1603                      consider entities (like static variables) nested
1604                      inside it.  */
1605                   || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (ctor));
1606       write_string ("C1");
1607     }
1608 }
1609
1610 /* Handle destructor productions of non-terminal <special-name>.
1611    DTOR is a destructor FUNCTION_DECL.
1612
1613      <special-name> ::= D0 # deleting (in-charge) destructor
1614                     ::= D1 # complete object (in-charge) destructor
1615                     ::= D2 # base object (not-in-charge) destructor
1616
1617    We also need to provide mangled names for the maybe-incharge
1618    destructor, so we treat it here too.  mangle_decl_string will
1619    append *INTERNAL* to that, to make sure we never emit it.  */
1620
1621 static void
1622 write_special_name_destructor (const tree dtor)
1623 {
1624   if (DECL_DELETING_DESTRUCTOR_P (dtor))
1625     write_string ("D0");
1626   else if (DECL_BASE_DESTRUCTOR_P (dtor))
1627     write_string ("D2");
1628   else
1629     {
1630       gcc_assert (DECL_COMPLETE_DESTRUCTOR_P (dtor)
1631                   /* Even though we don't ever emit a definition of
1632                      the old-style destructor, we still have to
1633                      consider entities (like static variables) nested
1634                      inside it.  */
1635                   || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (dtor));
1636       write_string ("D1");
1637     }
1638 }
1639
1640 /* Scan the vector of local classes and return how many others with the
1641    same name (or same no name) and context precede ENTITY.  */
1642
1643 static int
1644 local_class_index (tree entity)
1645 {
1646   int ix, discriminator = 0;
1647   tree name = (TYPE_ANONYMOUS_P (entity) ? NULL_TREE
1648                : TYPE_IDENTIFIER (entity));
1649   tree ctx = TYPE_CONTEXT (entity);
1650   for (ix = 0; ; ix++)
1651     {
1652       tree type = VEC_index (tree, local_classes, ix);
1653       if (type == entity)
1654         return discriminator;
1655       if (TYPE_CONTEXT (type) == ctx
1656           && (name ? TYPE_IDENTIFIER (type) == name
1657               : TYPE_ANONYMOUS_P (type)))
1658         ++discriminator;
1659     }
1660   gcc_unreachable ();
1661 }
1662
1663 /* Return the discriminator for ENTITY appearing inside
1664    FUNCTION.  The discriminator is the lexical ordinal of VAR among
1665    entities with the same name in the same FUNCTION.  */
1666
1667 static int
1668 discriminator_for_local_entity (tree entity)
1669 {
1670   if (DECL_DISCRIMINATOR_P (entity))
1671     {
1672       if (DECL_DISCRIMINATOR_SET_P (entity))
1673         return DECL_DISCRIMINATOR (entity);
1674       else
1675         /* The first entity with a particular name doesn't get
1676            DECL_DISCRIMINATOR set up.  */
1677         return 0;
1678     }
1679   else if (TREE_CODE (entity) == TYPE_DECL)
1680     {
1681       /* Scan the list of local classes.  */
1682       entity = TREE_TYPE (entity);
1683
1684       /* Lambdas and unnamed types have their own discriminators.  */
1685       if (LAMBDA_TYPE_P (entity) || TYPE_ANONYMOUS_P (entity))
1686         return 0;
1687
1688       return local_class_index (entity);
1689     }
1690   else
1691     gcc_unreachable ();
1692 }
1693
1694 /* Return the discriminator for STRING, a string literal used inside
1695    FUNCTION.  The discriminator is the lexical ordinal of STRING among
1696    string literals used in FUNCTION.  */
1697
1698 static int
1699 discriminator_for_string_literal (tree function ATTRIBUTE_UNUSED,
1700                                   tree string ATTRIBUTE_UNUSED)
1701 {
1702   /* For now, we don't discriminate amongst string literals.  */
1703   return 0;
1704 }
1705
1706 /*   <discriminator> := _ <number>
1707
1708    The discriminator is used only for the second and later occurrences
1709    of the same name within a single function. In this case <number> is
1710    n - 2, if this is the nth occurrence, in lexical order.  */
1711
1712 static void
1713 write_discriminator (const int discriminator)
1714 {
1715   /* If discriminator is zero, don't write anything.  Otherwise...  */
1716   if (discriminator > 0)
1717     {
1718       write_char ('_');
1719       write_unsigned_number (discriminator - 1);
1720     }
1721 }
1722
1723 /* Mangle the name of a function-scope entity.  FUNCTION is the
1724    FUNCTION_DECL for the enclosing function, or a PARM_DECL for lambdas in
1725    default argument scope.  ENTITY is the decl for the entity itself.
1726    LOCAL_ENTITY is the entity that's directly scoped in FUNCTION_DECL,
1727    either ENTITY itself or an enclosing scope of ENTITY.
1728
1729      <local-name> := Z <function encoding> E <entity name> [<discriminator>]
1730                   := Z <function encoding> E s [<discriminator>]
1731                   := Z <function encoding> Ed [ <parameter number> ] _ <entity name> */
1732
1733 static void
1734 write_local_name (tree function, const tree local_entity,
1735                   const tree entity)
1736 {
1737   tree parm = NULL_TREE;
1738
1739   MANGLE_TRACE_TREE ("local-name", entity);
1740
1741   if (TREE_CODE (function) == PARM_DECL)
1742     {
1743       parm = function;
1744       function = DECL_CONTEXT (parm);
1745     }
1746
1747   write_char ('Z');
1748   write_encoding (function);
1749   write_char ('E');
1750
1751   /* For this purpose, parameters are numbered from right-to-left.  */
1752   if (parm)
1753     {
1754       tree t;
1755       int i = 0;
1756       for (t = DECL_ARGUMENTS (function); t; t = DECL_CHAIN (t))
1757         {
1758           if (t == parm)
1759             i = 1;
1760           else if (i)
1761             ++i;
1762         }
1763       write_char ('d');
1764       write_compact_number (i - 1);
1765     }
1766
1767   if (TREE_CODE (entity) == STRING_CST)
1768     {
1769       write_char ('s');
1770       write_discriminator (discriminator_for_string_literal (function,
1771                                                              entity));
1772     }
1773   else
1774     {
1775       /* Now the <entity name>.  Let write_name know its being called
1776          from <local-name>, so it doesn't try to process the enclosing
1777          function scope again.  */
1778       write_name (entity, /*ignore_local_scope=*/1);
1779       write_discriminator (discriminator_for_local_entity (local_entity));
1780     }
1781 }
1782
1783 /* Non-terminals <type> and <CV-qualifier>.
1784
1785      <type> ::= <builtin-type>
1786             ::= <function-type>
1787             ::= <class-enum-type>
1788             ::= <array-type>
1789             ::= <pointer-to-member-type>
1790             ::= <template-param>
1791             ::= <substitution>
1792             ::= <CV-qualifier>
1793             ::= P <type>    # pointer-to
1794             ::= R <type>    # reference-to
1795             ::= C <type>    # complex pair (C 2000)
1796             ::= G <type>    # imaginary (C 2000)     [not supported]
1797             ::= U <source-name> <type>   # vendor extended type qualifier
1798
1799    C++0x extensions
1800
1801      <type> ::= RR <type>   # rvalue reference-to
1802      <type> ::= Dt <expression> # decltype of an id-expression or 
1803                                 # class member access
1804      <type> ::= DT <expression> # decltype of an expression
1805      <type> ::= Dn              # decltype of nullptr
1806
1807    TYPE is a type node.  */
1808
1809 static void
1810 write_type (tree type)
1811 {
1812   /* This gets set to nonzero if TYPE turns out to be a (possibly
1813      CV-qualified) builtin type.  */
1814   int is_builtin_type = 0;
1815
1816   MANGLE_TRACE_TREE ("type", type);
1817
1818   if (type == error_mark_node)
1819     return;
1820
1821   type = canonicalize_for_substitution (type);
1822   if (find_substitution (type))
1823     return;
1824
1825
1826   if (write_CV_qualifiers_for_type (type) > 0)
1827     /* If TYPE was CV-qualified, we just wrote the qualifiers; now
1828        mangle the unqualified type.  The recursive call is needed here
1829        since both the qualified and unqualified types are substitution
1830        candidates.  */
1831     write_type (TYPE_MAIN_VARIANT (type));
1832   else if (TREE_CODE (type) == ARRAY_TYPE)
1833     /* It is important not to use the TYPE_MAIN_VARIANT of TYPE here
1834        so that the cv-qualification of the element type is available
1835        in write_array_type.  */
1836     write_array_type (type);
1837   else
1838     {
1839       tree type_orig = type;
1840
1841       /* See through any typedefs.  */
1842       type = TYPE_MAIN_VARIANT (type);
1843
1844       /* According to the C++ ABI, some library classes are passed the
1845          same as the scalar type of their single member and use the same
1846          mangling.  */
1847       if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
1848         type = TREE_TYPE (first_field (type));
1849
1850       if (TYPE_PTRMEM_P (type))
1851         write_pointer_to_member_type (type);
1852       else
1853         {
1854           /* Handle any target-specific fundamental types.  */
1855           const char *target_mangling
1856             = targetm.mangle_type (type_orig);
1857
1858           if (target_mangling)
1859             {
1860               write_string (target_mangling);
1861               /* Add substitutions for types other than fundamental
1862                  types.  */
1863               if (TREE_CODE (type) != VOID_TYPE
1864                   && TREE_CODE (type) != INTEGER_TYPE
1865                   && TREE_CODE (type) != REAL_TYPE
1866                   && TREE_CODE (type) != BOOLEAN_TYPE)
1867                 add_substitution (type);
1868               return;
1869             }
1870
1871           switch (TREE_CODE (type))
1872             {
1873             case VOID_TYPE:
1874             case BOOLEAN_TYPE:
1875             case INTEGER_TYPE:  /* Includes wchar_t.  */
1876             case REAL_TYPE:
1877             case FIXED_POINT_TYPE:
1878               {
1879                 /* If this is a typedef, TYPE may not be one of
1880                    the standard builtin type nodes, but an alias of one.  Use
1881                    TYPE_MAIN_VARIANT to get to the underlying builtin type.  */
1882                 write_builtin_type (TYPE_MAIN_VARIANT (type));
1883                 ++is_builtin_type;
1884               }
1885               break;
1886
1887             case COMPLEX_TYPE:
1888               write_char ('C');
1889               write_type (TREE_TYPE (type));
1890               break;
1891
1892             case FUNCTION_TYPE:
1893             case METHOD_TYPE:
1894               write_function_type (type);
1895               break;
1896
1897             case UNION_TYPE:
1898             case RECORD_TYPE:
1899             case ENUMERAL_TYPE:
1900               /* A pointer-to-member function is represented as a special
1901                  RECORD_TYPE, so check for this first.  */
1902               if (TYPE_PTRMEMFUNC_P (type))
1903                 write_pointer_to_member_type (type);
1904               else
1905                 write_class_enum_type (type);
1906               break;
1907
1908             case TYPENAME_TYPE:
1909             case UNBOUND_CLASS_TEMPLATE:
1910               /* We handle TYPENAME_TYPEs and UNBOUND_CLASS_TEMPLATEs like
1911                  ordinary nested names.  */
1912               write_nested_name (TYPE_STUB_DECL (type));
1913               break;
1914
1915             case POINTER_TYPE:
1916             case REFERENCE_TYPE:
1917               if (TREE_CODE (type) == POINTER_TYPE)
1918                 write_char ('P');
1919               else if (TYPE_REF_IS_RVALUE (type))
1920                 write_char ('O');
1921               else
1922                 write_char ('R');
1923               {
1924                 tree target = TREE_TYPE (type);
1925                 /* Attribute const/noreturn are not reflected in mangling.
1926                    We strip them here rather than at a lower level because
1927                    a typedef or template argument can have function type
1928                    with function-cv-quals (that use the same representation),
1929                    but you can't have a pointer/reference to such a type.  */
1930                 if (abi_version_at_least (5)
1931                     && TREE_CODE (target) == FUNCTION_TYPE)
1932                   target = build_qualified_type (target, TYPE_UNQUALIFIED);
1933                 write_type (target);
1934               }
1935               break;
1936
1937             case TEMPLATE_TYPE_PARM:
1938             case TEMPLATE_PARM_INDEX:
1939               write_template_param (type);
1940               break;
1941
1942             case TEMPLATE_TEMPLATE_PARM:
1943               write_template_template_param (type);
1944               break;
1945
1946             case BOUND_TEMPLATE_TEMPLATE_PARM:
1947               write_template_template_param (type);
1948               write_template_args
1949                 (TI_ARGS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (type)));
1950               break;
1951
1952             case VECTOR_TYPE:
1953               if (abi_version_at_least (4))
1954                 {
1955                   write_string ("Dv");
1956                   /* Non-constant vector size would be encoded with
1957                      _ expression, but we don't support that yet.  */
1958                   write_unsigned_number (TYPE_VECTOR_SUBPARTS (type));
1959                   write_char ('_');
1960                 }
1961               else
1962                 {
1963                   G.need_abi_warning = 1;
1964                   write_string ("U8__vector");
1965                 }
1966               write_type (TREE_TYPE (type));
1967               break;
1968
1969             case TYPE_PACK_EXPANSION:
1970               write_string ("Dp");
1971               write_type (PACK_EXPANSION_PATTERN (type));
1972               break;
1973
1974             case DECLTYPE_TYPE:
1975               /* These shouldn't make it into mangling.  */
1976               gcc_assert (!DECLTYPE_FOR_LAMBDA_CAPTURE (type)
1977                           && !DECLTYPE_FOR_LAMBDA_PROXY (type));
1978
1979               /* In ABI <5, we stripped decltype of a plain decl.  */
1980               if (!abi_version_at_least (5)
1981                   && DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
1982                 {
1983                   tree expr = DECLTYPE_TYPE_EXPR (type);
1984                   tree etype = NULL_TREE;
1985                   switch (TREE_CODE (expr))
1986                     {
1987                     case VAR_DECL:
1988                     case PARM_DECL:
1989                     case RESULT_DECL:
1990                     case FUNCTION_DECL:
1991                     case CONST_DECL:
1992                     case TEMPLATE_PARM_INDEX:
1993                       etype = TREE_TYPE (expr);
1994                       break;
1995
1996                     default:
1997                       break;
1998                     }
1999
2000                   if (etype && !type_uses_auto (etype))
2001                     {
2002                       G.need_abi_warning = 1;
2003                       write_type (etype);
2004                       return;
2005                     }
2006                 }
2007
2008               write_char ('D');
2009               if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
2010                 write_char ('t');
2011               else
2012                 write_char ('T');
2013               ++cp_unevaluated_operand;
2014               write_expression (DECLTYPE_TYPE_EXPR (type));
2015               --cp_unevaluated_operand;
2016               write_char ('E');
2017               break;
2018
2019             case NULLPTR_TYPE:
2020               write_string ("Dn");
2021               break;
2022
2023             case TYPEOF_TYPE:
2024               sorry ("mangling typeof, use decltype instead");
2025               break;
2026
2027             case UNDERLYING_TYPE:
2028               sorry ("mangling __underlying_type");
2029               break;
2030
2031             case LANG_TYPE:
2032               /* fall through.  */
2033
2034             default:
2035               gcc_unreachable ();
2036             }
2037         }
2038     }
2039
2040   /* Types other than builtin types are substitution candidates.  */
2041   if (!is_builtin_type)
2042     add_substitution (type);
2043 }
2044
2045 /* Non-terminal <CV-qualifiers> for type nodes.  Returns the number of
2046    CV-qualifiers written for TYPE.
2047
2048      <CV-qualifiers> ::= [r] [V] [K]  */
2049
2050 static int
2051 write_CV_qualifiers_for_type (const tree type)
2052 {
2053   int num_qualifiers = 0;
2054
2055   /* The order is specified by:
2056
2057        "In cases where multiple order-insensitive qualifiers are
2058        present, they should be ordered 'K' (closest to the base type),
2059        'V', 'r', and 'U' (farthest from the base type) ..."
2060
2061      Note that we do not use cp_type_quals below; given "const
2062      int[3]", the "const" is emitted with the "int", not with the
2063      array.  */
2064   cp_cv_quals quals = TYPE_QUALS (type);
2065
2066   if (quals & TYPE_QUAL_RESTRICT)
2067     {
2068       write_char ('r');
2069       ++num_qualifiers;
2070     }
2071   if (quals & TYPE_QUAL_VOLATILE)
2072     {
2073       write_char ('V');
2074       ++num_qualifiers;
2075     }
2076   if (quals & TYPE_QUAL_CONST)
2077     {
2078       write_char ('K');
2079       ++num_qualifiers;
2080     }
2081
2082   return num_qualifiers;
2083 }
2084
2085 /* Non-terminal <builtin-type>.
2086
2087      <builtin-type> ::= v   # void
2088                     ::= b   # bool
2089                     ::= w   # wchar_t
2090                     ::= c   # char
2091                     ::= a   # signed char
2092                     ::= h   # unsigned char
2093                     ::= s   # short
2094                     ::= t   # unsigned short
2095                     ::= i   # int
2096                     ::= j   # unsigned int
2097                     ::= l   # long
2098                     ::= m   # unsigned long
2099                     ::= x   # long long, __int64
2100                     ::= y   # unsigned long long, __int64
2101                     ::= n   # __int128
2102                     ::= o   # unsigned __int128
2103                     ::= f   # float
2104                     ::= d   # double
2105                     ::= e   # long double, __float80
2106                     ::= g   # __float128          [not supported]
2107                     ::= u <source-name>  # vendor extended type */
2108
2109 static void
2110 write_builtin_type (tree type)
2111 {
2112   if (TYPE_CANONICAL (type))
2113     type = TYPE_CANONICAL (type);
2114
2115   switch (TREE_CODE (type))
2116     {
2117     case VOID_TYPE:
2118       write_char ('v');
2119       break;
2120
2121     case BOOLEAN_TYPE:
2122       write_char ('b');
2123       break;
2124
2125     case INTEGER_TYPE:
2126       /* TYPE may still be wchar_t, char16_t, or char32_t, since that
2127          isn't in integer_type_nodes.  */
2128       if (type == wchar_type_node)
2129         write_char ('w');
2130       else if (type == char16_type_node)
2131         write_string ("Ds");
2132       else if (type == char32_type_node)
2133         write_string ("Di");
2134       else if (TYPE_FOR_JAVA (type))
2135         write_java_integer_type_codes (type);
2136       else
2137         {
2138           size_t itk;
2139           /* Assume TYPE is one of the shared integer type nodes.  Find
2140              it in the array of these nodes.  */
2141         iagain:
2142           for (itk = 0; itk < itk_none; ++itk)
2143             if (integer_types[itk] != NULL_TREE
2144                 && type == integer_types[itk])
2145               {
2146                 /* Print the corresponding single-letter code.  */
2147                 write_char (integer_type_codes[itk]);
2148                 break;
2149               }
2150
2151           if (itk == itk_none)
2152             {
2153               tree t = c_common_type_for_mode (TYPE_MODE (type),
2154                                                TYPE_UNSIGNED (type));
2155               if (type != t)
2156                 {
2157                   type = t;
2158                   goto iagain;
2159                 }
2160
2161               if (TYPE_PRECISION (type) == 128)
2162                 write_char (TYPE_UNSIGNED (type) ? 'o' : 'n');
2163               else
2164                 {
2165                   /* Allow for cases where TYPE is not one of the shared
2166                      integer type nodes and write a "vendor extended builtin
2167                      type" with a name the form intN or uintN, respectively.
2168                      Situations like this can happen if you have an
2169                      __attribute__((__mode__(__SI__))) type and use exotic
2170                      switches like '-mint8' on AVR.  Of course, this is
2171                      undefined by the C++ ABI (and '-mint8' is not even
2172                      Standard C conforming), but when using such special
2173                      options you're pretty much in nowhere land anyway.  */
2174                   const char *prefix;
2175                   char prec[11];        /* up to ten digits for an unsigned */
2176
2177                   prefix = TYPE_UNSIGNED (type) ? "uint" : "int";
2178                   sprintf (prec, "%u", (unsigned) TYPE_PRECISION (type));
2179                   write_char ('u');     /* "vendor extended builtin type" */
2180                   write_unsigned_number (strlen (prefix) + strlen (prec));
2181                   write_string (prefix);
2182                   write_string (prec);
2183                 }
2184             }
2185         }
2186       break;
2187
2188     case REAL_TYPE:
2189       if (type == float_type_node
2190           || type == java_float_type_node)
2191         write_char ('f');
2192       else if (type == double_type_node
2193                || type == java_double_type_node)
2194         write_char ('d');
2195       else if (type == long_double_type_node)
2196         write_char ('e');
2197       else if (type == dfloat32_type_node)
2198         write_string ("Df");
2199       else if (type == dfloat64_type_node)
2200         write_string ("Dd");
2201       else if (type == dfloat128_type_node)
2202         write_string ("De");
2203       else
2204         gcc_unreachable ();
2205       break;
2206
2207     case FIXED_POINT_TYPE:
2208       write_string ("DF");
2209       if (GET_MODE_IBIT (TYPE_MODE (type)) > 0)
2210         write_unsigned_number (GET_MODE_IBIT (TYPE_MODE (type)));
2211       if (type == fract_type_node
2212           || type == sat_fract_type_node
2213           || type == accum_type_node
2214           || type == sat_accum_type_node)
2215         write_char ('i');
2216       else if (type == unsigned_fract_type_node
2217                || type == sat_unsigned_fract_type_node
2218                || type == unsigned_accum_type_node
2219                || type == sat_unsigned_accum_type_node)
2220         write_char ('j');
2221       else if (type == short_fract_type_node
2222                || type == sat_short_fract_type_node
2223                || type == short_accum_type_node
2224                || type == sat_short_accum_type_node)
2225         write_char ('s');
2226       else if (type == unsigned_short_fract_type_node
2227                || type == sat_unsigned_short_fract_type_node
2228                || type == unsigned_short_accum_type_node
2229                || type == sat_unsigned_short_accum_type_node)
2230         write_char ('t');
2231       else if (type == long_fract_type_node
2232                || type == sat_long_fract_type_node
2233                || type == long_accum_type_node
2234                || type == sat_long_accum_type_node)
2235         write_char ('l');
2236       else if (type == unsigned_long_fract_type_node
2237                || type == sat_unsigned_long_fract_type_node
2238                || type == unsigned_long_accum_type_node
2239                || type == sat_unsigned_long_accum_type_node)
2240         write_char ('m');
2241       else if (type == long_long_fract_type_node
2242                || type == sat_long_long_fract_type_node
2243                || type == long_long_accum_type_node
2244                || type == sat_long_long_accum_type_node)
2245         write_char ('x');
2246       else if (type == unsigned_long_long_fract_type_node
2247                || type == sat_unsigned_long_long_fract_type_node
2248                || type == unsigned_long_long_accum_type_node
2249                || type == sat_unsigned_long_long_accum_type_node)
2250         write_char ('y');
2251       else
2252         sorry ("mangling unknown fixed point type");
2253       write_unsigned_number (GET_MODE_FBIT (TYPE_MODE (type)));
2254       if (TYPE_SATURATING (type))
2255         write_char ('s');
2256       else
2257         write_char ('n');
2258       break;
2259
2260     default:
2261       gcc_unreachable ();
2262     }
2263 }
2264
2265 /* Non-terminal <function-type>.  NODE is a FUNCTION_TYPE or
2266    METHOD_TYPE.  The return type is mangled before the parameter
2267    types.
2268
2269      <function-type> ::= F [Y] <bare-function-type> E   */
2270
2271 static void
2272 write_function_type (const tree type)
2273 {
2274   MANGLE_TRACE_TREE ("function-type", type);
2275
2276   /* For a pointer to member function, the function type may have
2277      cv-qualifiers, indicating the quals for the artificial 'this'
2278      parameter.  */
2279   if (TREE_CODE (type) == METHOD_TYPE)
2280     {
2281       /* The first parameter must be a POINTER_TYPE pointing to the
2282          `this' parameter.  */
2283       tree this_type = class_of_this_parm (type);
2284       write_CV_qualifiers_for_type (this_type);
2285     }
2286
2287   write_char ('F');
2288   /* We don't track whether or not a type is `extern "C"'.  Note that
2289      you can have an `extern "C"' function that does not have
2290      `extern "C"' type, and vice versa:
2291
2292        extern "C" typedef void function_t();
2293        function_t f; // f has C++ linkage, but its type is
2294                      // `extern "C"'
2295
2296        typedef void function_t();
2297        extern "C" function_t f; // Vice versa.
2298
2299      See [dcl.link].  */
2300   write_bare_function_type (type, /*include_return_type_p=*/1,
2301                             /*decl=*/NULL);
2302   write_char ('E');
2303 }
2304
2305 /* Non-terminal <bare-function-type>.  TYPE is a FUNCTION_TYPE or
2306    METHOD_TYPE.  If INCLUDE_RETURN_TYPE is nonzero, the return value
2307    is mangled before the parameter types.  If non-NULL, DECL is
2308    FUNCTION_DECL for the function whose type is being emitted.
2309
2310    If DECL is a member of a Java type, then a literal 'J'
2311    is output and the return type is mangled as if INCLUDE_RETURN_TYPE
2312    were nonzero.
2313
2314      <bare-function-type> ::= [J]</signature/ type>+  */
2315
2316 static void
2317 write_bare_function_type (const tree type, const int include_return_type_p,
2318                           const tree decl)
2319 {
2320   int java_method_p;
2321
2322   MANGLE_TRACE_TREE ("bare-function-type", type);
2323
2324   /* Detect Java methods and emit special encoding.  */
2325   if (decl != NULL
2326       && DECL_FUNCTION_MEMBER_P (decl)
2327       && TYPE_FOR_JAVA (DECL_CONTEXT (decl))
2328       && !DECL_CONSTRUCTOR_P (decl)
2329       && !DECL_DESTRUCTOR_P (decl)
2330       && !DECL_CONV_FN_P (decl))
2331     {
2332       java_method_p = 1;
2333       write_char ('J');
2334     }
2335   else
2336     {
2337       java_method_p = 0;
2338     }
2339
2340   /* Mangle the return type, if requested.  */
2341   if (include_return_type_p || java_method_p)
2342     write_type (TREE_TYPE (type));
2343
2344   /* Now mangle the types of the arguments.  */
2345   ++G.parm_depth;
2346   write_method_parms (TYPE_ARG_TYPES (type),
2347                       TREE_CODE (type) == METHOD_TYPE,
2348                       decl);
2349   --G.parm_depth;
2350 }
2351
2352 /* Write the mangled representation of a method parameter list of
2353    types given in PARM_TYPES.  If METHOD_P is nonzero, the function is
2354    considered a non-static method, and the this parameter is omitted.
2355    If non-NULL, DECL is the FUNCTION_DECL for the function whose
2356    parameters are being emitted.  */
2357
2358 static void
2359 write_method_parms (tree parm_types, const int method_p, const tree decl)
2360 {
2361   tree first_parm_type;
2362   tree parm_decl = decl ? DECL_ARGUMENTS (decl) : NULL_TREE;
2363
2364   /* Assume this parameter type list is variable-length.  If it ends
2365      with a void type, then it's not.  */
2366   int varargs_p = 1;
2367
2368   /* If this is a member function, skip the first arg, which is the
2369      this pointer.
2370        "Member functions do not encode the type of their implicit this
2371        parameter."
2372
2373      Similarly, there's no need to mangle artificial parameters, like
2374      the VTT parameters for constructors and destructors.  */
2375   if (method_p)
2376     {
2377       parm_types = TREE_CHAIN (parm_types);
2378       parm_decl = parm_decl ? DECL_CHAIN (parm_decl) : NULL_TREE;
2379
2380       while (parm_decl && DECL_ARTIFICIAL (parm_decl))
2381         {
2382           parm_types = TREE_CHAIN (parm_types);
2383           parm_decl = DECL_CHAIN (parm_decl);
2384         }
2385     }
2386
2387   for (first_parm_type = parm_types;
2388        parm_types;
2389        parm_types = TREE_CHAIN (parm_types))
2390     {
2391       tree parm = TREE_VALUE (parm_types);
2392       if (parm == void_type_node)
2393         {
2394           /* "Empty parameter lists, whether declared as () or
2395              conventionally as (void), are encoded with a void parameter
2396              (v)."  */
2397           if (parm_types == first_parm_type)
2398             write_type (parm);
2399           /* If the parm list is terminated with a void type, it's
2400              fixed-length.  */
2401           varargs_p = 0;
2402           /* A void type better be the last one.  */
2403           gcc_assert (TREE_CHAIN (parm_types) == NULL);
2404         }
2405       else
2406         write_type (parm);
2407     }
2408
2409   if (varargs_p)
2410     /* <builtin-type> ::= z  # ellipsis  */
2411     write_char ('z');
2412 }
2413
2414 /* <class-enum-type> ::= <name>  */
2415
2416 static void
2417 write_class_enum_type (const tree type)
2418 {
2419   write_name (TYPE_NAME (type), /*ignore_local_scope=*/0);
2420 }
2421
2422 /* Non-terminal <template-args>.  ARGS is a TREE_VEC of template
2423    arguments.
2424
2425      <template-args> ::= I <template-arg>* E  */
2426
2427 static void
2428 write_template_args (tree args)
2429 {
2430   int i;
2431   int length = 0;
2432
2433   MANGLE_TRACE_TREE ("template-args", args);
2434
2435   write_char ('I');
2436
2437   if (args)
2438     length = TREE_VEC_LENGTH (args);
2439
2440   if (args && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
2441     {
2442       /* We have nested template args.  We want the innermost template
2443          argument list.  */
2444       args = TREE_VEC_ELT (args, length - 1);
2445       length = TREE_VEC_LENGTH (args);
2446     }
2447   for (i = 0; i < length; ++i)
2448     write_template_arg (TREE_VEC_ELT (args, i));
2449
2450   write_char ('E');
2451 }
2452
2453 /* Write out the
2454    <unqualified-name>
2455    <unqualified-name> <template-args>
2456    part of SCOPE_REF or COMPONENT_REF mangling.  */
2457
2458 static void
2459 write_member_name (tree member)
2460 {
2461   if (TREE_CODE (member) == IDENTIFIER_NODE)
2462     write_unqualified_id (member);
2463   else if (DECL_P (member))
2464     write_unqualified_name (member);
2465   else if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
2466     {
2467       tree name = TREE_OPERAND (member, 0);
2468       if (TREE_CODE (name) == OVERLOAD)
2469         name = OVL_FUNCTION (name);
2470       write_member_name (name);
2471       write_template_args (TREE_OPERAND (member, 1));
2472     }
2473   else
2474     write_expression (member);
2475 }
2476
2477 /* <expression> ::= <unary operator-name> <expression>
2478                 ::= <binary operator-name> <expression> <expression>
2479                 ::= <expr-primary>
2480
2481    <expr-primary> ::= <template-param>
2482                   ::= L <type> <value number> E         # literal
2483                   ::= L <mangled-name> E                # external name
2484                   ::= st <type>                         # sizeof
2485                   ::= sr <type> <unqualified-name>      # dependent name
2486                   ::= sr <type> <unqualified-name> <template-args> */
2487
2488 static void
2489 write_expression (tree expr)
2490 {
2491   enum tree_code code = TREE_CODE (expr);
2492
2493   /* Skip NOP_EXPRs.  They can occur when (say) a pointer argument
2494      is converted (via qualification conversions) to another
2495      type.  */
2496   while (TREE_CODE (expr) == NOP_EXPR
2497          || TREE_CODE (expr) == NON_LVALUE_EXPR)
2498     {
2499       expr = TREE_OPERAND (expr, 0);
2500       code = TREE_CODE (expr);
2501     }
2502
2503   if (code == BASELINK
2504       && (!type_unknown_p (expr)
2505           || !BASELINK_QUALIFIED_P (expr)))
2506     {
2507       expr = BASELINK_FUNCTIONS (expr);
2508       code = TREE_CODE (expr);
2509     }
2510
2511   /* Handle pointers-to-members by making them look like expression
2512      nodes.  */
2513   if (code == PTRMEM_CST)
2514     {
2515       expr = build_nt (ADDR_EXPR,
2516                        build_qualified_name (/*type=*/NULL_TREE,
2517                                              PTRMEM_CST_CLASS (expr),
2518                                              PTRMEM_CST_MEMBER (expr),
2519                                              /*template_p=*/false));
2520       code = TREE_CODE (expr);
2521     }
2522
2523   /* Handle template parameters.  */
2524   if (code == TEMPLATE_TYPE_PARM
2525       || code == TEMPLATE_TEMPLATE_PARM
2526       || code == BOUND_TEMPLATE_TEMPLATE_PARM
2527       || code == TEMPLATE_PARM_INDEX)
2528     write_template_param (expr);
2529   /* Handle literals.  */
2530   else if (TREE_CODE_CLASS (code) == tcc_constant
2531            || (abi_version_at_least (2) && code == CONST_DECL))
2532     write_template_arg_literal (expr);
2533   else if (code == PARM_DECL && DECL_ARTIFICIAL (expr))
2534     {
2535       gcc_assert (!strcmp ("this", IDENTIFIER_POINTER (DECL_NAME (expr))));
2536       write_string ("fpT");
2537     }
2538   else if (code == PARM_DECL)
2539     {
2540       /* A function parameter used in a late-specified return type.  */
2541       int index = DECL_PARM_INDEX (expr);
2542       int level = DECL_PARM_LEVEL (expr);
2543       int delta = G.parm_depth - level + 1;
2544       gcc_assert (index >= 1);
2545       write_char ('f');
2546       if (delta != 0)
2547         {
2548           if (abi_version_at_least (5))
2549             {
2550               /* Let L be the number of function prototype scopes from the
2551                  innermost one (in which the parameter reference occurs) up
2552                  to (and including) the one containing the declaration of
2553                  the referenced parameter.  If the parameter declaration
2554                  clause of the innermost function prototype scope has been
2555                  completely seen, it is not counted (in that case -- which
2556                  is perhaps the most common -- L can be zero).  */
2557               write_char ('L');
2558               write_unsigned_number (delta - 1);
2559             }
2560           else
2561             G.need_abi_warning = true;
2562         }
2563       write_char ('p');
2564       write_compact_number (index - 1);
2565     }
2566   else if (DECL_P (expr))
2567     {
2568       /* G++ 3.2 incorrectly mangled non-type template arguments of
2569          enumeration type using their names.  */
2570       if (code == CONST_DECL)
2571         G.need_abi_warning = 1;
2572       write_char ('L');
2573       write_mangled_name (expr, false);
2574       write_char ('E');
2575     }
2576   else if (TREE_CODE (expr) == SIZEOF_EXPR
2577            && TYPE_P (TREE_OPERAND (expr, 0)))
2578     {
2579       write_string ("st");
2580       write_type (TREE_OPERAND (expr, 0));
2581     }
2582   else if (TREE_CODE (expr) == ALIGNOF_EXPR
2583            && TYPE_P (TREE_OPERAND (expr, 0)))
2584     {
2585       write_string ("at");
2586       write_type (TREE_OPERAND (expr, 0));
2587     }
2588   else if (code == SCOPE_REF
2589            || code == BASELINK)
2590     {
2591       tree scope, member;
2592       if (code == SCOPE_REF)
2593         {
2594           scope = TREE_OPERAND (expr, 0);
2595           member = TREE_OPERAND (expr, 1);
2596         }
2597       else
2598         {
2599           scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (expr));
2600           member = BASELINK_FUNCTIONS (expr);
2601         }
2602
2603       if (!abi_version_at_least (2) && DECL_P (member))
2604         {
2605           write_string ("sr");
2606           write_type (scope);
2607           /* G++ 3.2 incorrectly put out both the "sr" code and
2608              the nested name of the qualified name.  */
2609           G.need_abi_warning = 1;
2610           write_encoding (member);
2611         }
2612
2613       /* If the MEMBER is a real declaration, then the qualifying
2614          scope was not dependent.  Ideally, we would not have a
2615          SCOPE_REF in those cases, but sometimes we do.  If the second
2616          argument is a DECL, then the name must not have been
2617          dependent.  */
2618       else if (DECL_P (member))
2619         write_expression (member);
2620       else
2621         {
2622           write_string ("sr");
2623           write_type (scope);
2624           write_member_name (member);
2625         }
2626     }
2627   else if (TREE_CODE (expr) == INDIRECT_REF
2628            && TREE_TYPE (TREE_OPERAND (expr, 0))
2629            && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2630     {
2631       write_expression (TREE_OPERAND (expr, 0));
2632     }
2633   else if (TREE_CODE (expr) == IDENTIFIER_NODE)
2634     {
2635       /* An operator name appearing as a dependent name needs to be
2636          specially marked to disambiguate between a use of the operator
2637          name and a use of the operator in an expression.  */
2638       if (IDENTIFIER_OPNAME_P (expr))
2639         write_string ("on");
2640       write_unqualified_id (expr);
2641     }
2642   else if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
2643     {
2644       tree fn = TREE_OPERAND (expr, 0);
2645       if (is_overloaded_fn (fn))
2646         fn = DECL_NAME (get_first_fn (fn));
2647       if (IDENTIFIER_OPNAME_P (fn))
2648         write_string ("on");
2649       write_unqualified_id (fn);
2650       write_template_args (TREE_OPERAND (expr, 1));
2651     }
2652   else if (TREE_CODE (expr) == MODOP_EXPR)
2653     {
2654       enum tree_code subop = TREE_CODE (TREE_OPERAND (expr, 1));
2655       const char *name = (assignment_operator_name_info[(int) subop]
2656                           .mangled_name);
2657       write_string (name);
2658       write_expression (TREE_OPERAND (expr, 0));
2659       write_expression (TREE_OPERAND (expr, 2));
2660     }
2661   else if (code == NEW_EXPR || code == VEC_NEW_EXPR)
2662     {
2663       /* ::= [gs] nw <expression>* _ <type> E
2664          ::= [gs] nw <expression>* _ <type> <initializer>
2665          ::= [gs] na <expression>* _ <type> E
2666          ::= [gs] na <expression>* _ <type> <initializer>
2667          <initializer> ::= pi <expression>* E  */
2668       tree placement = TREE_OPERAND (expr, 0);
2669       tree type = TREE_OPERAND (expr, 1);
2670       tree nelts = TREE_OPERAND (expr, 2);
2671       tree init = TREE_OPERAND (expr, 3);
2672       tree t;
2673
2674       gcc_assert (code == NEW_EXPR);
2675       if (TREE_OPERAND (expr, 2))
2676         code = VEC_NEW_EXPR;
2677
2678       if (NEW_EXPR_USE_GLOBAL (expr))
2679         write_string ("gs");
2680
2681       write_string (operator_name_info[(int) code].mangled_name);
2682
2683       for (t = placement; t; t = TREE_CHAIN (t))
2684         write_expression (TREE_VALUE (t));
2685
2686       write_char ('_');
2687
2688       if (nelts)
2689         {
2690           tree domain;
2691           ++processing_template_decl;
2692           domain = compute_array_index_type (NULL_TREE, nelts,
2693                                              tf_warning_or_error);
2694           type = build_cplus_array_type (type, domain);
2695           --processing_template_decl;
2696         }
2697       write_type (type);
2698
2699       if (init && TREE_CODE (init) == TREE_LIST
2700           && TREE_CODE (TREE_VALUE (init)) == CONSTRUCTOR
2701           && CONSTRUCTOR_IS_DIRECT_INIT (TREE_VALUE (init)))
2702         write_expression (TREE_VALUE (init));
2703       else
2704         {
2705           if (init)
2706             write_string ("pi");
2707           if (init && init != void_zero_node)
2708             for (t = init; t; t = TREE_CHAIN (t))
2709               write_expression (TREE_VALUE (t));
2710           write_char ('E');
2711         }
2712     }
2713   else if (code == DELETE_EXPR || code == VEC_DELETE_EXPR)
2714     {
2715       gcc_assert (code == DELETE_EXPR);
2716       if (DELETE_EXPR_USE_VEC (expr))
2717         code = VEC_DELETE_EXPR;
2718
2719       if (DELETE_EXPR_USE_GLOBAL (expr))
2720         write_string ("gs");
2721
2722       write_string (operator_name_info[(int) code].mangled_name);
2723
2724       write_expression (TREE_OPERAND (expr, 0));
2725     }
2726   else if (code == THROW_EXPR)
2727     {
2728       tree op = TREE_OPERAND (expr, 0);
2729       if (op)
2730         {
2731           write_string ("tw");
2732           write_expression (op);
2733         }
2734       else
2735         write_string ("tr");
2736     }
2737   else if (code == CONSTRUCTOR)
2738     {
2739       VEC(constructor_elt,gc)* elts = CONSTRUCTOR_ELTS (expr);
2740       unsigned i; tree val;
2741
2742       if (BRACE_ENCLOSED_INITIALIZER_P (expr))
2743         write_string ("il");
2744       else
2745         {
2746           write_string ("tl");
2747           write_type (TREE_TYPE (expr));
2748         }
2749       FOR_EACH_CONSTRUCTOR_VALUE (elts, i, val)
2750         write_expression (val);
2751       write_char ('E');
2752     }
2753   else if (dependent_name (expr))
2754     {
2755       write_unqualified_id (dependent_name (expr));
2756     }
2757   else
2758     {
2759       int i, len;
2760       const char *name;
2761
2762       /* When we bind a variable or function to a non-type template
2763          argument with reference type, we create an ADDR_EXPR to show
2764          the fact that the entity's address has been taken.  But, we
2765          don't actually want to output a mangling code for the `&'.  */
2766       if (TREE_CODE (expr) == ADDR_EXPR
2767           && TREE_TYPE (expr)
2768           && TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE)
2769         {
2770           expr = TREE_OPERAND (expr, 0);
2771           if (DECL_P (expr))
2772             {
2773               write_expression (expr);
2774               return;
2775             }
2776
2777           code = TREE_CODE (expr);
2778         }
2779
2780       if (code == COMPONENT_REF)
2781         {
2782           tree ob = TREE_OPERAND (expr, 0);
2783
2784           if (TREE_CODE (ob) == ARROW_EXPR)
2785             {
2786               write_string (operator_name_info[(int)code].mangled_name);
2787               ob = TREE_OPERAND (ob, 0);
2788             }
2789           else
2790             write_string ("dt");
2791
2792           write_expression (ob);
2793           write_member_name (TREE_OPERAND (expr, 1));
2794           return;
2795         }
2796
2797       /* If it wasn't any of those, recursively expand the expression.  */
2798       name = operator_name_info[(int) code].mangled_name;
2799
2800       /* We used to mangle const_cast and static_cast like a C cast.  */
2801       if (!abi_version_at_least (6)
2802           && (code == CONST_CAST_EXPR
2803               || code == STATIC_CAST_EXPR))
2804         {
2805           name = operator_name_info[CAST_EXPR].mangled_name;
2806           G.need_abi_warning = 1;
2807         }
2808
2809       if (name == NULL)
2810         {
2811           sorry ("mangling %C", code);
2812           return;
2813         }
2814       else
2815         write_string (name);    
2816
2817       switch (code)
2818         {
2819         case CALL_EXPR:
2820           {
2821             tree fn = CALL_EXPR_FN (expr);
2822
2823             if (TREE_CODE (fn) == ADDR_EXPR)
2824               fn = TREE_OPERAND (fn, 0);
2825
2826             /* Mangle a dependent name as the name, not whatever happens to
2827                be the first function in the overload set.  */
2828             if ((TREE_CODE (fn) == FUNCTION_DECL
2829                  || TREE_CODE (fn) == OVERLOAD)
2830                 && type_dependent_expression_p_push (expr))
2831               fn = DECL_NAME (get_first_fn (fn));
2832
2833             write_expression (fn);
2834           }
2835
2836           for (i = 0; i < call_expr_nargs (expr); ++i)
2837             write_expression (CALL_EXPR_ARG (expr, i));
2838           write_char ('E');
2839           break;
2840
2841         case CAST_EXPR:
2842           write_type (TREE_TYPE (expr));
2843           if (list_length (TREE_OPERAND (expr, 0)) == 1)          
2844             write_expression (TREE_VALUE (TREE_OPERAND (expr, 0)));
2845           else
2846             {
2847               tree args = TREE_OPERAND (expr, 0);
2848               write_char ('_');
2849               for (; args; args = TREE_CHAIN (args))
2850                 write_expression (TREE_VALUE (args));
2851               write_char ('E');
2852             }
2853           break;
2854
2855         case DYNAMIC_CAST_EXPR:
2856         case REINTERPRET_CAST_EXPR:
2857         case STATIC_CAST_EXPR:
2858         case CONST_CAST_EXPR:
2859           write_type (TREE_TYPE (expr));
2860           write_expression (TREE_OPERAND (expr, 0));
2861           break;
2862
2863         case PREINCREMENT_EXPR:
2864         case PREDECREMENT_EXPR:
2865           if (abi_version_at_least (6))
2866             write_char ('_');
2867           else
2868             G.need_abi_warning = 1;
2869           /* Fall through.  */
2870
2871         default:
2872           /* In the middle-end, some expressions have more operands than
2873              they do in templates (and mangling).  */
2874           len = cp_tree_operand_length (expr);
2875
2876           for (i = 0; i < len; ++i)
2877             {
2878               tree operand = TREE_OPERAND (expr, i);
2879               /* As a GNU extension, the middle operand of a
2880                  conditional may be omitted.  Since expression
2881                  manglings are supposed to represent the input token
2882                  stream, there's no good way to mangle such an
2883                  expression without extending the C++ ABI.  */
2884               if (code == COND_EXPR && i == 1 && !operand)
2885                 {
2886                   error ("omitted middle operand to %<?:%> operand "
2887                          "cannot be mangled");
2888                   continue;
2889                 }
2890               write_expression (operand);
2891             }
2892         }
2893     }
2894 }
2895
2896 /* Literal subcase of non-terminal <template-arg>.
2897
2898      "Literal arguments, e.g. "A<42L>", are encoded with their type
2899      and value. Negative integer values are preceded with "n"; for
2900      example, "A<-42L>" becomes "1AILln42EE". The bool value false is
2901      encoded as 0, true as 1."  */
2902
2903 static void
2904 write_template_arg_literal (const tree value)
2905 {
2906   write_char ('L');
2907   write_type (TREE_TYPE (value));
2908
2909   /* Write a null member pointer value as (type)0, regardless of its
2910      real representation.  */
2911   if (null_member_pointer_value_p (value))
2912     write_integer_cst (integer_zero_node);
2913   else
2914     switch (TREE_CODE (value))
2915       {
2916       case CONST_DECL:
2917         write_integer_cst (DECL_INITIAL (value));
2918         break;
2919
2920       case INTEGER_CST:
2921         gcc_assert (!same_type_p (TREE_TYPE (value), boolean_type_node)
2922                     || integer_zerop (value) || integer_onep (value));
2923         write_integer_cst (value);
2924         break;
2925
2926       case REAL_CST:
2927         write_real_cst (value);
2928         break;
2929
2930       case COMPLEX_CST:
2931         if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST
2932             && TREE_CODE (TREE_IMAGPART (value)) == INTEGER_CST)
2933           {
2934             write_integer_cst (TREE_REALPART (value));
2935             write_char ('_');
2936             write_integer_cst (TREE_IMAGPART (value));
2937           }
2938         else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST
2939                  && TREE_CODE (TREE_IMAGPART (value)) == REAL_CST)
2940           {
2941             write_real_cst (TREE_REALPART (value));
2942             write_char ('_');
2943             write_real_cst (TREE_IMAGPART (value));
2944           }
2945         else
2946           gcc_unreachable ();
2947         break;
2948
2949       case STRING_CST:
2950         sorry ("string literal in function template signature");
2951         break;
2952
2953       default:
2954         gcc_unreachable ();
2955       }
2956
2957   write_char ('E');
2958 }
2959
2960 /* Non-terminal <template-arg>.
2961
2962      <template-arg> ::= <type>                          # type
2963                     ::= L <type> </value/ number> E     # literal
2964                     ::= LZ <name> E                     # external name
2965                     ::= X <expression> E                # expression  */
2966
2967 static void
2968 write_template_arg (tree node)
2969 {
2970   enum tree_code code = TREE_CODE (node);
2971
2972   MANGLE_TRACE_TREE ("template-arg", node);
2973
2974   /* A template template parameter's argument list contains TREE_LIST
2975      nodes of which the value field is the actual argument.  */
2976   if (code == TREE_LIST)
2977     {
2978       node = TREE_VALUE (node);
2979       /* If it's a decl, deal with its type instead.  */
2980       if (DECL_P (node))
2981         {
2982           node = TREE_TYPE (node);
2983           code = TREE_CODE (node);
2984         }
2985     }
2986
2987   if (TREE_CODE (node) == NOP_EXPR
2988       && TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
2989     {
2990       /* Template parameters can be of reference type. To maintain
2991          internal consistency, such arguments use a conversion from
2992          address of object to reference type.  */
2993       gcc_assert (TREE_CODE (TREE_OPERAND (node, 0)) == ADDR_EXPR);
2994       if (abi_version_at_least (2))
2995         node = TREE_OPERAND (TREE_OPERAND (node, 0), 0);
2996       else
2997         G.need_abi_warning = 1;
2998     }
2999
3000   if (TREE_CODE (node) == BASELINK
3001       && !type_unknown_p (node))
3002     {
3003       if (abi_version_at_least (6))
3004         node = BASELINK_FUNCTIONS (node);
3005       else
3006         /* We wrongly wrapped a class-scope function in X/E.  */
3007         G.need_abi_warning = 1;
3008     }
3009
3010   if (ARGUMENT_PACK_P (node))
3011     {
3012       /* Expand the template argument pack. */
3013       tree args = ARGUMENT_PACK_ARGS (node);
3014       int i, length = TREE_VEC_LENGTH (args);
3015       if (abi_version_at_least (6))
3016         write_char ('J');
3017       else
3018         {
3019           write_char ('I');
3020           G.need_abi_warning = 1;
3021         }
3022       for (i = 0; i < length; ++i)
3023         write_template_arg (TREE_VEC_ELT (args, i));
3024       write_char ('E');
3025     }
3026   else if (TYPE_P (node))
3027     write_type (node);
3028   else if (code == TEMPLATE_DECL)
3029     /* A template appearing as a template arg is a template template arg.  */
3030     write_template_template_arg (node);
3031   else if ((TREE_CODE_CLASS (code) == tcc_constant && code != PTRMEM_CST)
3032            || (abi_version_at_least (2) && code == CONST_DECL)
3033            || null_member_pointer_value_p (node))
3034     write_template_arg_literal (node);
3035   else if (DECL_P (node))
3036     {
3037       /* Until ABI version 2, non-type template arguments of
3038          enumeration type were mangled using their names.  */
3039       if (code == CONST_DECL && !abi_version_at_least (2))
3040         G.need_abi_warning = 1;
3041       write_char ('L');
3042       /* Until ABI version 3, the underscore before the mangled name
3043          was incorrectly omitted.  */
3044       if (!abi_version_at_least (3))
3045         {
3046           G.need_abi_warning = 1;
3047           write_char ('Z');
3048         }
3049       else
3050         write_string ("_Z");
3051       write_encoding (node);
3052       write_char ('E');
3053     }
3054   else
3055     {
3056       /* Template arguments may be expressions.  */
3057       write_char ('X');
3058       write_expression (node);
3059       write_char ('E');
3060     }
3061 }
3062
3063 /*  <template-template-arg>
3064                         ::= <name>
3065                         ::= <substitution>  */
3066
3067 static void
3068 write_template_template_arg (const tree decl)
3069 {
3070   MANGLE_TRACE_TREE ("template-template-arg", decl);
3071
3072   if (find_substitution (decl))
3073     return;
3074   write_name (decl, /*ignore_local_scope=*/0);
3075   add_substitution (decl);
3076 }
3077
3078
3079 /* Non-terminal <array-type>.  TYPE is an ARRAY_TYPE.
3080
3081      <array-type> ::= A [</dimension/ number>] _ </element/ type>
3082                   ::= A <expression> _ </element/ type>
3083
3084      "Array types encode the dimension (number of elements) and the
3085      element type. For variable length arrays, the dimension (but not
3086      the '_' separator) is omitted."  */
3087
3088 static void
3089 write_array_type (const tree type)
3090 {
3091   write_char ('A');
3092   if (TYPE_DOMAIN (type))
3093     {
3094       tree index_type;
3095       tree max;
3096
3097       index_type = TYPE_DOMAIN (type);
3098       /* The INDEX_TYPE gives the upper and lower bounds of the
3099          array.  */
3100       max = TYPE_MAX_VALUE (index_type);
3101       if (TREE_CODE (max) == INTEGER_CST)
3102         {
3103           /* The ABI specifies that we should mangle the number of
3104              elements in the array, not the largest allowed index.  */
3105           max = size_binop (PLUS_EXPR, max, size_one_node);
3106           write_unsigned_number (tree_low_cst (max, 1));
3107         }
3108       else
3109         {
3110           max = TREE_OPERAND (max, 0);
3111           if (!abi_version_at_least (2))
3112             {
3113               /* value_dependent_expression_p presumes nothing is
3114                  dependent when PROCESSING_TEMPLATE_DECL is zero.  */
3115               ++processing_template_decl;
3116               if (!value_dependent_expression_p (max))
3117                 G.need_abi_warning = 1;
3118               --processing_template_decl;
3119             }
3120           write_expression (max);
3121         }
3122
3123     }
3124   write_char ('_');
3125   write_type (TREE_TYPE (type));
3126 }
3127
3128 /* Non-terminal <pointer-to-member-type> for pointer-to-member
3129    variables.  TYPE is a pointer-to-member POINTER_TYPE.
3130
3131      <pointer-to-member-type> ::= M </class/ type> </member/ type>  */
3132
3133 static void
3134 write_pointer_to_member_type (const tree type)
3135 {
3136   write_char ('M');
3137   write_type (TYPE_PTRMEM_CLASS_TYPE (type));
3138   write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
3139 }
3140
3141 /* Non-terminal <template-param>.  PARM is a TEMPLATE_TYPE_PARM,
3142    TEMPLATE_TEMPLATE_PARM, BOUND_TEMPLATE_TEMPLATE_PARM or a
3143    TEMPLATE_PARM_INDEX.
3144
3145      <template-param> ::= T </parameter/ number> _  */
3146
3147 static void
3148 write_template_param (const tree parm)
3149 {
3150   int parm_index;
3151
3152   MANGLE_TRACE_TREE ("template-parm", parm);
3153
3154   switch (TREE_CODE (parm))
3155     {
3156     case TEMPLATE_TYPE_PARM:
3157     case TEMPLATE_TEMPLATE_PARM:
3158     case BOUND_TEMPLATE_TEMPLATE_PARM:
3159       parm_index = TEMPLATE_TYPE_IDX (parm);
3160       break;
3161
3162     case TEMPLATE_PARM_INDEX:
3163       parm_index = TEMPLATE_PARM_IDX (parm);
3164       break;
3165
3166     default:
3167       gcc_unreachable ();
3168     }
3169
3170   write_char ('T');
3171   /* NUMBER as it appears in the mangling is (-1)-indexed, with the
3172      earliest template param denoted by `_'.  */
3173   write_compact_number (parm_index);
3174 }
3175
3176 /*  <template-template-param>
3177                         ::= <template-param>
3178                         ::= <substitution>  */
3179
3180 static void
3181 write_template_template_param (const tree parm)
3182 {
3183   tree templ = NULL_TREE;
3184
3185   /* PARM, a TEMPLATE_TEMPLATE_PARM, is an instantiation of the
3186      template template parameter.  The substitution candidate here is
3187      only the template.  */
3188   if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
3189     {
3190       templ
3191         = TI_TEMPLATE (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm));
3192       if (find_substitution (templ))
3193         return;
3194     }
3195
3196   /* <template-param> encodes only the template parameter position,
3197      not its template arguments, which is fine here.  */
3198   write_template_param (parm);
3199   if (templ)
3200     add_substitution (templ);
3201 }
3202
3203 /* Non-terminal <substitution>.
3204
3205       <substitution> ::= S <seq-id> _
3206                      ::= S_  */
3207
3208 static void
3209 write_substitution (const int seq_id)
3210 {
3211   MANGLE_TRACE ("substitution", "");
3212
3213   write_char ('S');
3214   if (seq_id > 0)
3215     write_number (seq_id - 1, /*unsigned=*/1, 36);
3216   write_char ('_');
3217 }
3218
3219 /* Start mangling ENTITY.  */
3220
3221 static inline void
3222 start_mangling (const tree entity)
3223 {
3224   G.entity = entity;
3225   G.need_abi_warning = false;
3226   obstack_free (&name_obstack, name_base);
3227   mangle_obstack = &name_obstack;
3228   name_base = obstack_alloc (&name_obstack, 0);
3229 }
3230
3231 /* Done with mangling. If WARN is true, and the name of G.entity will
3232    be mangled differently in a future version of the ABI, issue a
3233    warning.  */
3234
3235 static void
3236 finish_mangling_internal (const bool warn)
3237 {
3238   if (warn_abi && warn && G.need_abi_warning)
3239     warning (OPT_Wabi, "the mangled name of %qD will change in a future "
3240              "version of GCC",
3241              G.entity);
3242
3243   /* Clear all the substitutions.  */
3244   VEC_truncate (tree, G.substitutions, 0);
3245
3246   /* Null-terminate the string.  */
3247   write_char ('\0');
3248 }
3249
3250
3251 /* Like finish_mangling_internal, but return the mangled string.  */
3252
3253 static inline const char *
3254 finish_mangling (const bool warn)
3255 {
3256   finish_mangling_internal (warn);
3257   return (const char *) obstack_finish (mangle_obstack);
3258 }
3259
3260 /* Like finish_mangling_internal, but return an identifier.  */
3261
3262 static tree
3263 finish_mangling_get_identifier (const bool warn)
3264 {
3265   finish_mangling_internal (warn);
3266   /* Don't obstack_finish here, and the next start_mangling will
3267      remove the identifier.  */
3268   return get_identifier ((const char *) obstack_base (mangle_obstack));
3269 }
3270
3271 /* Initialize data structures for mangling.  */
3272
3273 void
3274 init_mangle (void)
3275 {
3276   gcc_obstack_init (&name_obstack);
3277   name_base = obstack_alloc (&name_obstack, 0);
3278   G.substitutions = NULL;
3279
3280   /* Cache these identifiers for quick comparison when checking for
3281      standard substitutions.  */
3282   subst_identifiers[SUBID_ALLOCATOR] = get_identifier ("allocator");
3283   subst_identifiers[SUBID_BASIC_STRING] = get_identifier ("basic_string");
3284   subst_identifiers[SUBID_CHAR_TRAITS] = get_identifier ("char_traits");
3285   subst_identifiers[SUBID_BASIC_ISTREAM] = get_identifier ("basic_istream");
3286   subst_identifiers[SUBID_BASIC_OSTREAM] = get_identifier ("basic_ostream");
3287   subst_identifiers[SUBID_BASIC_IOSTREAM] = get_identifier ("basic_iostream");
3288 }
3289
3290 /* Generate the mangled name of DECL.  */
3291
3292 static tree
3293 mangle_decl_string (const tree decl)
3294 {
3295   tree result;
3296   location_t saved_loc = input_location;
3297   tree saved_fn = NULL_TREE;
3298   bool template_p = false;
3299
3300   /* We shouldn't be trying to mangle an uninstantiated template.  */
3301   gcc_assert (!type_dependent_expression_p (decl));
3302
3303   if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3304     {
3305       struct tinst_level *tl = current_instantiation ();
3306       if ((!tl || tl->decl != decl)
3307           && push_tinst_level (decl))
3308         {
3309           template_p = true;
3310           saved_fn = current_function_decl;
3311           current_function_decl = NULL_TREE;
3312         }
3313     }
3314   input_location = DECL_SOURCE_LOCATION (decl);
3315
3316   start_mangling (decl);
3317
3318   if (TREE_CODE (decl) == TYPE_DECL)
3319     write_type (TREE_TYPE (decl));
3320   else
3321     write_mangled_name (decl, true);
3322
3323   result = finish_mangling_get_identifier (/*warn=*/true);
3324   if (DEBUG_MANGLE)
3325     fprintf (stderr, "mangle_decl_string = '%s'\n\n",
3326              IDENTIFIER_POINTER (result));
3327
3328   if (template_p)
3329     {
3330       pop_tinst_level ();
3331       current_function_decl = saved_fn;
3332     }
3333   input_location = saved_loc;
3334
3335   return result;
3336 }
3337
3338 /* Return an identifier for the external mangled name of DECL.  */
3339
3340 static tree
3341 get_mangled_id (tree decl)
3342 {
3343   tree id = mangle_decl_string (decl);
3344   return targetm.mangle_decl_assembler_name (decl, id);
3345 }
3346
3347 /* Create an identifier for the external mangled name of DECL.  */
3348
3349 void
3350 mangle_decl (const tree decl)
3351 {
3352   tree id;
3353   bool dep;
3354
3355   /* Don't bother mangling uninstantiated templates.  */
3356   ++processing_template_decl;
3357   if (TREE_CODE (decl) == TYPE_DECL)
3358     dep = dependent_type_p (TREE_TYPE (decl));
3359   else
3360     dep = (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3361            && any_dependent_template_arguments_p (DECL_TI_ARGS (decl)));
3362   --processing_template_decl;
3363   if (dep)
3364     return;
3365
3366   id = get_mangled_id (decl);
3367   SET_DECL_ASSEMBLER_NAME (decl, id);
3368
3369   if (G.need_abi_warning
3370       /* Don't do this for a fake symbol we aren't going to emit anyway.  */
3371       && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
3372       && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
3373     {
3374 #ifdef ASM_OUTPUT_DEF
3375       /* If the mangling will change in the future, emit an alias with the
3376          future mangled name for forward-compatibility.  */
3377       int save_ver;
3378       tree id2, alias;
3379 #endif
3380
3381       SET_IDENTIFIER_GLOBAL_VALUE (id, decl);
3382       if (IDENTIFIER_GLOBAL_VALUE (id) != decl)
3383         inform (DECL_SOURCE_LOCATION (decl), "-fabi-version=6 (or =0) "
3384                 "avoids this error with a change in mangling");
3385
3386 #ifdef ASM_OUTPUT_DEF
3387       save_ver = flag_abi_version;
3388       flag_abi_version = 0;
3389       id2 = mangle_decl_string (decl);
3390       id2 = targetm.mangle_decl_assembler_name (decl, id2);
3391       flag_abi_version = save_ver;
3392
3393       alias = make_alias_for (decl, id2);
3394       DECL_IGNORED_P (alias) = 1;
3395       TREE_PUBLIC (alias) = TREE_PUBLIC (decl);
3396       DECL_VISIBILITY (alias) = DECL_VISIBILITY (decl);
3397       if (vague_linkage_p (decl))
3398         DECL_WEAK (alias) = 1;
3399       if (TREE_CODE (decl) == FUNCTION_DECL)
3400         cgraph_same_body_alias (cgraph_get_create_node (decl), alias, decl);
3401       else
3402         varpool_extra_name_alias (alias, decl);
3403 #endif
3404     }
3405 }
3406
3407 /* Generate the mangled representation of TYPE.  */
3408
3409 const char *
3410 mangle_type_string (const tree type)
3411 {
3412   const char *result;
3413
3414   start_mangling (type);
3415   write_type (type);
3416   result = finish_mangling (/*warn=*/false);
3417   if (DEBUG_MANGLE)
3418     fprintf (stderr, "mangle_type_string = '%s'\n\n", result);
3419   return result;
3420 }
3421
3422 /* Create an identifier for the mangled name of a special component
3423    for belonging to TYPE.  CODE is the ABI-specified code for this
3424    component.  */
3425
3426 static tree
3427 mangle_special_for_type (const tree type, const char *code)
3428 {
3429   tree result;
3430
3431   /* We don't have an actual decl here for the special component, so
3432      we can't just process the <encoded-name>.  Instead, fake it.  */
3433   start_mangling (type);
3434
3435   /* Start the mangling.  */
3436   write_string ("_Z");
3437   write_string (code);
3438
3439   /* Add the type.  */
3440   write_type (type);
3441   result = finish_mangling_get_identifier (/*warn=*/false);
3442
3443   if (DEBUG_MANGLE)
3444     fprintf (stderr, "mangle_special_for_type = %s\n\n",
3445              IDENTIFIER_POINTER (result));
3446
3447   return result;
3448 }
3449
3450 /* Create an identifier for the mangled representation of the typeinfo
3451    structure for TYPE.  */
3452
3453 tree
3454 mangle_typeinfo_for_type (const tree type)
3455 {
3456   return mangle_special_for_type (type, "TI");
3457 }
3458
3459 /* Create an identifier for the mangled name of the NTBS containing
3460    the mangled name of TYPE.  */
3461
3462 tree
3463 mangle_typeinfo_string_for_type (const tree type)
3464 {
3465   return mangle_special_for_type (type, "TS");
3466 }
3467
3468 /* Create an identifier for the mangled name of the vtable for TYPE.  */
3469
3470 tree
3471 mangle_vtbl_for_type (const tree type)
3472 {
3473   return mangle_special_for_type (type, "TV");
3474 }
3475
3476 /* Returns an identifier for the mangled name of the VTT for TYPE.  */
3477
3478 tree
3479 mangle_vtt_for_type (const tree type)
3480 {
3481   return mangle_special_for_type (type, "TT");
3482 }
3483
3484 /* Return an identifier for a construction vtable group.  TYPE is
3485    the most derived class in the hierarchy; BINFO is the base
3486    subobject for which this construction vtable group will be used.
3487
3488    This mangling isn't part of the ABI specification; in the ABI
3489    specification, the vtable group is dumped in the same COMDAT as the
3490    main vtable, and is referenced only from that vtable, so it doesn't
3491    need an external name.  For binary formats without COMDAT sections,
3492    though, we need external names for the vtable groups.
3493
3494    We use the production
3495
3496     <special-name> ::= CT <type> <offset number> _ <base type>  */
3497
3498 tree
3499 mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
3500 {
3501   tree result;
3502
3503   start_mangling (type);
3504
3505   write_string ("_Z");
3506   write_string ("TC");
3507   write_type (type);
3508   write_integer_cst (BINFO_OFFSET (binfo));
3509   write_char ('_');
3510   write_type (BINFO_TYPE (binfo));
3511
3512   result = finish_mangling_get_identifier (/*warn=*/false);
3513   if (DEBUG_MANGLE)
3514     fprintf (stderr, "mangle_ctor_vtbl_for_type = %s\n\n",
3515              IDENTIFIER_POINTER (result));
3516   return result;
3517 }
3518
3519 /* Mangle a this pointer or result pointer adjustment.
3520
3521    <call-offset> ::= h <fixed offset number> _
3522                  ::= v <fixed offset number> _ <virtual offset number> _ */
3523
3524 static void
3525 mangle_call_offset (const tree fixed_offset, const tree virtual_offset)
3526 {
3527   write_char (virtual_offset ? 'v' : 'h');
3528
3529   /* For either flavor, write the fixed offset.  */
3530   write_integer_cst (fixed_offset);
3531   write_char ('_');
3532
3533   /* For a virtual thunk, add the virtual offset.  */
3534   if (virtual_offset)
3535     {
3536       write_integer_cst (virtual_offset);
3537       write_char ('_');
3538     }
3539 }
3540
3541 /* Return an identifier for the mangled name of a this-adjusting or
3542    covariant thunk to FN_DECL.  FIXED_OFFSET is the initial adjustment
3543    to this used to find the vptr.  If VIRTUAL_OFFSET is non-NULL, this
3544    is a virtual thunk, and it is the vtbl offset in
3545    bytes. THIS_ADJUSTING is nonzero for a this adjusting thunk and
3546    zero for a covariant thunk. Note, that FN_DECL might be a covariant
3547    thunk itself. A covariant thunk name always includes the adjustment
3548    for the this pointer, even if there is none.
3549
3550    <special-name> ::= T <call-offset> <base encoding>
3551                   ::= Tc <this_adjust call-offset> <result_adjust call-offset>
3552                                         <base encoding>  */
3553
3554 tree
3555 mangle_thunk (tree fn_decl, const int this_adjusting, tree fixed_offset,
3556               tree virtual_offset)
3557 {
3558   tree result;
3559
3560   start_mangling (fn_decl);
3561
3562   write_string ("_Z");
3563   write_char ('T');
3564
3565   if (!this_adjusting)
3566     {
3567       /* Covariant thunk with no this adjustment */
3568       write_char ('c');
3569       mangle_call_offset (integer_zero_node, NULL_TREE);
3570       mangle_call_offset (fixed_offset, virtual_offset);
3571     }
3572   else if (!DECL_THUNK_P (fn_decl))
3573     /* Plain this adjusting thunk.  */
3574     mangle_call_offset (fixed_offset, virtual_offset);
3575   else
3576     {
3577       /* This adjusting thunk to covariant thunk.  */
3578       write_char ('c');
3579       mangle_call_offset (fixed_offset, virtual_offset);
3580       fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn_decl));
3581       virtual_offset = THUNK_VIRTUAL_OFFSET (fn_decl);
3582       if (virtual_offset)
3583         virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
3584       mangle_call_offset (fixed_offset, virtual_offset);
3585       fn_decl = THUNK_TARGET (fn_decl);
3586     }
3587
3588   /* Scoped name.  */
3589   write_encoding (fn_decl);
3590
3591   result = finish_mangling_get_identifier (/*warn=*/false);
3592   if (DEBUG_MANGLE)
3593     fprintf (stderr, "mangle_thunk = %s\n\n", IDENTIFIER_POINTER (result));
3594   return result;
3595 }
3596
3597 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
3598    operator to TYPE.  The nodes are IDENTIFIERs whose TREE_TYPE is the
3599    TYPE.  */
3600
3601 static GTY ((param_is (union tree_node))) htab_t conv_type_names;
3602
3603 /* Hash a node (VAL1) in the table.  */
3604
3605 static hashval_t
3606 hash_type (const void *val)
3607 {
3608   return (hashval_t) TYPE_UID (TREE_TYPE ((const_tree) val));
3609 }
3610
3611 /* Compare VAL1 (a node in the table) with VAL2 (a TYPE).  */
3612
3613 static int
3614 compare_type (const void *val1, const void *val2)
3615 {
3616   return TREE_TYPE ((const_tree) val1) == (const_tree) val2;
3617 }
3618
3619 /* Return an identifier for the mangled unqualified name for a
3620    conversion operator to TYPE.  This mangling is not specified by the
3621    ABI spec; it is only used internally.  */
3622
3623 tree
3624 mangle_conv_op_name_for_type (const tree type)
3625 {
3626   void **slot;
3627   tree identifier;
3628
3629   if (type == error_mark_node)
3630     return error_mark_node;
3631
3632   if (conv_type_names == NULL)
3633     conv_type_names = htab_create_ggc (31, &hash_type, &compare_type, NULL);
3634
3635   slot = htab_find_slot_with_hash (conv_type_names, type,
3636                                    (hashval_t) TYPE_UID (type), INSERT);
3637   identifier = (tree)*slot;
3638   if (!identifier)
3639     {
3640       char buffer[64];
3641
3642        /* Create a unique name corresponding to TYPE.  */
3643       sprintf (buffer, "operator %lu",
3644                (unsigned long) htab_elements (conv_type_names));
3645       identifier = get_identifier (buffer);
3646       *slot = identifier;
3647
3648       /* Hang TYPE off the identifier so it can be found easily later
3649          when performing conversions.  */
3650       TREE_TYPE (identifier) = type;
3651
3652       /* Set bits on the identifier so we know later it's a conversion.  */
3653       IDENTIFIER_OPNAME_P (identifier) = 1;
3654       IDENTIFIER_TYPENAME_P (identifier) = 1;
3655     }
3656
3657   return identifier;
3658 }
3659
3660 /* Return an identifier for the name of an initialization guard
3661    variable for indicated VARIABLE.  */
3662
3663 tree
3664 mangle_guard_variable (const tree variable)
3665 {
3666   start_mangling (variable);
3667   write_string ("_ZGV");
3668   if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
3669     /* The name of a guard variable for a reference temporary should refer
3670        to the reference, not the temporary.  */
3671     write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
3672   else
3673     write_name (variable, /*ignore_local_scope=*/0);
3674   return finish_mangling_get_identifier (/*warn=*/false);
3675 }
3676
3677 /* Return an identifier for the name of a temporary variable used to
3678    initialize a static reference.  This isn't part of the ABI, but we might
3679    as well call them something readable.  */
3680
3681 static GTY(()) int temp_count;
3682
3683 tree
3684 mangle_ref_init_variable (const tree variable)
3685 {
3686   start_mangling (variable);
3687   write_string ("_ZGR");
3688   write_name (variable, /*ignore_local_scope=*/0);
3689   /* Avoid name clashes with aggregate initialization of multiple
3690      references at once.  */
3691   write_unsigned_number (temp_count++);
3692   return finish_mangling_get_identifier (/*warn=*/false);
3693 }
3694 \f
3695
3696 /* Foreign language type mangling section.  */
3697
3698 /* How to write the type codes for the integer Java type.  */
3699
3700 static void
3701 write_java_integer_type_codes (const tree type)
3702 {
3703   if (type == java_int_type_node)
3704     write_char ('i');
3705   else if (type == java_short_type_node)
3706     write_char ('s');
3707   else if (type == java_byte_type_node)
3708     write_char ('c');
3709   else if (type == java_char_type_node)
3710     write_char ('w');
3711   else if (type == java_long_type_node)
3712     write_char ('x');
3713   else if (type == java_boolean_type_node)
3714     write_char ('b');
3715   else
3716     gcc_unreachable ();
3717 }
3718
3719 #include "gt-cp-mangle.h"