OSDN Git Service

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