2008-11-19 Andrew Stubbs <ams@codesourcery.com>
[official-gcc.git] / gcc / cp / mangle.c
blobc0282d8ade51bd7cb02ffaad93767be24af02baf
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>
6 This file is part of GCC.
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.
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.
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/>. */
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.
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.
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:
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 */
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"
62 /* Debugging support. */
64 /* Define DEBUG_MANGLE to enable very verbose trace messages. */
65 #ifndef DEBUG_MANGLE
66 #define DEBUG_MANGLE 0
67 #endif
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
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))))))
92 /* Things we only need one of. This module is not reentrant. */
93 typedef struct globals GTY(())
95 /* An array of the current substitution candidates, in the order
96 we've seen them. */
97 VEC(tree,gc) *substitutions;
99 /* The entity that is being mangled. */
100 tree GTY ((skip)) entity;
102 /* True if the mangling will be different in a future version of the
103 ABI. */
104 bool need_abi_warning;
105 } globals;
107 static GTY (()) globals G;
109 /* The obstack on which we build mangled names. */
110 static struct obstack *mangle_obstack;
112 /* The obstack on which we build mangled names that are not going to
113 be IDENTIFIER_NODEs. */
114 static struct obstack name_obstack;
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;
120 /* Indices into subst_identifiers. These are identifiers used in
121 special substitution rules. */
122 typedef enum
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
132 substitution_identifier_index_t;
134 /* For quick substitution checks, look up these common identifiers
135 once only. */
136 static GTY(()) tree subst_identifiers[SUBID_MAX];
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] =
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 */
156 static int decl_is_template_id (const tree, tree* const);
158 /* Functions for handling substitutions. */
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);
169 /* Functions for emitting mangled representations of things. */
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);
215 /* Control functions. */
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 *);
221 /* Foreign language functions. */
223 static void write_java_integer_type_codes (const tree);
225 /* Append a single character to the end of the mangled
226 representation. */
227 #define write_char(CHAR) \
228 obstack_1grow (mangle_obstack, (CHAR))
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))
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))
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))
251 /* Write out an unsigned quantity in base 10. */
252 #define write_unsigned_number(NUMBER) \
253 write_number ((NUMBER), /*unsigned_p=*/1, 10)
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. */
259 static int
260 decl_is_template_id (const tree decl, tree* const template_info)
262 if (TREE_CODE (decl) == TYPE_DECL)
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);
268 if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_ID_P (type))
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;
277 else
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)
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;
293 /* It's not a template id. */
294 return 0;
297 /* Produce debugging output of current substitution candidates. */
299 static void
300 dump_substitution_candidates (void)
302 unsigned i;
303 tree el;
305 fprintf (stderr, " ++ substitutions ");
306 for (i = 0; VEC_iterate (tree, G.substitutions, i, el); ++i)
308 const char *name = "???";
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);
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. */
336 static inline tree
337 canonicalize_for_substitution (tree node)
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);
345 return node;
348 /* Add NODE as a substitution candidate. NODE must not already be on
349 the list of candidates. */
351 static void
352 add_substitution (tree node)
354 tree c;
356 if (DEBUG_MANGLE)
357 fprintf (stderr, " ++ add_substitution (%s at %10p)\n",
358 tree_code_name[TREE_CODE (node)], (void *) node);
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;
367 #if ENABLE_CHECKING
368 /* Make sure NODE isn't already a candidate. */
370 int i;
371 tree candidate;
373 for (i = 0; VEC_iterate (tree, G.substitutions, i, candidate); i++)
375 gcc_assert (!(DECL_P (node) && node == candidate));
376 gcc_assert (!(TYPE_P (node) && TYPE_P (candidate)
377 && same_type_p (node, candidate)));
380 #endif /* ENABLE_CHECKING */
382 /* Put the decl onto the varray of substitution candidates. */
383 VEC_safe_push (tree, gc, G.substitutions, node);
385 if (DEBUG_MANGLE)
386 dump_substitution_candidates ();
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. */
393 static inline int
394 is_std_substitution (const tree node,
395 const substitution_identifier_index_t index)
397 tree type = NULL;
398 tree decl = NULL;
400 if (DECL_P (node))
402 type = TREE_TYPE (node);
403 decl = node;
405 else if (CLASS_TYPE_P (node))
407 type = node;
408 decl = TYPE_NAME (node);
410 else
411 /* These are not the droids you're looking for. */
412 return 0;
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]));
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]. */
426 static inline int
427 is_std_substitution_char (const tree node,
428 const substitution_identifier_index_t index)
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;
448 /* Check whether a substitution should be used to represent NODE in
449 the mangling.
451 First, check standard special-case substitutions.
453 <substitution> ::= St
454 # ::std
456 ::= Sa
457 # ::std::allocator
459 ::= Sb
460 # ::std::basic_string
462 ::= Ss
463 # ::std::basic_string<char,
464 ::std::char_traits<char>,
465 ::std::allocator<char> >
467 ::= Si
468 # ::std::basic_istream<char, ::std::char_traits<char> >
470 ::= So
471 # ::std::basic_ostream<char, ::std::char_traits<char> >
473 ::= Sd
474 # ::std::basic_iostream<char, ::std::char_traits<char> >
476 Then examine the stack of currently available substitution
477 candidates for entities appearing earlier in the same mangling
479 If a substitution is found, write its mangled representation and
480 return nonzero. If none is found, just return zero. */
482 static int
483 find_substitution (tree node)
485 int i;
486 const int size = VEC_length (tree, G.substitutions);
487 tree decl;
488 tree type;
490 if (DEBUG_MANGLE)
491 fprintf (stderr, " ++ find_substitution (%s at %p)\n",
492 tree_code_name[TREE_CODE (node)], (void *) node);
494 /* Obtain the canonicalized substitution representation for NODE.
495 This is what we'll compare against. */
496 node = canonicalize_for_substitution (node);
498 /* Check for builtin substitutions. */
500 decl = TYPE_P (node) ? TYPE_NAME (node) : node;
501 type = TYPE_P (node) ? node : TREE_TYPE (node);
503 /* Check for std::allocator. */
504 if (decl
505 && is_std_substitution (decl, SUBID_ALLOCATOR)
506 && !CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)))
508 write_string ("Sa");
509 return 1;
512 /* Check for std::basic_string. */
513 if (decl && is_std_substitution (decl, SUBID_BASIC_STRING))
515 if (TYPE_P (node))
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))
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))
533 write_string ("Ss");
534 return 1;
538 else
539 /* Substitute for the template name only if this isn't a type. */
541 write_string ("Sb");
542 return 1;
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)
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))
562 /* Got them. Is this basic_istream? */
563 if (is_std_substitution (decl, SUBID_BASIC_ISTREAM))
565 write_string ("Si");
566 return 1;
568 /* Or basic_ostream? */
569 else if (is_std_substitution (decl, SUBID_BASIC_OSTREAM))
571 write_string ("So");
572 return 1;
574 /* Or basic_iostream? */
575 else if (is_std_substitution (decl, SUBID_BASIC_IOSTREAM))
577 write_string ("Sd");
578 return 1;
583 /* Check for namespace std. */
584 if (decl && DECL_NAMESPACE_STD_P (decl))
586 write_string ("St");
587 return 1;
590 /* Now check the list of available substitutions for this mangling
591 operation. */
592 for (i = 0; i < size; ++i)
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))
602 write_substitution (i);
603 return 1;
607 /* No substitution found. */
608 return 0;
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.
616 <mangled-name> ::= _Z <encoding> */
618 static void
619 write_mangled_name (const tree decl, bool top_level)
621 MANGLE_TRACE_TREE ("mangled-name", decl);
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))
628 unmangled_name:;
630 if (top_level)
631 write_string (IDENTIFIER_POINTER (DECL_NAME (decl)));
632 else
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));
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)))
653 if (top_level || abi_version_at_least (2))
654 goto unmangled_name;
655 else
657 G.need_abi_warning = true;
658 goto mangled_name;
661 else
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* ");
676 /* <encoding> ::= <function name> <bare-function-type>
677 ::= <data name> */
679 static void
680 write_encoding (const tree decl)
682 MANGLE_TRACE_TREE ("encoding", decl);
684 if (DECL_LANG_SPECIFIC (decl) && DECL_EXTERN_C_FUNCTION_P (decl))
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;
695 write_name (decl, /*ignore_local_scope=*/0);
696 if (TREE_CODE (decl) == FUNCTION_DECL)
698 tree fn_type;
699 tree d;
701 if (decl_is_template_id (decl, NULL))
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;
710 else
712 fn_type = TREE_TYPE (decl);
713 d = decl;
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)),
725 /* <name> ::= <unscoped-name>
726 ::= <unscoped-template-name> <template-args>
727 ::= <nested-name>
728 ::= <local-name>
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. */
736 static void
737 write_name (tree decl, const int ignore_local_scope)
739 tree context;
741 MANGLE_TRACE_TREE ("name", decl);
743 if (TREE_CODE (decl) == TYPE_DECL)
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)));
750 else
751 context = (DECL_CONTEXT (decl) == NULL) ? NULL : CP_DECL_CONTEXT (decl);
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))
763 tree template_info;
764 /* Is this a template instance? */
765 if (decl_is_template_id (decl, &template_info))
767 /* Yes: use <unscoped-template-name>. */
768 write_unscoped_template_name (TI_TEMPLATE (template_info));
769 write_template_args (TI_ARGS (template_info));
771 else
772 /* Everything else gets an <unqualified-name>. */
773 write_unscoped_name (decl);
775 else
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)
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)
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)
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;
802 /* Up one scope level. */
803 local_entity = context;
804 context = CP_DECL_CONTEXT (context);
807 /* No local scope found? Fall through to <nested-name>. */
810 /* Other decls get a <nested-name> to encode their scope. */
811 write_nested_name (decl);
815 /* <unscoped-name> ::= <unqualified-name>
816 ::= St <unqualified-name> # ::std:: */
818 static void
819 write_unscoped_name (const tree decl)
821 tree context = CP_DECL_CONTEXT (decl);
823 MANGLE_TRACE_TREE ("unscoped-name", decl);
825 /* Is DECL in ::std? */
826 if (DECL_NAMESPACE_STD_P (context))
828 write_string ("St");
829 write_unqualified_name (decl);
831 else
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);
839 write_unqualified_name (decl);
843 /* <unscoped-template-name> ::= <unscoped-name>
844 ::= <substitution> */
846 static void
847 write_unscoped_template_name (const tree decl)
849 MANGLE_TRACE_TREE ("unscoped-template-name", decl);
851 if (find_substitution (decl))
852 return;
853 write_unscoped_name (decl);
854 add_substitution (decl);
857 /* Write the nested name, including CV-qualifiers, of DECL.
859 <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
860 ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
862 <CV-qualifiers> ::= [r] [V] [K] */
864 static void
865 write_nested_name (const tree decl)
867 tree template_info;
869 MANGLE_TRACE_TREE ("nested-name", decl);
871 write_char ('N');
873 /* Write CV-qualifiers, if this is a member function. */
874 if (TREE_CODE (decl) == FUNCTION_DECL
875 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
877 if (DECL_VOLATILE_MEMFUNC_P (decl))
878 write_char ('V');
879 if (DECL_CONST_MEMFUNC_P (decl))
880 write_char ('K');
883 /* Is this a template instance? */
884 if (decl_is_template_id (decl, &template_info))
886 /* Yes, use <template-prefix>. */
887 write_template_prefix (decl);
888 write_template_args (TI_ARGS (template_info));
890 else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
892 tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
893 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
895 write_template_prefix (decl);
896 write_template_args (TREE_OPERAND (name, 1));
898 else
900 write_prefix (CP_DECL_CONTEXT (decl));
901 write_unqualified_name (decl);
904 else
906 /* No, just use <prefix> */
907 write_prefix (DECL_CONTEXT (decl));
908 write_unqualified_name (decl);
910 write_char ('E');
913 /* <prefix> ::= <prefix> <unqualified-name>
914 ::= <template-param>
915 ::= <template-prefix> <template-args>
916 ::= # empty
917 ::= <substitution> */
919 static void
920 write_prefix (const tree node)
922 tree decl;
923 /* Non-NULL if NODE represents a template-id. */
924 tree template_info = NULL;
926 MANGLE_TRACE_TREE ("prefix", node);
928 if (node == NULL
929 || node == global_namespace)
930 return;
932 if (find_substitution (node))
933 return;
935 if (DECL_P (node))
937 /* If this is a function decl, that means we've hit function
938 scope, so this prefix must be for a local name. In this
939 case, we're under the <local-name> production, which encodes
940 the enclosing function scope elsewhere. So don't continue
941 here. */
942 if (TREE_CODE (node) == FUNCTION_DECL)
943 return;
945 decl = node;
946 decl_is_template_id (decl, &template_info);
948 else
950 /* Node is a type. */
951 decl = TYPE_NAME (node);
952 if (CLASSTYPE_TEMPLATE_ID_P (node))
953 template_info = TYPE_TEMPLATE_INFO (node);
956 /* In G++ 3.2, the name of the template parameter was used. */
957 if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
958 && !abi_version_at_least (2))
959 G.need_abi_warning = true;
961 if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
962 && abi_version_at_least (2))
963 write_template_param (node);
964 else if (template_info != NULL)
965 /* Templated. */
967 write_template_prefix (decl);
968 write_template_args (TI_ARGS (template_info));
970 else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
972 tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
973 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
975 write_template_prefix (decl);
976 write_template_args (TREE_OPERAND (name, 1));
978 else
980 write_prefix (CP_DECL_CONTEXT (decl));
981 write_unqualified_name (decl);
984 else
985 /* Not templated. */
987 write_prefix (CP_DECL_CONTEXT (decl));
988 write_unqualified_name (decl);
991 add_substitution (node);
994 /* <template-prefix> ::= <prefix> <template component>
995 ::= <template-param>
996 ::= <substitution> */
998 static void
999 write_template_prefix (const tree node)
1001 tree decl = DECL_P (node) ? node : TYPE_NAME (node);
1002 tree type = DECL_P (node) ? TREE_TYPE (node) : node;
1003 tree context = CP_DECL_CONTEXT (decl);
1004 tree template_info;
1005 tree templ;
1006 tree substitution;
1008 MANGLE_TRACE_TREE ("template-prefix", node);
1010 /* Find the template decl. */
1011 if (decl_is_template_id (decl, &template_info))
1012 templ = TI_TEMPLATE (template_info);
1013 else if (TREE_CODE (type) == TYPENAME_TYPE)
1014 /* For a typename type, all we have is the name. */
1015 templ = DECL_NAME (decl);
1016 else
1018 gcc_assert (CLASSTYPE_TEMPLATE_ID_P (type));
1020 templ = TYPE_TI_TEMPLATE (type);
1023 /* For a member template, though, the template name for the
1024 innermost name must have all the outer template levels
1025 instantiated. For instance, consider
1027 template<typename T> struct Outer {
1028 template<typename U> struct Inner {};
1031 The template name for `Inner' in `Outer<int>::Inner<float>' is
1032 `Outer<int>::Inner<U>'. In g++, we don't instantiate the template
1033 levels separately, so there's no TEMPLATE_DECL available for this
1034 (there's only `Outer<T>::Inner<U>').
1036 In order to get the substitutions right, we create a special
1037 TREE_LIST to represent the substitution candidate for a nested
1038 template. The TREE_PURPOSE is the template's context, fully
1039 instantiated, and the TREE_VALUE is the TEMPLATE_DECL for the inner
1040 template.
1042 So, for the example above, `Outer<int>::Inner' is represented as a
1043 substitution candidate by a TREE_LIST whose purpose is `Outer<int>'
1044 and whose value is `Outer<T>::Inner<U>'. */
1045 if (TYPE_P (context))
1046 substitution = build_tree_list (context, templ);
1047 else
1048 substitution = templ;
1050 if (find_substitution (substitution))
1051 return;
1053 /* In G++ 3.2, the name of the template template parameter was used. */
1054 if (TREE_TYPE (templ)
1055 && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM
1056 && !abi_version_at_least (2))
1057 G.need_abi_warning = true;
1059 if (TREE_TYPE (templ)
1060 && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM
1061 && abi_version_at_least (2))
1062 write_template_param (TREE_TYPE (templ));
1063 else
1065 write_prefix (context);
1066 write_unqualified_name (decl);
1069 add_substitution (substitution);
1072 /* We don't need to handle thunks, vtables, or VTTs here. Those are
1073 mangled through special entry points.
1075 <unqualified-name> ::= <operator-name>
1076 ::= <special-name>
1077 ::= <source-name>
1078 ::= <local-source-name>
1080 <local-source-name> ::= L <source-name> <discriminator> */
1082 static void
1083 write_unqualified_name (const tree decl)
1085 MANGLE_TRACE_TREE ("unqualified-name", decl);
1087 if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_CONSTRUCTOR_P (decl))
1088 write_special_name_constructor (decl);
1089 else if (DECL_LANG_SPECIFIC (decl) != NULL && DECL_DESTRUCTOR_P (decl))
1090 write_special_name_destructor (decl);
1091 else if (DECL_NAME (decl) == NULL_TREE)
1093 gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
1094 write_source_name (DECL_ASSEMBLER_NAME (decl));
1096 else if (DECL_CONV_FN_P (decl))
1098 /* Conversion operator. Handle it right here.
1099 <operator> ::= cv <type> */
1100 tree type;
1101 if (decl_is_template_id (decl, NULL))
1103 tree fn_type;
1104 fn_type = get_mostly_instantiated_function_type (decl);
1105 type = TREE_TYPE (fn_type);
1107 else
1108 type = DECL_CONV_FN_TYPE (decl);
1109 write_conversion_operator_name (type);
1111 else if (DECL_OVERLOADED_OPERATOR_P (decl))
1113 operator_name_info_t *oni;
1114 if (DECL_ASSIGNMENT_OPERATOR_P (decl))
1115 oni = assignment_operator_name_info;
1116 else
1117 oni = operator_name_info;
1119 write_string (oni[DECL_OVERLOADED_OPERATOR_P (decl)].mangled_name);
1121 else if (VAR_OR_FUNCTION_DECL_P (decl) && ! TREE_PUBLIC (decl)
1122 && DECL_NAMESPACE_SCOPE_P (decl)
1123 && decl_linkage (decl) == lk_internal)
1125 MANGLE_TRACE_TREE ("local-source-name", decl);
1126 write_char ('L');
1127 write_source_name (DECL_NAME (decl));
1128 /* The default discriminator is 1, and that's all we ever use,
1129 so there's no code to output one here. */
1131 else
1132 write_source_name (DECL_NAME (decl));
1135 /* Write the unqualified-name for a conversion operator to TYPE. */
1137 static void
1138 write_conversion_operator_name (const tree type)
1140 write_string ("cv");
1141 write_type (type);
1144 /* Non-terminal <source-name>. IDENTIFIER is an IDENTIFIER_NODE.
1146 <source-name> ::= </length/ number> <identifier> */
1148 static void
1149 write_source_name (tree identifier)
1151 MANGLE_TRACE_TREE ("source-name", identifier);
1153 /* Never write the whole template-id name including the template
1154 arguments; we only want the template name. */
1155 if (IDENTIFIER_TEMPLATE (identifier))
1156 identifier = IDENTIFIER_TEMPLATE (identifier);
1158 write_unsigned_number (IDENTIFIER_LENGTH (identifier));
1159 write_identifier (IDENTIFIER_POINTER (identifier));
1162 /* Convert NUMBER to ascii using base BASE and generating at least
1163 MIN_DIGITS characters. BUFFER points to the _end_ of the buffer
1164 into which to store the characters. Returns the number of
1165 characters generated (these will be layed out in advance of where
1166 BUFFER points). */
1168 static int
1169 hwint_to_ascii (unsigned HOST_WIDE_INT number, const unsigned int base,
1170 char *buffer, const unsigned int min_digits)
1172 static const char base_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1173 unsigned digits = 0;
1175 while (number)
1177 unsigned HOST_WIDE_INT d = number / base;
1179 *--buffer = base_digits[number - d * base];
1180 digits++;
1181 number = d;
1183 while (digits < min_digits)
1185 *--buffer = base_digits[0];
1186 digits++;
1188 return digits;
1191 /* Non-terminal <number>.
1193 <number> ::= [n] </decimal integer/> */
1195 static void
1196 write_number (unsigned HOST_WIDE_INT number, const int unsigned_p,
1197 const unsigned int base)
1199 char buffer[sizeof (HOST_WIDE_INT) * 8];
1200 unsigned count = 0;
1202 if (!unsigned_p && (HOST_WIDE_INT) number < 0)
1204 write_char ('n');
1205 number = -((HOST_WIDE_INT) number);
1207 count = hwint_to_ascii (number, base, buffer + sizeof (buffer), 1);
1208 write_chars (buffer + sizeof (buffer) - count, count);
1211 /* Write out an integral CST in decimal. Most numbers are small, and
1212 representable in a HOST_WIDE_INT. Occasionally we'll have numbers
1213 bigger than that, which we must deal with. */
1215 static inline void
1216 write_integer_cst (const tree cst)
1218 int sign = tree_int_cst_sgn (cst);
1220 if (TREE_INT_CST_HIGH (cst) + (sign < 0))
1222 /* A bignum. We do this in chunks, each of which fits in a
1223 HOST_WIDE_INT. */
1224 char buffer[sizeof (HOST_WIDE_INT) * 8 * 2];
1225 unsigned HOST_WIDE_INT chunk;
1226 unsigned chunk_digits;
1227 char *ptr = buffer + sizeof (buffer);
1228 unsigned count = 0;
1229 tree n, base, type;
1230 int done;
1232 /* HOST_WIDE_INT must be at least 32 bits, so 10^9 is
1233 representable. */
1234 chunk = 1000000000;
1235 chunk_digits = 9;
1237 if (sizeof (HOST_WIDE_INT) >= 8)
1239 /* It is at least 64 bits, so 10^18 is representable. */
1240 chunk_digits = 18;
1241 chunk *= chunk;
1244 type = c_common_signed_or_unsigned_type (1, TREE_TYPE (cst));
1245 base = build_int_cstu (type, chunk);
1246 n = build_int_cst_wide (type,
1247 TREE_INT_CST_LOW (cst), TREE_INT_CST_HIGH (cst));
1249 if (sign < 0)
1251 write_char ('n');
1252 n = fold_build1 (NEGATE_EXPR, type, n);
1256 tree d = fold_build2 (FLOOR_DIV_EXPR, type, n, base);
1257 tree tmp = fold_build2 (MULT_EXPR, type, d, base);
1258 unsigned c;
1260 done = integer_zerop (d);
1261 tmp = fold_build2 (MINUS_EXPR, type, n, tmp);
1262 c = hwint_to_ascii (TREE_INT_CST_LOW (tmp), 10, ptr,
1263 done ? 1 : chunk_digits);
1264 ptr -= c;
1265 count += c;
1266 n = d;
1268 while (!done);
1269 write_chars (ptr, count);
1271 else
1273 /* A small num. */
1274 unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (cst);
1276 if (sign < 0)
1278 write_char ('n');
1279 low = -low;
1281 write_unsigned_number (low);
1285 /* Write out a floating-point literal.
1287 "Floating-point literals are encoded using the bit pattern of the
1288 target processor's internal representation of that number, as a
1289 fixed-length lowercase hexadecimal string, high-order bytes first
1290 (even if the target processor would store low-order bytes first).
1291 The "n" prefix is not used for floating-point literals; the sign
1292 bit is encoded with the rest of the number.
1294 Here are some examples, assuming the IEEE standard representation
1295 for floating point numbers. (Spaces are for readability, not
1296 part of the encoding.)
1298 1.0f Lf 3f80 0000 E
1299 -1.0f Lf bf80 0000 E
1300 1.17549435e-38f Lf 0080 0000 E
1301 1.40129846e-45f Lf 0000 0001 E
1302 0.0f Lf 0000 0000 E"
1304 Caller is responsible for the Lx and the E. */
1305 static void
1306 write_real_cst (const tree value)
1308 if (abi_version_at_least (2))
1310 long target_real[4]; /* largest supported float */
1311 char buffer[9]; /* eight hex digits in a 32-bit number */
1312 int i, limit, dir;
1314 tree type = TREE_TYPE (value);
1315 int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32;
1317 real_to_target (target_real, &TREE_REAL_CST (value),
1318 TYPE_MODE (type));
1320 /* The value in target_real is in the target word order,
1321 so we must write it out backward if that happens to be
1322 little-endian. write_number cannot be used, it will
1323 produce uppercase. */
1324 if (FLOAT_WORDS_BIG_ENDIAN)
1325 i = 0, limit = words, dir = 1;
1326 else
1327 i = words - 1, limit = -1, dir = -1;
1329 for (; i != limit; i += dir)
1331 sprintf (buffer, "%08lx", (unsigned long) target_real[i]);
1332 write_chars (buffer, 8);
1335 else
1337 /* In G++ 3.3 and before the REAL_VALUE_TYPE was written out
1338 literally. Note that compatibility with 3.2 is impossible,
1339 because the old floating-point emulator used a different
1340 format for REAL_VALUE_TYPE. */
1341 size_t i;
1342 for (i = 0; i < sizeof (TREE_REAL_CST (value)); ++i)
1343 write_number (((unsigned char *) &TREE_REAL_CST (value))[i],
1344 /*unsigned_p*/ 1,
1345 /*base*/ 16);
1346 G.need_abi_warning = 1;
1350 /* Non-terminal <identifier>.
1352 <identifier> ::= </unqualified source code identifier> */
1354 static void
1355 write_identifier (const char *identifier)
1357 MANGLE_TRACE ("identifier", identifier);
1358 write_string (identifier);
1361 /* Handle constructor productions of non-terminal <special-name>.
1362 CTOR is a constructor FUNCTION_DECL.
1364 <special-name> ::= C1 # complete object constructor
1365 ::= C2 # base object constructor
1366 ::= C3 # complete object allocating constructor
1368 Currently, allocating constructors are never used.
1370 We also need to provide mangled names for the maybe-in-charge
1371 constructor, so we treat it here too. mangle_decl_string will
1372 append *INTERNAL* to that, to make sure we never emit it. */
1374 static void
1375 write_special_name_constructor (const tree ctor)
1377 if (DECL_BASE_CONSTRUCTOR_P (ctor))
1378 write_string ("C2");
1379 else
1381 gcc_assert (DECL_COMPLETE_CONSTRUCTOR_P (ctor)
1382 /* Even though we don't ever emit a definition of
1383 the old-style destructor, we still have to
1384 consider entities (like static variables) nested
1385 inside it. */
1386 || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (ctor));
1387 write_string ("C1");
1391 /* Handle destructor productions of non-terminal <special-name>.
1392 DTOR is a destructor FUNCTION_DECL.
1394 <special-name> ::= D0 # deleting (in-charge) destructor
1395 ::= D1 # complete object (in-charge) destructor
1396 ::= D2 # base object (not-in-charge) destructor
1398 We also need to provide mangled names for the maybe-incharge
1399 destructor, so we treat it here too. mangle_decl_string will
1400 append *INTERNAL* to that, to make sure we never emit it. */
1402 static void
1403 write_special_name_destructor (const tree dtor)
1405 if (DECL_DELETING_DESTRUCTOR_P (dtor))
1406 write_string ("D0");
1407 else if (DECL_BASE_DESTRUCTOR_P (dtor))
1408 write_string ("D2");
1409 else
1411 gcc_assert (DECL_COMPLETE_DESTRUCTOR_P (dtor)
1412 /* Even though we don't ever emit a definition of
1413 the old-style destructor, we still have to
1414 consider entities (like static variables) nested
1415 inside it. */
1416 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (dtor));
1417 write_string ("D1");
1421 /* Return the discriminator for ENTITY appearing inside
1422 FUNCTION. The discriminator is the lexical ordinal of VAR among
1423 entities with the same name in the same FUNCTION. */
1425 static int
1426 discriminator_for_local_entity (tree entity)
1428 /* Assume this is the only local entity with this name. */
1429 int discriminator = 0;
1431 if (DECL_DISCRIMINATOR_P (entity) && DECL_LANG_SPECIFIC (entity))
1432 discriminator = DECL_DISCRIMINATOR (entity);
1433 else if (TREE_CODE (entity) == TYPE_DECL)
1435 int ix;
1437 /* Scan the list of local classes. */
1438 entity = TREE_TYPE (entity);
1439 for (ix = 0; ; ix++)
1441 tree type = VEC_index (tree, local_classes, ix);
1442 if (type == entity)
1443 break;
1444 if (TYPE_IDENTIFIER (type) == TYPE_IDENTIFIER (entity)
1445 && TYPE_CONTEXT (type) == TYPE_CONTEXT (entity))
1446 ++discriminator;
1450 return discriminator;
1453 /* Return the discriminator for STRING, a string literal used inside
1454 FUNCTION. The discriminator is the lexical ordinal of STRING among
1455 string literals used in FUNCTION. */
1457 static int
1458 discriminator_for_string_literal (tree function ATTRIBUTE_UNUSED,
1459 tree string ATTRIBUTE_UNUSED)
1461 /* For now, we don't discriminate amongst string literals. */
1462 return 0;
1465 /* <discriminator> := _ <number>
1467 The discriminator is used only for the second and later occurrences
1468 of the same name within a single function. In this case <number> is
1469 n - 2, if this is the nth occurrence, in lexical order. */
1471 static void
1472 write_discriminator (const int discriminator)
1474 /* If discriminator is zero, don't write anything. Otherwise... */
1475 if (discriminator > 0)
1477 write_char ('_');
1478 write_unsigned_number (discriminator - 1);
1482 /* Mangle the name of a function-scope entity. FUNCTION is the
1483 FUNCTION_DECL for the enclosing function. ENTITY is the decl for
1484 the entity itself. LOCAL_ENTITY is the entity that's directly
1485 scoped in FUNCTION_DECL, either ENTITY itself or an enclosing scope
1486 of ENTITY.
1488 <local-name> := Z <function encoding> E <entity name> [<discriminator>]
1489 := Z <function encoding> E s [<discriminator>] */
1491 static void
1492 write_local_name (const tree function, const tree local_entity,
1493 const tree entity)
1495 MANGLE_TRACE_TREE ("local-name", entity);
1497 write_char ('Z');
1498 write_encoding (function);
1499 write_char ('E');
1500 if (TREE_CODE (entity) == STRING_CST)
1502 write_char ('s');
1503 write_discriminator (discriminator_for_string_literal (function,
1504 entity));
1506 else
1508 /* Now the <entity name>. Let write_name know its being called
1509 from <local-name>, so it doesn't try to process the enclosing
1510 function scope again. */
1511 write_name (entity, /*ignore_local_scope=*/1);
1512 write_discriminator (discriminator_for_local_entity (local_entity));
1516 /* Non-terminals <type> and <CV-qualifier>.
1518 <type> ::= <builtin-type>
1519 ::= <function-type>
1520 ::= <class-enum-type>
1521 ::= <array-type>
1522 ::= <pointer-to-member-type>
1523 ::= <template-param>
1524 ::= <substitution>
1525 ::= <CV-qualifier>
1526 ::= P <type> # pointer-to
1527 ::= R <type> # reference-to
1528 ::= C <type> # complex pair (C 2000)
1529 ::= G <type> # imaginary (C 2000) [not supported]
1530 ::= U <source-name> <type> # vendor extended type qualifier
1532 C++0x extensions
1534 <type> ::= RR <type> # rvalue reference-to
1535 <type> ::= Dt <expression> # decltype of an id-expression or
1536 # class member access
1537 <type> ::= DT <expression> # decltype of an expression
1539 TYPE is a type node. */
1541 static void
1542 write_type (tree type)
1544 /* This gets set to nonzero if TYPE turns out to be a (possibly
1545 CV-qualified) builtin type. */
1546 int is_builtin_type = 0;
1548 MANGLE_TRACE_TREE ("type", type);
1550 if (type == error_mark_node)
1551 return;
1553 if (find_substitution (type))
1554 return;
1556 if (write_CV_qualifiers_for_type (type) > 0)
1557 /* If TYPE was CV-qualified, we just wrote the qualifiers; now
1558 mangle the unqualified type. The recursive call is needed here
1559 since both the qualified and unqualified types are substitution
1560 candidates. */
1561 write_type (TYPE_MAIN_VARIANT (type));
1562 else if (TREE_CODE (type) == ARRAY_TYPE)
1563 /* It is important not to use the TYPE_MAIN_VARIANT of TYPE here
1564 so that the cv-qualification of the element type is available
1565 in write_array_type. */
1566 write_array_type (type);
1567 else
1569 tree type_orig = type;
1571 /* See through any typedefs. */
1572 type = TYPE_MAIN_VARIANT (type);
1574 if (TYPE_PTRMEM_P (type))
1575 write_pointer_to_member_type (type);
1576 else
1578 /* Handle any target-specific fundamental types. */
1579 const char *target_mangling
1580 = targetm.mangle_type (type_orig);
1582 if (target_mangling)
1584 write_string (target_mangling);
1585 /* Add substitutions for types other than fundamental
1586 types. */
1587 if (TREE_CODE (type) != VOID_TYPE
1588 && TREE_CODE (type) != INTEGER_TYPE
1589 && TREE_CODE (type) != REAL_TYPE
1590 && TREE_CODE (type) != BOOLEAN_TYPE)
1591 add_substitution (type);
1592 return;
1595 switch (TREE_CODE (type))
1597 case VOID_TYPE:
1598 case BOOLEAN_TYPE:
1599 case INTEGER_TYPE: /* Includes wchar_t. */
1600 case REAL_TYPE:
1602 /* If this is a typedef, TYPE may not be one of
1603 the standard builtin type nodes, but an alias of one. Use
1604 TYPE_MAIN_VARIANT to get to the underlying builtin type. */
1605 write_builtin_type (TYPE_MAIN_VARIANT (type));
1606 ++is_builtin_type;
1608 break;
1610 case COMPLEX_TYPE:
1611 write_char ('C');
1612 write_type (TREE_TYPE (type));
1613 break;
1615 case FUNCTION_TYPE:
1616 case METHOD_TYPE:
1617 write_function_type (type);
1618 break;
1620 case UNION_TYPE:
1621 case RECORD_TYPE:
1622 case ENUMERAL_TYPE:
1623 /* A pointer-to-member function is represented as a special
1624 RECORD_TYPE, so check for this first. */
1625 if (TYPE_PTRMEMFUNC_P (type))
1626 write_pointer_to_member_type (type);
1627 else
1628 write_class_enum_type (type);
1629 break;
1631 case TYPENAME_TYPE:
1632 case UNBOUND_CLASS_TEMPLATE:
1633 /* We handle TYPENAME_TYPEs and UNBOUND_CLASS_TEMPLATEs like
1634 ordinary nested names. */
1635 write_nested_name (TYPE_STUB_DECL (type));
1636 break;
1638 case POINTER_TYPE:
1639 write_char ('P');
1640 write_type (TREE_TYPE (type));
1641 break;
1643 case REFERENCE_TYPE:
1644 if (TYPE_REF_IS_RVALUE (type))
1645 write_char('O');
1646 else
1647 write_char ('R');
1648 write_type (TREE_TYPE (type));
1649 break;
1651 case TEMPLATE_TYPE_PARM:
1652 case TEMPLATE_PARM_INDEX:
1653 write_template_param (type);
1654 break;
1656 case TEMPLATE_TEMPLATE_PARM:
1657 write_template_template_param (type);
1658 break;
1660 case BOUND_TEMPLATE_TEMPLATE_PARM:
1661 write_template_template_param (type);
1662 write_template_args
1663 (TI_ARGS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (type)));
1664 break;
1666 case VECTOR_TYPE:
1667 write_string ("U8__vector");
1668 write_type (TREE_TYPE (type));
1669 break;
1671 case TYPE_PACK_EXPANSION:
1672 write_string ("Dp");
1673 write_type (PACK_EXPANSION_PATTERN (type));
1674 break;
1676 case DECLTYPE_TYPE:
1677 write_char ('D');
1678 if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
1679 write_char ('t');
1680 else
1681 write_char ('T');
1682 write_expression (DECLTYPE_TYPE_EXPR (type));
1683 write_char ('E');
1684 break;
1686 case TYPEOF_TYPE:
1687 sorry ("mangling typeof, use decltype instead");
1688 break;
1690 default:
1691 gcc_unreachable ();
1696 /* Types other than builtin types are substitution candidates. */
1697 if (!is_builtin_type)
1698 add_substitution (type);
1701 /* Non-terminal <CV-qualifiers> for type nodes. Returns the number of
1702 CV-qualifiers written for TYPE.
1704 <CV-qualifiers> ::= [r] [V] [K] */
1706 static int
1707 write_CV_qualifiers_for_type (const tree type)
1709 int num_qualifiers = 0;
1711 /* The order is specified by:
1713 "In cases where multiple order-insensitive qualifiers are
1714 present, they should be ordered 'K' (closest to the base type),
1715 'V', 'r', and 'U' (farthest from the base type) ..."
1717 Note that we do not use cp_type_quals below; given "const
1718 int[3]", the "const" is emitted with the "int", not with the
1719 array. */
1721 if (TYPE_QUALS (type) & TYPE_QUAL_RESTRICT)
1723 write_char ('r');
1724 ++num_qualifiers;
1726 if (TYPE_QUALS (type) & TYPE_QUAL_VOLATILE)
1728 write_char ('V');
1729 ++num_qualifiers;
1731 if (TYPE_QUALS (type) & TYPE_QUAL_CONST)
1733 write_char ('K');
1734 ++num_qualifiers;
1737 return num_qualifiers;
1740 /* Non-terminal <builtin-type>.
1742 <builtin-type> ::= v # void
1743 ::= b # bool
1744 ::= w # wchar_t
1745 ::= c # char
1746 ::= a # signed char
1747 ::= h # unsigned char
1748 ::= s # short
1749 ::= t # unsigned short
1750 ::= i # int
1751 ::= j # unsigned int
1752 ::= l # long
1753 ::= m # unsigned long
1754 ::= x # long long, __int64
1755 ::= y # unsigned long long, __int64
1756 ::= n # __int128
1757 ::= o # unsigned __int128
1758 ::= f # float
1759 ::= d # double
1760 ::= e # long double, __float80
1761 ::= g # __float128 [not supported]
1762 ::= u <source-name> # vendor extended type */
1764 static void
1765 write_builtin_type (tree type)
1767 if (TYPE_CANONICAL (type))
1768 type = TYPE_CANONICAL (type);
1770 switch (TREE_CODE (type))
1772 case VOID_TYPE:
1773 write_char ('v');
1774 break;
1776 case BOOLEAN_TYPE:
1777 write_char ('b');
1778 break;
1780 case INTEGER_TYPE:
1781 /* TYPE may still be wchar_t, char16_t, or char32_t, since that
1782 isn't in integer_type_nodes. */
1783 if (type == wchar_type_node)
1784 write_char ('w');
1785 else if (type == char16_type_node)
1786 write_string ("Ds");
1787 else if (type == char32_type_node)
1788 write_string ("Di");
1789 else if (TYPE_FOR_JAVA (type))
1790 write_java_integer_type_codes (type);
1791 else
1793 size_t itk;
1794 /* Assume TYPE is one of the shared integer type nodes. Find
1795 it in the array of these nodes. */
1796 iagain:
1797 for (itk = 0; itk < itk_none; ++itk)
1798 if (type == integer_types[itk])
1800 /* Print the corresponding single-letter code. */
1801 write_char (integer_type_codes[itk]);
1802 break;
1805 if (itk == itk_none)
1807 tree t = c_common_type_for_mode (TYPE_MODE (type),
1808 TYPE_UNSIGNED (type));
1809 if (type != t)
1811 type = t;
1812 goto iagain;
1815 if (TYPE_PRECISION (type) == 128)
1816 write_char (TYPE_UNSIGNED (type) ? 'o' : 'n');
1817 else
1819 /* Allow for cases where TYPE is not one of the shared
1820 integer type nodes and write a "vendor extended builtin
1821 type" with a name the form intN or uintN, respectively.
1822 Situations like this can happen if you have an
1823 __attribute__((__mode__(__SI__))) type and use exotic
1824 switches like '-mint8' on AVR. Of course, this is
1825 undefined by the C++ ABI (and '-mint8' is not even
1826 Standard C conforming), but when using such special
1827 options you're pretty much in nowhere land anyway. */
1828 const char *prefix;
1829 char prec[11]; /* up to ten digits for an unsigned */
1831 prefix = TYPE_UNSIGNED (type) ? "uint" : "int";
1832 sprintf (prec, "%u", (unsigned) TYPE_PRECISION (type));
1833 write_char ('u'); /* "vendor extended builtin type" */
1834 write_unsigned_number (strlen (prefix) + strlen (prec));
1835 write_string (prefix);
1836 write_string (prec);
1840 break;
1842 case REAL_TYPE:
1843 if (type == float_type_node
1844 || type == java_float_type_node)
1845 write_char ('f');
1846 else if (type == double_type_node
1847 || type == java_double_type_node)
1848 write_char ('d');
1849 else if (type == long_double_type_node)
1850 write_char ('e');
1851 else
1852 gcc_unreachable ();
1853 break;
1855 default:
1856 gcc_unreachable ();
1860 /* Non-terminal <function-type>. NODE is a FUNCTION_TYPE or
1861 METHOD_TYPE. The return type is mangled before the parameter
1862 types.
1864 <function-type> ::= F [Y] <bare-function-type> E */
1866 static void
1867 write_function_type (const tree type)
1869 MANGLE_TRACE_TREE ("function-type", type);
1871 /* For a pointer to member function, the function type may have
1872 cv-qualifiers, indicating the quals for the artificial 'this'
1873 parameter. */
1874 if (TREE_CODE (type) == METHOD_TYPE)
1876 /* The first parameter must be a POINTER_TYPE pointing to the
1877 `this' parameter. */
1878 tree this_type = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
1879 write_CV_qualifiers_for_type (this_type);
1882 write_char ('F');
1883 /* We don't track whether or not a type is `extern "C"'. Note that
1884 you can have an `extern "C"' function that does not have
1885 `extern "C"' type, and vice versa:
1887 extern "C" typedef void function_t();
1888 function_t f; // f has C++ linkage, but its type is
1889 // `extern "C"'
1891 typedef void function_t();
1892 extern "C" function_t f; // Vice versa.
1894 See [dcl.link]. */
1895 write_bare_function_type (type, /*include_return_type_p=*/1,
1896 /*decl=*/NULL);
1897 write_char ('E');
1900 /* Non-terminal <bare-function-type>. TYPE is a FUNCTION_TYPE or
1901 METHOD_TYPE. If INCLUDE_RETURN_TYPE is nonzero, the return value
1902 is mangled before the parameter types. If non-NULL, DECL is
1903 FUNCTION_DECL for the function whose type is being emitted.
1905 If DECL is a member of a Java type, then a literal 'J'
1906 is output and the return type is mangled as if INCLUDE_RETURN_TYPE
1907 were nonzero.
1909 <bare-function-type> ::= [J]</signature/ type>+ */
1911 static void
1912 write_bare_function_type (const tree type, const int include_return_type_p,
1913 const tree decl)
1915 int java_method_p;
1917 MANGLE_TRACE_TREE ("bare-function-type", type);
1919 /* Detect Java methods and emit special encoding. */
1920 if (decl != NULL
1921 && DECL_FUNCTION_MEMBER_P (decl)
1922 && TYPE_FOR_JAVA (DECL_CONTEXT (decl))
1923 && !DECL_CONSTRUCTOR_P (decl)
1924 && !DECL_DESTRUCTOR_P (decl)
1925 && !DECL_CONV_FN_P (decl))
1927 java_method_p = 1;
1928 write_char ('J');
1930 else
1932 java_method_p = 0;
1935 /* Mangle the return type, if requested. */
1936 if (include_return_type_p || java_method_p)
1937 write_type (TREE_TYPE (type));
1939 /* Now mangle the types of the arguments. */
1940 write_method_parms (TYPE_ARG_TYPES (type),
1941 TREE_CODE (type) == METHOD_TYPE,
1942 decl);
1945 /* Write the mangled representation of a method parameter list of
1946 types given in PARM_TYPES. If METHOD_P is nonzero, the function is
1947 considered a non-static method, and the this parameter is omitted.
1948 If non-NULL, DECL is the FUNCTION_DECL for the function whose
1949 parameters are being emitted. */
1951 static void
1952 write_method_parms (tree parm_types, const int method_p, const tree decl)
1954 tree first_parm_type;
1955 tree parm_decl = decl ? DECL_ARGUMENTS (decl) : NULL_TREE;
1957 /* Assume this parameter type list is variable-length. If it ends
1958 with a void type, then it's not. */
1959 int varargs_p = 1;
1961 /* If this is a member function, skip the first arg, which is the
1962 this pointer.
1963 "Member functions do not encode the type of their implicit this
1964 parameter."
1966 Similarly, there's no need to mangle artificial parameters, like
1967 the VTT parameters for constructors and destructors. */
1968 if (method_p)
1970 parm_types = TREE_CHAIN (parm_types);
1971 parm_decl = parm_decl ? TREE_CHAIN (parm_decl) : NULL_TREE;
1973 while (parm_decl && DECL_ARTIFICIAL (parm_decl))
1975 parm_types = TREE_CHAIN (parm_types);
1976 parm_decl = TREE_CHAIN (parm_decl);
1980 for (first_parm_type = parm_types;
1981 parm_types;
1982 parm_types = TREE_CHAIN (parm_types))
1984 tree parm = TREE_VALUE (parm_types);
1985 if (parm == void_type_node)
1987 /* "Empty parameter lists, whether declared as () or
1988 conventionally as (void), are encoded with a void parameter
1989 (v)." */
1990 if (parm_types == first_parm_type)
1991 write_type (parm);
1992 /* If the parm list is terminated with a void type, it's
1993 fixed-length. */
1994 varargs_p = 0;
1995 /* A void type better be the last one. */
1996 gcc_assert (TREE_CHAIN (parm_types) == NULL);
1998 else
1999 write_type (parm);
2002 if (varargs_p)
2003 /* <builtin-type> ::= z # ellipsis */
2004 write_char ('z');
2007 /* <class-enum-type> ::= <name> */
2009 static void
2010 write_class_enum_type (const tree type)
2012 write_name (TYPE_NAME (type), /*ignore_local_scope=*/0);
2015 /* Non-terminal <template-args>. ARGS is a TREE_VEC of template
2016 arguments.
2018 <template-args> ::= I <template-arg>+ E */
2020 static void
2021 write_template_args (tree args)
2023 int i;
2024 int length = TREE_VEC_LENGTH (args);
2026 MANGLE_TRACE_TREE ("template-args", args);
2028 write_char ('I');
2030 gcc_assert (length > 0);
2032 if (TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
2034 /* We have nested template args. We want the innermost template
2035 argument list. */
2036 args = TREE_VEC_ELT (args, length - 1);
2037 length = TREE_VEC_LENGTH (args);
2039 for (i = 0; i < length; ++i)
2040 write_template_arg (TREE_VEC_ELT (args, i));
2042 write_char ('E');
2045 /* Write out the
2046 <unqualified-name>
2047 <unqualified-name> <template-args>
2048 part of SCOPE_REF or COMPONENT_REF mangling. */
2050 static void
2051 write_member_name (tree member)
2053 if (TREE_CODE (member) == IDENTIFIER_NODE)
2054 write_source_name (member);
2055 else if (DECL_P (member))
2057 /* G++ 3.2 incorrectly put out both the "sr" code and
2058 the nested name of the qualified name. */
2059 G.need_abi_warning = 1;
2060 write_unqualified_name (member);
2062 else if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
2064 tree name = TREE_OPERAND (member, 0);
2065 if (TREE_CODE (name) == OVERLOAD)
2066 name = OVL_FUNCTION (name);
2067 write_member_name (name);
2068 write_template_args (TREE_OPERAND (member, 1));
2070 else
2071 write_expression (member);
2074 /* <expression> ::= <unary operator-name> <expression>
2075 ::= <binary operator-name> <expression> <expression>
2076 ::= <expr-primary>
2078 <expr-primary> ::= <template-param>
2079 ::= L <type> <value number> E # literal
2080 ::= L <mangled-name> E # external name
2081 ::= st <type> # sizeof
2082 ::= sr <type> <unqualified-name> # dependent name
2083 ::= sr <type> <unqualified-name> <template-args> */
2085 static void
2086 write_expression (tree expr)
2088 enum tree_code code;
2090 code = TREE_CODE (expr);
2092 /* Skip NOP_EXPRs. They can occur when (say) a pointer argument
2093 is converted (via qualification conversions) to another
2094 type. */
2095 while (TREE_CODE (expr) == NOP_EXPR
2096 || TREE_CODE (expr) == NON_LVALUE_EXPR)
2098 expr = TREE_OPERAND (expr, 0);
2099 code = TREE_CODE (expr);
2102 if (code == BASELINK)
2104 expr = BASELINK_FUNCTIONS (expr);
2105 code = TREE_CODE (expr);
2108 if (code == OVERLOAD)
2110 expr = OVL_FUNCTION (expr);
2111 code = TREE_CODE (expr);
2114 /* Handle pointers-to-members by making them look like expression
2115 nodes. */
2116 if (code == PTRMEM_CST)
2118 expr = build_nt (ADDR_EXPR,
2119 build_qualified_name (/*type=*/NULL_TREE,
2120 PTRMEM_CST_CLASS (expr),
2121 PTRMEM_CST_MEMBER (expr),
2122 /*template_p=*/false));
2123 code = TREE_CODE (expr);
2126 /* Handle template parameters. */
2127 if (code == TEMPLATE_TYPE_PARM
2128 || code == TEMPLATE_TEMPLATE_PARM
2129 || code == BOUND_TEMPLATE_TEMPLATE_PARM
2130 || code == TEMPLATE_PARM_INDEX)
2131 write_template_param (expr);
2132 /* Handle literals. */
2133 else if (TREE_CODE_CLASS (code) == tcc_constant
2134 || (abi_version_at_least (2) && code == CONST_DECL))
2135 write_template_arg_literal (expr);
2136 else if (code == PARM_DECL)
2138 /* A function parameter used under decltype in a late-specified
2139 return type. Represented with a type placeholder. */
2140 write_string ("sT");
2141 write_type (non_reference (TREE_TYPE (expr)));
2143 else if (DECL_P (expr))
2145 /* G++ 3.2 incorrectly mangled non-type template arguments of
2146 enumeration type using their names. */
2147 if (code == CONST_DECL)
2148 G.need_abi_warning = 1;
2149 write_char ('L');
2150 write_mangled_name (expr, false);
2151 write_char ('E');
2153 else if (TREE_CODE (expr) == SIZEOF_EXPR
2154 && TYPE_P (TREE_OPERAND (expr, 0)))
2156 write_string ("st");
2157 write_type (TREE_OPERAND (expr, 0));
2159 else if (abi_version_at_least (2) && TREE_CODE (expr) == SCOPE_REF)
2161 tree scope = TREE_OPERAND (expr, 0);
2162 tree member = TREE_OPERAND (expr, 1);
2164 /* If the MEMBER is a real declaration, then the qualifying
2165 scope was not dependent. Ideally, we would not have a
2166 SCOPE_REF in those cases, but sometimes we do. If the second
2167 argument is a DECL, then the name must not have been
2168 dependent. */
2169 if (DECL_P (member))
2170 write_expression (member);
2171 else
2173 tree template_args;
2175 write_string ("sr");
2176 write_type (scope);
2177 /* If MEMBER is a template-id, separate the template
2178 from the arguments. */
2179 if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
2181 template_args = TREE_OPERAND (member, 1);
2182 member = TREE_OPERAND (member, 0);
2184 else
2185 template_args = NULL_TREE;
2186 /* Write out the name of the MEMBER. */
2187 if (IDENTIFIER_TYPENAME_P (member))
2188 write_conversion_operator_name (TREE_TYPE (member));
2189 else if (IDENTIFIER_OPNAME_P (member))
2191 int i;
2192 const char *mangled_name = NULL;
2194 /* Unfortunately, there is no easy way to go from the
2195 name of the operator back to the corresponding tree
2196 code. */
2197 for (i = 0; i < MAX_TREE_CODES; ++i)
2198 if (operator_name_info[i].identifier == member)
2200 /* The ABI says that we prefer binary operator
2201 names to unary operator names. */
2202 if (operator_name_info[i].arity == 2)
2204 mangled_name = operator_name_info[i].mangled_name;
2205 break;
2207 else if (!mangled_name)
2208 mangled_name = operator_name_info[i].mangled_name;
2210 else if (assignment_operator_name_info[i].identifier
2211 == member)
2213 mangled_name
2214 = assignment_operator_name_info[i].mangled_name;
2215 break;
2217 write_string (mangled_name);
2219 else
2220 write_source_name (member);
2221 /* Write out the template arguments. */
2222 if (template_args)
2223 write_template_args (template_args);
2226 else if (code == COMPONENT_REF)
2228 tree ob = TREE_OPERAND (expr, 0);
2230 if (TREE_CODE (ob) == ARROW_EXPR)
2232 code = ARROW_EXPR;
2233 ob = TREE_OPERAND (ob, 0);
2236 write_string (operator_name_info[(int)code].mangled_name);
2237 write_expression (ob);
2238 write_member_name (TREE_OPERAND (expr, 1));
2240 else
2242 int i;
2244 /* When we bind a variable or function to a non-type template
2245 argument with reference type, we create an ADDR_EXPR to show
2246 the fact that the entity's address has been taken. But, we
2247 don't actually want to output a mangling code for the `&'. */
2248 if (TREE_CODE (expr) == ADDR_EXPR
2249 && TREE_TYPE (expr)
2250 && TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE)
2252 expr = TREE_OPERAND (expr, 0);
2253 if (DECL_P (expr))
2255 write_expression (expr);
2256 return;
2259 code = TREE_CODE (expr);
2262 /* If it wasn't any of those, recursively expand the expression. */
2263 write_string (operator_name_info[(int) code].mangled_name);
2265 switch (code)
2267 case CALL_EXPR:
2268 write_expression (CALL_EXPR_FN (expr));
2269 for (i = 0; i < call_expr_nargs (expr); ++i)
2270 write_expression (CALL_EXPR_ARG (expr, i));
2271 write_char ('E');
2272 break;
2274 case CAST_EXPR:
2275 write_type (TREE_TYPE (expr));
2276 if (!TREE_OPERAND (expr, 0))
2277 /* "T()" is mangled as "T(void)". */
2278 write_char ('v');
2279 else if (list_length (TREE_OPERAND (expr, 0)) > 1)
2280 /* FIXME the above hack for T() needs to be replaced with
2281 something more general. */
2282 sorry ("mangling function-style cast with more than one argument");
2283 else
2284 write_expression (TREE_VALUE (TREE_OPERAND (expr, 0)));
2285 break;
2287 case STATIC_CAST_EXPR:
2288 case CONST_CAST_EXPR:
2289 write_type (TREE_TYPE (expr));
2290 write_expression (TREE_OPERAND (expr, 0));
2291 break;
2293 /* Handle pointers-to-members specially. */
2294 case SCOPE_REF:
2295 write_type (TREE_OPERAND (expr, 0));
2296 write_member_name (TREE_OPERAND (expr, 1));
2297 break;
2299 default:
2300 for (i = 0; i < TREE_OPERAND_LENGTH (expr); ++i)
2302 tree operand = TREE_OPERAND (expr, i);
2303 /* As a GNU extension, the middle operand of a
2304 conditional may be omitted. Since expression
2305 manglings are supposed to represent the input token
2306 stream, there's no good way to mangle such an
2307 expression without extending the C++ ABI. */
2308 if (code == COND_EXPR && i == 1 && !operand)
2310 error ("omitted middle operand to %<?:%> operand "
2311 "cannot be mangled");
2312 continue;
2314 write_expression (operand);
2320 /* Literal subcase of non-terminal <template-arg>.
2322 "Literal arguments, e.g. "A<42L>", are encoded with their type
2323 and value. Negative integer values are preceded with "n"; for
2324 example, "A<-42L>" becomes "1AILln42EE". The bool value false is
2325 encoded as 0, true as 1." */
2327 static void
2328 write_template_arg_literal (const tree value)
2330 write_char ('L');
2331 write_type (TREE_TYPE (value));
2333 switch (TREE_CODE (value))
2335 case CONST_DECL:
2336 write_integer_cst (DECL_INITIAL (value));
2337 break;
2339 case INTEGER_CST:
2340 gcc_assert (!same_type_p (TREE_TYPE (value), boolean_type_node)
2341 || integer_zerop (value) || integer_onep (value));
2342 write_integer_cst (value);
2343 break;
2345 case REAL_CST:
2346 write_real_cst (value);
2347 break;
2349 default:
2350 gcc_unreachable ();
2353 write_char ('E');
2356 /* Non-terminal <template-arg>.
2358 <template-arg> ::= <type> # type
2359 ::= L <type> </value/ number> E # literal
2360 ::= LZ <name> E # external name
2361 ::= X <expression> E # expression */
2363 static void
2364 write_template_arg (tree node)
2366 enum tree_code code = TREE_CODE (node);
2368 MANGLE_TRACE_TREE ("template-arg", node);
2370 /* A template template parameter's argument list contains TREE_LIST
2371 nodes of which the value field is the actual argument. */
2372 if (code == TREE_LIST)
2374 node = TREE_VALUE (node);
2375 /* If it's a decl, deal with its type instead. */
2376 if (DECL_P (node))
2378 node = TREE_TYPE (node);
2379 code = TREE_CODE (node);
2383 if (TREE_CODE (node) == NOP_EXPR
2384 && TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
2386 /* Template parameters can be of reference type. To maintain
2387 internal consistency, such arguments use a conversion from
2388 address of object to reference type. */
2389 gcc_assert (TREE_CODE (TREE_OPERAND (node, 0)) == ADDR_EXPR);
2390 if (abi_version_at_least (2))
2391 node = TREE_OPERAND (TREE_OPERAND (node, 0), 0);
2392 else
2393 G.need_abi_warning = 1;
2396 if (ARGUMENT_PACK_P (node))
2398 /* Expand the template argument pack. */
2399 tree args = ARGUMENT_PACK_ARGS (node);
2400 int i, length = TREE_VEC_LENGTH (args);
2401 write_char ('I');
2402 for (i = 0; i < length; ++i)
2403 write_template_arg (TREE_VEC_ELT (args, i));
2404 write_char ('E');
2406 else if (TYPE_P (node))
2407 write_type (node);
2408 else if (code == TEMPLATE_DECL)
2409 /* A template appearing as a template arg is a template template arg. */
2410 write_template_template_arg (node);
2411 else if ((TREE_CODE_CLASS (code) == tcc_constant && code != PTRMEM_CST)
2412 || (abi_version_at_least (2) && code == CONST_DECL))
2413 write_template_arg_literal (node);
2414 else if (DECL_P (node))
2416 /* Until ABI version 2, non-type template arguments of
2417 enumeration type were mangled using their names. */
2418 if (code == CONST_DECL && !abi_version_at_least (2))
2419 G.need_abi_warning = 1;
2420 write_char ('L');
2421 /* Until ABI version 3, the underscore before the mangled name
2422 was incorrectly omitted. */
2423 if (!abi_version_at_least (3))
2425 G.need_abi_warning = 1;
2426 write_char ('Z');
2428 else
2429 write_string ("_Z");
2430 write_encoding (node);
2431 write_char ('E');
2433 else
2435 /* Template arguments may be expressions. */
2436 write_char ('X');
2437 write_expression (node);
2438 write_char ('E');
2442 /* <template-template-arg>
2443 ::= <name>
2444 ::= <substitution> */
2446 static void
2447 write_template_template_arg (const tree decl)
2449 MANGLE_TRACE_TREE ("template-template-arg", decl);
2451 if (find_substitution (decl))
2452 return;
2453 write_name (decl, /*ignore_local_scope=*/0);
2454 add_substitution (decl);
2458 /* Non-terminal <array-type>. TYPE is an ARRAY_TYPE.
2460 <array-type> ::= A [</dimension/ number>] _ </element/ type>
2461 ::= A <expression> _ </element/ type>
2463 "Array types encode the dimension (number of elements) and the
2464 element type. For variable length arrays, the dimension (but not
2465 the '_' separator) is omitted." */
2467 static void
2468 write_array_type (const tree type)
2470 write_char ('A');
2471 if (TYPE_DOMAIN (type))
2473 tree index_type;
2474 tree max;
2476 index_type = TYPE_DOMAIN (type);
2477 /* The INDEX_TYPE gives the upper and lower bounds of the
2478 array. */
2479 max = TYPE_MAX_VALUE (index_type);
2480 if (TREE_CODE (max) == INTEGER_CST)
2482 /* The ABI specifies that we should mangle the number of
2483 elements in the array, not the largest allowed index. */
2484 max = size_binop (PLUS_EXPR, max, size_one_node);
2485 write_unsigned_number (tree_low_cst (max, 1));
2487 else
2489 max = TREE_OPERAND (max, 0);
2490 if (!abi_version_at_least (2))
2492 /* value_dependent_expression_p presumes nothing is
2493 dependent when PROCESSING_TEMPLATE_DECL is zero. */
2494 ++processing_template_decl;
2495 if (!value_dependent_expression_p (max))
2496 G.need_abi_warning = 1;
2497 --processing_template_decl;
2499 write_expression (max);
2503 write_char ('_');
2504 write_type (TREE_TYPE (type));
2507 /* Non-terminal <pointer-to-member-type> for pointer-to-member
2508 variables. TYPE is a pointer-to-member POINTER_TYPE.
2510 <pointer-to-member-type> ::= M </class/ type> </member/ type> */
2512 static void
2513 write_pointer_to_member_type (const tree type)
2515 write_char ('M');
2516 write_type (TYPE_PTRMEM_CLASS_TYPE (type));
2517 write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
2520 /* Non-terminal <template-param>. PARM is a TEMPLATE_TYPE_PARM,
2521 TEMPLATE_TEMPLATE_PARM, BOUND_TEMPLATE_TEMPLATE_PARM or a
2522 TEMPLATE_PARM_INDEX.
2524 <template-param> ::= T </parameter/ number> _ */
2526 static void
2527 write_template_param (const tree parm)
2529 int parm_index;
2530 int parm_level;
2531 tree parm_type = NULL_TREE;
2533 MANGLE_TRACE_TREE ("template-parm", parm);
2535 switch (TREE_CODE (parm))
2537 case TEMPLATE_TYPE_PARM:
2538 case TEMPLATE_TEMPLATE_PARM:
2539 case BOUND_TEMPLATE_TEMPLATE_PARM:
2540 parm_index = TEMPLATE_TYPE_IDX (parm);
2541 parm_level = TEMPLATE_TYPE_LEVEL (parm);
2542 break;
2544 case TEMPLATE_PARM_INDEX:
2545 parm_index = TEMPLATE_PARM_IDX (parm);
2546 parm_level = TEMPLATE_PARM_LEVEL (parm);
2547 parm_type = TREE_TYPE (TEMPLATE_PARM_DECL (parm));
2548 break;
2550 default:
2551 gcc_unreachable ();
2554 write_char ('T');
2555 /* NUMBER as it appears in the mangling is (-1)-indexed, with the
2556 earliest template param denoted by `_'. */
2557 if (parm_index > 0)
2558 write_unsigned_number (parm_index - 1);
2559 write_char ('_');
2562 /* <template-template-param>
2563 ::= <template-param>
2564 ::= <substitution> */
2566 static void
2567 write_template_template_param (const tree parm)
2569 tree templ = NULL_TREE;
2571 /* PARM, a TEMPLATE_TEMPLATE_PARM, is an instantiation of the
2572 template template parameter. The substitution candidate here is
2573 only the template. */
2574 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
2576 templ
2577 = TI_TEMPLATE (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm));
2578 if (find_substitution (templ))
2579 return;
2582 /* <template-param> encodes only the template parameter position,
2583 not its template arguments, which is fine here. */
2584 write_template_param (parm);
2585 if (templ)
2586 add_substitution (templ);
2589 /* Non-terminal <substitution>.
2591 <substitution> ::= S <seq-id> _
2592 ::= S_ */
2594 static void
2595 write_substitution (const int seq_id)
2597 MANGLE_TRACE ("substitution", "");
2599 write_char ('S');
2600 if (seq_id > 0)
2601 write_number (seq_id - 1, /*unsigned=*/1, 36);
2602 write_char ('_');
2605 /* Start mangling ENTITY. */
2607 static inline void
2608 start_mangling (const tree entity)
2610 G.entity = entity;
2611 G.need_abi_warning = false;
2612 obstack_free (&name_obstack, name_base);
2613 mangle_obstack = &name_obstack;
2614 name_base = obstack_alloc (&name_obstack, 0);
2617 /* Done with mangling. If WARN is true, and the name of G.entity will
2618 be mangled differently in a future version of the ABI, issue a
2619 warning. */
2621 static void
2622 finish_mangling_internal (const bool warn)
2624 if (warn_abi && warn && G.need_abi_warning)
2625 warning (OPT_Wabi, "the mangled name of %qD will change in a future "
2626 "version of GCC",
2627 G.entity);
2629 /* Clear all the substitutions. */
2630 VEC_truncate (tree, G.substitutions, 0);
2632 /* Null-terminate the string. */
2633 write_char ('\0');
2637 /* Like finish_mangling_internal, but return the mangled string. */
2639 static inline const char *
2640 finish_mangling (const bool warn)
2642 finish_mangling_internal (warn);
2643 return (const char *) obstack_finish (mangle_obstack);
2646 /* Like finish_mangling_internal, but return an identifier. */
2648 static tree
2649 finish_mangling_get_identifier (const bool warn)
2651 finish_mangling_internal (warn);
2652 /* Don't obstack_finish here, and the next start_mangling will
2653 remove the identifier. */
2654 return get_identifier ((const char *) name_base);
2657 /* Initialize data structures for mangling. */
2659 void
2660 init_mangle (void)
2662 gcc_obstack_init (&name_obstack);
2663 name_base = obstack_alloc (&name_obstack, 0);
2664 G.substitutions = NULL;
2666 /* Cache these identifiers for quick comparison when checking for
2667 standard substitutions. */
2668 subst_identifiers[SUBID_ALLOCATOR] = get_identifier ("allocator");
2669 subst_identifiers[SUBID_BASIC_STRING] = get_identifier ("basic_string");
2670 subst_identifiers[SUBID_CHAR_TRAITS] = get_identifier ("char_traits");
2671 subst_identifiers[SUBID_BASIC_ISTREAM] = get_identifier ("basic_istream");
2672 subst_identifiers[SUBID_BASIC_OSTREAM] = get_identifier ("basic_ostream");
2673 subst_identifiers[SUBID_BASIC_IOSTREAM] = get_identifier ("basic_iostream");
2676 /* Generate the mangled name of DECL. */
2678 static tree
2679 mangle_decl_string (const tree decl)
2681 tree result;
2683 start_mangling (decl);
2685 if (TREE_CODE (decl) == TYPE_DECL)
2686 write_type (TREE_TYPE (decl));
2687 else
2688 write_mangled_name (decl, true);
2690 result = finish_mangling_get_identifier (/*warn=*/true);
2691 if (DEBUG_MANGLE)
2692 fprintf (stderr, "mangle_decl_string = '%s'\n\n",
2693 IDENTIFIER_POINTER (result));
2694 return result;
2697 /* Create an identifier for the external mangled name of DECL. */
2699 void
2700 mangle_decl (const tree decl)
2702 tree id = mangle_decl_string (decl);
2703 id = targetm.mangle_decl_assembler_name (decl, id);
2704 SET_DECL_ASSEMBLER_NAME (decl, id);
2707 /* Generate the mangled representation of TYPE. */
2709 const char *
2710 mangle_type_string (const tree type)
2712 const char *result;
2714 start_mangling (type);
2715 write_type (type);
2716 result = finish_mangling (/*warn=*/false);
2717 if (DEBUG_MANGLE)
2718 fprintf (stderr, "mangle_type_string = '%s'\n\n", result);
2719 return result;
2722 /* Create an identifier for the mangled name of a special component
2723 for belonging to TYPE. CODE is the ABI-specified code for this
2724 component. */
2726 static tree
2727 mangle_special_for_type (const tree type, const char *code)
2729 tree result;
2731 /* We don't have an actual decl here for the special component, so
2732 we can't just process the <encoded-name>. Instead, fake it. */
2733 start_mangling (type);
2735 /* Start the mangling. */
2736 write_string ("_Z");
2737 write_string (code);
2739 /* Add the type. */
2740 write_type (type);
2741 result = finish_mangling_get_identifier (/*warn=*/false);
2743 if (DEBUG_MANGLE)
2744 fprintf (stderr, "mangle_special_for_type = %s\n\n",
2745 IDENTIFIER_POINTER (result));
2747 return result;
2750 /* Create an identifier for the mangled representation of the typeinfo
2751 structure for TYPE. */
2753 tree
2754 mangle_typeinfo_for_type (const tree type)
2756 return mangle_special_for_type (type, "TI");
2759 /* Create an identifier for the mangled name of the NTBS containing
2760 the mangled name of TYPE. */
2762 tree
2763 mangle_typeinfo_string_for_type (const tree type)
2765 return mangle_special_for_type (type, "TS");
2768 /* Create an identifier for the mangled name of the vtable for TYPE. */
2770 tree
2771 mangle_vtbl_for_type (const tree type)
2773 return mangle_special_for_type (type, "TV");
2776 /* Returns an identifier for the mangled name of the VTT for TYPE. */
2778 tree
2779 mangle_vtt_for_type (const tree type)
2781 return mangle_special_for_type (type, "TT");
2784 /* Return an identifier for a construction vtable group. TYPE is
2785 the most derived class in the hierarchy; BINFO is the base
2786 subobject for which this construction vtable group will be used.
2788 This mangling isn't part of the ABI specification; in the ABI
2789 specification, the vtable group is dumped in the same COMDAT as the
2790 main vtable, and is referenced only from that vtable, so it doesn't
2791 need an external name. For binary formats without COMDAT sections,
2792 though, we need external names for the vtable groups.
2794 We use the production
2796 <special-name> ::= CT <type> <offset number> _ <base type> */
2798 tree
2799 mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
2801 tree result;
2803 start_mangling (type);
2805 write_string ("_Z");
2806 write_string ("TC");
2807 write_type (type);
2808 write_integer_cst (BINFO_OFFSET (binfo));
2809 write_char ('_');
2810 write_type (BINFO_TYPE (binfo));
2812 result = finish_mangling_get_identifier (/*warn=*/false);
2813 if (DEBUG_MANGLE)
2814 fprintf (stderr, "mangle_ctor_vtbl_for_type = %s\n\n",
2815 IDENTIFIER_POINTER (result));
2816 return result;
2819 /* Mangle a this pointer or result pointer adjustment.
2821 <call-offset> ::= h <fixed offset number> _
2822 ::= v <fixed offset number> _ <virtual offset number> _ */
2824 static void
2825 mangle_call_offset (const tree fixed_offset, const tree virtual_offset)
2827 write_char (virtual_offset ? 'v' : 'h');
2829 /* For either flavor, write the fixed offset. */
2830 write_integer_cst (fixed_offset);
2831 write_char ('_');
2833 /* For a virtual thunk, add the virtual offset. */
2834 if (virtual_offset)
2836 write_integer_cst (virtual_offset);
2837 write_char ('_');
2841 /* Return an identifier for the mangled name of a this-adjusting or
2842 covariant thunk to FN_DECL. FIXED_OFFSET is the initial adjustment
2843 to this used to find the vptr. If VIRTUAL_OFFSET is non-NULL, this
2844 is a virtual thunk, and it is the vtbl offset in
2845 bytes. THIS_ADJUSTING is nonzero for a this adjusting thunk and
2846 zero for a covariant thunk. Note, that FN_DECL might be a covariant
2847 thunk itself. A covariant thunk name always includes the adjustment
2848 for the this pointer, even if there is none.
2850 <special-name> ::= T <call-offset> <base encoding>
2851 ::= Tc <this_adjust call-offset> <result_adjust call-offset>
2852 <base encoding> */
2854 tree
2855 mangle_thunk (tree fn_decl, const int this_adjusting, tree fixed_offset,
2856 tree virtual_offset)
2858 tree result;
2860 start_mangling (fn_decl);
2862 write_string ("_Z");
2863 write_char ('T');
2865 if (!this_adjusting)
2867 /* Covariant thunk with no this adjustment */
2868 write_char ('c');
2869 mangle_call_offset (integer_zero_node, NULL_TREE);
2870 mangle_call_offset (fixed_offset, virtual_offset);
2872 else if (!DECL_THUNK_P (fn_decl))
2873 /* Plain this adjusting thunk. */
2874 mangle_call_offset (fixed_offset, virtual_offset);
2875 else
2877 /* This adjusting thunk to covariant thunk. */
2878 write_char ('c');
2879 mangle_call_offset (fixed_offset, virtual_offset);
2880 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn_decl));
2881 virtual_offset = THUNK_VIRTUAL_OFFSET (fn_decl);
2882 if (virtual_offset)
2883 virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
2884 mangle_call_offset (fixed_offset, virtual_offset);
2885 fn_decl = THUNK_TARGET (fn_decl);
2888 /* Scoped name. */
2889 write_encoding (fn_decl);
2891 result = finish_mangling_get_identifier (/*warn=*/false);
2892 if (DEBUG_MANGLE)
2893 fprintf (stderr, "mangle_thunk = %s\n\n", IDENTIFIER_POINTER (result));
2894 return result;
2897 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
2898 operator to TYPE. The nodes are IDENTIFIERs whose TREE_TYPE is the
2899 TYPE. */
2901 static GTY ((param_is (union tree_node))) htab_t conv_type_names;
2903 /* Hash a node (VAL1) in the table. */
2905 static hashval_t
2906 hash_type (const void *val)
2908 return (hashval_t) TYPE_UID (TREE_TYPE ((const_tree) val));
2911 /* Compare VAL1 (a node in the table) with VAL2 (a TYPE). */
2913 static int
2914 compare_type (const void *val1, const void *val2)
2916 return TREE_TYPE ((const_tree) val1) == (const_tree) val2;
2919 /* Return an identifier for the mangled unqualified name for a
2920 conversion operator to TYPE. This mangling is not specified by the
2921 ABI spec; it is only used internally. */
2923 tree
2924 mangle_conv_op_name_for_type (const tree type)
2926 void **slot;
2927 tree identifier;
2929 if (type == error_mark_node)
2930 return error_mark_node;
2932 if (conv_type_names == NULL)
2933 conv_type_names = htab_create_ggc (31, &hash_type, &compare_type, NULL);
2935 slot = htab_find_slot_with_hash (conv_type_names, type,
2936 (hashval_t) TYPE_UID (type), INSERT);
2937 identifier = (tree)*slot;
2938 if (!identifier)
2940 char buffer[64];
2942 /* Create a unique name corresponding to TYPE. */
2943 sprintf (buffer, "operator %lu",
2944 (unsigned long) htab_elements (conv_type_names));
2945 identifier = get_identifier (buffer);
2946 *slot = identifier;
2948 /* Hang TYPE off the identifier so it can be found easily later
2949 when performing conversions. */
2950 TREE_TYPE (identifier) = type;
2952 /* Set bits on the identifier so we know later it's a conversion. */
2953 IDENTIFIER_OPNAME_P (identifier) = 1;
2954 IDENTIFIER_TYPENAME_P (identifier) = 1;
2957 return identifier;
2960 /* Return an identifier for the name of an initialization guard
2961 variable for indicated VARIABLE. */
2963 tree
2964 mangle_guard_variable (const tree variable)
2966 start_mangling (variable);
2967 write_string ("_ZGV");
2968 if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
2969 /* The name of a guard variable for a reference temporary should refer
2970 to the reference, not the temporary. */
2971 write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
2972 else
2973 write_name (variable, /*ignore_local_scope=*/0);
2974 return finish_mangling_get_identifier (/*warn=*/false);
2977 /* Return an identifier for the name of a temporary variable used to
2978 initialize a static reference. This isn't part of the ABI, but we might
2979 as well call them something readable. */
2981 tree
2982 mangle_ref_init_variable (const tree variable)
2984 start_mangling (variable);
2985 write_string ("_ZGR");
2986 write_name (variable, /*ignore_local_scope=*/0);
2987 return finish_mangling_get_identifier (/*warn=*/false);
2991 /* Foreign language type mangling section. */
2993 /* How to write the type codes for the integer Java type. */
2995 static void
2996 write_java_integer_type_codes (const tree type)
2998 if (type == java_int_type_node)
2999 write_char ('i');
3000 else if (type == java_short_type_node)
3001 write_char ('s');
3002 else if (type == java_byte_type_node)
3003 write_char ('c');
3004 else if (type == java_char_type_node)
3005 write_char ('w');
3006 else if (type == java_long_type_node)
3007 write_char ('x');
3008 else if (type == java_boolean_type_node)
3009 write_char ('b');
3010 else
3011 gcc_unreachable ();
3014 #include "gt-cp-mangle.h"