re PR libstdc++/48114 ([C++0x] binomial_distribution incorrect for p > .5 and geometr...
[official-gcc.git] / gcc / cp / mangle.c
blobf063d474d4b9f10e25d46c846db331ceaa7fc9ca
1 /* Name mangling for the 3.0 C++ ABI.
2 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
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 "obstack.h"
56 #include "flags.h"
57 #include "target.h"
58 #include "cgraph.h"
60 /* Debugging support. */
62 /* Define DEBUG_MANGLE to enable very verbose trace messages. */
63 #ifndef DEBUG_MANGLE
64 #define DEBUG_MANGLE 0
65 #endif
67 /* Macros for tracing the write_* functions. */
68 #if DEBUG_MANGLE
69 # define MANGLE_TRACE(FN, INPUT) \
70 fprintf (stderr, " %-24s: %-24s\n", (FN), (INPUT))
71 # define MANGLE_TRACE_TREE(FN, NODE) \
72 fprintf (stderr, " %-24s: %-24s (%p)\n", \
73 (FN), tree_code_name[TREE_CODE (NODE)], (void *) (NODE))
74 #else
75 # define MANGLE_TRACE(FN, INPUT)
76 # define MANGLE_TRACE_TREE(FN, NODE)
77 #endif
79 /* Nonzero if NODE is a class template-id. We can't rely on
80 CLASSTYPE_USE_TEMPLATE here because of tricky bugs in the parser
81 that hard to distinguish A<T> from A, where A<T> is the type as
82 instantiated outside of the template, and A is the type used
83 without parameters inside the template. */
84 #define CLASSTYPE_TEMPLATE_ID_P(NODE) \
85 (TYPE_LANG_SPECIFIC (NODE) != NULL \
86 && (TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM \
87 || (CLASSTYPE_TEMPLATE_INFO (NODE) != NULL \
88 && (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE))))))
90 /* Things we only need one of. This module is not reentrant. */
91 typedef struct GTY(()) globals {
92 /* An array of the current substitution candidates, in the order
93 we've seen them. */
94 VEC(tree,gc) *substitutions;
96 /* The entity that is being mangled. */
97 tree GTY ((skip)) entity;
99 /* How many parameter scopes we are inside. */
100 int parm_depth;
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 */
154 'n', /* itk_int128 */
155 'o', /* itk_unsigned_int128 */
158 static int decl_is_template_id (const tree, tree* const);
160 /* Functions for handling substitutions. */
162 static inline tree canonicalize_for_substitution (tree);
163 static void add_substitution (tree);
164 static inline int is_std_substitution (const tree,
165 const substitution_identifier_index_t);
166 static inline int is_std_substitution_char (const tree,
167 const substitution_identifier_index_t);
168 static int find_substitution (tree);
169 static void mangle_call_offset (const tree, const tree);
171 /* Functions for emitting mangled representations of things. */
173 static void write_mangled_name (const tree, bool);
174 static void write_encoding (const tree);
175 static void write_name (tree, const int);
176 static void write_unscoped_name (const tree);
177 static void write_unscoped_template_name (const tree);
178 static void write_nested_name (const tree);
179 static void write_prefix (const tree);
180 static void write_template_prefix (const tree);
181 static void write_unqualified_name (const tree);
182 static void write_conversion_operator_name (const tree);
183 static void write_source_name (tree);
184 static void write_unnamed_type_name (const tree);
185 static void write_closure_type_name (const tree);
186 static int hwint_to_ascii (unsigned HOST_WIDE_INT, const unsigned int, char *,
187 const unsigned int);
188 static void write_number (unsigned HOST_WIDE_INT, const int,
189 const unsigned int);
190 static void write_compact_number (int num);
191 static void write_integer_cst (const tree);
192 static void write_real_cst (const tree);
193 static void write_identifier (const char *);
194 static void write_special_name_constructor (const tree);
195 static void write_special_name_destructor (const tree);
196 static void write_type (tree);
197 static int write_CV_qualifiers_for_type (const tree);
198 static void write_builtin_type (tree);
199 static void write_function_type (const tree);
200 static void write_bare_function_type (const tree, const int, const tree);
201 static void write_method_parms (tree, const int, const tree);
202 static void write_class_enum_type (const tree);
203 static void write_template_args (tree);
204 static void write_expression (tree);
205 static void write_template_arg_literal (const tree);
206 static void write_template_arg (tree);
207 static void write_template_template_arg (const tree);
208 static void write_array_type (const tree);
209 static void write_pointer_to_member_type (const tree);
210 static void write_template_param (const tree);
211 static void write_template_template_param (const tree);
212 static void write_substitution (const int);
213 static int discriminator_for_local_entity (tree);
214 static int discriminator_for_string_literal (tree, tree);
215 static void write_discriminator (const int);
216 static void write_local_name (tree, const tree, const tree);
217 static void dump_substitution_candidates (void);
218 static tree mangle_decl_string (const tree);
219 static int local_class_index (tree);
221 /* Control functions. */
223 static inline void start_mangling (const tree);
224 static inline const char *finish_mangling (const bool);
225 static tree mangle_special_for_type (const tree, const char *);
227 /* Foreign language functions. */
229 static void write_java_integer_type_codes (const tree);
231 /* Append a single character to the end of the mangled
232 representation. */
233 #define write_char(CHAR) \
234 obstack_1grow (mangle_obstack, (CHAR))
236 /* Append a sized buffer to the end of the mangled representation. */
237 #define write_chars(CHAR, LEN) \
238 obstack_grow (mangle_obstack, (CHAR), (LEN))
240 /* Append a NUL-terminated string to the end of the mangled
241 representation. */
242 #define write_string(STRING) \
243 obstack_grow (mangle_obstack, (STRING), strlen (STRING))
245 /* Nonzero if NODE1 and NODE2 are both TREE_LIST nodes and have the
246 same purpose (context, which may be a type) and value (template
247 decl). See write_template_prefix for more information on what this
248 is used for. */
249 #define NESTED_TEMPLATE_MATCH(NODE1, NODE2) \
250 (TREE_CODE (NODE1) == TREE_LIST \
251 && TREE_CODE (NODE2) == TREE_LIST \
252 && ((TYPE_P (TREE_PURPOSE (NODE1)) \
253 && same_type_p (TREE_PURPOSE (NODE1), TREE_PURPOSE (NODE2))) \
254 || TREE_PURPOSE (NODE1) == TREE_PURPOSE (NODE2)) \
255 && TREE_VALUE (NODE1) == TREE_VALUE (NODE2))
257 /* Write out an unsigned quantity in base 10. */
258 #define write_unsigned_number(NUMBER) \
259 write_number ((NUMBER), /*unsigned_p=*/1, 10)
261 /* If DECL is a template instance, return nonzero and, if
262 TEMPLATE_INFO is non-NULL, set *TEMPLATE_INFO to its template info.
263 Otherwise return zero. */
265 static int
266 decl_is_template_id (const tree decl, tree* const template_info)
268 if (TREE_CODE (decl) == TYPE_DECL)
270 /* TYPE_DECLs are handled specially. Look at its type to decide
271 if this is a template instantiation. */
272 const tree type = TREE_TYPE (decl);
274 if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_ID_P (type))
276 if (template_info != NULL)
277 /* For a templated TYPE_DECL, the template info is hanging
278 off the type. */
279 *template_info = TYPE_TEMPLATE_INFO (type);
280 return 1;
283 else
285 /* Check if this is a primary template. */
286 if (DECL_LANG_SPECIFIC (decl) != NULL
287 && DECL_USE_TEMPLATE (decl)
288 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
289 && TREE_CODE (decl) != TEMPLATE_DECL)
291 if (template_info != NULL)
292 /* For most templated decls, the template info is hanging
293 off the decl. */
294 *template_info = DECL_TEMPLATE_INFO (decl);
295 return 1;
299 /* It's not a template id. */
300 return 0;
303 /* Produce debugging output of current substitution candidates. */
305 static void
306 dump_substitution_candidates (void)
308 unsigned i;
309 tree el;
311 fprintf (stderr, " ++ substitutions ");
312 FOR_EACH_VEC_ELT (tree, G.substitutions, i, el)
314 const char *name = "???";
316 if (i > 0)
317 fprintf (stderr, " ");
318 if (DECL_P (el))
319 name = IDENTIFIER_POINTER (DECL_NAME (el));
320 else if (TREE_CODE (el) == TREE_LIST)
321 name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (el)));
322 else if (TYPE_NAME (el))
323 name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (el)));
324 fprintf (stderr, " S%d_ = ", i - 1);
325 if (TYPE_P (el) &&
326 (CP_TYPE_RESTRICT_P (el)
327 || CP_TYPE_VOLATILE_P (el)
328 || CP_TYPE_CONST_P (el)))
329 fprintf (stderr, "CV-");
330 fprintf (stderr, "%s (%s at %p)\n",
331 name, tree_code_name[TREE_CODE (el)], (void *) el);
335 /* Both decls and types can be substitution candidates, but sometimes
336 they refer to the same thing. For instance, a TYPE_DECL and
337 RECORD_TYPE for the same class refer to the same thing, and should
338 be treated accordingly in substitutions. This function returns a
339 canonicalized tree node representing NODE that is used when adding
340 and substitution candidates and finding matches. */
342 static inline tree
343 canonicalize_for_substitution (tree node)
345 /* For a TYPE_DECL, use the type instead. */
346 if (TREE_CODE (node) == TYPE_DECL)
347 node = TREE_TYPE (node);
348 if (TYPE_P (node)
349 && TYPE_CANONICAL (node) != node
350 && TYPE_MAIN_VARIANT (node) != node)
352 /* Here we want to strip the topmost typedef only.
353 We need to do that so is_std_substitution can do proper
354 name matching. */
355 if (TREE_CODE (node) == FUNCTION_TYPE)
356 /* Use build_qualified_type and TYPE_QUALS here to preserve
357 the old buggy mangling of attribute noreturn with abi<5. */
358 node = build_qualified_type (TYPE_MAIN_VARIANT (node),
359 TYPE_QUALS (node));
360 else
361 node = cp_build_qualified_type (TYPE_MAIN_VARIANT (node),
362 cp_type_quals (node));
364 return node;
367 /* Add NODE as a substitution candidate. NODE must not already be on
368 the list of candidates. */
370 static void
371 add_substitution (tree node)
373 tree c;
375 if (DEBUG_MANGLE)
376 fprintf (stderr, " ++ add_substitution (%s at %10p)\n",
377 tree_code_name[TREE_CODE (node)], (void *) node);
379 /* Get the canonicalized substitution candidate for NODE. */
380 c = canonicalize_for_substitution (node);
381 if (DEBUG_MANGLE && c != node)
382 fprintf (stderr, " ++ using candidate (%s at %10p)\n",
383 tree_code_name[TREE_CODE (node)], (void *) node);
384 node = c;
386 #if ENABLE_CHECKING
387 /* Make sure NODE isn't already a candidate. */
389 int i;
390 tree candidate;
392 FOR_EACH_VEC_ELT (tree, G.substitutions, i, candidate)
394 gcc_assert (!(DECL_P (node) && node == candidate));
395 gcc_assert (!(TYPE_P (node) && TYPE_P (candidate)
396 && same_type_p (node, candidate)));
399 #endif /* ENABLE_CHECKING */
401 /* Put the decl onto the varray of substitution candidates. */
402 VEC_safe_push (tree, gc, G.substitutions, node);
404 if (DEBUG_MANGLE)
405 dump_substitution_candidates ();
408 /* Helper function for find_substitution. Returns nonzero if NODE,
409 which may be a decl or a CLASS_TYPE, is a template-id with template
410 name of substitution_index[INDEX] in the ::std namespace. */
412 static inline int
413 is_std_substitution (const tree node,
414 const substitution_identifier_index_t index)
416 tree type = NULL;
417 tree decl = NULL;
419 if (DECL_P (node))
421 type = TREE_TYPE (node);
422 decl = node;
424 else if (CLASS_TYPE_P (node))
426 type = node;
427 decl = TYPE_NAME (node);
429 else
430 /* These are not the droids you're looking for. */
431 return 0;
433 return (DECL_NAMESPACE_STD_P (CP_DECL_CONTEXT (decl))
434 && TYPE_LANG_SPECIFIC (type)
435 && TYPE_TEMPLATE_INFO (type)
436 && (DECL_NAME (TYPE_TI_TEMPLATE (type))
437 == subst_identifiers[index]));
440 /* Helper function for find_substitution. Returns nonzero if NODE,
441 which may be a decl or a CLASS_TYPE, is the template-id
442 ::std::identifier<char>, where identifier is
443 substitution_index[INDEX]. */
445 static inline int
446 is_std_substitution_char (const tree node,
447 const substitution_identifier_index_t index)
449 tree args;
450 /* Check NODE's name is ::std::identifier. */
451 if (!is_std_substitution (node, index))
452 return 0;
453 /* Figure out its template args. */
454 if (DECL_P (node))
455 args = DECL_TI_ARGS (node);
456 else if (CLASS_TYPE_P (node))
457 args = CLASSTYPE_TI_ARGS (node);
458 else
459 /* Oops, not a template. */
460 return 0;
461 /* NODE's template arg list should be <char>. */
462 return
463 TREE_VEC_LENGTH (args) == 1
464 && TREE_VEC_ELT (args, 0) == char_type_node;
467 /* Check whether a substitution should be used to represent NODE in
468 the mangling.
470 First, check standard special-case substitutions.
472 <substitution> ::= St
473 # ::std
475 ::= Sa
476 # ::std::allocator
478 ::= Sb
479 # ::std::basic_string
481 ::= Ss
482 # ::std::basic_string<char,
483 ::std::char_traits<char>,
484 ::std::allocator<char> >
486 ::= Si
487 # ::std::basic_istream<char, ::std::char_traits<char> >
489 ::= So
490 # ::std::basic_ostream<char, ::std::char_traits<char> >
492 ::= Sd
493 # ::std::basic_iostream<char, ::std::char_traits<char> >
495 Then examine the stack of currently available substitution
496 candidates for entities appearing earlier in the same mangling
498 If a substitution is found, write its mangled representation and
499 return nonzero. If none is found, just return zero. */
501 static int
502 find_substitution (tree node)
504 int i;
505 const int size = VEC_length (tree, G.substitutions);
506 tree decl;
507 tree type;
509 if (DEBUG_MANGLE)
510 fprintf (stderr, " ++ find_substitution (%s at %p)\n",
511 tree_code_name[TREE_CODE (node)], (void *) node);
513 /* Obtain the canonicalized substitution representation for NODE.
514 This is what we'll compare against. */
515 node = canonicalize_for_substitution (node);
517 /* Check for builtin substitutions. */
519 decl = TYPE_P (node) ? TYPE_NAME (node) : node;
520 type = TYPE_P (node) ? node : TREE_TYPE (node);
522 /* Check for std::allocator. */
523 if (decl
524 && is_std_substitution (decl, SUBID_ALLOCATOR)
525 && !CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)))
527 write_string ("Sa");
528 return 1;
531 /* Check for std::basic_string. */
532 if (decl && is_std_substitution (decl, SUBID_BASIC_STRING))
534 if (TYPE_P (node))
536 /* If this is a type (i.e. a fully-qualified template-id),
537 check for
538 std::basic_string <char,
539 std::char_traits<char>,
540 std::allocator<char> > . */
541 if (cp_type_quals (type) == TYPE_UNQUALIFIED
542 && CLASSTYPE_USE_TEMPLATE (type))
544 tree args = CLASSTYPE_TI_ARGS (type);
545 if (TREE_VEC_LENGTH (args) == 3
546 && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
547 && is_std_substitution_char (TREE_VEC_ELT (args, 1),
548 SUBID_CHAR_TRAITS)
549 && is_std_substitution_char (TREE_VEC_ELT (args, 2),
550 SUBID_ALLOCATOR))
552 write_string ("Ss");
553 return 1;
557 else
558 /* Substitute for the template name only if this isn't a type. */
560 write_string ("Sb");
561 return 1;
565 /* Check for basic_{i,o,io}stream. */
566 if (TYPE_P (node)
567 && cp_type_quals (type) == TYPE_UNQUALIFIED
568 && CLASS_TYPE_P (type)
569 && CLASSTYPE_USE_TEMPLATE (type)
570 && CLASSTYPE_TEMPLATE_INFO (type) != NULL)
572 /* First, check for the template
573 args <char, std::char_traits<char> > . */
574 tree args = CLASSTYPE_TI_ARGS (type);
575 if (TREE_VEC_LENGTH (args) == 2
576 && TYPE_P (TREE_VEC_ELT (args, 0))
577 && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
578 && is_std_substitution_char (TREE_VEC_ELT (args, 1),
579 SUBID_CHAR_TRAITS))
581 /* Got them. Is this basic_istream? */
582 if (is_std_substitution (decl, SUBID_BASIC_ISTREAM))
584 write_string ("Si");
585 return 1;
587 /* Or basic_ostream? */
588 else if (is_std_substitution (decl, SUBID_BASIC_OSTREAM))
590 write_string ("So");
591 return 1;
593 /* Or basic_iostream? */
594 else if (is_std_substitution (decl, SUBID_BASIC_IOSTREAM))
596 write_string ("Sd");
597 return 1;
602 /* Check for namespace std. */
603 if (decl && DECL_NAMESPACE_STD_P (decl))
605 write_string ("St");
606 return 1;
609 /* Now check the list of available substitutions for this mangling
610 operation. */
611 for (i = 0; i < size; ++i)
613 tree candidate = VEC_index (tree, G.substitutions, i);
614 /* NODE is a matched to a candidate if it's the same decl node or
615 if it's the same type. */
616 if (decl == candidate
617 || (TYPE_P (candidate) && type && TYPE_P (type)
618 && same_type_p (type, candidate))
619 || NESTED_TEMPLATE_MATCH (node, candidate))
621 write_substitution (i);
622 return 1;
626 /* No substitution found. */
627 return 0;
631 /* TOP_LEVEL is true, if this is being called at outermost level of
632 mangling. It should be false when mangling a decl appearing in an
633 expression within some other mangling.
635 <mangled-name> ::= _Z <encoding> */
637 static void
638 write_mangled_name (const tree decl, bool top_level)
640 MANGLE_TRACE_TREE ("mangled-name", decl);
642 if (/* The names of `extern "C"' functions are not mangled. */
643 DECL_EXTERN_C_FUNCTION_P (decl)
644 /* But overloaded operator names *are* mangled. */
645 && !DECL_OVERLOADED_OPERATOR_P (decl))
647 unmangled_name:;
649 if (top_level)
650 write_string (IDENTIFIER_POINTER (DECL_NAME (decl)));
651 else
653 /* The standard notes: "The <encoding> of an extern "C"
654 function is treated like global-scope data, i.e. as its
655 <source-name> without a type." We cannot write
656 overloaded operators that way though, because it contains
657 characters invalid in assembler. */
658 if (abi_version_at_least (2))
659 write_string ("_Z");
660 else
661 G.need_abi_warning = true;
662 write_source_name (DECL_NAME (decl));
665 else if (TREE_CODE (decl) == VAR_DECL
666 /* The names of non-static global variables aren't mangled. */
667 && DECL_EXTERNAL_LINKAGE_P (decl)
668 && (CP_DECL_CONTEXT (decl) == global_namespace
669 /* And neither are `extern "C"' variables. */
670 || DECL_EXTERN_C_P (decl)))
672 if (top_level || abi_version_at_least (2))
673 goto unmangled_name;
674 else
676 G.need_abi_warning = true;
677 goto mangled_name;
680 else
682 mangled_name:;
683 write_string ("_Z");
684 write_encoding (decl);
685 if (DECL_LANG_SPECIFIC (decl)
686 && (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl)
687 || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)))
688 /* We need a distinct mangled name for these entities, but
689 we should never actually output it. So, we append some
690 characters the assembler won't like. */
691 write_string (" *INTERNAL* ");
695 /* <encoding> ::= <function name> <bare-function-type>
696 ::= <data name> */
698 static void
699 write_encoding (const tree decl)
701 MANGLE_TRACE_TREE ("encoding", decl);
703 if (DECL_LANG_SPECIFIC (decl) && DECL_EXTERN_C_FUNCTION_P (decl))
705 /* For overloaded operators write just the mangled name
706 without arguments. */
707 if (DECL_OVERLOADED_OPERATOR_P (decl))
708 write_name (decl, /*ignore_local_scope=*/0);
709 else
710 write_source_name (DECL_NAME (decl));
711 return;
714 write_name (decl, /*ignore_local_scope=*/0);
715 if (TREE_CODE (decl) == FUNCTION_DECL)
717 tree fn_type;
718 tree d;
720 if (decl_is_template_id (decl, NULL))
722 fn_type = get_mostly_instantiated_function_type (decl);
723 /* FN_TYPE will not have parameter types for in-charge or
724 VTT parameters. Therefore, we pass NULL_TREE to
725 write_bare_function_type -- otherwise, it will get
726 confused about which artificial parameters to skip. */
727 d = NULL_TREE;
729 else
731 fn_type = TREE_TYPE (decl);
732 d = decl;
735 write_bare_function_type (fn_type,
736 (!DECL_CONSTRUCTOR_P (decl)
737 && !DECL_DESTRUCTOR_P (decl)
738 && !DECL_CONV_FN_P (decl)
739 && decl_is_template_id (decl, NULL)),
744 /* Lambdas can have a bit more context for mangling, specifically VAR_DECL
745 or PARM_DECL context, which doesn't belong in DECL_CONTEXT. */
747 static tree
748 decl_mangling_context (tree decl)
750 if (TREE_CODE (decl) == TYPE_DECL
751 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
753 tree extra = LAMBDA_TYPE_EXTRA_SCOPE (TREE_TYPE (decl));
754 if (extra)
755 return extra;
757 else if (TREE_CODE (decl) == TYPE_DECL
758 && TREE_CODE (TREE_TYPE (decl)) == TEMPLATE_TYPE_PARM)
759 /* template type parms have no mangling context. */
760 return NULL_TREE;
761 return CP_DECL_CONTEXT (decl);
764 /* <name> ::= <unscoped-name>
765 ::= <unscoped-template-name> <template-args>
766 ::= <nested-name>
767 ::= <local-name>
769 If IGNORE_LOCAL_SCOPE is nonzero, this production of <name> is
770 called from <local-name>, which mangles the enclosing scope
771 elsewhere and then uses this function to mangle just the part
772 underneath the function scope. So don't use the <local-name>
773 production, to avoid an infinite recursion. */
775 static void
776 write_name (tree decl, const int ignore_local_scope)
778 tree context;
780 MANGLE_TRACE_TREE ("name", decl);
782 if (TREE_CODE (decl) == TYPE_DECL)
784 /* In case this is a typedef, fish out the corresponding
785 TYPE_DECL for the main variant. */
786 decl = TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl)));
789 context = decl_mangling_context (decl);
791 /* A decl in :: or ::std scope is treated specially. The former is
792 mangled using <unscoped-name> or <unscoped-template-name>, the
793 latter with a special substitution. Also, a name that is
794 directly in a local function scope is also mangled with
795 <unscoped-name> rather than a full <nested-name>. */
796 if (context == NULL
797 || context == global_namespace
798 || DECL_NAMESPACE_STD_P (context)
799 || (ignore_local_scope && TREE_CODE (context) == FUNCTION_DECL))
801 tree template_info;
802 /* Is this a template instance? */
803 if (decl_is_template_id (decl, &template_info))
805 /* Yes: use <unscoped-template-name>. */
806 write_unscoped_template_name (TI_TEMPLATE (template_info));
807 write_template_args (TI_ARGS (template_info));
809 else
810 /* Everything else gets an <unqualified-name>. */
811 write_unscoped_name (decl);
813 else
815 /* Handle local names, unless we asked not to (that is, invoked
816 under <local-name>, to handle only the part of the name under
817 the local scope). */
818 if (!ignore_local_scope)
820 /* Scan up the list of scope context, looking for a
821 function. If we find one, this entity is in local
822 function scope. local_entity tracks context one scope
823 level down, so it will contain the element that's
824 directly in that function's scope, either decl or one of
825 its enclosing scopes. */
826 tree local_entity = decl;
827 while (context != NULL && context != global_namespace)
829 /* Make sure we're always dealing with decls. */
830 if (context != NULL && TYPE_P (context))
831 context = TYPE_NAME (context);
832 /* Is this a function? */
833 if (TREE_CODE (context) == FUNCTION_DECL
834 || TREE_CODE (context) == PARM_DECL)
836 /* Yes, we have local scope. Use the <local-name>
837 production for the innermost function scope. */
838 write_local_name (context, local_entity, decl);
839 return;
841 /* Up one scope level. */
842 local_entity = context;
843 context = decl_mangling_context (context);
846 /* No local scope found? Fall through to <nested-name>. */
849 /* Other decls get a <nested-name> to encode their scope. */
850 write_nested_name (decl);
854 /* <unscoped-name> ::= <unqualified-name>
855 ::= St <unqualified-name> # ::std:: */
857 static void
858 write_unscoped_name (const tree decl)
860 tree context = CP_DECL_CONTEXT (decl);
862 MANGLE_TRACE_TREE ("unscoped-name", decl);
864 /* Is DECL in ::std? */
865 if (DECL_NAMESPACE_STD_P (context))
867 write_string ("St");
868 write_unqualified_name (decl);
870 else
872 /* If not, it should be either in the global namespace, or directly
873 in a local function scope. */
874 gcc_assert (context == global_namespace
875 || context != NULL
876 || TREE_CODE (context) == FUNCTION_DECL);
878 write_unqualified_name (decl);
882 /* <unscoped-template-name> ::= <unscoped-name>
883 ::= <substitution> */
885 static void
886 write_unscoped_template_name (const tree decl)
888 MANGLE_TRACE_TREE ("unscoped-template-name", decl);
890 if (find_substitution (decl))
891 return;
892 write_unscoped_name (decl);
893 add_substitution (decl);
896 /* Write the nested name, including CV-qualifiers, of DECL.
898 <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
899 ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
901 <CV-qualifiers> ::= [r] [V] [K] */
903 static void
904 write_nested_name (const tree decl)
906 tree template_info;
908 MANGLE_TRACE_TREE ("nested-name", decl);
910 write_char ('N');
912 /* Write CV-qualifiers, if this is a member function. */
913 if (TREE_CODE (decl) == FUNCTION_DECL
914 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
916 if (DECL_VOLATILE_MEMFUNC_P (decl))
917 write_char ('V');
918 if (DECL_CONST_MEMFUNC_P (decl))
919 write_char ('K');
922 /* Is this a template instance? */
923 if (decl_is_template_id (decl, &template_info))
925 /* Yes, use <template-prefix>. */
926 write_template_prefix (decl);
927 write_template_args (TI_ARGS (template_info));
929 else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
931 tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
932 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
934 write_template_prefix (decl);
935 write_template_args (TREE_OPERAND (name, 1));
937 else
939 write_prefix (CP_DECL_CONTEXT (decl));
940 write_unqualified_name (decl);
943 else
945 /* No, just use <prefix> */
946 write_prefix (DECL_CONTEXT (decl));
947 write_unqualified_name (decl);
949 write_char ('E');
952 /* <prefix> ::= <prefix> <unqualified-name>
953 ::= <template-param>
954 ::= <template-prefix> <template-args>
955 ::= # empty
956 ::= <substitution> */
958 static void
959 write_prefix (const tree node)
961 tree decl;
962 /* Non-NULL if NODE represents a template-id. */
963 tree template_info = NULL;
965 if (node == NULL
966 || node == global_namespace)
967 return;
969 MANGLE_TRACE_TREE ("prefix", node);
971 if (find_substitution (node))
972 return;
974 if (DECL_P (node))
976 /* If this is a function or parm decl, that means we've hit function
977 scope, so this prefix must be for a local name. In this
978 case, we're under the <local-name> production, which encodes
979 the enclosing function scope elsewhere. So don't continue
980 here. */
981 if (TREE_CODE (node) == FUNCTION_DECL
982 || TREE_CODE (node) == PARM_DECL)
983 return;
985 decl = node;
986 decl_is_template_id (decl, &template_info);
988 else
990 /* Node is a type. */
991 decl = TYPE_NAME (node);
992 if (CLASSTYPE_TEMPLATE_ID_P (node))
993 template_info = TYPE_TEMPLATE_INFO (node);
996 /* In G++ 3.2, the name of the template parameter was used. */
997 if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
998 && !abi_version_at_least (2))
999 G.need_abi_warning = true;
1001 if (TREE_CODE (node) == TEMPLATE_TYPE_PARM
1002 && abi_version_at_least (2))
1003 write_template_param (node);
1004 else if (template_info != NULL)
1005 /* Templated. */
1007 write_template_prefix (decl);
1008 write_template_args (TI_ARGS (template_info));
1010 else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
1012 tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
1013 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
1015 write_template_prefix (decl);
1016 write_template_args (TREE_OPERAND (name, 1));
1018 else
1020 write_prefix (CP_DECL_CONTEXT (decl));
1021 write_unqualified_name (decl);
1024 else
1025 /* Not templated. */
1027 write_prefix (decl_mangling_context (decl));
1028 write_unqualified_name (decl);
1029 if (TREE_CODE (decl) == VAR_DECL
1030 || TREE_CODE (decl) == FIELD_DECL)
1032 /* <data-member-prefix> := <member source-name> M */
1033 write_char ('M');
1034 return;
1038 add_substitution (node);
1041 /* <template-prefix> ::= <prefix> <template component>
1042 ::= <template-param>
1043 ::= <substitution> */
1045 static void
1046 write_template_prefix (const tree node)
1048 tree decl = DECL_P (node) ? node : TYPE_NAME (node);
1049 tree type = DECL_P (node) ? TREE_TYPE (node) : node;
1050 tree context = CP_DECL_CONTEXT (decl);
1051 tree template_info;
1052 tree templ;
1053 tree substitution;
1055 MANGLE_TRACE_TREE ("template-prefix", node);
1057 /* Find the template decl. */
1058 if (decl_is_template_id (decl, &template_info))
1059 templ = TI_TEMPLATE (template_info);
1060 else if (TREE_CODE (type) == TYPENAME_TYPE)
1061 /* For a typename type, all we have is the name. */
1062 templ = DECL_NAME (decl);
1063 else
1065 gcc_assert (CLASSTYPE_TEMPLATE_ID_P (type));
1067 templ = TYPE_TI_TEMPLATE (type);
1070 /* For a member template, though, the template name for the
1071 innermost name must have all the outer template levels
1072 instantiated. For instance, consider
1074 template<typename T> struct Outer {
1075 template<typename U> struct Inner {};
1078 The template name for `Inner' in `Outer<int>::Inner<float>' is
1079 `Outer<int>::Inner<U>'. In g++, we don't instantiate the template
1080 levels separately, so there's no TEMPLATE_DECL available for this
1081 (there's only `Outer<T>::Inner<U>').
1083 In order to get the substitutions right, we create a special
1084 TREE_LIST to represent the substitution candidate for a nested
1085 template. The TREE_PURPOSE is the template's context, fully
1086 instantiated, and the TREE_VALUE is the TEMPLATE_DECL for the inner
1087 template.
1089 So, for the example above, `Outer<int>::Inner' is represented as a
1090 substitution candidate by a TREE_LIST whose purpose is `Outer<int>'
1091 and whose value is `Outer<T>::Inner<U>'. */
1092 if (TYPE_P (context))
1093 substitution = build_tree_list (context, templ);
1094 else
1095 substitution = templ;
1097 if (find_substitution (substitution))
1098 return;
1100 /* In G++ 3.2, the name of the template template parameter was used. */
1101 if (TREE_TYPE (templ)
1102 && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM
1103 && !abi_version_at_least (2))
1104 G.need_abi_warning = true;
1106 if (TREE_TYPE (templ)
1107 && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM
1108 && abi_version_at_least (2))
1109 write_template_param (TREE_TYPE (templ));
1110 else
1112 write_prefix (context);
1113 write_unqualified_name (decl);
1116 add_substitution (substitution);
1119 /* We don't need to handle thunks, vtables, or VTTs here. Those are
1120 mangled through special entry points.
1122 <unqualified-name> ::= <operator-name>
1123 ::= <special-name>
1124 ::= <source-name>
1125 ::= <unnamed-type-name>
1126 ::= <local-source-name>
1128 <local-source-name> ::= L <source-name> <discriminator> */
1130 static void
1131 write_unqualified_id (tree identifier)
1133 if (IDENTIFIER_TYPENAME_P (identifier))
1134 write_conversion_operator_name (TREE_TYPE (identifier));
1135 else if (IDENTIFIER_OPNAME_P (identifier))
1137 int i;
1138 const char *mangled_name = NULL;
1140 /* Unfortunately, there is no easy way to go from the
1141 name of the operator back to the corresponding tree
1142 code. */
1143 for (i = 0; i < MAX_TREE_CODES; ++i)
1144 if (operator_name_info[i].identifier == identifier)
1146 /* The ABI says that we prefer binary operator
1147 names to unary operator names. */
1148 if (operator_name_info[i].arity == 2)
1150 mangled_name = operator_name_info[i].mangled_name;
1151 break;
1153 else if (!mangled_name)
1154 mangled_name = operator_name_info[i].mangled_name;
1156 else if (assignment_operator_name_info[i].identifier
1157 == identifier)
1159 mangled_name
1160 = assignment_operator_name_info[i].mangled_name;
1161 break;
1163 write_string (mangled_name);
1165 else
1166 write_source_name (identifier);
1169 static void
1170 write_unqualified_name (const tree decl)
1172 MANGLE_TRACE_TREE ("unqualified-name", decl);
1174 if (TREE_CODE (decl) == IDENTIFIER_NODE)
1176 write_unqualified_id (decl);
1177 return;
1180 if (DECL_NAME (decl) == NULL_TREE)
1182 gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
1183 write_source_name (DECL_ASSEMBLER_NAME (decl));
1184 return;
1186 else if (DECL_DECLARES_FUNCTION_P (decl))
1188 bool found = true;
1189 if (DECL_CONSTRUCTOR_P (decl))
1190 write_special_name_constructor (decl);
1191 else if (DECL_DESTRUCTOR_P (decl))
1192 write_special_name_destructor (decl);
1193 else if (DECL_CONV_FN_P (decl))
1195 /* Conversion operator. Handle it right here.
1196 <operator> ::= cv <type> */
1197 tree type;
1198 if (decl_is_template_id (decl, NULL))
1200 tree fn_type;
1201 fn_type = get_mostly_instantiated_function_type (decl);
1202 type = TREE_TYPE (fn_type);
1204 else
1205 type = DECL_CONV_FN_TYPE (decl);
1206 write_conversion_operator_name (type);
1208 else if (DECL_OVERLOADED_OPERATOR_P (decl))
1210 operator_name_info_t *oni;
1211 if (DECL_ASSIGNMENT_OPERATOR_P (decl))
1212 oni = assignment_operator_name_info;
1213 else
1214 oni = operator_name_info;
1216 write_string (oni[DECL_OVERLOADED_OPERATOR_P (decl)].mangled_name);
1218 else
1219 found = false;
1221 if (found)
1222 return;
1225 if (VAR_OR_FUNCTION_DECL_P (decl) && ! TREE_PUBLIC (decl)
1226 && DECL_NAMESPACE_SCOPE_P (decl)
1227 && decl_linkage (decl) == lk_internal)
1229 MANGLE_TRACE_TREE ("local-source-name", decl);
1230 write_char ('L');
1231 write_source_name (DECL_NAME (decl));
1232 /* The default discriminator is 1, and that's all we ever use,
1233 so there's no code to output one here. */
1235 else
1237 tree type = TREE_TYPE (decl);
1239 if (TREE_CODE (decl) == TYPE_DECL
1240 && TYPE_ANONYMOUS_P (type))
1241 write_unnamed_type_name (type);
1242 else if (TREE_CODE (decl) == TYPE_DECL
1243 && LAMBDA_TYPE_P (type))
1244 write_closure_type_name (type);
1245 else
1246 write_source_name (DECL_NAME (decl));
1250 /* Write the unqualified-name for a conversion operator to TYPE. */
1252 static void
1253 write_conversion_operator_name (const tree type)
1255 write_string ("cv");
1256 write_type (type);
1259 /* Non-terminal <source-name>. IDENTIFIER is an IDENTIFIER_NODE.
1261 <source-name> ::= </length/ number> <identifier> */
1263 static void
1264 write_source_name (tree identifier)
1266 MANGLE_TRACE_TREE ("source-name", identifier);
1268 /* Never write the whole template-id name including the template
1269 arguments; we only want the template name. */
1270 if (IDENTIFIER_TEMPLATE (identifier))
1271 identifier = IDENTIFIER_TEMPLATE (identifier);
1273 write_unsigned_number (IDENTIFIER_LENGTH (identifier));
1274 write_identifier (IDENTIFIER_POINTER (identifier));
1277 /* Encode 0 as _, and 1+ as n-1_. */
1279 static void
1280 write_compact_number (int num)
1282 if (num > 0)
1283 write_unsigned_number (num - 1);
1284 write_char ('_');
1287 /* Return how many unnamed types precede TYPE in its enclosing class. */
1289 static int
1290 nested_anon_class_index (tree type)
1292 int index = 0;
1293 tree member = TYPE_FIELDS (TYPE_CONTEXT (type));
1294 for (; member; member = DECL_CHAIN (member))
1295 if (DECL_IMPLICIT_TYPEDEF_P (member))
1297 tree memtype = TREE_TYPE (member);
1298 if (memtype == type)
1299 return index;
1300 else if (TYPE_ANONYMOUS_P (memtype))
1301 ++index;
1304 gcc_unreachable ();
1307 /* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
1309 static void
1310 write_unnamed_type_name (const tree type __attribute__ ((__unused__)))
1312 int discriminator;
1313 MANGLE_TRACE_TREE ("unnamed-type-name", type);
1315 if (TYPE_FUNCTION_SCOPE_P (type))
1316 discriminator = local_class_index (type);
1317 else if (TYPE_CLASS_SCOPE_P (type))
1318 discriminator = nested_anon_class_index (type);
1319 else
1321 gcc_assert (no_linkage_check (type, /*relaxed_p=*/true));
1322 /* Just use the old mangling at namespace scope. */
1323 write_source_name (TYPE_IDENTIFIER (type));
1324 return;
1327 write_string ("Ut");
1328 write_compact_number (discriminator);
1331 /* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _
1332 <lambda-sig> ::= <parameter type>+ # Parameter types or "v" if the lambda has no parameters */
1334 static void
1335 write_closure_type_name (const tree type)
1337 tree fn = lambda_function (type);
1338 tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
1339 tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
1341 MANGLE_TRACE_TREE ("closure-type-name", type);
1343 write_string ("Ul");
1344 write_method_parms (parms, /*method_p=*/1, fn);
1345 write_char ('E');
1346 write_compact_number (LAMBDA_EXPR_DISCRIMINATOR (lambda));
1349 /* Convert NUMBER to ascii using base BASE and generating at least
1350 MIN_DIGITS characters. BUFFER points to the _end_ of the buffer
1351 into which to store the characters. Returns the number of
1352 characters generated (these will be layed out in advance of where
1353 BUFFER points). */
1355 static int
1356 hwint_to_ascii (unsigned HOST_WIDE_INT number, const unsigned int base,
1357 char *buffer, const unsigned int min_digits)
1359 static const char base_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1360 unsigned digits = 0;
1362 while (number)
1364 unsigned HOST_WIDE_INT d = number / base;
1366 *--buffer = base_digits[number - d * base];
1367 digits++;
1368 number = d;
1370 while (digits < min_digits)
1372 *--buffer = base_digits[0];
1373 digits++;
1375 return digits;
1378 /* Non-terminal <number>.
1380 <number> ::= [n] </decimal integer/> */
1382 static void
1383 write_number (unsigned HOST_WIDE_INT number, const int unsigned_p,
1384 const unsigned int base)
1386 char buffer[sizeof (HOST_WIDE_INT) * 8];
1387 unsigned count = 0;
1389 if (!unsigned_p && (HOST_WIDE_INT) number < 0)
1391 write_char ('n');
1392 number = -((HOST_WIDE_INT) number);
1394 count = hwint_to_ascii (number, base, buffer + sizeof (buffer), 1);
1395 write_chars (buffer + sizeof (buffer) - count, count);
1398 /* Write out an integral CST in decimal. Most numbers are small, and
1399 representable in a HOST_WIDE_INT. Occasionally we'll have numbers
1400 bigger than that, which we must deal with. */
1402 static inline void
1403 write_integer_cst (const tree cst)
1405 int sign = tree_int_cst_sgn (cst);
1407 if (TREE_INT_CST_HIGH (cst) + (sign < 0))
1409 /* A bignum. We do this in chunks, each of which fits in a
1410 HOST_WIDE_INT. */
1411 char buffer[sizeof (HOST_WIDE_INT) * 8 * 2];
1412 unsigned HOST_WIDE_INT chunk;
1413 unsigned chunk_digits;
1414 char *ptr = buffer + sizeof (buffer);
1415 unsigned count = 0;
1416 tree n, base, type;
1417 int done;
1419 /* HOST_WIDE_INT must be at least 32 bits, so 10^9 is
1420 representable. */
1421 chunk = 1000000000;
1422 chunk_digits = 9;
1424 if (sizeof (HOST_WIDE_INT) >= 8)
1426 /* It is at least 64 bits, so 10^18 is representable. */
1427 chunk_digits = 18;
1428 chunk *= chunk;
1431 type = c_common_signed_or_unsigned_type (1, TREE_TYPE (cst));
1432 base = build_int_cstu (type, chunk);
1433 n = build_int_cst_wide (type,
1434 TREE_INT_CST_LOW (cst), TREE_INT_CST_HIGH (cst));
1436 if (sign < 0)
1438 write_char ('n');
1439 n = fold_build1_loc (input_location, NEGATE_EXPR, type, n);
1443 tree d = fold_build2_loc (input_location, FLOOR_DIV_EXPR, type, n, base);
1444 tree tmp = fold_build2_loc (input_location, MULT_EXPR, type, d, base);
1445 unsigned c;
1447 done = integer_zerop (d);
1448 tmp = fold_build2_loc (input_location, MINUS_EXPR, type, n, tmp);
1449 c = hwint_to_ascii (TREE_INT_CST_LOW (tmp), 10, ptr,
1450 done ? 1 : chunk_digits);
1451 ptr -= c;
1452 count += c;
1453 n = d;
1455 while (!done);
1456 write_chars (ptr, count);
1458 else
1460 /* A small num. */
1461 unsigned HOST_WIDE_INT low = TREE_INT_CST_LOW (cst);
1463 if (sign < 0)
1465 write_char ('n');
1466 low = -low;
1468 write_unsigned_number (low);
1472 /* Write out a floating-point literal.
1474 "Floating-point literals are encoded using the bit pattern of the
1475 target processor's internal representation of that number, as a
1476 fixed-length lowercase hexadecimal string, high-order bytes first
1477 (even if the target processor would store low-order bytes first).
1478 The "n" prefix is not used for floating-point literals; the sign
1479 bit is encoded with the rest of the number.
1481 Here are some examples, assuming the IEEE standard representation
1482 for floating point numbers. (Spaces are for readability, not
1483 part of the encoding.)
1485 1.0f Lf 3f80 0000 E
1486 -1.0f Lf bf80 0000 E
1487 1.17549435e-38f Lf 0080 0000 E
1488 1.40129846e-45f Lf 0000 0001 E
1489 0.0f Lf 0000 0000 E"
1491 Caller is responsible for the Lx and the E. */
1492 static void
1493 write_real_cst (const tree value)
1495 if (abi_version_at_least (2))
1497 long target_real[4]; /* largest supported float */
1498 char buffer[9]; /* eight hex digits in a 32-bit number */
1499 int i, limit, dir;
1501 tree type = TREE_TYPE (value);
1502 int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32;
1504 real_to_target (target_real, &TREE_REAL_CST (value),
1505 TYPE_MODE (type));
1507 /* The value in target_real is in the target word order,
1508 so we must write it out backward if that happens to be
1509 little-endian. write_number cannot be used, it will
1510 produce uppercase. */
1511 if (FLOAT_WORDS_BIG_ENDIAN)
1512 i = 0, limit = words, dir = 1;
1513 else
1514 i = words - 1, limit = -1, dir = -1;
1516 for (; i != limit; i += dir)
1518 sprintf (buffer, "%08lx", (unsigned long) target_real[i]);
1519 write_chars (buffer, 8);
1522 else
1524 /* In G++ 3.3 and before the REAL_VALUE_TYPE was written out
1525 literally. Note that compatibility with 3.2 is impossible,
1526 because the old floating-point emulator used a different
1527 format for REAL_VALUE_TYPE. */
1528 size_t i;
1529 for (i = 0; i < sizeof (TREE_REAL_CST (value)); ++i)
1530 write_number (((unsigned char *) &TREE_REAL_CST (value))[i],
1531 /*unsigned_p*/ 1,
1532 /*base*/ 16);
1533 G.need_abi_warning = 1;
1537 /* Non-terminal <identifier>.
1539 <identifier> ::= </unqualified source code identifier> */
1541 static void
1542 write_identifier (const char *identifier)
1544 MANGLE_TRACE ("identifier", identifier);
1545 write_string (identifier);
1548 /* Handle constructor productions of non-terminal <special-name>.
1549 CTOR is a constructor FUNCTION_DECL.
1551 <special-name> ::= C1 # complete object constructor
1552 ::= C2 # base object constructor
1553 ::= C3 # complete object allocating constructor
1555 Currently, allocating constructors are never used.
1557 We also need to provide mangled names for the maybe-in-charge
1558 constructor, so we treat it here too. mangle_decl_string will
1559 append *INTERNAL* to that, to make sure we never emit it. */
1561 static void
1562 write_special_name_constructor (const tree ctor)
1564 if (DECL_BASE_CONSTRUCTOR_P (ctor))
1565 write_string ("C2");
1566 else
1568 gcc_assert (DECL_COMPLETE_CONSTRUCTOR_P (ctor)
1569 /* Even though we don't ever emit a definition of
1570 the old-style destructor, we still have to
1571 consider entities (like static variables) nested
1572 inside it. */
1573 || DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (ctor));
1574 write_string ("C1");
1578 /* Handle destructor productions of non-terminal <special-name>.
1579 DTOR is a destructor FUNCTION_DECL.
1581 <special-name> ::= D0 # deleting (in-charge) destructor
1582 ::= D1 # complete object (in-charge) destructor
1583 ::= D2 # base object (not-in-charge) destructor
1585 We also need to provide mangled names for the maybe-incharge
1586 destructor, so we treat it here too. mangle_decl_string will
1587 append *INTERNAL* to that, to make sure we never emit it. */
1589 static void
1590 write_special_name_destructor (const tree dtor)
1592 if (DECL_DELETING_DESTRUCTOR_P (dtor))
1593 write_string ("D0");
1594 else if (DECL_BASE_DESTRUCTOR_P (dtor))
1595 write_string ("D2");
1596 else
1598 gcc_assert (DECL_COMPLETE_DESTRUCTOR_P (dtor)
1599 /* Even though we don't ever emit a definition of
1600 the old-style destructor, we still have to
1601 consider entities (like static variables) nested
1602 inside it. */
1603 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (dtor));
1604 write_string ("D1");
1608 /* Scan the vector of local classes and return how many others with the
1609 same name (or same no name) and context precede ENTITY. */
1611 static int
1612 local_class_index (tree entity)
1614 int ix, discriminator = 0;
1615 tree name = (TYPE_ANONYMOUS_P (entity) ? NULL_TREE
1616 : TYPE_IDENTIFIER (entity));
1617 tree ctx = TYPE_CONTEXT (entity);
1618 for (ix = 0; ; ix++)
1620 tree type = VEC_index (tree, local_classes, ix);
1621 if (type == entity)
1622 return discriminator;
1623 if (TYPE_CONTEXT (type) == ctx
1624 && (name ? TYPE_IDENTIFIER (type) == name
1625 : TYPE_ANONYMOUS_P (type)))
1626 ++discriminator;
1628 gcc_unreachable ();
1631 /* Return the discriminator for ENTITY appearing inside
1632 FUNCTION. The discriminator is the lexical ordinal of VAR among
1633 entities with the same name in the same FUNCTION. */
1635 static int
1636 discriminator_for_local_entity (tree entity)
1638 if (DECL_DISCRIMINATOR_P (entity))
1640 if (DECL_DISCRIMINATOR_SET_P (entity))
1641 return DECL_DISCRIMINATOR (entity);
1642 else
1643 /* The first entity with a particular name doesn't get
1644 DECL_DISCRIMINATOR set up. */
1645 return 0;
1647 else if (TREE_CODE (entity) == TYPE_DECL)
1649 /* Scan the list of local classes. */
1650 entity = TREE_TYPE (entity);
1652 /* Lambdas and unnamed types have their own discriminators. */
1653 if (LAMBDA_TYPE_P (entity) || TYPE_ANONYMOUS_P (entity))
1654 return 0;
1656 return local_class_index (entity);
1658 else
1659 gcc_unreachable ();
1662 /* Return the discriminator for STRING, a string literal used inside
1663 FUNCTION. The discriminator is the lexical ordinal of STRING among
1664 string literals used in FUNCTION. */
1666 static int
1667 discriminator_for_string_literal (tree function ATTRIBUTE_UNUSED,
1668 tree string ATTRIBUTE_UNUSED)
1670 /* For now, we don't discriminate amongst string literals. */
1671 return 0;
1674 /* <discriminator> := _ <number>
1676 The discriminator is used only for the second and later occurrences
1677 of the same name within a single function. In this case <number> is
1678 n - 2, if this is the nth occurrence, in lexical order. */
1680 static void
1681 write_discriminator (const int discriminator)
1683 /* If discriminator is zero, don't write anything. Otherwise... */
1684 if (discriminator > 0)
1686 write_char ('_');
1687 write_unsigned_number (discriminator - 1);
1691 /* Mangle the name of a function-scope entity. FUNCTION is the
1692 FUNCTION_DECL for the enclosing function, or a PARM_DECL for lambdas in
1693 default argument scope. ENTITY is the decl for the entity itself.
1694 LOCAL_ENTITY is the entity that's directly scoped in FUNCTION_DECL,
1695 either ENTITY itself or an enclosing scope of ENTITY.
1697 <local-name> := Z <function encoding> E <entity name> [<discriminator>]
1698 := Z <function encoding> E s [<discriminator>]
1699 := Z <function encoding> Ed [ <parameter number> ] _ <entity name> */
1701 static void
1702 write_local_name (tree function, const tree local_entity,
1703 const tree entity)
1705 tree parm = NULL_TREE;
1707 MANGLE_TRACE_TREE ("local-name", entity);
1709 if (TREE_CODE (function) == PARM_DECL)
1711 parm = function;
1712 function = DECL_CONTEXT (parm);
1715 write_char ('Z');
1716 write_encoding (function);
1717 write_char ('E');
1719 /* For this purpose, parameters are numbered from right-to-left. */
1720 if (parm)
1722 tree t;
1723 int i = 0;
1724 for (t = DECL_ARGUMENTS (function); t; t = DECL_CHAIN (t))
1726 if (t == parm)
1727 i = 1;
1728 else if (i)
1729 ++i;
1731 write_char ('d');
1732 write_compact_number (i - 1);
1735 if (TREE_CODE (entity) == STRING_CST)
1737 write_char ('s');
1738 write_discriminator (discriminator_for_string_literal (function,
1739 entity));
1741 else
1743 /* Now the <entity name>. Let write_name know its being called
1744 from <local-name>, so it doesn't try to process the enclosing
1745 function scope again. */
1746 write_name (entity, /*ignore_local_scope=*/1);
1747 write_discriminator (discriminator_for_local_entity (local_entity));
1751 /* Non-terminals <type> and <CV-qualifier>.
1753 <type> ::= <builtin-type>
1754 ::= <function-type>
1755 ::= <class-enum-type>
1756 ::= <array-type>
1757 ::= <pointer-to-member-type>
1758 ::= <template-param>
1759 ::= <substitution>
1760 ::= <CV-qualifier>
1761 ::= P <type> # pointer-to
1762 ::= R <type> # reference-to
1763 ::= C <type> # complex pair (C 2000)
1764 ::= G <type> # imaginary (C 2000) [not supported]
1765 ::= U <source-name> <type> # vendor extended type qualifier
1767 C++0x extensions
1769 <type> ::= RR <type> # rvalue reference-to
1770 <type> ::= Dt <expression> # decltype of an id-expression or
1771 # class member access
1772 <type> ::= DT <expression> # decltype of an expression
1773 <type> ::= Dn # decltype of nullptr
1775 TYPE is a type node. */
1777 static void
1778 write_type (tree type)
1780 /* This gets set to nonzero if TYPE turns out to be a (possibly
1781 CV-qualified) builtin type. */
1782 int is_builtin_type = 0;
1784 MANGLE_TRACE_TREE ("type", type);
1786 if (type == error_mark_node)
1787 return;
1789 type = canonicalize_for_substitution (type);
1790 if (find_substitution (type))
1791 return;
1793 /* According to the C++ ABI, some library classes are passed the
1794 same as the scalar type of their single member and use the same
1795 mangling. */
1796 if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
1797 type = TREE_TYPE (first_field (type));
1799 if (write_CV_qualifiers_for_type (type) > 0)
1800 /* If TYPE was CV-qualified, we just wrote the qualifiers; now
1801 mangle the unqualified type. The recursive call is needed here
1802 since both the qualified and unqualified types are substitution
1803 candidates. */
1804 write_type (TYPE_MAIN_VARIANT (type));
1805 else if (TREE_CODE (type) == ARRAY_TYPE)
1806 /* It is important not to use the TYPE_MAIN_VARIANT of TYPE here
1807 so that the cv-qualification of the element type is available
1808 in write_array_type. */
1809 write_array_type (type);
1810 else
1812 tree type_orig = type;
1814 /* See through any typedefs. */
1815 type = TYPE_MAIN_VARIANT (type);
1817 if (TYPE_PTRMEM_P (type))
1818 write_pointer_to_member_type (type);
1819 else
1821 /* Handle any target-specific fundamental types. */
1822 const char *target_mangling
1823 = targetm.mangle_type (type_orig);
1825 if (target_mangling)
1827 write_string (target_mangling);
1828 /* Add substitutions for types other than fundamental
1829 types. */
1830 if (TREE_CODE (type) != VOID_TYPE
1831 && TREE_CODE (type) != INTEGER_TYPE
1832 && TREE_CODE (type) != REAL_TYPE
1833 && TREE_CODE (type) != BOOLEAN_TYPE)
1834 add_substitution (type);
1835 return;
1838 switch (TREE_CODE (type))
1840 case VOID_TYPE:
1841 case BOOLEAN_TYPE:
1842 case INTEGER_TYPE: /* Includes wchar_t. */
1843 case REAL_TYPE:
1844 case FIXED_POINT_TYPE:
1846 /* If this is a typedef, TYPE may not be one of
1847 the standard builtin type nodes, but an alias of one. Use
1848 TYPE_MAIN_VARIANT to get to the underlying builtin type. */
1849 write_builtin_type (TYPE_MAIN_VARIANT (type));
1850 ++is_builtin_type;
1852 break;
1854 case COMPLEX_TYPE:
1855 write_char ('C');
1856 write_type (TREE_TYPE (type));
1857 break;
1859 case FUNCTION_TYPE:
1860 case METHOD_TYPE:
1861 write_function_type (type);
1862 break;
1864 case UNION_TYPE:
1865 case RECORD_TYPE:
1866 case ENUMERAL_TYPE:
1867 /* A pointer-to-member function is represented as a special
1868 RECORD_TYPE, so check for this first. */
1869 if (TYPE_PTRMEMFUNC_P (type))
1870 write_pointer_to_member_type (type);
1871 else
1872 write_class_enum_type (type);
1873 break;
1875 case TYPENAME_TYPE:
1876 case UNBOUND_CLASS_TEMPLATE:
1877 /* We handle TYPENAME_TYPEs and UNBOUND_CLASS_TEMPLATEs like
1878 ordinary nested names. */
1879 write_nested_name (TYPE_STUB_DECL (type));
1880 break;
1882 case POINTER_TYPE:
1883 case REFERENCE_TYPE:
1884 if (TREE_CODE (type) == POINTER_TYPE)
1885 write_char ('P');
1886 else if (TYPE_REF_IS_RVALUE (type))
1887 write_char ('O');
1888 else
1889 write_char ('R');
1891 tree target = TREE_TYPE (type);
1892 /* Attribute const/noreturn are not reflected in mangling.
1893 We strip them here rather than at a lower level because
1894 a typedef or template argument can have function type
1895 with function-cv-quals (that use the same representation),
1896 but you can't have a pointer/reference to such a type. */
1897 if (abi_version_at_least (5)
1898 && TREE_CODE (target) == FUNCTION_TYPE)
1899 target = build_qualified_type (target, TYPE_UNQUALIFIED);
1900 write_type (target);
1902 break;
1904 case TEMPLATE_TYPE_PARM:
1905 case TEMPLATE_PARM_INDEX:
1906 write_template_param (type);
1907 break;
1909 case TEMPLATE_TEMPLATE_PARM:
1910 write_template_template_param (type);
1911 break;
1913 case BOUND_TEMPLATE_TEMPLATE_PARM:
1914 write_template_template_param (type);
1915 write_template_args
1916 (TI_ARGS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (type)));
1917 break;
1919 case VECTOR_TYPE:
1920 if (abi_version_at_least (4))
1922 write_string ("Dv");
1923 /* Non-constant vector size would be encoded with
1924 _ expression, but we don't support that yet. */
1925 write_unsigned_number (TYPE_VECTOR_SUBPARTS (type));
1926 write_char ('_');
1928 else
1930 G.need_abi_warning = 1;
1931 write_string ("U8__vector");
1933 write_type (TREE_TYPE (type));
1934 break;
1936 case TYPE_PACK_EXPANSION:
1937 write_string ("Dp");
1938 write_type (PACK_EXPANSION_PATTERN (type));
1939 break;
1941 case DECLTYPE_TYPE:
1942 /* These shouldn't make it into mangling. */
1943 gcc_assert (!DECLTYPE_FOR_LAMBDA_CAPTURE (type)
1944 && !DECLTYPE_FOR_LAMBDA_RETURN (type));
1946 /* In ABI <5, we stripped decltype of a plain decl. */
1947 if (!abi_version_at_least (5)
1948 && DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
1950 tree expr = DECLTYPE_TYPE_EXPR (type);
1951 tree etype = NULL_TREE;
1952 switch (TREE_CODE (expr))
1954 case VAR_DECL:
1955 case PARM_DECL:
1956 case RESULT_DECL:
1957 case FUNCTION_DECL:
1958 case CONST_DECL:
1959 case TEMPLATE_PARM_INDEX:
1960 etype = TREE_TYPE (expr);
1961 break;
1963 default:
1964 break;
1967 if (etype && !type_uses_auto (etype))
1969 G.need_abi_warning = 1;
1970 write_type (etype);
1971 return;
1975 write_char ('D');
1976 if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
1977 write_char ('t');
1978 else
1979 write_char ('T');
1980 ++cp_unevaluated_operand;
1981 write_expression (DECLTYPE_TYPE_EXPR (type));
1982 --cp_unevaluated_operand;
1983 write_char ('E');
1984 break;
1986 case NULLPTR_TYPE:
1987 write_string ("Dn");
1988 break;
1990 case TYPEOF_TYPE:
1991 sorry ("mangling typeof, use decltype instead");
1992 break;
1994 case LANG_TYPE:
1995 /* fall through. */
1997 default:
1998 gcc_unreachable ();
2003 /* Types other than builtin types are substitution candidates. */
2004 if (!is_builtin_type)
2005 add_substitution (type);
2008 /* Non-terminal <CV-qualifiers> for type nodes. Returns the number of
2009 CV-qualifiers written for TYPE.
2011 <CV-qualifiers> ::= [r] [V] [K] */
2013 static int
2014 write_CV_qualifiers_for_type (const tree type)
2016 int num_qualifiers = 0;
2018 /* The order is specified by:
2020 "In cases where multiple order-insensitive qualifiers are
2021 present, they should be ordered 'K' (closest to the base type),
2022 'V', 'r', and 'U' (farthest from the base type) ..."
2024 Note that we do not use cp_type_quals below; given "const
2025 int[3]", the "const" is emitted with the "int", not with the
2026 array. */
2027 cp_cv_quals quals = TYPE_QUALS (type);
2029 if (quals & TYPE_QUAL_RESTRICT)
2031 write_char ('r');
2032 ++num_qualifiers;
2034 if (quals & TYPE_QUAL_VOLATILE)
2036 write_char ('V');
2037 ++num_qualifiers;
2039 if (quals & TYPE_QUAL_CONST)
2041 write_char ('K');
2042 ++num_qualifiers;
2045 return num_qualifiers;
2048 /* Non-terminal <builtin-type>.
2050 <builtin-type> ::= v # void
2051 ::= b # bool
2052 ::= w # wchar_t
2053 ::= c # char
2054 ::= a # signed char
2055 ::= h # unsigned char
2056 ::= s # short
2057 ::= t # unsigned short
2058 ::= i # int
2059 ::= j # unsigned int
2060 ::= l # long
2061 ::= m # unsigned long
2062 ::= x # long long, __int64
2063 ::= y # unsigned long long, __int64
2064 ::= n # __int128
2065 ::= o # unsigned __int128
2066 ::= f # float
2067 ::= d # double
2068 ::= e # long double, __float80
2069 ::= g # __float128 [not supported]
2070 ::= u <source-name> # vendor extended type */
2072 static void
2073 write_builtin_type (tree type)
2075 if (TYPE_CANONICAL (type))
2076 type = TYPE_CANONICAL (type);
2078 switch (TREE_CODE (type))
2080 case VOID_TYPE:
2081 write_char ('v');
2082 break;
2084 case BOOLEAN_TYPE:
2085 write_char ('b');
2086 break;
2088 case INTEGER_TYPE:
2089 /* TYPE may still be wchar_t, char16_t, or char32_t, since that
2090 isn't in integer_type_nodes. */
2091 if (type == wchar_type_node)
2092 write_char ('w');
2093 else if (type == char16_type_node)
2094 write_string ("Ds");
2095 else if (type == char32_type_node)
2096 write_string ("Di");
2097 else if (TYPE_FOR_JAVA (type))
2098 write_java_integer_type_codes (type);
2099 else
2101 size_t itk;
2102 /* Assume TYPE is one of the shared integer type nodes. Find
2103 it in the array of these nodes. */
2104 iagain:
2105 for (itk = 0; itk < itk_none; ++itk)
2106 if (integer_types[itk] != NULL_TREE
2107 && type == integer_types[itk])
2109 /* Print the corresponding single-letter code. */
2110 write_char (integer_type_codes[itk]);
2111 break;
2114 if (itk == itk_none)
2116 tree t = c_common_type_for_mode (TYPE_MODE (type),
2117 TYPE_UNSIGNED (type));
2118 if (type != t)
2120 type = t;
2121 goto iagain;
2124 if (TYPE_PRECISION (type) == 128)
2125 write_char (TYPE_UNSIGNED (type) ? 'o' : 'n');
2126 else
2128 /* Allow for cases where TYPE is not one of the shared
2129 integer type nodes and write a "vendor extended builtin
2130 type" with a name the form intN or uintN, respectively.
2131 Situations like this can happen if you have an
2132 __attribute__((__mode__(__SI__))) type and use exotic
2133 switches like '-mint8' on AVR. Of course, this is
2134 undefined by the C++ ABI (and '-mint8' is not even
2135 Standard C conforming), but when using such special
2136 options you're pretty much in nowhere land anyway. */
2137 const char *prefix;
2138 char prec[11]; /* up to ten digits for an unsigned */
2140 prefix = TYPE_UNSIGNED (type) ? "uint" : "int";
2141 sprintf (prec, "%u", (unsigned) TYPE_PRECISION (type));
2142 write_char ('u'); /* "vendor extended builtin type" */
2143 write_unsigned_number (strlen (prefix) + strlen (prec));
2144 write_string (prefix);
2145 write_string (prec);
2149 break;
2151 case REAL_TYPE:
2152 if (type == float_type_node
2153 || type == java_float_type_node)
2154 write_char ('f');
2155 else if (type == double_type_node
2156 || type == java_double_type_node)
2157 write_char ('d');
2158 else if (type == long_double_type_node)
2159 write_char ('e');
2160 else if (type == dfloat32_type_node)
2161 write_string ("Df");
2162 else if (type == dfloat64_type_node)
2163 write_string ("Dd");
2164 else if (type == dfloat128_type_node)
2165 write_string ("De");
2166 else
2167 gcc_unreachable ();
2168 break;
2170 case FIXED_POINT_TYPE:
2171 write_string ("DF");
2172 if (GET_MODE_IBIT (TYPE_MODE (type)) > 0)
2173 write_unsigned_number (GET_MODE_IBIT (TYPE_MODE (type)));
2174 if (type == fract_type_node
2175 || type == sat_fract_type_node
2176 || type == accum_type_node
2177 || type == sat_accum_type_node)
2178 write_char ('i');
2179 else if (type == unsigned_fract_type_node
2180 || type == sat_unsigned_fract_type_node
2181 || type == unsigned_accum_type_node
2182 || type == sat_unsigned_accum_type_node)
2183 write_char ('j');
2184 else if (type == short_fract_type_node
2185 || type == sat_short_fract_type_node
2186 || type == short_accum_type_node
2187 || type == sat_short_accum_type_node)
2188 write_char ('s');
2189 else if (type == unsigned_short_fract_type_node
2190 || type == sat_unsigned_short_fract_type_node
2191 || type == unsigned_short_accum_type_node
2192 || type == sat_unsigned_short_accum_type_node)
2193 write_char ('t');
2194 else if (type == long_fract_type_node
2195 || type == sat_long_fract_type_node
2196 || type == long_accum_type_node
2197 || type == sat_long_accum_type_node)
2198 write_char ('l');
2199 else if (type == unsigned_long_fract_type_node
2200 || type == sat_unsigned_long_fract_type_node
2201 || type == unsigned_long_accum_type_node
2202 || type == sat_unsigned_long_accum_type_node)
2203 write_char ('m');
2204 else if (type == long_long_fract_type_node
2205 || type == sat_long_long_fract_type_node
2206 || type == long_long_accum_type_node
2207 || type == sat_long_long_accum_type_node)
2208 write_char ('x');
2209 else if (type == unsigned_long_long_fract_type_node
2210 || type == sat_unsigned_long_long_fract_type_node
2211 || type == unsigned_long_long_accum_type_node
2212 || type == sat_unsigned_long_long_accum_type_node)
2213 write_char ('y');
2214 else
2215 sorry ("mangling unknown fixed point type");
2216 write_unsigned_number (GET_MODE_FBIT (TYPE_MODE (type)));
2217 if (TYPE_SATURATING (type))
2218 write_char ('s');
2219 else
2220 write_char ('n');
2221 break;
2223 default:
2224 gcc_unreachable ();
2228 /* Non-terminal <function-type>. NODE is a FUNCTION_TYPE or
2229 METHOD_TYPE. The return type is mangled before the parameter
2230 types.
2232 <function-type> ::= F [Y] <bare-function-type> E */
2234 static void
2235 write_function_type (const tree type)
2237 MANGLE_TRACE_TREE ("function-type", type);
2239 /* For a pointer to member function, the function type may have
2240 cv-qualifiers, indicating the quals for the artificial 'this'
2241 parameter. */
2242 if (TREE_CODE (type) == METHOD_TYPE)
2244 /* The first parameter must be a POINTER_TYPE pointing to the
2245 `this' parameter. */
2246 tree this_type = TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type)));
2247 write_CV_qualifiers_for_type (this_type);
2250 write_char ('F');
2251 /* We don't track whether or not a type is `extern "C"'. Note that
2252 you can have an `extern "C"' function that does not have
2253 `extern "C"' type, and vice versa:
2255 extern "C" typedef void function_t();
2256 function_t f; // f has C++ linkage, but its type is
2257 // `extern "C"'
2259 typedef void function_t();
2260 extern "C" function_t f; // Vice versa.
2262 See [dcl.link]. */
2263 write_bare_function_type (type, /*include_return_type_p=*/1,
2264 /*decl=*/NULL);
2265 write_char ('E');
2268 /* Non-terminal <bare-function-type>. TYPE is a FUNCTION_TYPE or
2269 METHOD_TYPE. If INCLUDE_RETURN_TYPE is nonzero, the return value
2270 is mangled before the parameter types. If non-NULL, DECL is
2271 FUNCTION_DECL for the function whose type is being emitted.
2273 If DECL is a member of a Java type, then a literal 'J'
2274 is output and the return type is mangled as if INCLUDE_RETURN_TYPE
2275 were nonzero.
2277 <bare-function-type> ::= [J]</signature/ type>+ */
2279 static void
2280 write_bare_function_type (const tree type, const int include_return_type_p,
2281 const tree decl)
2283 int java_method_p;
2285 MANGLE_TRACE_TREE ("bare-function-type", type);
2287 /* Detect Java methods and emit special encoding. */
2288 if (decl != NULL
2289 && DECL_FUNCTION_MEMBER_P (decl)
2290 && TYPE_FOR_JAVA (DECL_CONTEXT (decl))
2291 && !DECL_CONSTRUCTOR_P (decl)
2292 && !DECL_DESTRUCTOR_P (decl)
2293 && !DECL_CONV_FN_P (decl))
2295 java_method_p = 1;
2296 write_char ('J');
2298 else
2300 java_method_p = 0;
2303 /* Mangle the return type, if requested. */
2304 if (include_return_type_p || java_method_p)
2305 write_type (TREE_TYPE (type));
2307 /* Now mangle the types of the arguments. */
2308 ++G.parm_depth;
2309 write_method_parms (TYPE_ARG_TYPES (type),
2310 TREE_CODE (type) == METHOD_TYPE,
2311 decl);
2312 --G.parm_depth;
2315 /* Write the mangled representation of a method parameter list of
2316 types given in PARM_TYPES. If METHOD_P is nonzero, the function is
2317 considered a non-static method, and the this parameter is omitted.
2318 If non-NULL, DECL is the FUNCTION_DECL for the function whose
2319 parameters are being emitted. */
2321 static void
2322 write_method_parms (tree parm_types, const int method_p, const tree decl)
2324 tree first_parm_type;
2325 tree parm_decl = decl ? DECL_ARGUMENTS (decl) : NULL_TREE;
2327 /* Assume this parameter type list is variable-length. If it ends
2328 with a void type, then it's not. */
2329 int varargs_p = 1;
2331 /* If this is a member function, skip the first arg, which is the
2332 this pointer.
2333 "Member functions do not encode the type of their implicit this
2334 parameter."
2336 Similarly, there's no need to mangle artificial parameters, like
2337 the VTT parameters for constructors and destructors. */
2338 if (method_p)
2340 parm_types = TREE_CHAIN (parm_types);
2341 parm_decl = parm_decl ? DECL_CHAIN (parm_decl) : NULL_TREE;
2343 while (parm_decl && DECL_ARTIFICIAL (parm_decl))
2345 parm_types = TREE_CHAIN (parm_types);
2346 parm_decl = DECL_CHAIN (parm_decl);
2350 for (first_parm_type = parm_types;
2351 parm_types;
2352 parm_types = TREE_CHAIN (parm_types))
2354 tree parm = TREE_VALUE (parm_types);
2355 if (parm == void_type_node)
2357 /* "Empty parameter lists, whether declared as () or
2358 conventionally as (void), are encoded with a void parameter
2359 (v)." */
2360 if (parm_types == first_parm_type)
2361 write_type (parm);
2362 /* If the parm list is terminated with a void type, it's
2363 fixed-length. */
2364 varargs_p = 0;
2365 /* A void type better be the last one. */
2366 gcc_assert (TREE_CHAIN (parm_types) == NULL);
2368 else
2369 write_type (parm);
2372 if (varargs_p)
2373 /* <builtin-type> ::= z # ellipsis */
2374 write_char ('z');
2377 /* <class-enum-type> ::= <name> */
2379 static void
2380 write_class_enum_type (const tree type)
2382 write_name (TYPE_NAME (type), /*ignore_local_scope=*/0);
2385 /* Non-terminal <template-args>. ARGS is a TREE_VEC of template
2386 arguments.
2388 <template-args> ::= I <template-arg>* E */
2390 static void
2391 write_template_args (tree args)
2393 int i;
2394 int length = 0;
2396 MANGLE_TRACE_TREE ("template-args", args);
2398 write_char ('I');
2400 if (args)
2401 length = TREE_VEC_LENGTH (args);
2403 if (args && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
2405 /* We have nested template args. We want the innermost template
2406 argument list. */
2407 args = TREE_VEC_ELT (args, length - 1);
2408 length = TREE_VEC_LENGTH (args);
2410 for (i = 0; i < length; ++i)
2411 write_template_arg (TREE_VEC_ELT (args, i));
2413 write_char ('E');
2416 /* Write out the
2417 <unqualified-name>
2418 <unqualified-name> <template-args>
2419 part of SCOPE_REF or COMPONENT_REF mangling. */
2421 static void
2422 write_member_name (tree member)
2424 if (TREE_CODE (member) == IDENTIFIER_NODE)
2425 write_unqualified_id (member);
2426 else if (DECL_P (member))
2427 write_unqualified_name (member);
2428 else if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
2430 tree name = TREE_OPERAND (member, 0);
2431 if (TREE_CODE (name) == OVERLOAD)
2432 name = OVL_FUNCTION (name);
2433 write_member_name (name);
2434 write_template_args (TREE_OPERAND (member, 1));
2436 else
2437 write_expression (member);
2440 /* <expression> ::= <unary operator-name> <expression>
2441 ::= <binary operator-name> <expression> <expression>
2442 ::= <expr-primary>
2444 <expr-primary> ::= <template-param>
2445 ::= L <type> <value number> E # literal
2446 ::= L <mangled-name> E # external name
2447 ::= st <type> # sizeof
2448 ::= sr <type> <unqualified-name> # dependent name
2449 ::= sr <type> <unqualified-name> <template-args> */
2451 static void
2452 write_expression (tree expr)
2454 enum tree_code code = TREE_CODE (expr);
2456 /* Skip NOP_EXPRs. They can occur when (say) a pointer argument
2457 is converted (via qualification conversions) to another
2458 type. */
2459 while (TREE_CODE (expr) == NOP_EXPR
2460 || TREE_CODE (expr) == NON_LVALUE_EXPR)
2462 expr = TREE_OPERAND (expr, 0);
2463 code = TREE_CODE (expr);
2466 if (code == BASELINK)
2468 expr = BASELINK_FUNCTIONS (expr);
2469 code = TREE_CODE (expr);
2472 /* Handle pointers-to-members by making them look like expression
2473 nodes. */
2474 if (code == PTRMEM_CST)
2476 expr = build_nt (ADDR_EXPR,
2477 build_qualified_name (/*type=*/NULL_TREE,
2478 PTRMEM_CST_CLASS (expr),
2479 PTRMEM_CST_MEMBER (expr),
2480 /*template_p=*/false));
2481 code = TREE_CODE (expr);
2484 /* Handle template parameters. */
2485 if (code == TEMPLATE_TYPE_PARM
2486 || code == TEMPLATE_TEMPLATE_PARM
2487 || code == BOUND_TEMPLATE_TEMPLATE_PARM
2488 || code == TEMPLATE_PARM_INDEX)
2489 write_template_param (expr);
2490 /* Handle literals. */
2491 else if (TREE_CODE_CLASS (code) == tcc_constant
2492 || (abi_version_at_least (2) && code == CONST_DECL))
2493 write_template_arg_literal (expr);
2494 else if (code == PARM_DECL)
2496 /* A function parameter used in a late-specified return type. */
2497 int index = DECL_PARM_INDEX (expr);
2498 int level = DECL_PARM_LEVEL (expr);
2499 int delta = G.parm_depth - level + 1;
2500 gcc_assert (index >= 1);
2501 write_char ('f');
2502 if (delta != 0)
2504 if (abi_version_at_least (5))
2506 /* Let L be the number of function prototype scopes from the
2507 innermost one (in which the parameter reference occurs) up
2508 to (and including) the one containing the declaration of
2509 the referenced parameter. If the parameter declaration
2510 clause of the innermost function prototype scope has been
2511 completely seen, it is not counted (in that case -- which
2512 is perhaps the most common -- L can be zero). */
2513 write_char ('L');
2514 write_unsigned_number (delta - 1);
2516 else
2517 G.need_abi_warning = true;
2519 write_char ('p');
2520 write_compact_number (index - 1);
2522 else if (DECL_P (expr))
2524 /* G++ 3.2 incorrectly mangled non-type template arguments of
2525 enumeration type using their names. */
2526 if (code == CONST_DECL)
2527 G.need_abi_warning = 1;
2528 write_char ('L');
2529 write_mangled_name (expr, false);
2530 write_char ('E');
2532 else if (TREE_CODE (expr) == SIZEOF_EXPR
2533 && TYPE_P (TREE_OPERAND (expr, 0)))
2535 write_string ("st");
2536 write_type (TREE_OPERAND (expr, 0));
2538 else if (TREE_CODE (expr) == ALIGNOF_EXPR
2539 && TYPE_P (TREE_OPERAND (expr, 0)))
2541 write_string ("at");
2542 write_type (TREE_OPERAND (expr, 0));
2544 else if (TREE_CODE (expr) == SCOPE_REF)
2546 tree scope = TREE_OPERAND (expr, 0);
2547 tree member = TREE_OPERAND (expr, 1);
2549 if (!abi_version_at_least (2) && DECL_P (member))
2551 write_string ("sr");
2552 write_type (scope);
2553 /* G++ 3.2 incorrectly put out both the "sr" code and
2554 the nested name of the qualified name. */
2555 G.need_abi_warning = 1;
2556 write_encoding (member);
2559 /* If the MEMBER is a real declaration, then the qualifying
2560 scope was not dependent. Ideally, we would not have a
2561 SCOPE_REF in those cases, but sometimes we do. If the second
2562 argument is a DECL, then the name must not have been
2563 dependent. */
2564 else if (DECL_P (member))
2565 write_expression (member);
2566 else
2568 write_string ("sr");
2569 write_type (scope);
2570 write_member_name (member);
2573 else if (TREE_CODE (expr) == INDIRECT_REF
2574 && TREE_TYPE (TREE_OPERAND (expr, 0))
2575 && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2577 write_expression (TREE_OPERAND (expr, 0));
2579 else if (TREE_CODE (expr) == IDENTIFIER_NODE)
2581 /* An operator name appearing as a dependent name needs to be
2582 specially marked to disambiguate between a use of the operator
2583 name and a use of the operator in an expression. */
2584 if (IDENTIFIER_OPNAME_P (expr))
2585 write_string ("on");
2586 write_unqualified_id (expr);
2588 else if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
2590 tree fn = TREE_OPERAND (expr, 0);
2591 if (is_overloaded_fn (fn))
2592 fn = DECL_NAME (get_first_fn (fn));
2593 if (IDENTIFIER_OPNAME_P (fn))
2594 write_string ("on");
2595 write_unqualified_id (fn);
2596 write_template_args (TREE_OPERAND (expr, 1));
2598 else
2600 int i, len;
2601 const char *name;
2603 /* When we bind a variable or function to a non-type template
2604 argument with reference type, we create an ADDR_EXPR to show
2605 the fact that the entity's address has been taken. But, we
2606 don't actually want to output a mangling code for the `&'. */
2607 if (TREE_CODE (expr) == ADDR_EXPR
2608 && TREE_TYPE (expr)
2609 && TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE)
2611 expr = TREE_OPERAND (expr, 0);
2612 if (DECL_P (expr))
2614 write_expression (expr);
2615 return;
2618 code = TREE_CODE (expr);
2621 if (code == COMPONENT_REF)
2623 tree ob = TREE_OPERAND (expr, 0);
2625 if (TREE_CODE (ob) == ARROW_EXPR)
2627 write_string (operator_name_info[(int)code].mangled_name);
2628 ob = TREE_OPERAND (ob, 0);
2630 else
2631 write_string ("dt");
2633 write_expression (ob);
2634 write_member_name (TREE_OPERAND (expr, 1));
2635 return;
2638 /* If it wasn't any of those, recursively expand the expression. */
2639 name = operator_name_info[(int) code].mangled_name;
2640 if (name == NULL)
2642 sorry ("mangling %C", code);
2643 return;
2645 else
2646 write_string (name);
2648 switch (code)
2650 case CALL_EXPR:
2652 tree fn = CALL_EXPR_FN (expr);
2654 if (TREE_CODE (fn) == ADDR_EXPR)
2655 fn = TREE_OPERAND (fn, 0);
2657 /* Mangle a dependent name as the name, not whatever happens to
2658 be the first function in the overload set. */
2659 if ((TREE_CODE (fn) == FUNCTION_DECL
2660 || TREE_CODE (fn) == OVERLOAD)
2661 && type_dependent_expression_p_push (expr))
2662 fn = DECL_NAME (get_first_fn (fn));
2664 write_expression (fn);
2667 for (i = 0; i < call_expr_nargs (expr); ++i)
2668 write_expression (CALL_EXPR_ARG (expr, i));
2669 write_char ('E');
2670 break;
2672 case CAST_EXPR:
2673 write_type (TREE_TYPE (expr));
2674 if (list_length (TREE_OPERAND (expr, 0)) == 1)
2675 write_expression (TREE_VALUE (TREE_OPERAND (expr, 0)));
2676 else
2678 tree args = TREE_OPERAND (expr, 0);
2679 write_char ('_');
2680 for (; args; args = TREE_CHAIN (args))
2681 write_expression (TREE_VALUE (args));
2682 write_char ('E');
2684 break;
2686 /* FIXME these should have a distinct mangling. */
2687 case STATIC_CAST_EXPR:
2688 case CONST_CAST_EXPR:
2689 write_type (TREE_TYPE (expr));
2690 write_expression (TREE_OPERAND (expr, 0));
2691 break;
2693 case NEW_EXPR:
2694 sorry ("mangling new-expression");
2695 break;
2697 default:
2698 /* In the middle-end, some expressions have more operands than
2699 they do in templates (and mangling). */
2700 switch (code)
2702 case PREINCREMENT_EXPR:
2703 case PREDECREMENT_EXPR:
2704 case POSTINCREMENT_EXPR:
2705 case POSTDECREMENT_EXPR:
2706 len = 1;
2707 break;
2709 case ARRAY_REF:
2710 len = 2;
2711 break;
2713 default:
2714 len = TREE_OPERAND_LENGTH (expr);
2715 break;
2718 for (i = 0; i < len; ++i)
2720 tree operand = TREE_OPERAND (expr, i);
2721 /* As a GNU extension, the middle operand of a
2722 conditional may be omitted. Since expression
2723 manglings are supposed to represent the input token
2724 stream, there's no good way to mangle such an
2725 expression without extending the C++ ABI. */
2726 if (code == COND_EXPR && i == 1 && !operand)
2728 error ("omitted middle operand to %<?:%> operand "
2729 "cannot be mangled");
2730 continue;
2732 write_expression (operand);
2738 /* Literal subcase of non-terminal <template-arg>.
2740 "Literal arguments, e.g. "A<42L>", are encoded with their type
2741 and value. Negative integer values are preceded with "n"; for
2742 example, "A<-42L>" becomes "1AILln42EE". The bool value false is
2743 encoded as 0, true as 1." */
2745 static void
2746 write_template_arg_literal (const tree value)
2748 write_char ('L');
2749 write_type (TREE_TYPE (value));
2751 switch (TREE_CODE (value))
2753 case CONST_DECL:
2754 write_integer_cst (DECL_INITIAL (value));
2755 break;
2757 case INTEGER_CST:
2758 gcc_assert (!same_type_p (TREE_TYPE (value), boolean_type_node)
2759 || integer_zerop (value) || integer_onep (value));
2760 write_integer_cst (value);
2761 break;
2763 case REAL_CST:
2764 write_real_cst (value);
2765 break;
2767 case STRING_CST:
2768 sorry ("string literal in function template signature");
2769 break;
2771 default:
2772 gcc_unreachable ();
2775 write_char ('E');
2778 /* Non-terminal <template-arg>.
2780 <template-arg> ::= <type> # type
2781 ::= L <type> </value/ number> E # literal
2782 ::= LZ <name> E # external name
2783 ::= X <expression> E # expression */
2785 static void
2786 write_template_arg (tree node)
2788 enum tree_code code = TREE_CODE (node);
2790 MANGLE_TRACE_TREE ("template-arg", node);
2792 /* A template template parameter's argument list contains TREE_LIST
2793 nodes of which the value field is the actual argument. */
2794 if (code == TREE_LIST)
2796 node = TREE_VALUE (node);
2797 /* If it's a decl, deal with its type instead. */
2798 if (DECL_P (node))
2800 node = TREE_TYPE (node);
2801 code = TREE_CODE (node);
2805 if (TREE_CODE (node) == NOP_EXPR
2806 && TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
2808 /* Template parameters can be of reference type. To maintain
2809 internal consistency, such arguments use a conversion from
2810 address of object to reference type. */
2811 gcc_assert (TREE_CODE (TREE_OPERAND (node, 0)) == ADDR_EXPR);
2812 if (abi_version_at_least (2))
2813 node = TREE_OPERAND (TREE_OPERAND (node, 0), 0);
2814 else
2815 G.need_abi_warning = 1;
2818 if (ARGUMENT_PACK_P (node))
2820 /* Expand the template argument pack. */
2821 tree args = ARGUMENT_PACK_ARGS (node);
2822 int i, length = TREE_VEC_LENGTH (args);
2823 write_char ('I');
2824 for (i = 0; i < length; ++i)
2825 write_template_arg (TREE_VEC_ELT (args, i));
2826 write_char ('E');
2828 else if (TYPE_P (node))
2829 write_type (node);
2830 else if (code == TEMPLATE_DECL)
2831 /* A template appearing as a template arg is a template template arg. */
2832 write_template_template_arg (node);
2833 else if ((TREE_CODE_CLASS (code) == tcc_constant && code != PTRMEM_CST)
2834 || (abi_version_at_least (2) && code == CONST_DECL))
2835 write_template_arg_literal (node);
2836 else if (DECL_P (node))
2838 /* Until ABI version 2, non-type template arguments of
2839 enumeration type were mangled using their names. */
2840 if (code == CONST_DECL && !abi_version_at_least (2))
2841 G.need_abi_warning = 1;
2842 write_char ('L');
2843 /* Until ABI version 3, the underscore before the mangled name
2844 was incorrectly omitted. */
2845 if (!abi_version_at_least (3))
2847 G.need_abi_warning = 1;
2848 write_char ('Z');
2850 else
2851 write_string ("_Z");
2852 write_encoding (node);
2853 write_char ('E');
2855 else
2857 /* Template arguments may be expressions. */
2858 write_char ('X');
2859 write_expression (node);
2860 write_char ('E');
2864 /* <template-template-arg>
2865 ::= <name>
2866 ::= <substitution> */
2868 static void
2869 write_template_template_arg (const tree decl)
2871 MANGLE_TRACE_TREE ("template-template-arg", decl);
2873 if (find_substitution (decl))
2874 return;
2875 write_name (decl, /*ignore_local_scope=*/0);
2876 add_substitution (decl);
2880 /* Non-terminal <array-type>. TYPE is an ARRAY_TYPE.
2882 <array-type> ::= A [</dimension/ number>] _ </element/ type>
2883 ::= A <expression> _ </element/ type>
2885 "Array types encode the dimension (number of elements) and the
2886 element type. For variable length arrays, the dimension (but not
2887 the '_' separator) is omitted." */
2889 static void
2890 write_array_type (const tree type)
2892 write_char ('A');
2893 if (TYPE_DOMAIN (type))
2895 tree index_type;
2896 tree max;
2898 index_type = TYPE_DOMAIN (type);
2899 /* The INDEX_TYPE gives the upper and lower bounds of the
2900 array. */
2901 max = TYPE_MAX_VALUE (index_type);
2902 if (TREE_CODE (max) == INTEGER_CST)
2904 /* The ABI specifies that we should mangle the number of
2905 elements in the array, not the largest allowed index. */
2906 max = size_binop (PLUS_EXPR, max, size_one_node);
2907 write_unsigned_number (tree_low_cst (max, 1));
2909 else
2911 max = TREE_OPERAND (max, 0);
2912 if (!abi_version_at_least (2))
2914 /* value_dependent_expression_p presumes nothing is
2915 dependent when PROCESSING_TEMPLATE_DECL is zero. */
2916 ++processing_template_decl;
2917 if (!value_dependent_expression_p (max))
2918 G.need_abi_warning = 1;
2919 --processing_template_decl;
2921 write_expression (max);
2925 write_char ('_');
2926 write_type (TREE_TYPE (type));
2929 /* Non-terminal <pointer-to-member-type> for pointer-to-member
2930 variables. TYPE is a pointer-to-member POINTER_TYPE.
2932 <pointer-to-member-type> ::= M </class/ type> </member/ type> */
2934 static void
2935 write_pointer_to_member_type (const tree type)
2937 write_char ('M');
2938 write_type (TYPE_PTRMEM_CLASS_TYPE (type));
2939 write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
2942 /* Non-terminal <template-param>. PARM is a TEMPLATE_TYPE_PARM,
2943 TEMPLATE_TEMPLATE_PARM, BOUND_TEMPLATE_TEMPLATE_PARM or a
2944 TEMPLATE_PARM_INDEX.
2946 <template-param> ::= T </parameter/ number> _ */
2948 static void
2949 write_template_param (const tree parm)
2951 int parm_index;
2953 MANGLE_TRACE_TREE ("template-parm", parm);
2955 switch (TREE_CODE (parm))
2957 case TEMPLATE_TYPE_PARM:
2958 case TEMPLATE_TEMPLATE_PARM:
2959 case BOUND_TEMPLATE_TEMPLATE_PARM:
2960 parm_index = TEMPLATE_TYPE_IDX (parm);
2961 break;
2963 case TEMPLATE_PARM_INDEX:
2964 parm_index = TEMPLATE_PARM_IDX (parm);
2965 break;
2967 default:
2968 gcc_unreachable ();
2971 write_char ('T');
2972 /* NUMBER as it appears in the mangling is (-1)-indexed, with the
2973 earliest template param denoted by `_'. */
2974 write_compact_number (parm_index);
2977 /* <template-template-param>
2978 ::= <template-param>
2979 ::= <substitution> */
2981 static void
2982 write_template_template_param (const tree parm)
2984 tree templ = NULL_TREE;
2986 /* PARM, a TEMPLATE_TEMPLATE_PARM, is an instantiation of the
2987 template template parameter. The substitution candidate here is
2988 only the template. */
2989 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
2991 templ
2992 = TI_TEMPLATE (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm));
2993 if (find_substitution (templ))
2994 return;
2997 /* <template-param> encodes only the template parameter position,
2998 not its template arguments, which is fine here. */
2999 write_template_param (parm);
3000 if (templ)
3001 add_substitution (templ);
3004 /* Non-terminal <substitution>.
3006 <substitution> ::= S <seq-id> _
3007 ::= S_ */
3009 static void
3010 write_substitution (const int seq_id)
3012 MANGLE_TRACE ("substitution", "");
3014 write_char ('S');
3015 if (seq_id > 0)
3016 write_number (seq_id - 1, /*unsigned=*/1, 36);
3017 write_char ('_');
3020 /* Start mangling ENTITY. */
3022 static inline void
3023 start_mangling (const tree entity)
3025 G.entity = entity;
3026 G.need_abi_warning = false;
3027 obstack_free (&name_obstack, name_base);
3028 mangle_obstack = &name_obstack;
3029 name_base = obstack_alloc (&name_obstack, 0);
3032 /* Done with mangling. If WARN is true, and the name of G.entity will
3033 be mangled differently in a future version of the ABI, issue a
3034 warning. */
3036 static void
3037 finish_mangling_internal (const bool warn)
3039 if (warn_abi && warn && G.need_abi_warning)
3040 warning (OPT_Wabi, "the mangled name of %qD will change in a future "
3041 "version of GCC",
3042 G.entity);
3044 /* Clear all the substitutions. */
3045 VEC_truncate (tree, G.substitutions, 0);
3047 /* Null-terminate the string. */
3048 write_char ('\0');
3052 /* Like finish_mangling_internal, but return the mangled string. */
3054 static inline const char *
3055 finish_mangling (const bool warn)
3057 finish_mangling_internal (warn);
3058 return (const char *) obstack_finish (mangle_obstack);
3061 /* Like finish_mangling_internal, but return an identifier. */
3063 static tree
3064 finish_mangling_get_identifier (const bool warn)
3066 finish_mangling_internal (warn);
3067 /* Don't obstack_finish here, and the next start_mangling will
3068 remove the identifier. */
3069 return get_identifier ((const char *) obstack_base (mangle_obstack));
3072 /* Initialize data structures for mangling. */
3074 void
3075 init_mangle (void)
3077 gcc_obstack_init (&name_obstack);
3078 name_base = obstack_alloc (&name_obstack, 0);
3079 G.substitutions = NULL;
3081 /* Cache these identifiers for quick comparison when checking for
3082 standard substitutions. */
3083 subst_identifiers[SUBID_ALLOCATOR] = get_identifier ("allocator");
3084 subst_identifiers[SUBID_BASIC_STRING] = get_identifier ("basic_string");
3085 subst_identifiers[SUBID_CHAR_TRAITS] = get_identifier ("char_traits");
3086 subst_identifiers[SUBID_BASIC_ISTREAM] = get_identifier ("basic_istream");
3087 subst_identifiers[SUBID_BASIC_OSTREAM] = get_identifier ("basic_ostream");
3088 subst_identifiers[SUBID_BASIC_IOSTREAM] = get_identifier ("basic_iostream");
3091 /* Generate the mangled name of DECL. */
3093 static tree
3094 mangle_decl_string (const tree decl)
3096 tree result;
3097 location_t saved_loc = input_location;
3098 tree saved_fn = NULL_TREE;
3099 bool template_p = false;
3101 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3103 struct tinst_level *tl = current_instantiation ();
3104 if (!tl || tl->decl != decl)
3106 template_p = true;
3107 saved_fn = current_function_decl;
3108 push_tinst_level (decl);
3109 current_function_decl = NULL_TREE;
3112 input_location = DECL_SOURCE_LOCATION (decl);
3114 start_mangling (decl);
3116 if (TREE_CODE (decl) == TYPE_DECL)
3117 write_type (TREE_TYPE (decl));
3118 else
3119 write_mangled_name (decl, true);
3121 result = finish_mangling_get_identifier (/*warn=*/true);
3122 if (DEBUG_MANGLE)
3123 fprintf (stderr, "mangle_decl_string = '%s'\n\n",
3124 IDENTIFIER_POINTER (result));
3126 if (template_p)
3128 pop_tinst_level ();
3129 current_function_decl = saved_fn;
3131 input_location = saved_loc;
3133 return result;
3136 /* Create an identifier for the external mangled name of DECL. */
3138 void
3139 mangle_decl (const tree decl)
3141 tree id = mangle_decl_string (decl);
3142 id = targetm.mangle_decl_assembler_name (decl, id);
3143 SET_DECL_ASSEMBLER_NAME (decl, id);
3145 if (G.need_abi_warning)
3147 #ifdef ASM_OUTPUT_DEF
3148 /* If the mangling will change in the future, emit an alias with the
3149 future mangled name for forward-compatibility. */
3150 int save_ver;
3151 tree id2, alias;
3152 #endif
3154 SET_IDENTIFIER_GLOBAL_VALUE (id, decl);
3155 if (IDENTIFIER_GLOBAL_VALUE (id) != decl)
3156 inform (DECL_SOURCE_LOCATION (decl), "-fabi-version=4 (or =0) "
3157 "avoids this error with a change in vector mangling");
3159 #ifdef ASM_OUTPUT_DEF
3160 save_ver = flag_abi_version;
3161 flag_abi_version = 0;
3162 id2 = mangle_decl_string (decl);
3163 id2 = targetm.mangle_decl_assembler_name (decl, id2);
3164 flag_abi_version = save_ver;
3166 alias = make_alias_for (decl, id2);
3167 DECL_IGNORED_P (alias) = 1;
3168 TREE_PUBLIC (alias) = TREE_PUBLIC (decl);
3169 DECL_VISIBILITY (alias) = DECL_VISIBILITY (decl);
3170 if (vague_linkage_p (decl))
3171 DECL_WEAK (alias) = 1;
3172 if (TREE_CODE (decl) == FUNCTION_DECL)
3173 cgraph_same_body_alias (cgraph_node (decl), alias, decl);
3174 else
3175 varpool_extra_name_alias (alias, decl);
3176 #endif
3180 /* Generate the mangled representation of TYPE. */
3182 const char *
3183 mangle_type_string (const tree type)
3185 const char *result;
3187 start_mangling (type);
3188 write_type (type);
3189 result = finish_mangling (/*warn=*/false);
3190 if (DEBUG_MANGLE)
3191 fprintf (stderr, "mangle_type_string = '%s'\n\n", result);
3192 return result;
3195 /* Create an identifier for the mangled name of a special component
3196 for belonging to TYPE. CODE is the ABI-specified code for this
3197 component. */
3199 static tree
3200 mangle_special_for_type (const tree type, const char *code)
3202 tree result;
3204 /* We don't have an actual decl here for the special component, so
3205 we can't just process the <encoded-name>. Instead, fake it. */
3206 start_mangling (type);
3208 /* Start the mangling. */
3209 write_string ("_Z");
3210 write_string (code);
3212 /* Add the type. */
3213 write_type (type);
3214 result = finish_mangling_get_identifier (/*warn=*/false);
3216 if (DEBUG_MANGLE)
3217 fprintf (stderr, "mangle_special_for_type = %s\n\n",
3218 IDENTIFIER_POINTER (result));
3220 return result;
3223 /* Create an identifier for the mangled representation of the typeinfo
3224 structure for TYPE. */
3226 tree
3227 mangle_typeinfo_for_type (const tree type)
3229 return mangle_special_for_type (type, "TI");
3232 /* Create an identifier for the mangled name of the NTBS containing
3233 the mangled name of TYPE. */
3235 tree
3236 mangle_typeinfo_string_for_type (const tree type)
3238 return mangle_special_for_type (type, "TS");
3241 /* Create an identifier for the mangled name of the vtable for TYPE. */
3243 tree
3244 mangle_vtbl_for_type (const tree type)
3246 return mangle_special_for_type (type, "TV");
3249 /* Returns an identifier for the mangled name of the VTT for TYPE. */
3251 tree
3252 mangle_vtt_for_type (const tree type)
3254 return mangle_special_for_type (type, "TT");
3257 /* Return an identifier for a construction vtable group. TYPE is
3258 the most derived class in the hierarchy; BINFO is the base
3259 subobject for which this construction vtable group will be used.
3261 This mangling isn't part of the ABI specification; in the ABI
3262 specification, the vtable group is dumped in the same COMDAT as the
3263 main vtable, and is referenced only from that vtable, so it doesn't
3264 need an external name. For binary formats without COMDAT sections,
3265 though, we need external names for the vtable groups.
3267 We use the production
3269 <special-name> ::= CT <type> <offset number> _ <base type> */
3271 tree
3272 mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
3274 tree result;
3276 start_mangling (type);
3278 write_string ("_Z");
3279 write_string ("TC");
3280 write_type (type);
3281 write_integer_cst (BINFO_OFFSET (binfo));
3282 write_char ('_');
3283 write_type (BINFO_TYPE (binfo));
3285 result = finish_mangling_get_identifier (/*warn=*/false);
3286 if (DEBUG_MANGLE)
3287 fprintf (stderr, "mangle_ctor_vtbl_for_type = %s\n\n",
3288 IDENTIFIER_POINTER (result));
3289 return result;
3292 /* Mangle a this pointer or result pointer adjustment.
3294 <call-offset> ::= h <fixed offset number> _
3295 ::= v <fixed offset number> _ <virtual offset number> _ */
3297 static void
3298 mangle_call_offset (const tree fixed_offset, const tree virtual_offset)
3300 write_char (virtual_offset ? 'v' : 'h');
3302 /* For either flavor, write the fixed offset. */
3303 write_integer_cst (fixed_offset);
3304 write_char ('_');
3306 /* For a virtual thunk, add the virtual offset. */
3307 if (virtual_offset)
3309 write_integer_cst (virtual_offset);
3310 write_char ('_');
3314 /* Return an identifier for the mangled name of a this-adjusting or
3315 covariant thunk to FN_DECL. FIXED_OFFSET is the initial adjustment
3316 to this used to find the vptr. If VIRTUAL_OFFSET is non-NULL, this
3317 is a virtual thunk, and it is the vtbl offset in
3318 bytes. THIS_ADJUSTING is nonzero for a this adjusting thunk and
3319 zero for a covariant thunk. Note, that FN_DECL might be a covariant
3320 thunk itself. A covariant thunk name always includes the adjustment
3321 for the this pointer, even if there is none.
3323 <special-name> ::= T <call-offset> <base encoding>
3324 ::= Tc <this_adjust call-offset> <result_adjust call-offset>
3325 <base encoding> */
3327 tree
3328 mangle_thunk (tree fn_decl, const int this_adjusting, tree fixed_offset,
3329 tree virtual_offset)
3331 tree result;
3333 start_mangling (fn_decl);
3335 write_string ("_Z");
3336 write_char ('T');
3338 if (!this_adjusting)
3340 /* Covariant thunk with no this adjustment */
3341 write_char ('c');
3342 mangle_call_offset (integer_zero_node, NULL_TREE);
3343 mangle_call_offset (fixed_offset, virtual_offset);
3345 else if (!DECL_THUNK_P (fn_decl))
3346 /* Plain this adjusting thunk. */
3347 mangle_call_offset (fixed_offset, virtual_offset);
3348 else
3350 /* This adjusting thunk to covariant thunk. */
3351 write_char ('c');
3352 mangle_call_offset (fixed_offset, virtual_offset);
3353 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn_decl));
3354 virtual_offset = THUNK_VIRTUAL_OFFSET (fn_decl);
3355 if (virtual_offset)
3356 virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
3357 mangle_call_offset (fixed_offset, virtual_offset);
3358 fn_decl = THUNK_TARGET (fn_decl);
3361 /* Scoped name. */
3362 write_encoding (fn_decl);
3364 result = finish_mangling_get_identifier (/*warn=*/false);
3365 if (DEBUG_MANGLE)
3366 fprintf (stderr, "mangle_thunk = %s\n\n", IDENTIFIER_POINTER (result));
3367 return result;
3370 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
3371 operator to TYPE. The nodes are IDENTIFIERs whose TREE_TYPE is the
3372 TYPE. */
3374 static GTY ((param_is (union tree_node))) htab_t conv_type_names;
3376 /* Hash a node (VAL1) in the table. */
3378 static hashval_t
3379 hash_type (const void *val)
3381 return (hashval_t) TYPE_UID (TREE_TYPE ((const_tree) val));
3384 /* Compare VAL1 (a node in the table) with VAL2 (a TYPE). */
3386 static int
3387 compare_type (const void *val1, const void *val2)
3389 return TREE_TYPE ((const_tree) val1) == (const_tree) val2;
3392 /* Return an identifier for the mangled unqualified name for a
3393 conversion operator to TYPE. This mangling is not specified by the
3394 ABI spec; it is only used internally. */
3396 tree
3397 mangle_conv_op_name_for_type (const tree type)
3399 void **slot;
3400 tree identifier;
3402 if (type == error_mark_node)
3403 return error_mark_node;
3405 if (conv_type_names == NULL)
3406 conv_type_names = htab_create_ggc (31, &hash_type, &compare_type, NULL);
3408 slot = htab_find_slot_with_hash (conv_type_names, type,
3409 (hashval_t) TYPE_UID (type), INSERT);
3410 identifier = (tree)*slot;
3411 if (!identifier)
3413 char buffer[64];
3415 /* Create a unique name corresponding to TYPE. */
3416 sprintf (buffer, "operator %lu",
3417 (unsigned long) htab_elements (conv_type_names));
3418 identifier = get_identifier (buffer);
3419 *slot = identifier;
3421 /* Hang TYPE off the identifier so it can be found easily later
3422 when performing conversions. */
3423 TREE_TYPE (identifier) = type;
3425 /* Set bits on the identifier so we know later it's a conversion. */
3426 IDENTIFIER_OPNAME_P (identifier) = 1;
3427 IDENTIFIER_TYPENAME_P (identifier) = 1;
3430 return identifier;
3433 /* Return an identifier for the name of an initialization guard
3434 variable for indicated VARIABLE. */
3436 tree
3437 mangle_guard_variable (const tree variable)
3439 start_mangling (variable);
3440 write_string ("_ZGV");
3441 if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
3442 /* The name of a guard variable for a reference temporary should refer
3443 to the reference, not the temporary. */
3444 write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
3445 else
3446 write_name (variable, /*ignore_local_scope=*/0);
3447 return finish_mangling_get_identifier (/*warn=*/false);
3450 /* Return an identifier for the name of a temporary variable used to
3451 initialize a static reference. This isn't part of the ABI, but we might
3452 as well call them something readable. */
3454 tree
3455 mangle_ref_init_variable (const tree variable)
3457 start_mangling (variable);
3458 write_string ("_ZGR");
3459 write_name (variable, /*ignore_local_scope=*/0);
3460 return finish_mangling_get_identifier (/*warn=*/false);
3464 /* Foreign language type mangling section. */
3466 /* How to write the type codes for the integer Java type. */
3468 static void
3469 write_java_integer_type_codes (const tree type)
3471 if (type == java_int_type_node)
3472 write_char ('i');
3473 else if (type == java_short_type_node)
3474 write_char ('s');
3475 else if (type == java_byte_type_node)
3476 write_char ('c');
3477 else if (type == java_char_type_node)
3478 write_char ('w');
3479 else if (type == java_long_type_node)
3480 write_char ('x');
3481 else if (type == java_boolean_type_node)
3482 write_char ('b');
3483 else
3484 gcc_unreachable ();
3487 #include "gt-cp-mangle.h"