2015-06-25 Andrew MacLeod <amacleod@redhat.com>
[official-gcc.git] / gcc / cp / mangle.c
blobc1a81fc70973ac4887418647eb3caf94e8380b38
1 /* Name mangling for the 3.0 C++ ABI.
2 Copyright (C) 2000-2015 Free Software Foundation, Inc.
3 Written by Alex Samuel <samuel@codesourcery.com>
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
12 GCC is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 /* This file implements mangling of C++ names according to the IA64
22 C++ ABI specification. A mangled name encodes a function or
23 variable's name, scope, type, and/or template arguments into a text
24 identifier. This identifier is used as the function's or
25 variable's linkage name, to preserve compatibility between C++'s
26 language features (templates, scoping, and overloading) and C
27 linkers.
29 Additionally, g++ uses mangled names internally. To support this,
30 mangling of types is allowed, even though the mangled name of a
31 type should not appear by itself as an exported name. Ditto for
32 uninstantiated templates.
34 The primary entry point for this module is mangle_decl, which
35 returns an identifier containing the mangled name for a decl.
36 Additional entry points are provided to build mangled names of
37 particular constructs when the appropriate decl for that construct
38 is not available. These are:
40 mangle_typeinfo_for_type: typeinfo data
41 mangle_typeinfo_string_for_type: typeinfo type name
42 mangle_vtbl_for_type: virtual table data
43 mangle_vtt_for_type: VTT data
44 mangle_ctor_vtbl_for_type: `C-in-B' constructor virtual table data
45 mangle_thunk: thunk function or entry */
47 #include "config.h"
48 #include "system.h"
49 #include "coretypes.h"
50 #include "tm.h"
51 #include "alias.h"
52 #include "symtab.h"
53 #include "tree.h"
54 #include "tree-hasher.h"
55 #include "stor-layout.h"
56 #include "stringpool.h"
57 #include "tm_p.h"
58 #include "cp-tree.h"
59 #include "obstack.h"
60 #include "flags.h"
61 #include "target.h"
62 #include "hard-reg-set.h"
63 #include "function.h"
64 #include "cgraph.h"
65 #include "attribs.h"
67 /* Debugging support. */
69 /* Define DEBUG_MANGLE to enable very verbose trace messages. */
70 #ifndef DEBUG_MANGLE
71 #define DEBUG_MANGLE 0
72 #endif
74 /* Macros for tracing the write_* functions. */
75 #if DEBUG_MANGLE
76 # define MANGLE_TRACE(FN, INPUT) \
77 fprintf (stderr, " %-24s: %-24s\n", (FN), (INPUT))
78 # define MANGLE_TRACE_TREE(FN, NODE) \
79 fprintf (stderr, " %-24s: %-24s (%p)\n", \
80 (FN), get_tree_code_name (TREE_CODE (NODE)), (void *) (NODE))
81 #else
82 # define MANGLE_TRACE(FN, INPUT)
83 # define MANGLE_TRACE_TREE(FN, NODE)
84 #endif
86 /* Nonzero if NODE is a class template-id. We can't rely on
87 CLASSTYPE_USE_TEMPLATE here because of tricky bugs in the parser
88 that hard to distinguish A<T> from A, where A<T> is the type as
89 instantiated outside of the template, and A is the type used
90 without parameters inside the template. */
91 #define CLASSTYPE_TEMPLATE_ID_P(NODE) \
92 (TYPE_LANG_SPECIFIC (NODE) != NULL \
93 && (TREE_CODE (NODE) == BOUND_TEMPLATE_TEMPLATE_PARM \
94 || (CLASSTYPE_TEMPLATE_INFO (NODE) != NULL \
95 && (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (NODE))))))
97 /* Things we only need one of. This module is not reentrant. */
98 typedef struct GTY(()) globals {
99 /* An array of the current substitution candidates, in the order
100 we've seen them. */
101 vec<tree, va_gc> *substitutions;
103 /* The entity that is being mangled. */
104 tree GTY ((skip)) entity;
106 /* How many parameter scopes we are inside. */
107 int parm_depth;
109 /* True if the mangling will be different in a future version of the
110 ABI. */
111 bool need_abi_warning;
112 } globals;
114 static GTY (()) globals G;
116 /* The obstack on which we build mangled names. */
117 static struct obstack *mangle_obstack;
119 /* The obstack on which we build mangled names that are not going to
120 be IDENTIFIER_NODEs. */
121 static struct obstack name_obstack;
123 /* The first object on the name_obstack; we use this to free memory
124 allocated on the name_obstack. */
125 static void *name_base;
127 /* Indices into subst_identifiers. These are identifiers used in
128 special substitution rules. */
129 typedef enum
131 SUBID_ALLOCATOR,
132 SUBID_BASIC_STRING,
133 SUBID_CHAR_TRAITS,
134 SUBID_BASIC_ISTREAM,
135 SUBID_BASIC_OSTREAM,
136 SUBID_BASIC_IOSTREAM,
137 SUBID_MAX
139 substitution_identifier_index_t;
141 /* For quick substitution checks, look up these common identifiers
142 once only. */
143 static GTY(()) tree subst_identifiers[SUBID_MAX];
145 /* Single-letter codes for builtin integer types, defined in
146 <builtin-type>. These are indexed by integer_type_kind values. */
147 static const char
148 integer_type_codes[itk_none] =
150 'c', /* itk_char */
151 'a', /* itk_signed_char */
152 'h', /* itk_unsigned_char */
153 's', /* itk_short */
154 't', /* itk_unsigned_short */
155 'i', /* itk_int */
156 'j', /* itk_unsigned_int */
157 'l', /* itk_long */
158 'm', /* itk_unsigned_long */
159 'x', /* itk_long_long */
160 'y', /* itk_unsigned_long_long */
161 /* __intN types are handled separately */
162 '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0'
165 static int decl_is_template_id (const tree, tree* const);
167 /* Functions for handling substitutions. */
169 static inline tree canonicalize_for_substitution (tree);
170 static void add_substitution (tree);
171 static inline int is_std_substitution (const tree,
172 const substitution_identifier_index_t);
173 static inline int is_std_substitution_char (const tree,
174 const substitution_identifier_index_t);
175 static int find_substitution (tree);
176 static void mangle_call_offset (const tree, const tree);
178 /* Functions for emitting mangled representations of things. */
180 static void write_mangled_name (const tree, bool);
181 static void write_encoding (const tree);
182 static void write_name (tree, const int);
183 static void write_abi_tags (tree);
184 static void write_unscoped_name (const tree);
185 static void write_unscoped_template_name (const tree);
186 static void write_nested_name (const tree);
187 static void write_prefix (const tree);
188 static void write_template_prefix (const tree);
189 static void write_unqualified_name (tree);
190 static void write_conversion_operator_name (const tree);
191 static void write_source_name (tree);
192 static void write_literal_operator_name (tree);
193 static void write_unnamed_type_name (const tree);
194 static void write_closure_type_name (const tree);
195 static int hwint_to_ascii (unsigned HOST_WIDE_INT, const unsigned int, char *,
196 const unsigned int);
197 static void write_number (unsigned HOST_WIDE_INT, const int,
198 const unsigned int);
199 static void write_compact_number (int num);
200 static void write_integer_cst (const tree);
201 static void write_real_cst (const tree);
202 static void write_identifier (const char *);
203 static void write_special_name_constructor (const tree);
204 static void write_special_name_destructor (const tree);
205 static void write_type (tree);
206 static int write_CV_qualifiers_for_type (const tree);
207 static void write_builtin_type (tree);
208 static void write_function_type (const tree);
209 static void write_bare_function_type (const tree, const int, const tree);
210 static void write_method_parms (tree, const int, const tree);
211 static void write_class_enum_type (const tree);
212 static void write_template_args (tree);
213 static void write_expression (tree);
214 static void write_template_arg_literal (const tree);
215 static void write_template_arg (tree);
216 static void write_template_template_arg (const tree);
217 static void write_array_type (const tree);
218 static void write_pointer_to_member_type (const tree);
219 static void write_template_param (const tree);
220 static void write_template_template_param (const tree);
221 static void write_substitution (const int);
222 static int discriminator_for_local_entity (tree);
223 static int discriminator_for_string_literal (tree, tree);
224 static void write_discriminator (const int);
225 static void write_local_name (tree, const tree, const tree);
226 static void dump_substitution_candidates (void);
227 static tree mangle_decl_string (const tree);
228 static int local_class_index (tree);
230 /* Control functions. */
232 static inline void start_mangling (const tree);
233 static tree mangle_special_for_type (const tree, const char *);
235 /* Foreign language functions. */
237 static void write_java_integer_type_codes (const tree);
239 /* Append a single character to the end of the mangled
240 representation. */
241 #define write_char(CHAR) \
242 obstack_1grow (mangle_obstack, (CHAR))
244 /* Append a sized buffer to the end of the mangled representation. */
245 #define write_chars(CHAR, LEN) \
246 obstack_grow (mangle_obstack, (CHAR), (LEN))
248 /* Append a NUL-terminated string to the end of the mangled
249 representation. */
250 #define write_string(STRING) \
251 obstack_grow (mangle_obstack, (STRING), strlen (STRING))
253 /* Nonzero if NODE1 and NODE2 are both TREE_LIST nodes and have the
254 same purpose (context, which may be a type) and value (template
255 decl). See write_template_prefix for more information on what this
256 is used for. */
257 #define NESTED_TEMPLATE_MATCH(NODE1, NODE2) \
258 (TREE_CODE (NODE1) == TREE_LIST \
259 && TREE_CODE (NODE2) == TREE_LIST \
260 && ((TYPE_P (TREE_PURPOSE (NODE1)) \
261 && same_type_p (TREE_PURPOSE (NODE1), TREE_PURPOSE (NODE2))) \
262 || TREE_PURPOSE (NODE1) == TREE_PURPOSE (NODE2)) \
263 && TREE_VALUE (NODE1) == TREE_VALUE (NODE2))
265 /* Write out an unsigned quantity in base 10. */
266 #define write_unsigned_number(NUMBER) \
267 write_number ((NUMBER), /*unsigned_p=*/1, 10)
269 /* If DECL is a template instance, return nonzero and, if
270 TEMPLATE_INFO is non-NULL, set *TEMPLATE_INFO to its template info.
271 Otherwise return zero. */
273 static int
274 decl_is_template_id (const tree decl, tree* const template_info)
276 if (TREE_CODE (decl) == TYPE_DECL)
278 /* TYPE_DECLs are handled specially. Look at its type to decide
279 if this is a template instantiation. */
280 const tree type = TREE_TYPE (decl);
282 if (CLASS_TYPE_P (type) && CLASSTYPE_TEMPLATE_ID_P (type))
284 if (template_info != NULL)
285 /* For a templated TYPE_DECL, the template info is hanging
286 off the type. */
287 *template_info = TYPE_TEMPLATE_INFO (type);
288 return 1;
291 else
293 /* Check if this is a primary template. */
294 if (DECL_LANG_SPECIFIC (decl) != NULL
295 && DECL_USE_TEMPLATE (decl)
296 && PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl))
297 && TREE_CODE (decl) != TEMPLATE_DECL)
299 if (template_info != NULL)
300 /* For most templated decls, the template info is hanging
301 off the decl. */
302 *template_info = DECL_TEMPLATE_INFO (decl);
303 return 1;
307 /* It's not a template id. */
308 return 0;
311 /* Produce debugging output of current substitution candidates. */
313 static void
314 dump_substitution_candidates (void)
316 unsigned i;
317 tree el;
319 fprintf (stderr, " ++ substitutions ");
320 FOR_EACH_VEC_ELT (*G.substitutions, i, el)
322 const char *name = "???";
324 if (i > 0)
325 fprintf (stderr, " ");
326 if (DECL_P (el))
327 name = IDENTIFIER_POINTER (DECL_NAME (el));
328 else if (TREE_CODE (el) == TREE_LIST)
329 name = IDENTIFIER_POINTER (DECL_NAME (TREE_VALUE (el)));
330 else if (TYPE_NAME (el))
331 name = TYPE_NAME_STRING (el);
332 fprintf (stderr, " S%d_ = ", i - 1);
333 if (TYPE_P (el) &&
334 (CP_TYPE_RESTRICT_P (el)
335 || CP_TYPE_VOLATILE_P (el)
336 || CP_TYPE_CONST_P (el)))
337 fprintf (stderr, "CV-");
338 fprintf (stderr, "%s (%s at %p)\n",
339 name, get_tree_code_name (TREE_CODE (el)), (void *) el);
343 /* Both decls and types can be substitution candidates, but sometimes
344 they refer to the same thing. For instance, a TYPE_DECL and
345 RECORD_TYPE for the same class refer to the same thing, and should
346 be treated accordingly in substitutions. This function returns a
347 canonicalized tree node representing NODE that is used when adding
348 and substitution candidates and finding matches. */
350 static inline tree
351 canonicalize_for_substitution (tree node)
353 /* For a TYPE_DECL, use the type instead. */
354 if (TREE_CODE (node) == TYPE_DECL)
355 node = TREE_TYPE (node);
356 if (TYPE_P (node)
357 && TYPE_CANONICAL (node) != node
358 && TYPE_MAIN_VARIANT (node) != node)
360 tree orig = node;
361 /* Here we want to strip the topmost typedef only.
362 We need to do that so is_std_substitution can do proper
363 name matching. */
364 if (TREE_CODE (node) == FUNCTION_TYPE)
365 /* Use build_qualified_type and TYPE_QUALS here to preserve
366 the old buggy mangling of attribute noreturn with abi<5. */
367 node = build_qualified_type (TYPE_MAIN_VARIANT (node),
368 TYPE_QUALS (node));
369 else
370 node = cp_build_qualified_type (TYPE_MAIN_VARIANT (node),
371 cp_type_quals (node));
372 if (TREE_CODE (node) == FUNCTION_TYPE
373 || TREE_CODE (node) == METHOD_TYPE)
374 node = build_ref_qualified_type (node, type_memfn_rqual (orig));
376 return node;
379 /* Add NODE as a substitution candidate. NODE must not already be on
380 the list of candidates. */
382 static void
383 add_substitution (tree node)
385 tree c;
387 if (DEBUG_MANGLE)
388 fprintf (stderr, " ++ add_substitution (%s at %10p)\n",
389 get_tree_code_name (TREE_CODE (node)), (void *) node);
391 /* Get the canonicalized substitution candidate for NODE. */
392 c = canonicalize_for_substitution (node);
393 if (DEBUG_MANGLE && c != node)
394 fprintf (stderr, " ++ using candidate (%s at %10p)\n",
395 get_tree_code_name (TREE_CODE (node)), (void *) node);
396 node = c;
398 #if ENABLE_CHECKING
399 /* Make sure NODE isn't already a candidate. */
401 int i;
402 tree candidate;
404 FOR_EACH_VEC_SAFE_ELT (G.substitutions, i, candidate)
406 gcc_assert (!(DECL_P (node) && node == candidate));
407 gcc_assert (!(TYPE_P (node) && TYPE_P (candidate)
408 && same_type_p (node, candidate)));
411 #endif /* ENABLE_CHECKING */
413 /* Put the decl onto the varray of substitution candidates. */
414 vec_safe_push (G.substitutions, node);
416 if (DEBUG_MANGLE)
417 dump_substitution_candidates ();
420 /* Helper function for find_substitution. Returns nonzero if NODE,
421 which may be a decl or a CLASS_TYPE, is a template-id with template
422 name of substitution_index[INDEX] in the ::std namespace. */
424 static inline int
425 is_std_substitution (const tree node,
426 const substitution_identifier_index_t index)
428 tree type = NULL;
429 tree decl = NULL;
431 if (DECL_P (node))
433 type = TREE_TYPE (node);
434 decl = node;
436 else if (CLASS_TYPE_P (node))
438 type = node;
439 decl = TYPE_NAME (node);
441 else
442 /* These are not the droids you're looking for. */
443 return 0;
445 return (DECL_NAMESPACE_STD_P (CP_DECL_CONTEXT (decl))
446 && TYPE_LANG_SPECIFIC (type)
447 && TYPE_TEMPLATE_INFO (type)
448 && (DECL_NAME (TYPE_TI_TEMPLATE (type))
449 == subst_identifiers[index]));
452 /* Helper function for find_substitution. Returns nonzero if NODE,
453 which may be a decl or a CLASS_TYPE, is the template-id
454 ::std::identifier<char>, where identifier is
455 substitution_index[INDEX]. */
457 static inline int
458 is_std_substitution_char (const tree node,
459 const substitution_identifier_index_t index)
461 tree args;
462 /* Check NODE's name is ::std::identifier. */
463 if (!is_std_substitution (node, index))
464 return 0;
465 /* Figure out its template args. */
466 if (DECL_P (node))
467 args = DECL_TI_ARGS (node);
468 else if (CLASS_TYPE_P (node))
469 args = CLASSTYPE_TI_ARGS (node);
470 else
471 /* Oops, not a template. */
472 return 0;
473 /* NODE's template arg list should be <char>. */
474 return
475 TREE_VEC_LENGTH (args) == 1
476 && TREE_VEC_ELT (args, 0) == char_type_node;
479 /* Check whether a substitution should be used to represent NODE in
480 the mangling.
482 First, check standard special-case substitutions.
484 <substitution> ::= St
485 # ::std
487 ::= Sa
488 # ::std::allocator
490 ::= Sb
491 # ::std::basic_string
493 ::= Ss
494 # ::std::basic_string<char,
495 ::std::char_traits<char>,
496 ::std::allocator<char> >
498 ::= Si
499 # ::std::basic_istream<char, ::std::char_traits<char> >
501 ::= So
502 # ::std::basic_ostream<char, ::std::char_traits<char> >
504 ::= Sd
505 # ::std::basic_iostream<char, ::std::char_traits<char> >
507 Then examine the stack of currently available substitution
508 candidates for entities appearing earlier in the same mangling
510 If a substitution is found, write its mangled representation and
511 return nonzero. If none is found, just return zero. */
513 static int
514 find_substitution (tree node)
516 int i;
517 const int size = vec_safe_length (G.substitutions);
518 tree decl;
519 tree type;
520 const char *abbr = NULL;
522 if (DEBUG_MANGLE)
523 fprintf (stderr, " ++ find_substitution (%s at %p)\n",
524 get_tree_code_name (TREE_CODE (node)), (void *) node);
526 /* Obtain the canonicalized substitution representation for NODE.
527 This is what we'll compare against. */
528 node = canonicalize_for_substitution (node);
530 /* Check for builtin substitutions. */
532 decl = TYPE_P (node) ? TYPE_NAME (node) : node;
533 type = TYPE_P (node) ? node : TREE_TYPE (node);
535 /* Check for std::allocator. */
536 if (decl
537 && is_std_substitution (decl, SUBID_ALLOCATOR)
538 && !CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl)))
539 abbr = "Sa";
541 /* Check for std::basic_string. */
542 else if (decl && is_std_substitution (decl, SUBID_BASIC_STRING))
544 if (TYPE_P (node))
546 /* If this is a type (i.e. a fully-qualified template-id),
547 check for
548 std::basic_string <char,
549 std::char_traits<char>,
550 std::allocator<char> > . */
551 if (cp_type_quals (type) == TYPE_UNQUALIFIED
552 && CLASSTYPE_USE_TEMPLATE (type))
554 tree args = CLASSTYPE_TI_ARGS (type);
555 if (TREE_VEC_LENGTH (args) == 3
556 && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
557 && is_std_substitution_char (TREE_VEC_ELT (args, 1),
558 SUBID_CHAR_TRAITS)
559 && is_std_substitution_char (TREE_VEC_ELT (args, 2),
560 SUBID_ALLOCATOR))
561 abbr = "Ss";
564 else
565 /* Substitute for the template name only if this isn't a type. */
566 abbr = "Sb";
569 /* Check for basic_{i,o,io}stream. */
570 else if (TYPE_P (node)
571 && cp_type_quals (type) == TYPE_UNQUALIFIED
572 && CLASS_TYPE_P (type)
573 && CLASSTYPE_USE_TEMPLATE (type)
574 && CLASSTYPE_TEMPLATE_INFO (type) != NULL)
576 /* First, check for the template
577 args <char, std::char_traits<char> > . */
578 tree args = CLASSTYPE_TI_ARGS (type);
579 if (TREE_VEC_LENGTH (args) == 2
580 && TYPE_P (TREE_VEC_ELT (args, 0))
581 && same_type_p (TREE_VEC_ELT (args, 0), char_type_node)
582 && is_std_substitution_char (TREE_VEC_ELT (args, 1),
583 SUBID_CHAR_TRAITS))
585 /* Got them. Is this basic_istream? */
586 if (is_std_substitution (decl, SUBID_BASIC_ISTREAM))
587 abbr = "Si";
588 /* Or basic_ostream? */
589 else if (is_std_substitution (decl, SUBID_BASIC_OSTREAM))
590 abbr = "So";
591 /* Or basic_iostream? */
592 else if (is_std_substitution (decl, SUBID_BASIC_IOSTREAM))
593 abbr = "Sd";
597 /* Check for namespace std. */
598 else if (decl && DECL_NAMESPACE_STD_P (decl))
600 write_string ("St");
601 return 1;
604 tree tags = NULL_TREE;
605 if (OVERLOAD_TYPE_P (node) || DECL_CLASS_TEMPLATE_P (node))
606 tags = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (type));
607 /* Now check the list of available substitutions for this mangling
608 operation. */
609 if (!abbr || tags) for (i = 0; i < size; ++i)
611 tree candidate = (*G.substitutions)[i];
612 /* NODE is a matched to a candidate if it's the same decl node or
613 if it's the same type. */
614 if (decl == candidate
615 || (TYPE_P (candidate) && type && TYPE_P (node)
616 && same_type_p (type, candidate))
617 || NESTED_TEMPLATE_MATCH (node, candidate))
619 write_substitution (i);
620 return 1;
624 if (!abbr)
625 /* No substitution found. */
626 return 0;
628 write_string (abbr);
629 if (tags)
631 /* If there are ABI tags on the abbreviation, it becomes
632 a substitution candidate. */
633 write_abi_tags (tags);
634 add_substitution (node);
636 return 1;
639 /* Returns whether DECL's symbol name should be the plain unqualified-id
640 rather than a more complicated mangled name. */
642 static bool
643 unmangled_name_p (const tree decl)
645 if (TREE_CODE (decl) == FUNCTION_DECL)
647 /* The names of `extern "C"' functions are not mangled. */
648 return (DECL_EXTERN_C_FUNCTION_P (decl)
649 /* But overloaded operator names *are* mangled. */
650 && !DECL_OVERLOADED_OPERATOR_P (decl));
652 else if (VAR_P (decl))
654 /* static variables are mangled. */
655 if (!DECL_EXTERNAL_LINKAGE_P (decl))
656 return false;
658 /* extern "C" declarations aren't mangled. */
659 if (DECL_EXTERN_C_P (decl))
660 return true;
662 /* Other variables at non-global scope are mangled. */
663 if (CP_DECL_CONTEXT (decl) != global_namespace)
664 return false;
666 /* Variable template instantiations are mangled. */
667 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
668 && variable_template_p (DECL_TI_TEMPLATE (decl)))
669 return false;
671 /* Declarations with ABI tags are mangled. */
672 if (lookup_attribute ("abi_tag", DECL_ATTRIBUTES (decl)))
673 return false;
675 /* The names of non-static global variables aren't mangled. */
676 return true;
679 return false;
682 /* TOP_LEVEL is true, if this is being called at outermost level of
683 mangling. It should be false when mangling a decl appearing in an
684 expression within some other mangling.
686 <mangled-name> ::= _Z <encoding> */
688 static void
689 write_mangled_name (const tree decl, bool top_level)
691 MANGLE_TRACE_TREE ("mangled-name", decl);
693 check_abi_tags (decl);
695 if (unmangled_name_p (decl))
697 if (top_level)
698 write_string (IDENTIFIER_POINTER (DECL_NAME (decl)));
699 else
701 /* The standard notes: "The <encoding> of an extern "C"
702 function is treated like global-scope data, i.e. as its
703 <source-name> without a type." We cannot write
704 overloaded operators that way though, because it contains
705 characters invalid in assembler. */
706 write_string ("_Z");
707 write_source_name (DECL_NAME (decl));
710 else
712 write_string ("_Z");
713 write_encoding (decl);
717 /* Returns true if the return type of DECL is part of its signature, and
718 therefore its mangling. */
720 bool
721 mangle_return_type_p (tree decl)
723 return (!DECL_CONSTRUCTOR_P (decl)
724 && !DECL_DESTRUCTOR_P (decl)
725 && !DECL_CONV_FN_P (decl)
726 && decl_is_template_id (decl, NULL));
729 /* <encoding> ::= <function name> <bare-function-type>
730 ::= <data name> */
732 static void
733 write_encoding (const tree decl)
735 MANGLE_TRACE_TREE ("encoding", decl);
737 if (DECL_LANG_SPECIFIC (decl) && DECL_EXTERN_C_FUNCTION_P (decl))
739 /* For overloaded operators write just the mangled name
740 without arguments. */
741 if (DECL_OVERLOADED_OPERATOR_P (decl))
742 write_name (decl, /*ignore_local_scope=*/0);
743 else
744 write_source_name (DECL_NAME (decl));
745 return;
748 write_name (decl, /*ignore_local_scope=*/0);
749 if (TREE_CODE (decl) == FUNCTION_DECL)
751 tree fn_type;
752 tree d;
754 if (decl_is_template_id (decl, NULL))
756 fn_type = get_mostly_instantiated_function_type (decl);
757 /* FN_TYPE will not have parameter types for in-charge or
758 VTT parameters. Therefore, we pass NULL_TREE to
759 write_bare_function_type -- otherwise, it will get
760 confused about which artificial parameters to skip. */
761 d = NULL_TREE;
763 else
765 fn_type = TREE_TYPE (decl);
766 d = decl;
769 write_bare_function_type (fn_type,
770 mangle_return_type_p (decl),
775 /* Lambdas can have a bit more context for mangling, specifically VAR_DECL
776 or PARM_DECL context, which doesn't belong in DECL_CONTEXT. */
778 static tree
779 decl_mangling_context (tree decl)
781 tree tcontext = targetm.cxx.decl_mangling_context (decl);
783 if (tcontext != NULL_TREE)
784 return tcontext;
786 if (TREE_CODE (decl) == TEMPLATE_DECL
787 && DECL_TEMPLATE_RESULT (decl))
788 decl = DECL_TEMPLATE_RESULT (decl);
790 if (TREE_CODE (decl) == TYPE_DECL
791 && LAMBDA_TYPE_P (TREE_TYPE (decl)))
793 tree extra = LAMBDA_TYPE_EXTRA_SCOPE (TREE_TYPE (decl));
794 if (extra)
795 return extra;
797 else if (template_type_parameter_p (decl))
798 /* template type parms have no mangling context. */
799 return NULL_TREE;
800 return CP_DECL_CONTEXT (decl);
803 /* <name> ::= <unscoped-name>
804 ::= <unscoped-template-name> <template-args>
805 ::= <nested-name>
806 ::= <local-name>
808 If IGNORE_LOCAL_SCOPE is nonzero, this production of <name> is
809 called from <local-name>, which mangles the enclosing scope
810 elsewhere and then uses this function to mangle just the part
811 underneath the function scope. So don't use the <local-name>
812 production, to avoid an infinite recursion. */
814 static void
815 write_name (tree decl, const int ignore_local_scope)
817 tree context;
819 MANGLE_TRACE_TREE ("name", decl);
821 if (TREE_CODE (decl) == TYPE_DECL)
823 /* In case this is a typedef, fish out the corresponding
824 TYPE_DECL for the main variant. */
825 decl = TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl)));
828 context = decl_mangling_context (decl);
830 gcc_assert (context != NULL_TREE);
832 if (abi_version_crosses (7)
833 && ignore_local_scope
834 && TREE_CODE (context) == PARM_DECL)
835 G.need_abi_warning = 1;
837 /* A decl in :: or ::std scope is treated specially. The former is
838 mangled using <unscoped-name> or <unscoped-template-name>, the
839 latter with a special substitution. Also, a name that is
840 directly in a local function scope is also mangled with
841 <unscoped-name> rather than a full <nested-name>. */
842 if (context == global_namespace
843 || DECL_NAMESPACE_STD_P (context)
844 || (ignore_local_scope
845 && (TREE_CODE (context) == FUNCTION_DECL
846 || (abi_version_at_least (7)
847 && TREE_CODE (context) == PARM_DECL))))
849 tree template_info;
850 /* Is this a template instance? */
851 if (decl_is_template_id (decl, &template_info))
853 /* Yes: use <unscoped-template-name>. */
854 write_unscoped_template_name (TI_TEMPLATE (template_info));
855 write_template_args (TI_ARGS (template_info));
857 else
858 /* Everything else gets an <unqualified-name>. */
859 write_unscoped_name (decl);
861 else
863 /* Handle local names, unless we asked not to (that is, invoked
864 under <local-name>, to handle only the part of the name under
865 the local scope). */
866 if (!ignore_local_scope)
868 /* Scan up the list of scope context, looking for a
869 function. If we find one, this entity is in local
870 function scope. local_entity tracks context one scope
871 level down, so it will contain the element that's
872 directly in that function's scope, either decl or one of
873 its enclosing scopes. */
874 tree local_entity = decl;
875 while (context != global_namespace)
877 /* Make sure we're always dealing with decls. */
878 if (TYPE_P (context))
879 context = TYPE_NAME (context);
880 /* Is this a function? */
881 if (TREE_CODE (context) == FUNCTION_DECL
882 || TREE_CODE (context) == PARM_DECL)
884 /* Yes, we have local scope. Use the <local-name>
885 production for the innermost function scope. */
886 write_local_name (context, local_entity, decl);
887 return;
889 /* Up one scope level. */
890 local_entity = context;
891 context = decl_mangling_context (context);
894 /* No local scope found? Fall through to <nested-name>. */
897 /* Other decls get a <nested-name> to encode their scope. */
898 write_nested_name (decl);
902 /* <unscoped-name> ::= <unqualified-name>
903 ::= St <unqualified-name> # ::std:: */
905 static void
906 write_unscoped_name (const tree decl)
908 tree context = decl_mangling_context (decl);
910 MANGLE_TRACE_TREE ("unscoped-name", decl);
912 /* Is DECL in ::std? */
913 if (DECL_NAMESPACE_STD_P (context))
915 write_string ("St");
916 write_unqualified_name (decl);
918 else
920 /* If not, it should be either in the global namespace, or directly
921 in a local function scope. A lambda can also be mangled in the
922 scope of a default argument. */
923 gcc_assert (context == global_namespace
924 || TREE_CODE (context) == PARM_DECL
925 || TREE_CODE (context) == FUNCTION_DECL);
927 write_unqualified_name (decl);
931 /* <unscoped-template-name> ::= <unscoped-name>
932 ::= <substitution> */
934 static void
935 write_unscoped_template_name (const tree decl)
937 MANGLE_TRACE_TREE ("unscoped-template-name", decl);
939 if (find_substitution (decl))
940 return;
941 write_unscoped_name (decl);
942 add_substitution (decl);
945 /* Write the nested name, including CV-qualifiers, of DECL.
947 <nested-name> ::= N [<CV-qualifiers>] [<ref-qualifier>] <prefix> <unqualified-name> E
948 ::= N [<CV-qualifiers>] [<ref-qualifier>] <template-prefix> <template-args> E
950 <ref-qualifier> ::= R # & ref-qualifier
951 ::= O # && ref-qualifier
952 <CV-qualifiers> ::= [r] [V] [K] */
954 static void
955 write_nested_name (const tree decl)
957 tree template_info;
959 MANGLE_TRACE_TREE ("nested-name", decl);
961 write_char ('N');
963 /* Write CV-qualifiers, if this is a member function. */
964 if (TREE_CODE (decl) == FUNCTION_DECL
965 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
967 if (DECL_VOLATILE_MEMFUNC_P (decl))
968 write_char ('V');
969 if (DECL_CONST_MEMFUNC_P (decl))
970 write_char ('K');
971 if (FUNCTION_REF_QUALIFIED (TREE_TYPE (decl)))
973 if (FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (decl)))
974 write_char ('O');
975 else
976 write_char ('R');
980 /* Is this a template instance? */
981 if (decl_is_template_id (decl, &template_info))
983 /* Yes, use <template-prefix>. */
984 write_template_prefix (decl);
985 write_template_args (TI_ARGS (template_info));
987 else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
989 tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
990 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
992 write_template_prefix (decl);
993 write_template_args (TREE_OPERAND (name, 1));
995 else
997 write_prefix (decl_mangling_context (decl));
998 write_unqualified_name (decl);
1001 else
1003 /* No, just use <prefix> */
1004 write_prefix (decl_mangling_context (decl));
1005 write_unqualified_name (decl);
1007 write_char ('E');
1010 /* <prefix> ::= <prefix> <unqualified-name>
1011 ::= <template-param>
1012 ::= <template-prefix> <template-args>
1013 ::= <decltype>
1014 ::= # empty
1015 ::= <substitution> */
1017 static void
1018 write_prefix (const tree node)
1020 tree decl;
1021 /* Non-NULL if NODE represents a template-id. */
1022 tree template_info = NULL;
1024 if (node == NULL
1025 || node == global_namespace)
1026 return;
1028 MANGLE_TRACE_TREE ("prefix", node);
1030 if (TREE_CODE (node) == DECLTYPE_TYPE)
1032 write_type (node);
1033 return;
1036 if (find_substitution (node))
1037 return;
1039 if (DECL_P (node))
1041 /* If this is a function or parm decl, that means we've hit function
1042 scope, so this prefix must be for a local name. In this
1043 case, we're under the <local-name> production, which encodes
1044 the enclosing function scope elsewhere. So don't continue
1045 here. */
1046 if (TREE_CODE (node) == FUNCTION_DECL
1047 || TREE_CODE (node) == PARM_DECL)
1048 return;
1050 decl = node;
1051 decl_is_template_id (decl, &template_info);
1053 else
1055 /* Node is a type. */
1056 decl = TYPE_NAME (node);
1057 if (CLASSTYPE_TEMPLATE_ID_P (node))
1058 template_info = TYPE_TEMPLATE_INFO (node);
1061 if (TREE_CODE (node) == TEMPLATE_TYPE_PARM)
1062 write_template_param (node);
1063 else if (template_info != NULL)
1064 /* Templated. */
1066 write_template_prefix (decl);
1067 write_template_args (TI_ARGS (template_info));
1069 else if (TREE_CODE (TREE_TYPE (decl)) == TYPENAME_TYPE)
1071 tree name = TYPENAME_TYPE_FULLNAME (TREE_TYPE (decl));
1072 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
1074 write_template_prefix (decl);
1075 write_template_args (TREE_OPERAND (name, 1));
1077 else
1079 write_prefix (decl_mangling_context (decl));
1080 write_unqualified_name (decl);
1083 else
1084 /* Not templated. */
1086 write_prefix (decl_mangling_context (decl));
1087 write_unqualified_name (decl);
1088 if (VAR_P (decl)
1089 || TREE_CODE (decl) == FIELD_DECL)
1091 /* <data-member-prefix> := <member source-name> M */
1092 write_char ('M');
1093 return;
1097 add_substitution (node);
1100 /* <template-prefix> ::= <prefix> <template component>
1101 ::= <template-param>
1102 ::= <substitution> */
1104 static void
1105 write_template_prefix (const tree node)
1107 tree decl = DECL_P (node) ? node : TYPE_NAME (node);
1108 tree type = DECL_P (node) ? TREE_TYPE (node) : node;
1109 tree context = decl_mangling_context (decl);
1110 tree template_info;
1111 tree templ;
1112 tree substitution;
1114 MANGLE_TRACE_TREE ("template-prefix", node);
1116 /* Find the template decl. */
1117 if (decl_is_template_id (decl, &template_info))
1118 templ = TI_TEMPLATE (template_info);
1119 else if (TREE_CODE (type) == TYPENAME_TYPE)
1120 /* For a typename type, all we have is the name. */
1121 templ = DECL_NAME (decl);
1122 else
1124 gcc_assert (CLASSTYPE_TEMPLATE_ID_P (type));
1126 templ = TYPE_TI_TEMPLATE (type);
1129 /* For a member template, though, the template name for the
1130 innermost name must have all the outer template levels
1131 instantiated. For instance, consider
1133 template<typename T> struct Outer {
1134 template<typename U> struct Inner {};
1137 The template name for `Inner' in `Outer<int>::Inner<float>' is
1138 `Outer<int>::Inner<U>'. In g++, we don't instantiate the template
1139 levels separately, so there's no TEMPLATE_DECL available for this
1140 (there's only `Outer<T>::Inner<U>').
1142 In order to get the substitutions right, we create a special
1143 TREE_LIST to represent the substitution candidate for a nested
1144 template. The TREE_PURPOSE is the template's context, fully
1145 instantiated, and the TREE_VALUE is the TEMPLATE_DECL for the inner
1146 template.
1148 So, for the example above, `Outer<int>::Inner' is represented as a
1149 substitution candidate by a TREE_LIST whose purpose is `Outer<int>'
1150 and whose value is `Outer<T>::Inner<U>'. */
1151 if (TYPE_P (context))
1152 substitution = build_tree_list (context, templ);
1153 else
1154 substitution = templ;
1156 if (find_substitution (substitution))
1157 return;
1159 if (TREE_TYPE (templ)
1160 && TREE_CODE (TREE_TYPE (templ)) == TEMPLATE_TEMPLATE_PARM)
1161 write_template_param (TREE_TYPE (templ));
1162 else
1164 write_prefix (context);
1165 write_unqualified_name (decl);
1168 add_substitution (substitution);
1171 /* We don't need to handle thunks, vtables, or VTTs here. Those are
1172 mangled through special entry points.
1174 <unqualified-name> ::= <operator-name>
1175 ::= <special-name>
1176 ::= <source-name>
1177 ::= <unnamed-type-name>
1178 ::= <local-source-name>
1180 <local-source-name> ::= L <source-name> <discriminator> */
1182 static void
1183 write_unqualified_id (tree identifier)
1185 if (IDENTIFIER_TYPENAME_P (identifier))
1186 write_conversion_operator_name (TREE_TYPE (identifier));
1187 else if (IDENTIFIER_OPNAME_P (identifier))
1189 int i;
1190 const char *mangled_name = NULL;
1192 /* Unfortunately, there is no easy way to go from the
1193 name of the operator back to the corresponding tree
1194 code. */
1195 for (i = 0; i < MAX_TREE_CODES; ++i)
1196 if (operator_name_info[i].identifier == identifier)
1198 /* The ABI says that we prefer binary operator
1199 names to unary operator names. */
1200 if (operator_name_info[i].arity == 2)
1202 mangled_name = operator_name_info[i].mangled_name;
1203 break;
1205 else if (!mangled_name)
1206 mangled_name = operator_name_info[i].mangled_name;
1208 else if (assignment_operator_name_info[i].identifier
1209 == identifier)
1211 mangled_name
1212 = assignment_operator_name_info[i].mangled_name;
1213 break;
1215 write_string (mangled_name);
1217 else if (UDLIT_OPER_P (identifier))
1218 write_literal_operator_name (identifier);
1219 else
1220 write_source_name (identifier);
1223 static void
1224 write_unqualified_name (tree decl)
1226 MANGLE_TRACE_TREE ("unqualified-name", decl);
1228 if (identifier_p (decl))
1230 write_unqualified_id (decl);
1231 return;
1234 bool found = false;
1236 if (DECL_NAME (decl) == NULL_TREE)
1238 found = true;
1239 gcc_assert (DECL_ASSEMBLER_NAME_SET_P (decl));
1240 write_source_name (DECL_ASSEMBLER_NAME (decl));
1242 else if (DECL_DECLARES_FUNCTION_P (decl))
1244 found = true;
1245 if (DECL_CONSTRUCTOR_P (decl))
1246 write_special_name_constructor (decl);
1247 else if (DECL_DESTRUCTOR_P (decl))
1248 write_special_name_destructor (decl);
1249 else if (DECL_CONV_FN_P (decl))
1251 /* Conversion operator. Handle it right here.
1252 <operator> ::= cv <type> */
1253 tree type;
1254 if (decl_is_template_id (decl, NULL))
1256 tree fn_type;
1257 fn_type = get_mostly_instantiated_function_type (decl);
1258 type = TREE_TYPE (fn_type);
1260 else if (FNDECL_USED_AUTO (decl))
1261 type = (DECL_STRUCT_FUNCTION (decl)->language
1262 ->x_auto_return_pattern);
1263 else
1264 type = DECL_CONV_FN_TYPE (decl);
1265 write_conversion_operator_name (type);
1267 else if (DECL_OVERLOADED_OPERATOR_P (decl))
1269 operator_name_info_t *oni;
1270 if (DECL_ASSIGNMENT_OPERATOR_P (decl))
1271 oni = assignment_operator_name_info;
1272 else
1273 oni = operator_name_info;
1275 write_string (oni[DECL_OVERLOADED_OPERATOR_P (decl)].mangled_name);
1277 else if (UDLIT_OPER_P (DECL_NAME (decl)))
1278 write_literal_operator_name (DECL_NAME (decl));
1279 else
1280 found = false;
1283 if (found)
1284 /* OK */;
1285 else if (VAR_OR_FUNCTION_DECL_P (decl) && ! TREE_PUBLIC (decl)
1286 && DECL_NAMESPACE_SCOPE_P (decl)
1287 && decl_linkage (decl) == lk_internal)
1289 MANGLE_TRACE_TREE ("local-source-name", decl);
1290 write_char ('L');
1291 write_source_name (DECL_NAME (decl));
1292 /* The default discriminator is 1, and that's all we ever use,
1293 so there's no code to output one here. */
1295 else
1297 tree type = TREE_TYPE (decl);
1299 if (TREE_CODE (decl) == TYPE_DECL
1300 && TYPE_ANONYMOUS_P (type))
1301 write_unnamed_type_name (type);
1302 else if (TREE_CODE (decl) == TYPE_DECL
1303 && LAMBDA_TYPE_P (type))
1304 write_closure_type_name (type);
1305 else
1306 write_source_name (DECL_NAME (decl));
1309 /* We use the ABI tags from the primary template, ignoring tags on any
1310 specializations. This is necessary because C++ doesn't require a
1311 specialization to be declared before it is used unless the use
1312 requires a complete type, but we need to get the tags right on
1313 incomplete types as well. */
1314 if (tree tmpl = most_general_template (decl))
1315 decl = DECL_TEMPLATE_RESULT (tmpl);
1316 /* Don't crash on an unbound class template. */
1317 if (decl && TREE_CODE (decl) != NAMESPACE_DECL)
1319 tree attrs = (TREE_CODE (decl) == TYPE_DECL
1320 ? TYPE_ATTRIBUTES (TREE_TYPE (decl))
1321 : DECL_ATTRIBUTES (decl));
1322 write_abi_tags (lookup_attribute ("abi_tag", attrs));
1326 /* Write the unqualified-name for a conversion operator to TYPE. */
1328 static void
1329 write_conversion_operator_name (const tree type)
1331 write_string ("cv");
1332 write_type (type);
1335 /* Non-terminal <source-name>. IDENTIFIER is an IDENTIFIER_NODE.
1337 <source-name> ::= </length/ number> <identifier> */
1339 static void
1340 write_source_name (tree identifier)
1342 MANGLE_TRACE_TREE ("source-name", identifier);
1344 /* Never write the whole template-id name including the template
1345 arguments; we only want the template name. */
1346 if (IDENTIFIER_TEMPLATE (identifier))
1347 identifier = IDENTIFIER_TEMPLATE (identifier);
1349 write_unsigned_number (IDENTIFIER_LENGTH (identifier));
1350 write_identifier (IDENTIFIER_POINTER (identifier));
1353 /* Compare two TREE_STRINGs like strcmp. */
1356 tree_string_cmp (const void *p1, const void *p2)
1358 if (p1 == p2)
1359 return 0;
1360 tree s1 = *(const tree*)p1;
1361 tree s2 = *(const tree*)p2;
1362 return strcmp (TREE_STRING_POINTER (s1),
1363 TREE_STRING_POINTER (s2));
1366 /* ID is the name of a function or type with abi_tags attribute TAGS.
1367 Write out the name, suitably decorated. */
1369 static void
1370 write_abi_tags (tree tags)
1372 if (tags == NULL_TREE)
1373 return;
1375 tags = TREE_VALUE (tags);
1377 vec<tree, va_gc> * vec = make_tree_vector();
1379 for (tree t = tags; t; t = TREE_CHAIN (t))
1381 if (ABI_TAG_IMPLICIT (t))
1382 continue;
1383 tree str = TREE_VALUE (t);
1384 vec_safe_push (vec, str);
1387 vec->qsort (tree_string_cmp);
1389 unsigned i; tree str;
1390 FOR_EACH_VEC_ELT (*vec, i, str)
1392 write_string ("B");
1393 write_unsigned_number (TREE_STRING_LENGTH (str) - 1);
1394 write_identifier (TREE_STRING_POINTER (str));
1397 release_tree_vector (vec);
1400 /* Write a user-defined literal operator.
1401 ::= li <source-name> # "" <source-name>
1402 IDENTIFIER is an LITERAL_IDENTIFIER_NODE. */
1404 static void
1405 write_literal_operator_name (tree identifier)
1407 const char* suffix = UDLIT_OP_SUFFIX (identifier);
1408 write_identifier (UDLIT_OP_MANGLED_PREFIX);
1409 write_unsigned_number (strlen (suffix));
1410 write_identifier (suffix);
1413 /* Encode 0 as _, and 1+ as n-1_. */
1415 static void
1416 write_compact_number (int num)
1418 if (num > 0)
1419 write_unsigned_number (num - 1);
1420 write_char ('_');
1423 /* Return how many unnamed types precede TYPE in its enclosing class. */
1425 static int
1426 nested_anon_class_index (tree type)
1428 int index = 0;
1429 tree member = TYPE_FIELDS (TYPE_CONTEXT (type));
1430 for (; member; member = DECL_CHAIN (member))
1431 if (DECL_IMPLICIT_TYPEDEF_P (member))
1433 tree memtype = TREE_TYPE (member);
1434 if (memtype == type)
1435 return index;
1436 else if (TYPE_ANONYMOUS_P (memtype))
1437 ++index;
1440 gcc_unreachable ();
1443 /* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
1445 static void
1446 write_unnamed_type_name (const tree type)
1448 int discriminator;
1449 MANGLE_TRACE_TREE ("unnamed-type-name", type);
1451 if (TYPE_FUNCTION_SCOPE_P (type))
1452 discriminator = local_class_index (type);
1453 else if (TYPE_CLASS_SCOPE_P (type))
1454 discriminator = nested_anon_class_index (type);
1455 else
1457 gcc_assert (no_linkage_check (type, /*relaxed_p=*/true));
1458 /* Just use the old mangling at namespace scope. */
1459 write_source_name (TYPE_IDENTIFIER (type));
1460 return;
1463 write_string ("Ut");
1464 write_compact_number (discriminator);
1467 /* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _
1468 <lambda-sig> ::= <parameter type>+ # Parameter types or "v" if the lambda has no parameters */
1470 static void
1471 write_closure_type_name (const tree type)
1473 tree fn = lambda_function (type);
1474 tree lambda = CLASSTYPE_LAMBDA_EXPR (type);
1475 tree parms = TYPE_ARG_TYPES (TREE_TYPE (fn));
1477 MANGLE_TRACE_TREE ("closure-type-name", type);
1479 write_string ("Ul");
1480 write_method_parms (parms, /*method_p=*/1, fn);
1481 write_char ('E');
1482 write_compact_number (LAMBDA_EXPR_DISCRIMINATOR (lambda));
1485 /* Convert NUMBER to ascii using base BASE and generating at least
1486 MIN_DIGITS characters. BUFFER points to the _end_ of the buffer
1487 into which to store the characters. Returns the number of
1488 characters generated (these will be laid out in advance of where
1489 BUFFER points). */
1491 static int
1492 hwint_to_ascii (unsigned HOST_WIDE_INT number, const unsigned int base,
1493 char *buffer, const unsigned int min_digits)
1495 static const char base_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
1496 unsigned digits = 0;
1498 while (number)
1500 unsigned HOST_WIDE_INT d = number / base;
1502 *--buffer = base_digits[number - d * base];
1503 digits++;
1504 number = d;
1506 while (digits < min_digits)
1508 *--buffer = base_digits[0];
1509 digits++;
1511 return digits;
1514 /* Non-terminal <number>.
1516 <number> ::= [n] </decimal integer/> */
1518 static void
1519 write_number (unsigned HOST_WIDE_INT number, const int unsigned_p,
1520 const unsigned int base)
1522 char buffer[sizeof (HOST_WIDE_INT) * 8];
1523 unsigned count = 0;
1525 if (!unsigned_p && (HOST_WIDE_INT) number < 0)
1527 write_char ('n');
1528 number = -((HOST_WIDE_INT) number);
1530 count = hwint_to_ascii (number, base, buffer + sizeof (buffer), 1);
1531 write_chars (buffer + sizeof (buffer) - count, count);
1534 /* Write out an integral CST in decimal. Most numbers are small, and
1535 representable in a HOST_WIDE_INT. Occasionally we'll have numbers
1536 bigger than that, which we must deal with. */
1538 static inline void
1539 write_integer_cst (const tree cst)
1541 int sign = tree_int_cst_sgn (cst);
1542 widest_int abs_value = wi::abs (wi::to_widest (cst));
1543 if (!wi::fits_uhwi_p (abs_value))
1545 /* A bignum. We do this in chunks, each of which fits in a
1546 HOST_WIDE_INT. */
1547 char buffer[sizeof (HOST_WIDE_INT) * 8 * 2];
1548 unsigned HOST_WIDE_INT chunk;
1549 unsigned chunk_digits;
1550 char *ptr = buffer + sizeof (buffer);
1551 unsigned count = 0;
1552 tree n, base, type;
1553 int done;
1555 /* HOST_WIDE_INT must be at least 32 bits, so 10^9 is
1556 representable. */
1557 chunk = 1000000000;
1558 chunk_digits = 9;
1560 if (sizeof (HOST_WIDE_INT) >= 8)
1562 /* It is at least 64 bits, so 10^18 is representable. */
1563 chunk_digits = 18;
1564 chunk *= chunk;
1567 type = c_common_signed_or_unsigned_type (1, TREE_TYPE (cst));
1568 base = build_int_cstu (type, chunk);
1569 n = wide_int_to_tree (type, cst);
1571 if (sign < 0)
1573 write_char ('n');
1574 n = fold_build1_loc (input_location, NEGATE_EXPR, type, n);
1578 tree d = fold_build2_loc (input_location, FLOOR_DIV_EXPR, type, n, base);
1579 tree tmp = fold_build2_loc (input_location, MULT_EXPR, type, d, base);
1580 unsigned c;
1582 done = integer_zerop (d);
1583 tmp = fold_build2_loc (input_location, MINUS_EXPR, type, n, tmp);
1584 c = hwint_to_ascii (TREE_INT_CST_LOW (tmp), 10, ptr,
1585 done ? 1 : chunk_digits);
1586 ptr -= c;
1587 count += c;
1588 n = d;
1590 while (!done);
1591 write_chars (ptr, count);
1593 else
1595 /* A small num. */
1596 if (sign < 0)
1597 write_char ('n');
1598 write_unsigned_number (abs_value.to_uhwi ());
1602 /* Write out a floating-point literal.
1604 "Floating-point literals are encoded using the bit pattern of the
1605 target processor's internal representation of that number, as a
1606 fixed-length lowercase hexadecimal string, high-order bytes first
1607 (even if the target processor would store low-order bytes first).
1608 The "n" prefix is not used for floating-point literals; the sign
1609 bit is encoded with the rest of the number.
1611 Here are some examples, assuming the IEEE standard representation
1612 for floating point numbers. (Spaces are for readability, not
1613 part of the encoding.)
1615 1.0f Lf 3f80 0000 E
1616 -1.0f Lf bf80 0000 E
1617 1.17549435e-38f Lf 0080 0000 E
1618 1.40129846e-45f Lf 0000 0001 E
1619 0.0f Lf 0000 0000 E"
1621 Caller is responsible for the Lx and the E. */
1622 static void
1623 write_real_cst (const tree value)
1625 long target_real[4]; /* largest supported float */
1626 char buffer[9]; /* eight hex digits in a 32-bit number */
1627 int i, limit, dir;
1629 tree type = TREE_TYPE (value);
1630 int words = GET_MODE_BITSIZE (TYPE_MODE (type)) / 32;
1632 real_to_target (target_real, &TREE_REAL_CST (value),
1633 TYPE_MODE (type));
1635 /* The value in target_real is in the target word order,
1636 so we must write it out backward if that happens to be
1637 little-endian. write_number cannot be used, it will
1638 produce uppercase. */
1639 if (FLOAT_WORDS_BIG_ENDIAN)
1640 i = 0, limit = words, dir = 1;
1641 else
1642 i = words - 1, limit = -1, dir = -1;
1644 for (; i != limit; i += dir)
1646 sprintf (buffer, "%08lx", (unsigned long) target_real[i]);
1647 write_chars (buffer, 8);
1651 /* Non-terminal <identifier>.
1653 <identifier> ::= </unqualified source code identifier> */
1655 static void
1656 write_identifier (const char *identifier)
1658 MANGLE_TRACE ("identifier", identifier);
1659 write_string (identifier);
1662 /* Handle constructor productions of non-terminal <special-name>.
1663 CTOR is a constructor FUNCTION_DECL.
1665 <special-name> ::= C1 # complete object constructor
1666 ::= C2 # base object constructor
1667 ::= C3 # complete object allocating constructor
1669 Currently, allocating constructors are never used. */
1671 static void
1672 write_special_name_constructor (const tree ctor)
1674 if (DECL_BASE_CONSTRUCTOR_P (ctor))
1675 write_string ("C2");
1676 /* This is the old-style "[unified]" constructor.
1677 In some cases, we may emit this function and call
1678 it from the clones in order to share code and save space. */
1679 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (ctor))
1680 write_string ("C4");
1681 else
1683 gcc_assert (DECL_COMPLETE_CONSTRUCTOR_P (ctor));
1684 write_string ("C1");
1688 /* Handle destructor productions of non-terminal <special-name>.
1689 DTOR is a destructor FUNCTION_DECL.
1691 <special-name> ::= D0 # deleting (in-charge) destructor
1692 ::= D1 # complete object (in-charge) destructor
1693 ::= D2 # base object (not-in-charge) destructor */
1695 static void
1696 write_special_name_destructor (const tree dtor)
1698 if (DECL_DELETING_DESTRUCTOR_P (dtor))
1699 write_string ("D0");
1700 else if (DECL_BASE_DESTRUCTOR_P (dtor))
1701 write_string ("D2");
1702 else if (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (dtor))
1703 /* This is the old-style "[unified]" destructor.
1704 In some cases, we may emit this function and call
1705 it from the clones in order to share code and save space. */
1706 write_string ("D4");
1707 else
1709 gcc_assert (DECL_COMPLETE_DESTRUCTOR_P (dtor));
1710 write_string ("D1");
1714 /* Scan the vector of local classes and return how many others with the
1715 same name (or same no name) and context precede ENTITY. */
1717 static int
1718 local_class_index (tree entity)
1720 int ix, discriminator = 0;
1721 tree name = (TYPE_ANONYMOUS_P (entity) ? NULL_TREE
1722 : TYPE_IDENTIFIER (entity));
1723 tree ctx = TYPE_CONTEXT (entity);
1724 for (ix = 0; ; ix++)
1726 tree type = (*local_classes)[ix];
1727 if (type == entity)
1728 return discriminator;
1729 if (TYPE_CONTEXT (type) == ctx
1730 && (name ? TYPE_IDENTIFIER (type) == name
1731 : TYPE_ANONYMOUS_P (type)))
1732 ++discriminator;
1734 gcc_unreachable ();
1737 /* Return the discriminator for ENTITY appearing inside
1738 FUNCTION. The discriminator is the lexical ordinal of VAR among
1739 entities with the same name in the same FUNCTION. */
1741 static int
1742 discriminator_for_local_entity (tree entity)
1744 if (DECL_DISCRIMINATOR_P (entity))
1746 if (DECL_DISCRIMINATOR_SET_P (entity))
1747 return DECL_DISCRIMINATOR (entity);
1748 else
1749 /* The first entity with a particular name doesn't get
1750 DECL_DISCRIMINATOR set up. */
1751 return 0;
1753 else if (TREE_CODE (entity) == TYPE_DECL)
1755 /* Scan the list of local classes. */
1756 entity = TREE_TYPE (entity);
1758 /* Lambdas and unnamed types have their own discriminators. */
1759 if (LAMBDA_TYPE_P (entity) || TYPE_ANONYMOUS_P (entity))
1760 return 0;
1762 return local_class_index (entity);
1764 else
1765 gcc_unreachable ();
1768 /* Return the discriminator for STRING, a string literal used inside
1769 FUNCTION. The discriminator is the lexical ordinal of STRING among
1770 string literals used in FUNCTION. */
1772 static int
1773 discriminator_for_string_literal (tree /*function*/,
1774 tree /*string*/)
1776 /* For now, we don't discriminate amongst string literals. */
1777 return 0;
1780 /* <discriminator> := _ <number>
1782 The discriminator is used only for the second and later occurrences
1783 of the same name within a single function. In this case <number> is
1784 n - 2, if this is the nth occurrence, in lexical order. */
1786 static void
1787 write_discriminator (const int discriminator)
1789 /* If discriminator is zero, don't write anything. Otherwise... */
1790 if (discriminator > 0)
1792 write_char ('_');
1793 write_unsigned_number (discriminator - 1);
1797 /* Mangle the name of a function-scope entity. FUNCTION is the
1798 FUNCTION_DECL for the enclosing function, or a PARM_DECL for lambdas in
1799 default argument scope. ENTITY is the decl for the entity itself.
1800 LOCAL_ENTITY is the entity that's directly scoped in FUNCTION_DECL,
1801 either ENTITY itself or an enclosing scope of ENTITY.
1803 <local-name> := Z <function encoding> E <entity name> [<discriminator>]
1804 := Z <function encoding> E s [<discriminator>]
1805 := Z <function encoding> Ed [ <parameter number> ] _ <entity name> */
1807 static void
1808 write_local_name (tree function, const tree local_entity,
1809 const tree entity)
1811 tree parm = NULL_TREE;
1813 MANGLE_TRACE_TREE ("local-name", entity);
1815 if (TREE_CODE (function) == PARM_DECL)
1817 parm = function;
1818 function = DECL_CONTEXT (parm);
1821 write_char ('Z');
1822 write_encoding (function);
1823 write_char ('E');
1825 /* For this purpose, parameters are numbered from right-to-left. */
1826 if (parm)
1828 tree t;
1829 int i = 0;
1830 for (t = DECL_ARGUMENTS (function); t; t = DECL_CHAIN (t))
1832 if (t == parm)
1833 i = 1;
1834 else if (i)
1835 ++i;
1837 write_char ('d');
1838 write_compact_number (i - 1);
1841 if (TREE_CODE (entity) == STRING_CST)
1843 write_char ('s');
1844 write_discriminator (discriminator_for_string_literal (function,
1845 entity));
1847 else
1849 /* Now the <entity name>. Let write_name know its being called
1850 from <local-name>, so it doesn't try to process the enclosing
1851 function scope again. */
1852 write_name (entity, /*ignore_local_scope=*/1);
1853 write_discriminator (discriminator_for_local_entity (local_entity));
1857 /* Non-terminals <type> and <CV-qualifier>.
1859 <type> ::= <builtin-type>
1860 ::= <function-type>
1861 ::= <class-enum-type>
1862 ::= <array-type>
1863 ::= <pointer-to-member-type>
1864 ::= <template-param>
1865 ::= <substitution>
1866 ::= <CV-qualifier>
1867 ::= P <type> # pointer-to
1868 ::= R <type> # reference-to
1869 ::= C <type> # complex pair (C 2000)
1870 ::= G <type> # imaginary (C 2000) [not supported]
1871 ::= U <source-name> <type> # vendor extended type qualifier
1873 C++0x extensions
1875 <type> ::= RR <type> # rvalue reference-to
1876 <type> ::= Dt <expression> # decltype of an id-expression or
1877 # class member access
1878 <type> ::= DT <expression> # decltype of an expression
1879 <type> ::= Dn # decltype of nullptr
1881 TYPE is a type node. */
1883 static void
1884 write_type (tree type)
1886 /* This gets set to nonzero if TYPE turns out to be a (possibly
1887 CV-qualified) builtin type. */
1888 int is_builtin_type = 0;
1890 MANGLE_TRACE_TREE ("type", type);
1892 if (type == error_mark_node)
1893 return;
1895 type = canonicalize_for_substitution (type);
1896 if (find_substitution (type))
1897 return;
1900 if (write_CV_qualifiers_for_type (type) > 0)
1901 /* If TYPE was CV-qualified, we just wrote the qualifiers; now
1902 mangle the unqualified type. The recursive call is needed here
1903 since both the qualified and unqualified types are substitution
1904 candidates. */
1906 tree t = TYPE_MAIN_VARIANT (type);
1907 if (TYPE_ATTRIBUTES (t) && !OVERLOAD_TYPE_P (t))
1908 t = cp_build_type_attribute_variant (t, NULL_TREE);
1909 gcc_assert (t != type);
1910 if (TREE_CODE (t) == FUNCTION_TYPE
1911 || TREE_CODE (t) == METHOD_TYPE)
1913 t = build_ref_qualified_type (t, type_memfn_rqual (type));
1914 if (abi_version_at_least (8)
1915 || type == TYPE_MAIN_VARIANT (type))
1916 /* Avoid adding the unqualified function type as a substitution. */
1917 write_function_type (t);
1918 else
1919 write_type (t);
1920 if (abi_version_crosses (8))
1921 G.need_abi_warning = 1;
1923 else
1924 write_type (t);
1926 else if (TREE_CODE (type) == ARRAY_TYPE)
1927 /* It is important not to use the TYPE_MAIN_VARIANT of TYPE here
1928 so that the cv-qualification of the element type is available
1929 in write_array_type. */
1930 write_array_type (type);
1931 else
1933 tree type_orig = type;
1935 /* See through any typedefs. */
1936 type = TYPE_MAIN_VARIANT (type);
1937 if (TREE_CODE (type) == FUNCTION_TYPE
1938 || TREE_CODE (type) == METHOD_TYPE)
1939 type = build_ref_qualified_type (type, type_memfn_rqual (type_orig));
1941 /* According to the C++ ABI, some library classes are passed the
1942 same as the scalar type of their single member and use the same
1943 mangling. */
1944 if (TREE_CODE (type) == RECORD_TYPE && TYPE_TRANSPARENT_AGGR (type))
1945 type = TREE_TYPE (first_field (type));
1947 if (TYPE_PTRDATAMEM_P (type))
1948 write_pointer_to_member_type (type);
1949 else
1951 /* Handle any target-specific fundamental types. */
1952 const char *target_mangling
1953 = targetm.mangle_type (type_orig);
1955 if (target_mangling)
1957 write_string (target_mangling);
1958 /* Add substitutions for types other than fundamental
1959 types. */
1960 if (!VOID_TYPE_P (type)
1961 && TREE_CODE (type) != INTEGER_TYPE
1962 && TREE_CODE (type) != REAL_TYPE
1963 && TREE_CODE (type) != BOOLEAN_TYPE)
1964 add_substitution (type);
1965 return;
1968 switch (TREE_CODE (type))
1970 case VOID_TYPE:
1971 case BOOLEAN_TYPE:
1972 case INTEGER_TYPE: /* Includes wchar_t. */
1973 case REAL_TYPE:
1974 case FIXED_POINT_TYPE:
1976 /* If this is a typedef, TYPE may not be one of
1977 the standard builtin type nodes, but an alias of one. Use
1978 TYPE_MAIN_VARIANT to get to the underlying builtin type. */
1979 write_builtin_type (TYPE_MAIN_VARIANT (type));
1980 ++is_builtin_type;
1982 break;
1984 case COMPLEX_TYPE:
1985 write_char ('C');
1986 write_type (TREE_TYPE (type));
1987 break;
1989 case FUNCTION_TYPE:
1990 case METHOD_TYPE:
1991 write_function_type (type);
1992 break;
1994 case UNION_TYPE:
1995 case RECORD_TYPE:
1996 case ENUMERAL_TYPE:
1997 /* A pointer-to-member function is represented as a special
1998 RECORD_TYPE, so check for this first. */
1999 if (TYPE_PTRMEMFUNC_P (type))
2000 write_pointer_to_member_type (type);
2001 else
2002 write_class_enum_type (type);
2003 break;
2005 case TYPENAME_TYPE:
2006 case UNBOUND_CLASS_TEMPLATE:
2007 /* We handle TYPENAME_TYPEs and UNBOUND_CLASS_TEMPLATEs like
2008 ordinary nested names. */
2009 write_nested_name (TYPE_STUB_DECL (type));
2010 break;
2012 case POINTER_TYPE:
2013 case REFERENCE_TYPE:
2014 if (TYPE_PTR_P (type))
2015 write_char ('P');
2016 else if (TYPE_REF_IS_RVALUE (type))
2017 write_char ('O');
2018 else
2019 write_char ('R');
2021 tree target = TREE_TYPE (type);
2022 /* Attribute const/noreturn are not reflected in mangling.
2023 We strip them here rather than at a lower level because
2024 a typedef or template argument can have function type
2025 with function-cv-quals (that use the same representation),
2026 but you can't have a pointer/reference to such a type. */
2027 if (TREE_CODE (target) == FUNCTION_TYPE)
2029 if (abi_version_crosses (5)
2030 && TYPE_QUALS (target) != TYPE_UNQUALIFIED)
2031 G.need_abi_warning = 1;
2032 if (abi_version_at_least (5))
2033 target = build_qualified_type (target, TYPE_UNQUALIFIED);
2035 write_type (target);
2037 break;
2039 case TEMPLATE_TYPE_PARM:
2040 if (is_auto (type))
2042 if (AUTO_IS_DECLTYPE (type))
2043 write_identifier ("Dc");
2044 else
2045 write_identifier ("Da");
2046 ++is_builtin_type;
2047 break;
2049 /* else fall through. */
2050 case TEMPLATE_PARM_INDEX:
2051 write_template_param (type);
2052 break;
2054 case TEMPLATE_TEMPLATE_PARM:
2055 write_template_template_param (type);
2056 break;
2058 case BOUND_TEMPLATE_TEMPLATE_PARM:
2059 write_template_template_param (type);
2060 write_template_args
2061 (TI_ARGS (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (type)));
2062 break;
2064 case VECTOR_TYPE:
2065 if (abi_version_at_least (4))
2067 write_string ("Dv");
2068 /* Non-constant vector size would be encoded with
2069 _ expression, but we don't support that yet. */
2070 write_unsigned_number (TYPE_VECTOR_SUBPARTS (type));
2071 write_char ('_');
2073 else
2074 write_string ("U8__vector");
2075 if (abi_version_crosses (4))
2076 G.need_abi_warning = 1;
2077 write_type (TREE_TYPE (type));
2078 break;
2080 case TYPE_PACK_EXPANSION:
2081 write_string ("Dp");
2082 write_type (PACK_EXPANSION_PATTERN (type));
2083 break;
2085 case DECLTYPE_TYPE:
2086 /* These shouldn't make it into mangling. */
2087 gcc_assert (!DECLTYPE_FOR_LAMBDA_CAPTURE (type)
2088 && !DECLTYPE_FOR_LAMBDA_PROXY (type));
2090 /* In ABI <5, we stripped decltype of a plain decl. */
2091 if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
2093 tree expr = DECLTYPE_TYPE_EXPR (type);
2094 tree etype = NULL_TREE;
2095 switch (TREE_CODE (expr))
2097 case VAR_DECL:
2098 case PARM_DECL:
2099 case RESULT_DECL:
2100 case FUNCTION_DECL:
2101 case CONST_DECL:
2102 case TEMPLATE_PARM_INDEX:
2103 etype = TREE_TYPE (expr);
2104 break;
2106 default:
2107 break;
2110 if (etype && !type_uses_auto (etype))
2112 if (abi_version_crosses (5))
2113 G.need_abi_warning = 1;
2114 if (!abi_version_at_least (5))
2116 write_type (etype);
2117 return;
2122 write_char ('D');
2123 if (DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type))
2124 write_char ('t');
2125 else
2126 write_char ('T');
2127 ++cp_unevaluated_operand;
2128 write_expression (DECLTYPE_TYPE_EXPR (type));
2129 --cp_unevaluated_operand;
2130 write_char ('E');
2131 break;
2133 case NULLPTR_TYPE:
2134 write_string ("Dn");
2135 if (abi_version_at_least (7))
2136 ++is_builtin_type;
2137 if (abi_version_crosses (7))
2138 G.need_abi_warning = 1;
2139 break;
2141 case TYPEOF_TYPE:
2142 sorry ("mangling typeof, use decltype instead");
2143 break;
2145 case UNDERLYING_TYPE:
2146 sorry ("mangling __underlying_type");
2147 break;
2149 case LANG_TYPE:
2150 /* fall through. */
2152 default:
2153 gcc_unreachable ();
2158 /* Types other than builtin types are substitution candidates. */
2159 if (!is_builtin_type)
2160 add_substitution (type);
2163 /* qsort callback for sorting a vector of attribute entries. */
2165 static int
2166 attr_strcmp (const void *p1, const void *p2)
2168 tree a1 = *(const tree*)p1;
2169 tree a2 = *(const tree*)p2;
2171 const attribute_spec *as1 = lookup_attribute_spec (get_attribute_name (a1));
2172 const attribute_spec *as2 = lookup_attribute_spec (get_attribute_name (a2));
2174 return strcmp (as1->name, as2->name);
2177 /* Non-terminal <CV-qualifiers> for type nodes. Returns the number of
2178 CV-qualifiers written for TYPE.
2180 <CV-qualifiers> ::= [r] [V] [K] */
2182 static int
2183 write_CV_qualifiers_for_type (const tree type)
2185 int num_qualifiers = 0;
2187 /* The order is specified by:
2189 "In cases where multiple order-insensitive qualifiers are
2190 present, they should be ordered 'K' (closest to the base type),
2191 'V', 'r', and 'U' (farthest from the base type) ..." */
2193 /* Mangle attributes that affect type identity as extended qualifiers.
2195 We don't do this with classes and enums because their attributes
2196 are part of their definitions, not something added on. */
2198 if (abi_version_at_least (9) && !OVERLOAD_TYPE_P (type))
2200 auto_vec<tree> vec;
2201 for (tree a = TYPE_ATTRIBUTES (type); a; a = TREE_CHAIN (a))
2203 tree name = get_attribute_name (a);
2204 const attribute_spec *as = lookup_attribute_spec (name);
2205 if (as && as->affects_type_identity
2206 && !is_attribute_p ("abi_tag", name))
2207 vec.safe_push (a);
2209 vec.qsort (attr_strcmp);
2210 while (!vec.is_empty())
2212 tree a = vec.pop();
2213 const attribute_spec *as
2214 = lookup_attribute_spec (get_attribute_name (a));
2216 write_char ('U');
2217 write_unsigned_number (strlen (as->name));
2218 write_string (as->name);
2219 if (TREE_VALUE (a))
2221 write_char ('I');
2222 for (tree args = TREE_VALUE (a); args;
2223 args = TREE_CHAIN (args))
2225 tree arg = TREE_VALUE (args);
2226 write_template_arg (arg);
2228 write_char ('E');
2231 ++num_qualifiers;
2232 if (abi_version_crosses (9))
2233 G.need_abi_warning = true;
2237 /* Note that we do not use cp_type_quals below; given "const
2238 int[3]", the "const" is emitted with the "int", not with the
2239 array. */
2240 cp_cv_quals quals = TYPE_QUALS (type);
2242 if (quals & TYPE_QUAL_RESTRICT)
2244 write_char ('r');
2245 ++num_qualifiers;
2247 if (quals & TYPE_QUAL_VOLATILE)
2249 write_char ('V');
2250 ++num_qualifiers;
2252 if (quals & TYPE_QUAL_CONST)
2254 write_char ('K');
2255 ++num_qualifiers;
2258 return num_qualifiers;
2261 /* Non-terminal <builtin-type>.
2263 <builtin-type> ::= v # void
2264 ::= b # bool
2265 ::= w # wchar_t
2266 ::= c # char
2267 ::= a # signed char
2268 ::= h # unsigned char
2269 ::= s # short
2270 ::= t # unsigned short
2271 ::= i # int
2272 ::= j # unsigned int
2273 ::= l # long
2274 ::= m # unsigned long
2275 ::= x # long long, __int64
2276 ::= y # unsigned long long, __int64
2277 ::= n # __int128
2278 ::= o # unsigned __int128
2279 ::= f # float
2280 ::= d # double
2281 ::= e # long double, __float80
2282 ::= g # __float128 [not supported]
2283 ::= u <source-name> # vendor extended type */
2285 static void
2286 write_builtin_type (tree type)
2288 if (TYPE_CANONICAL (type))
2289 type = TYPE_CANONICAL (type);
2291 switch (TREE_CODE (type))
2293 case VOID_TYPE:
2294 write_char ('v');
2295 break;
2297 case BOOLEAN_TYPE:
2298 write_char ('b');
2299 break;
2301 case INTEGER_TYPE:
2302 /* TYPE may still be wchar_t, char16_t, or char32_t, since that
2303 isn't in integer_type_nodes. */
2304 if (type == wchar_type_node)
2305 write_char ('w');
2306 else if (type == char16_type_node)
2307 write_string ("Ds");
2308 else if (type == char32_type_node)
2309 write_string ("Di");
2310 else if (TYPE_FOR_JAVA (type))
2311 write_java_integer_type_codes (type);
2312 else
2314 size_t itk;
2315 /* Assume TYPE is one of the shared integer type nodes. Find
2316 it in the array of these nodes. */
2317 iagain:
2318 for (itk = 0; itk < itk_none; ++itk)
2319 if (integer_types[itk] != NULL_TREE
2320 && integer_type_codes[itk] != '\0'
2321 && type == integer_types[itk])
2323 /* Print the corresponding single-letter code. */
2324 write_char (integer_type_codes[itk]);
2325 break;
2328 if (itk == itk_none)
2330 tree t = c_common_type_for_mode (TYPE_MODE (type),
2331 TYPE_UNSIGNED (type));
2332 if (type != t)
2334 type = t;
2335 goto iagain;
2338 if (TYPE_PRECISION (type) == 128)
2339 write_char (TYPE_UNSIGNED (type) ? 'o' : 'n');
2340 else
2342 /* Allow for cases where TYPE is not one of the shared
2343 integer type nodes and write a "vendor extended builtin
2344 type" with a name the form intN or uintN, respectively.
2345 Situations like this can happen if you have an
2346 __attribute__((__mode__(__SI__))) type and use exotic
2347 switches like '-mint8' on AVR. Of course, this is
2348 undefined by the C++ ABI (and '-mint8' is not even
2349 Standard C conforming), but when using such special
2350 options you're pretty much in nowhere land anyway. */
2351 const char *prefix;
2352 char prec[11]; /* up to ten digits for an unsigned */
2354 prefix = TYPE_UNSIGNED (type) ? "uint" : "int";
2355 sprintf (prec, "%u", (unsigned) TYPE_PRECISION (type));
2356 write_char ('u'); /* "vendor extended builtin type" */
2357 write_unsigned_number (strlen (prefix) + strlen (prec));
2358 write_string (prefix);
2359 write_string (prec);
2363 break;
2365 case REAL_TYPE:
2366 if (type == float_type_node
2367 || type == java_float_type_node)
2368 write_char ('f');
2369 else if (type == double_type_node
2370 || type == java_double_type_node)
2371 write_char ('d');
2372 else if (type == long_double_type_node)
2373 write_char ('e');
2374 else if (type == dfloat32_type_node)
2375 write_string ("Df");
2376 else if (type == dfloat64_type_node)
2377 write_string ("Dd");
2378 else if (type == dfloat128_type_node)
2379 write_string ("De");
2380 else
2381 gcc_unreachable ();
2382 break;
2384 case FIXED_POINT_TYPE:
2385 write_string ("DF");
2386 if (GET_MODE_IBIT (TYPE_MODE (type)) > 0)
2387 write_unsigned_number (GET_MODE_IBIT (TYPE_MODE (type)));
2388 if (type == fract_type_node
2389 || type == sat_fract_type_node
2390 || type == accum_type_node
2391 || type == sat_accum_type_node)
2392 write_char ('i');
2393 else if (type == unsigned_fract_type_node
2394 || type == sat_unsigned_fract_type_node
2395 || type == unsigned_accum_type_node
2396 || type == sat_unsigned_accum_type_node)
2397 write_char ('j');
2398 else if (type == short_fract_type_node
2399 || type == sat_short_fract_type_node
2400 || type == short_accum_type_node
2401 || type == sat_short_accum_type_node)
2402 write_char ('s');
2403 else if (type == unsigned_short_fract_type_node
2404 || type == sat_unsigned_short_fract_type_node
2405 || type == unsigned_short_accum_type_node
2406 || type == sat_unsigned_short_accum_type_node)
2407 write_char ('t');
2408 else if (type == long_fract_type_node
2409 || type == sat_long_fract_type_node
2410 || type == long_accum_type_node
2411 || type == sat_long_accum_type_node)
2412 write_char ('l');
2413 else if (type == unsigned_long_fract_type_node
2414 || type == sat_unsigned_long_fract_type_node
2415 || type == unsigned_long_accum_type_node
2416 || type == sat_unsigned_long_accum_type_node)
2417 write_char ('m');
2418 else if (type == long_long_fract_type_node
2419 || type == sat_long_long_fract_type_node
2420 || type == long_long_accum_type_node
2421 || type == sat_long_long_accum_type_node)
2422 write_char ('x');
2423 else if (type == unsigned_long_long_fract_type_node
2424 || type == sat_unsigned_long_long_fract_type_node
2425 || type == unsigned_long_long_accum_type_node
2426 || type == sat_unsigned_long_long_accum_type_node)
2427 write_char ('y');
2428 else
2429 sorry ("mangling unknown fixed point type");
2430 write_unsigned_number (GET_MODE_FBIT (TYPE_MODE (type)));
2431 if (TYPE_SATURATING (type))
2432 write_char ('s');
2433 else
2434 write_char ('n');
2435 break;
2437 default:
2438 gcc_unreachable ();
2442 /* Non-terminal <function-type>. NODE is a FUNCTION_TYPE or
2443 METHOD_TYPE. The return type is mangled before the parameter
2444 types.
2446 <function-type> ::= F [Y] <bare-function-type> [<ref-qualifier>] E */
2448 static void
2449 write_function_type (const tree type)
2451 MANGLE_TRACE_TREE ("function-type", type);
2453 /* For a pointer to member function, the function type may have
2454 cv-qualifiers, indicating the quals for the artificial 'this'
2455 parameter. */
2456 if (TREE_CODE (type) == METHOD_TYPE)
2458 /* The first parameter must be a POINTER_TYPE pointing to the
2459 `this' parameter. */
2460 tree this_type = class_of_this_parm (type);
2461 write_CV_qualifiers_for_type (this_type);
2464 write_char ('F');
2465 /* We don't track whether or not a type is `extern "C"'. Note that
2466 you can have an `extern "C"' function that does not have
2467 `extern "C"' type, and vice versa:
2469 extern "C" typedef void function_t();
2470 function_t f; // f has C++ linkage, but its type is
2471 // `extern "C"'
2473 typedef void function_t();
2474 extern "C" function_t f; // Vice versa.
2476 See [dcl.link]. */
2477 write_bare_function_type (type, /*include_return_type_p=*/1,
2478 /*decl=*/NULL);
2479 if (FUNCTION_REF_QUALIFIED (type))
2481 if (FUNCTION_RVALUE_QUALIFIED (type))
2482 write_char ('O');
2483 else
2484 write_char ('R');
2486 write_char ('E');
2489 /* Non-terminal <bare-function-type>. TYPE is a FUNCTION_TYPE or
2490 METHOD_TYPE. If INCLUDE_RETURN_TYPE is nonzero, the return value
2491 is mangled before the parameter types. If non-NULL, DECL is
2492 FUNCTION_DECL for the function whose type is being emitted.
2494 If DECL is a member of a Java type, then a literal 'J'
2495 is output and the return type is mangled as if INCLUDE_RETURN_TYPE
2496 were nonzero.
2498 <bare-function-type> ::= [J]</signature/ type>+ */
2500 static void
2501 write_bare_function_type (const tree type, const int include_return_type_p,
2502 const tree decl)
2504 int java_method_p;
2506 MANGLE_TRACE_TREE ("bare-function-type", type);
2508 /* Detect Java methods and emit special encoding. */
2509 if (decl != NULL
2510 && DECL_FUNCTION_MEMBER_P (decl)
2511 && TYPE_FOR_JAVA (DECL_CONTEXT (decl))
2512 && !DECL_CONSTRUCTOR_P (decl)
2513 && !DECL_DESTRUCTOR_P (decl)
2514 && !DECL_CONV_FN_P (decl))
2516 java_method_p = 1;
2517 write_char ('J');
2519 else
2521 java_method_p = 0;
2524 /* Mangle the return type, if requested. */
2525 if (include_return_type_p || java_method_p)
2526 write_type (TREE_TYPE (type));
2528 /* Now mangle the types of the arguments. */
2529 ++G.parm_depth;
2530 write_method_parms (TYPE_ARG_TYPES (type),
2531 TREE_CODE (type) == METHOD_TYPE,
2532 decl);
2533 --G.parm_depth;
2536 /* Write the mangled representation of a method parameter list of
2537 types given in PARM_TYPES. If METHOD_P is nonzero, the function is
2538 considered a non-static method, and the this parameter is omitted.
2539 If non-NULL, DECL is the FUNCTION_DECL for the function whose
2540 parameters are being emitted. */
2542 static void
2543 write_method_parms (tree parm_types, const int method_p, const tree decl)
2545 tree first_parm_type;
2546 tree parm_decl = decl ? DECL_ARGUMENTS (decl) : NULL_TREE;
2548 /* Assume this parameter type list is variable-length. If it ends
2549 with a void type, then it's not. */
2550 int varargs_p = 1;
2552 /* If this is a member function, skip the first arg, which is the
2553 this pointer.
2554 "Member functions do not encode the type of their implicit this
2555 parameter."
2557 Similarly, there's no need to mangle artificial parameters, like
2558 the VTT parameters for constructors and destructors. */
2559 if (method_p)
2561 parm_types = TREE_CHAIN (parm_types);
2562 parm_decl = parm_decl ? DECL_CHAIN (parm_decl) : NULL_TREE;
2564 while (parm_decl && DECL_ARTIFICIAL (parm_decl))
2566 parm_types = TREE_CHAIN (parm_types);
2567 parm_decl = DECL_CHAIN (parm_decl);
2571 for (first_parm_type = parm_types;
2572 parm_types;
2573 parm_types = TREE_CHAIN (parm_types))
2575 tree parm = TREE_VALUE (parm_types);
2576 if (parm == void_type_node)
2578 /* "Empty parameter lists, whether declared as () or
2579 conventionally as (void), are encoded with a void parameter
2580 (v)." */
2581 if (parm_types == first_parm_type)
2582 write_type (parm);
2583 /* If the parm list is terminated with a void type, it's
2584 fixed-length. */
2585 varargs_p = 0;
2586 /* A void type better be the last one. */
2587 gcc_assert (TREE_CHAIN (parm_types) == NULL);
2589 else
2590 write_type (parm);
2593 if (varargs_p)
2594 /* <builtin-type> ::= z # ellipsis */
2595 write_char ('z');
2598 /* <class-enum-type> ::= <name> */
2600 static void
2601 write_class_enum_type (const tree type)
2603 write_name (TYPE_NAME (type), /*ignore_local_scope=*/0);
2606 /* Non-terminal <template-args>. ARGS is a TREE_VEC of template
2607 arguments.
2609 <template-args> ::= I <template-arg>* E */
2611 static void
2612 write_template_args (tree args)
2614 int i;
2615 int length = 0;
2617 MANGLE_TRACE_TREE ("template-args", args);
2619 write_char ('I');
2621 if (args)
2622 length = TREE_VEC_LENGTH (args);
2624 if (args && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
2626 /* We have nested template args. We want the innermost template
2627 argument list. */
2628 args = TREE_VEC_ELT (args, length - 1);
2629 length = TREE_VEC_LENGTH (args);
2631 for (i = 0; i < length; ++i)
2632 write_template_arg (TREE_VEC_ELT (args, i));
2634 write_char ('E');
2637 /* Write out the
2638 <unqualified-name>
2639 <unqualified-name> <template-args>
2640 part of SCOPE_REF or COMPONENT_REF mangling. */
2642 static void
2643 write_member_name (tree member)
2645 if (identifier_p (member))
2646 write_unqualified_id (member);
2647 else if (DECL_P (member))
2648 write_unqualified_name (member);
2649 else if (TREE_CODE (member) == TEMPLATE_ID_EXPR)
2651 tree name = TREE_OPERAND (member, 0);
2652 if (TREE_CODE (name) == OVERLOAD)
2653 name = OVL_FUNCTION (name);
2654 write_member_name (name);
2655 write_template_args (TREE_OPERAND (member, 1));
2657 else
2658 write_expression (member);
2661 /* <expression> ::= <unary operator-name> <expression>
2662 ::= <binary operator-name> <expression> <expression>
2663 ::= <expr-primary>
2665 <expr-primary> ::= <template-param>
2666 ::= L <type> <value number> E # literal
2667 ::= L <mangled-name> E # external name
2668 ::= st <type> # sizeof
2669 ::= sr <type> <unqualified-name> # dependent name
2670 ::= sr <type> <unqualified-name> <template-args> */
2672 static void
2673 write_expression (tree expr)
2675 enum tree_code code = TREE_CODE (expr);
2677 /* Skip NOP_EXPRs. They can occur when (say) a pointer argument
2678 is converted (via qualification conversions) to another
2679 type. */
2680 while (TREE_CODE (expr) == NOP_EXPR
2681 /* Parentheses aren't mangled. */
2682 || code == PAREN_EXPR
2683 || TREE_CODE (expr) == NON_LVALUE_EXPR)
2685 expr = TREE_OPERAND (expr, 0);
2686 code = TREE_CODE (expr);
2689 if (code == BASELINK
2690 && (!type_unknown_p (expr)
2691 || !BASELINK_QUALIFIED_P (expr)))
2693 expr = BASELINK_FUNCTIONS (expr);
2694 code = TREE_CODE (expr);
2697 /* Handle pointers-to-members by making them look like expression
2698 nodes. */
2699 if (code == PTRMEM_CST)
2701 expr = build_nt (ADDR_EXPR,
2702 build_qualified_name (/*type=*/NULL_TREE,
2703 PTRMEM_CST_CLASS (expr),
2704 PTRMEM_CST_MEMBER (expr),
2705 /*template_p=*/false));
2706 code = TREE_CODE (expr);
2709 /* Handle template parameters. */
2710 if (code == TEMPLATE_TYPE_PARM
2711 || code == TEMPLATE_TEMPLATE_PARM
2712 || code == BOUND_TEMPLATE_TEMPLATE_PARM
2713 || code == TEMPLATE_PARM_INDEX)
2714 write_template_param (expr);
2715 /* Handle literals. */
2716 else if (TREE_CODE_CLASS (code) == tcc_constant
2717 || code == CONST_DECL)
2718 write_template_arg_literal (expr);
2719 else if (code == PARM_DECL && DECL_ARTIFICIAL (expr))
2721 gcc_assert (!strcmp ("this", IDENTIFIER_POINTER (DECL_NAME (expr))));
2722 write_string ("fpT");
2724 else if (code == PARM_DECL)
2726 /* A function parameter used in a late-specified return type. */
2727 int index = DECL_PARM_INDEX (expr);
2728 int level = DECL_PARM_LEVEL (expr);
2729 int delta = G.parm_depth - level + 1;
2730 gcc_assert (index >= 1);
2731 write_char ('f');
2732 if (delta != 0)
2734 if (abi_version_at_least (5))
2736 /* Let L be the number of function prototype scopes from the
2737 innermost one (in which the parameter reference occurs) up
2738 to (and including) the one containing the declaration of
2739 the referenced parameter. If the parameter declaration
2740 clause of the innermost function prototype scope has been
2741 completely seen, it is not counted (in that case -- which
2742 is perhaps the most common -- L can be zero). */
2743 write_char ('L');
2744 write_unsigned_number (delta - 1);
2746 if (abi_version_crosses (5))
2747 G.need_abi_warning = true;
2749 write_char ('p');
2750 write_compact_number (index - 1);
2752 else if (DECL_P (expr))
2754 write_char ('L');
2755 write_mangled_name (expr, false);
2756 write_char ('E');
2758 else if (TREE_CODE (expr) == SIZEOF_EXPR
2759 && SIZEOF_EXPR_TYPE_P (expr))
2761 write_string ("st");
2762 write_type (TREE_TYPE (TREE_OPERAND (expr, 0)));
2764 else if (TREE_CODE (expr) == SIZEOF_EXPR
2765 && TYPE_P (TREE_OPERAND (expr, 0)))
2767 write_string ("st");
2768 write_type (TREE_OPERAND (expr, 0));
2770 else if (TREE_CODE (expr) == ALIGNOF_EXPR
2771 && TYPE_P (TREE_OPERAND (expr, 0)))
2773 write_string ("at");
2774 write_type (TREE_OPERAND (expr, 0));
2776 else if (code == SCOPE_REF
2777 || code == BASELINK)
2779 tree scope, member;
2780 if (code == SCOPE_REF)
2782 scope = TREE_OPERAND (expr, 0);
2783 member = TREE_OPERAND (expr, 1);
2785 else
2787 scope = BINFO_TYPE (BASELINK_ACCESS_BINFO (expr));
2788 member = BASELINK_FUNCTIONS (expr);
2791 /* If the MEMBER is a real declaration, then the qualifying
2792 scope was not dependent. Ideally, we would not have a
2793 SCOPE_REF in those cases, but sometimes we do. If the second
2794 argument is a DECL, then the name must not have been
2795 dependent. */
2796 if (DECL_P (member))
2797 write_expression (member);
2798 else
2800 write_string ("sr");
2801 write_type (scope);
2802 write_member_name (member);
2805 else if (INDIRECT_REF_P (expr)
2806 && TREE_TYPE (TREE_OPERAND (expr, 0))
2807 && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
2809 write_expression (TREE_OPERAND (expr, 0));
2811 else if (identifier_p (expr))
2813 /* An operator name appearing as a dependent name needs to be
2814 specially marked to disambiguate between a use of the operator
2815 name and a use of the operator in an expression. */
2816 if (IDENTIFIER_OPNAME_P (expr))
2817 write_string ("on");
2818 write_unqualified_id (expr);
2820 else if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
2822 tree fn = TREE_OPERAND (expr, 0);
2823 if (is_overloaded_fn (fn))
2824 fn = DECL_NAME (get_first_fn (fn));
2825 if (IDENTIFIER_OPNAME_P (fn))
2826 write_string ("on");
2827 write_unqualified_id (fn);
2828 write_template_args (TREE_OPERAND (expr, 1));
2830 else if (TREE_CODE (expr) == MODOP_EXPR)
2832 enum tree_code subop = TREE_CODE (TREE_OPERAND (expr, 1));
2833 const char *name = (assignment_operator_name_info[(int) subop]
2834 .mangled_name);
2835 write_string (name);
2836 write_expression (TREE_OPERAND (expr, 0));
2837 write_expression (TREE_OPERAND (expr, 2));
2839 else if (code == NEW_EXPR || code == VEC_NEW_EXPR)
2841 /* ::= [gs] nw <expression>* _ <type> E
2842 ::= [gs] nw <expression>* _ <type> <initializer>
2843 ::= [gs] na <expression>* _ <type> E
2844 ::= [gs] na <expression>* _ <type> <initializer>
2845 <initializer> ::= pi <expression>* E */
2846 tree placement = TREE_OPERAND (expr, 0);
2847 tree type = TREE_OPERAND (expr, 1);
2848 tree nelts = TREE_OPERAND (expr, 2);
2849 tree init = TREE_OPERAND (expr, 3);
2850 tree t;
2852 gcc_assert (code == NEW_EXPR);
2853 if (TREE_OPERAND (expr, 2))
2854 code = VEC_NEW_EXPR;
2856 if (NEW_EXPR_USE_GLOBAL (expr))
2857 write_string ("gs");
2859 write_string (operator_name_info[(int) code].mangled_name);
2861 for (t = placement; t; t = TREE_CHAIN (t))
2862 write_expression (TREE_VALUE (t));
2864 write_char ('_');
2866 if (nelts)
2868 tree domain;
2869 ++processing_template_decl;
2870 domain = compute_array_index_type (NULL_TREE, nelts,
2871 tf_warning_or_error);
2872 type = build_cplus_array_type (type, domain);
2873 --processing_template_decl;
2875 write_type (type);
2877 if (init && TREE_CODE (init) == TREE_LIST
2878 && DIRECT_LIST_INIT_P (TREE_VALUE (init)))
2879 write_expression (TREE_VALUE (init));
2880 else
2882 if (init)
2883 write_string ("pi");
2884 if (init && init != void_node)
2885 for (t = init; t; t = TREE_CHAIN (t))
2886 write_expression (TREE_VALUE (t));
2887 write_char ('E');
2890 else if (code == DELETE_EXPR || code == VEC_DELETE_EXPR)
2892 gcc_assert (code == DELETE_EXPR);
2893 if (DELETE_EXPR_USE_VEC (expr))
2894 code = VEC_DELETE_EXPR;
2896 if (DELETE_EXPR_USE_GLOBAL (expr))
2897 write_string ("gs");
2899 write_string (operator_name_info[(int) code].mangled_name);
2901 write_expression (TREE_OPERAND (expr, 0));
2903 else if (code == THROW_EXPR)
2905 tree op = TREE_OPERAND (expr, 0);
2906 if (op)
2908 write_string ("tw");
2909 write_expression (op);
2911 else
2912 write_string ("tr");
2914 else if (code == CONSTRUCTOR)
2916 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (expr);
2917 unsigned i; tree val;
2919 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
2920 write_string ("il");
2921 else
2923 write_string ("tl");
2924 write_type (TREE_TYPE (expr));
2926 FOR_EACH_CONSTRUCTOR_VALUE (elts, i, val)
2927 write_expression (val);
2928 write_char ('E');
2930 else if (dependent_name (expr))
2932 write_unqualified_id (dependent_name (expr));
2934 else
2936 int i, len;
2937 const char *name;
2939 /* When we bind a variable or function to a non-type template
2940 argument with reference type, we create an ADDR_EXPR to show
2941 the fact that the entity's address has been taken. But, we
2942 don't actually want to output a mangling code for the `&'. */
2943 if (TREE_CODE (expr) == ADDR_EXPR
2944 && TREE_TYPE (expr)
2945 && TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE)
2947 expr = TREE_OPERAND (expr, 0);
2948 if (DECL_P (expr))
2950 write_expression (expr);
2951 return;
2954 code = TREE_CODE (expr);
2957 if (code == COMPONENT_REF)
2959 tree ob = TREE_OPERAND (expr, 0);
2961 if (TREE_CODE (ob) == ARROW_EXPR)
2963 write_string (operator_name_info[(int)code].mangled_name);
2964 ob = TREE_OPERAND (ob, 0);
2965 write_expression (ob);
2967 else if (!is_dummy_object (ob))
2969 write_string ("dt");
2970 write_expression (ob);
2972 /* else, for a non-static data member with no associated object (in
2973 unevaluated context), use the unresolved-name mangling. */
2975 write_member_name (TREE_OPERAND (expr, 1));
2976 return;
2979 /* If it wasn't any of those, recursively expand the expression. */
2980 name = operator_name_info[(int) code].mangled_name;
2982 /* We used to mangle const_cast and static_cast like a C cast. */
2983 if (code == CONST_CAST_EXPR
2984 || code == STATIC_CAST_EXPR)
2986 if (abi_version_crosses (6))
2987 G.need_abi_warning = 1;
2988 if (!abi_version_at_least (6))
2989 name = operator_name_info[CAST_EXPR].mangled_name;
2992 if (name == NULL)
2994 switch (code)
2996 case TRAIT_EXPR:
2997 error ("use of built-in trait %qE in function signature; "
2998 "use library traits instead", expr);
2999 break;
3001 default:
3002 sorry ("mangling %C", code);
3003 break;
3005 return;
3007 else
3008 write_string (name);
3010 switch (code)
3012 case CALL_EXPR:
3014 tree fn = CALL_EXPR_FN (expr);
3016 if (TREE_CODE (fn) == ADDR_EXPR)
3017 fn = TREE_OPERAND (fn, 0);
3019 /* Mangle a dependent name as the name, not whatever happens to
3020 be the first function in the overload set. */
3021 if ((TREE_CODE (fn) == FUNCTION_DECL
3022 || TREE_CODE (fn) == OVERLOAD)
3023 && type_dependent_expression_p_push (expr))
3024 fn = DECL_NAME (get_first_fn (fn));
3026 write_expression (fn);
3029 for (i = 0; i < call_expr_nargs (expr); ++i)
3030 write_expression (CALL_EXPR_ARG (expr, i));
3031 write_char ('E');
3032 break;
3034 case CAST_EXPR:
3035 write_type (TREE_TYPE (expr));
3036 if (list_length (TREE_OPERAND (expr, 0)) == 1)
3037 write_expression (TREE_VALUE (TREE_OPERAND (expr, 0)));
3038 else
3040 tree args = TREE_OPERAND (expr, 0);
3041 write_char ('_');
3042 for (; args; args = TREE_CHAIN (args))
3043 write_expression (TREE_VALUE (args));
3044 write_char ('E');
3046 break;
3048 case DYNAMIC_CAST_EXPR:
3049 case REINTERPRET_CAST_EXPR:
3050 case STATIC_CAST_EXPR:
3051 case CONST_CAST_EXPR:
3052 write_type (TREE_TYPE (expr));
3053 write_expression (TREE_OPERAND (expr, 0));
3054 break;
3056 case PREINCREMENT_EXPR:
3057 case PREDECREMENT_EXPR:
3058 if (abi_version_at_least (6))
3059 write_char ('_');
3060 if (abi_version_crosses (6))
3061 G.need_abi_warning = 1;
3062 /* Fall through. */
3064 default:
3065 /* In the middle-end, some expressions have more operands than
3066 they do in templates (and mangling). */
3067 len = cp_tree_operand_length (expr);
3069 for (i = 0; i < len; ++i)
3071 tree operand = TREE_OPERAND (expr, i);
3072 /* As a GNU extension, the middle operand of a
3073 conditional may be omitted. Since expression
3074 manglings are supposed to represent the input token
3075 stream, there's no good way to mangle such an
3076 expression without extending the C++ ABI. */
3077 if (code == COND_EXPR && i == 1 && !operand)
3079 error ("omitted middle operand to %<?:%> operand "
3080 "cannot be mangled");
3081 continue;
3083 write_expression (operand);
3089 /* Literal subcase of non-terminal <template-arg>.
3091 "Literal arguments, e.g. "A<42L>", are encoded with their type
3092 and value. Negative integer values are preceded with "n"; for
3093 example, "A<-42L>" becomes "1AILln42EE". The bool value false is
3094 encoded as 0, true as 1." */
3096 static void
3097 write_template_arg_literal (const tree value)
3099 write_char ('L');
3100 write_type (TREE_TYPE (value));
3102 /* Write a null member pointer value as (type)0, regardless of its
3103 real representation. */
3104 if (null_member_pointer_value_p (value))
3105 write_integer_cst (integer_zero_node);
3106 else
3107 switch (TREE_CODE (value))
3109 case CONST_DECL:
3110 write_integer_cst (DECL_INITIAL (value));
3111 break;
3113 case INTEGER_CST:
3114 gcc_assert (!same_type_p (TREE_TYPE (value), boolean_type_node)
3115 || integer_zerop (value) || integer_onep (value));
3116 write_integer_cst (value);
3117 break;
3119 case REAL_CST:
3120 write_real_cst (value);
3121 break;
3123 case COMPLEX_CST:
3124 if (TREE_CODE (TREE_REALPART (value)) == INTEGER_CST
3125 && TREE_CODE (TREE_IMAGPART (value)) == INTEGER_CST)
3127 write_integer_cst (TREE_REALPART (value));
3128 write_char ('_');
3129 write_integer_cst (TREE_IMAGPART (value));
3131 else if (TREE_CODE (TREE_REALPART (value)) == REAL_CST
3132 && TREE_CODE (TREE_IMAGPART (value)) == REAL_CST)
3134 write_real_cst (TREE_REALPART (value));
3135 write_char ('_');
3136 write_real_cst (TREE_IMAGPART (value));
3138 else
3139 gcc_unreachable ();
3140 break;
3142 case STRING_CST:
3143 sorry ("string literal in function template signature");
3144 break;
3146 default:
3147 gcc_unreachable ();
3150 write_char ('E');
3153 /* Non-terminal <template-arg>.
3155 <template-arg> ::= <type> # type
3156 ::= L <type> </value/ number> E # literal
3157 ::= LZ <name> E # external name
3158 ::= X <expression> E # expression */
3160 static void
3161 write_template_arg (tree node)
3163 enum tree_code code = TREE_CODE (node);
3165 MANGLE_TRACE_TREE ("template-arg", node);
3167 /* A template template parameter's argument list contains TREE_LIST
3168 nodes of which the value field is the actual argument. */
3169 if (code == TREE_LIST)
3171 node = TREE_VALUE (node);
3172 /* If it's a decl, deal with its type instead. */
3173 if (DECL_P (node))
3175 node = TREE_TYPE (node);
3176 code = TREE_CODE (node);
3180 if (REFERENCE_REF_P (node))
3181 node = TREE_OPERAND (node, 0);
3182 if (TREE_CODE (node) == NOP_EXPR
3183 && TREE_CODE (TREE_TYPE (node)) == REFERENCE_TYPE)
3185 /* Template parameters can be of reference type. To maintain
3186 internal consistency, such arguments use a conversion from
3187 address of object to reference type. */
3188 gcc_assert (TREE_CODE (TREE_OPERAND (node, 0)) == ADDR_EXPR);
3189 node = TREE_OPERAND (TREE_OPERAND (node, 0), 0);
3192 if (TREE_CODE (node) == BASELINK
3193 && !type_unknown_p (node))
3195 if (abi_version_at_least (6))
3196 node = BASELINK_FUNCTIONS (node);
3197 if (abi_version_crosses (6))
3198 /* We wrongly wrapped a class-scope function in X/E. */
3199 G.need_abi_warning = 1;
3202 if (ARGUMENT_PACK_P (node))
3204 /* Expand the template argument pack. */
3205 tree args = ARGUMENT_PACK_ARGS (node);
3206 int i, length = TREE_VEC_LENGTH (args);
3207 if (abi_version_at_least (6))
3208 write_char ('J');
3209 else
3210 write_char ('I');
3211 if (abi_version_crosses (6))
3212 G.need_abi_warning = 1;
3213 for (i = 0; i < length; ++i)
3214 write_template_arg (TREE_VEC_ELT (args, i));
3215 write_char ('E');
3217 else if (TYPE_P (node))
3218 write_type (node);
3219 else if (code == TEMPLATE_DECL)
3220 /* A template appearing as a template arg is a template template arg. */
3221 write_template_template_arg (node);
3222 else if ((TREE_CODE_CLASS (code) == tcc_constant && code != PTRMEM_CST)
3223 || code == CONST_DECL
3224 || null_member_pointer_value_p (node))
3225 write_template_arg_literal (node);
3226 else if (DECL_P (node))
3228 write_char ('L');
3229 /* Until ABI version 3, the underscore before the mangled name
3230 was incorrectly omitted. */
3231 if (!abi_version_at_least (3))
3232 write_char ('Z');
3233 else
3234 write_string ("_Z");
3235 if (abi_version_crosses (3))
3236 G.need_abi_warning = 1;
3237 write_encoding (node);
3238 write_char ('E');
3240 else
3242 /* Template arguments may be expressions. */
3243 write_char ('X');
3244 write_expression (node);
3245 write_char ('E');
3249 /* <template-template-arg>
3250 ::= <name>
3251 ::= <substitution> */
3253 static void
3254 write_template_template_arg (const tree decl)
3256 MANGLE_TRACE_TREE ("template-template-arg", decl);
3258 if (find_substitution (decl))
3259 return;
3260 write_name (decl, /*ignore_local_scope=*/0);
3261 add_substitution (decl);
3265 /* Non-terminal <array-type>. TYPE is an ARRAY_TYPE.
3267 <array-type> ::= A [</dimension/ number>] _ </element/ type>
3268 ::= A <expression> _ </element/ type>
3270 "Array types encode the dimension (number of elements) and the
3271 element type. For variable length arrays, the dimension (but not
3272 the '_' separator) is omitted." */
3274 static void
3275 write_array_type (const tree type)
3277 write_char ('A');
3278 if (TYPE_DOMAIN (type))
3280 tree index_type;
3281 tree max;
3283 index_type = TYPE_DOMAIN (type);
3284 /* The INDEX_TYPE gives the upper and lower bounds of the
3285 array. */
3286 max = TYPE_MAX_VALUE (index_type);
3287 if (TREE_CODE (max) == INTEGER_CST)
3289 /* The ABI specifies that we should mangle the number of
3290 elements in the array, not the largest allowed index. */
3291 offset_int wmax = wi::to_offset (max) + 1;
3292 /* Truncate the result - this will mangle [0, SIZE_INT_MAX]
3293 number of elements as zero. */
3294 wmax = wi::zext (wmax, TYPE_PRECISION (TREE_TYPE (max)));
3295 gcc_assert (wi::fits_uhwi_p (wmax));
3296 write_unsigned_number (wmax.to_uhwi ());
3298 else
3300 max = TREE_OPERAND (max, 0);
3301 write_expression (max);
3305 write_char ('_');
3306 write_type (TREE_TYPE (type));
3309 /* Non-terminal <pointer-to-member-type> for pointer-to-member
3310 variables. TYPE is a pointer-to-member POINTER_TYPE.
3312 <pointer-to-member-type> ::= M </class/ type> </member/ type> */
3314 static void
3315 write_pointer_to_member_type (const tree type)
3317 write_char ('M');
3318 write_type (TYPE_PTRMEM_CLASS_TYPE (type));
3319 write_type (TYPE_PTRMEM_POINTED_TO_TYPE (type));
3322 /* Non-terminal <template-param>. PARM is a TEMPLATE_TYPE_PARM,
3323 TEMPLATE_TEMPLATE_PARM, BOUND_TEMPLATE_TEMPLATE_PARM or a
3324 TEMPLATE_PARM_INDEX.
3326 <template-param> ::= T </parameter/ number> _ */
3328 static void
3329 write_template_param (const tree parm)
3331 int parm_index;
3333 MANGLE_TRACE_TREE ("template-parm", parm);
3335 switch (TREE_CODE (parm))
3337 case TEMPLATE_TYPE_PARM:
3338 case TEMPLATE_TEMPLATE_PARM:
3339 case BOUND_TEMPLATE_TEMPLATE_PARM:
3340 parm_index = TEMPLATE_TYPE_IDX (parm);
3341 break;
3343 case TEMPLATE_PARM_INDEX:
3344 parm_index = TEMPLATE_PARM_IDX (parm);
3345 break;
3347 default:
3348 gcc_unreachable ();
3351 write_char ('T');
3352 /* NUMBER as it appears in the mangling is (-1)-indexed, with the
3353 earliest template param denoted by `_'. */
3354 write_compact_number (parm_index);
3357 /* <template-template-param>
3358 ::= <template-param>
3359 ::= <substitution> */
3361 static void
3362 write_template_template_param (const tree parm)
3364 tree templ = NULL_TREE;
3366 /* PARM, a TEMPLATE_TEMPLATE_PARM, is an instantiation of the
3367 template template parameter. The substitution candidate here is
3368 only the template. */
3369 if (TREE_CODE (parm) == BOUND_TEMPLATE_TEMPLATE_PARM)
3371 templ
3372 = TI_TEMPLATE (TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (parm));
3373 if (find_substitution (templ))
3374 return;
3377 /* <template-param> encodes only the template parameter position,
3378 not its template arguments, which is fine here. */
3379 write_template_param (parm);
3380 if (templ)
3381 add_substitution (templ);
3384 /* Non-terminal <substitution>.
3386 <substitution> ::= S <seq-id> _
3387 ::= S_ */
3389 static void
3390 write_substitution (const int seq_id)
3392 MANGLE_TRACE ("substitution", "");
3394 write_char ('S');
3395 if (seq_id > 0)
3396 write_number (seq_id - 1, /*unsigned=*/1, 36);
3397 write_char ('_');
3400 /* Start mangling ENTITY. */
3402 static inline void
3403 start_mangling (const tree entity)
3405 G.entity = entity;
3406 G.need_abi_warning = false;
3407 obstack_free (&name_obstack, name_base);
3408 mangle_obstack = &name_obstack;
3409 name_base = obstack_alloc (&name_obstack, 0);
3412 /* Done with mangling. If WARN is true, and the name of G.entity will
3413 be mangled differently in a future version of the ABI, issue a
3414 warning. */
3416 static void
3417 finish_mangling_internal (void)
3419 /* Clear all the substitutions. */
3420 vec_safe_truncate (G.substitutions, 0);
3422 /* Null-terminate the string. */
3423 write_char ('\0');
3427 /* Like finish_mangling_internal, but return the mangled string. */
3429 static inline const char *
3430 finish_mangling (void)
3432 finish_mangling_internal ();
3433 return (const char *) obstack_finish (mangle_obstack);
3436 /* Like finish_mangling_internal, but return an identifier. */
3438 static tree
3439 finish_mangling_get_identifier (void)
3441 finish_mangling_internal ();
3442 /* Don't obstack_finish here, and the next start_mangling will
3443 remove the identifier. */
3444 return get_identifier ((const char *) obstack_base (mangle_obstack));
3447 /* Initialize data structures for mangling. */
3449 void
3450 init_mangle (void)
3452 gcc_obstack_init (&name_obstack);
3453 name_base = obstack_alloc (&name_obstack, 0);
3454 vec_alloc (G.substitutions, 0);
3456 /* Cache these identifiers for quick comparison when checking for
3457 standard substitutions. */
3458 subst_identifiers[SUBID_ALLOCATOR] = get_identifier ("allocator");
3459 subst_identifiers[SUBID_BASIC_STRING] = get_identifier ("basic_string");
3460 subst_identifiers[SUBID_CHAR_TRAITS] = get_identifier ("char_traits");
3461 subst_identifiers[SUBID_BASIC_ISTREAM] = get_identifier ("basic_istream");
3462 subst_identifiers[SUBID_BASIC_OSTREAM] = get_identifier ("basic_ostream");
3463 subst_identifiers[SUBID_BASIC_IOSTREAM] = get_identifier ("basic_iostream");
3466 /* Generate the mangled name of DECL. */
3468 static tree
3469 mangle_decl_string (const tree decl)
3471 tree result;
3472 location_t saved_loc = input_location;
3473 tree saved_fn = NULL_TREE;
3474 bool template_p = false;
3476 /* We shouldn't be trying to mangle an uninstantiated template. */
3477 gcc_assert (!type_dependent_expression_p (decl));
3479 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
3481 struct tinst_level *tl = current_instantiation ();
3482 if ((!tl || tl->decl != decl)
3483 && push_tinst_level (decl))
3485 template_p = true;
3486 saved_fn = current_function_decl;
3487 current_function_decl = NULL_TREE;
3490 input_location = DECL_SOURCE_LOCATION (decl);
3492 start_mangling (decl);
3494 if (TREE_CODE (decl) == TYPE_DECL)
3495 write_type (TREE_TYPE (decl));
3496 else
3497 write_mangled_name (decl, true);
3499 result = finish_mangling_get_identifier ();
3500 if (DEBUG_MANGLE)
3501 fprintf (stderr, "mangle_decl_string = '%s'\n\n",
3502 IDENTIFIER_POINTER (result));
3504 if (template_p)
3506 pop_tinst_level ();
3507 current_function_decl = saved_fn;
3509 input_location = saved_loc;
3511 return result;
3514 /* Return an identifier for the external mangled name of DECL. */
3516 static tree
3517 get_mangled_id (tree decl)
3519 tree id = mangle_decl_string (decl);
3520 return targetm.mangle_decl_assembler_name (decl, id);
3523 /* If DECL is an implicit mangling alias, return its symtab node; otherwise
3524 return NULL. */
3526 static symtab_node *
3527 decl_implicit_alias_p (tree decl)
3529 if (DECL_P (decl) && DECL_ARTIFICIAL (decl)
3530 && DECL_IGNORED_P (decl)
3531 && (TREE_CODE (decl) == FUNCTION_DECL
3532 || (TREE_CODE (decl) == VAR_DECL
3533 && TREE_STATIC (decl))))
3535 symtab_node *n = symtab_node::get (decl);
3536 if (n && n->cpp_implicit_alias)
3537 return n;
3539 return NULL;
3542 /* If DECL is a mangling alias, remove it from the symbol table and return
3543 true; otherwise return false. */
3545 bool
3546 maybe_remove_implicit_alias (tree decl)
3548 if (symtab_node *n = decl_implicit_alias_p (decl))
3550 n->remove();
3551 return true;
3553 return false;
3556 /* Create an identifier for the external mangled name of DECL. */
3558 void
3559 mangle_decl (const tree decl)
3561 tree id;
3562 bool dep;
3564 /* Don't bother mangling uninstantiated templates. */
3565 ++processing_template_decl;
3566 if (TREE_CODE (decl) == TYPE_DECL)
3567 dep = dependent_type_p (TREE_TYPE (decl));
3568 else
3569 dep = (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3570 && any_dependent_template_arguments_p (DECL_TI_ARGS (decl)));
3571 --processing_template_decl;
3572 if (dep)
3573 return;
3575 /* During LTO we keep mangled names of TYPE_DECLs for ODR type merging.
3576 It is not needed to assign names to anonymous namespace, but we use the
3577 "<anon>" marker to be able to tell if type is C++ ODR type or type
3578 produced by other language. */
3579 if (TREE_CODE (decl) == TYPE_DECL
3580 && TYPE_STUB_DECL (TREE_TYPE (decl))
3581 && !TREE_PUBLIC (TYPE_STUB_DECL (TREE_TYPE (decl))))
3582 id = get_identifier ("<anon>");
3583 else
3585 gcc_assert (TREE_CODE (decl) != TYPE_DECL
3586 || !no_linkage_check (TREE_TYPE (decl), true));
3587 id = get_mangled_id (decl);
3589 SET_DECL_ASSEMBLER_NAME (decl, id);
3591 if (id != DECL_NAME (decl)
3592 && !DECL_REALLY_EXTERN (decl)
3593 /* Don't do this for a fake symbol we aren't going to emit anyway. */
3594 && TREE_CODE (decl) != TYPE_DECL
3595 && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
3596 && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
3598 bool set = false;
3600 /* Check IDENTIFIER_GLOBAL_VALUE before setting to avoid redundant
3601 errors from multiple definitions. */
3602 tree d = IDENTIFIER_GLOBAL_VALUE (id);
3603 if (!d || decl_implicit_alias_p (d))
3605 set = true;
3606 SET_IDENTIFIER_GLOBAL_VALUE (id, decl);
3609 if (!G.need_abi_warning)
3610 return;
3612 /* If the mangling will change in the future, emit an alias with the
3613 future mangled name for forward-compatibility. */
3614 int save_ver;
3615 tree id2;
3617 if (!set)
3619 SET_IDENTIFIER_GLOBAL_VALUE (id, decl);
3620 inform (DECL_SOURCE_LOCATION (decl), "a later -fabi-version= (or "
3621 "=0) avoids this error with a change in mangling");
3624 save_ver = flag_abi_version;
3625 flag_abi_version = flag_abi_compat_version;
3626 id2 = mangle_decl_string (decl);
3627 id2 = targetm.mangle_decl_assembler_name (decl, id2);
3628 flag_abi_version = save_ver;
3630 if (id2 == id)
3631 return;
3633 if (warn_abi)
3635 if (flag_abi_compat_version != 0
3636 && abi_version_at_least (flag_abi_compat_version))
3637 warning (OPT_Wabi, "the mangled name of %q+D changed between "
3638 "-fabi-version=%d (%D) and -fabi-version=%d (%D)",
3639 G.entity, flag_abi_compat_version, id2,
3640 flag_abi_version, id);
3641 else
3642 warning (OPT_Wabi, "the mangled name of %q+D changes between "
3643 "-fabi-version=%d (%D) and -fabi-version=%d (%D)",
3644 G.entity, flag_abi_version, id,
3645 flag_abi_compat_version, id2);
3648 note_mangling_alias (decl, id2);
3652 /* Generate the mangled representation of TYPE. */
3654 const char *
3655 mangle_type_string (const tree type)
3657 const char *result;
3659 start_mangling (type);
3660 write_type (type);
3661 result = finish_mangling ();
3662 if (DEBUG_MANGLE)
3663 fprintf (stderr, "mangle_type_string = '%s'\n\n", result);
3664 return result;
3667 /* Create an identifier for the mangled name of a special component
3668 for belonging to TYPE. CODE is the ABI-specified code for this
3669 component. */
3671 static tree
3672 mangle_special_for_type (const tree type, const char *code)
3674 tree result;
3676 /* We don't have an actual decl here for the special component, so
3677 we can't just process the <encoded-name>. Instead, fake it. */
3678 start_mangling (type);
3680 /* Start the mangling. */
3681 write_string ("_Z");
3682 write_string (code);
3684 /* Add the type. */
3685 write_type (type);
3686 result = finish_mangling_get_identifier ();
3688 if (DEBUG_MANGLE)
3689 fprintf (stderr, "mangle_special_for_type = %s\n\n",
3690 IDENTIFIER_POINTER (result));
3692 return result;
3695 /* Create an identifier for the mangled representation of the typeinfo
3696 structure for TYPE. */
3698 tree
3699 mangle_typeinfo_for_type (const tree type)
3701 return mangle_special_for_type (type, "TI");
3704 /* Create an identifier for the mangled name of the NTBS containing
3705 the mangled name of TYPE. */
3707 tree
3708 mangle_typeinfo_string_for_type (const tree type)
3710 return mangle_special_for_type (type, "TS");
3713 /* Create an identifier for the mangled name of the vtable for TYPE. */
3715 tree
3716 mangle_vtbl_for_type (const tree type)
3718 return mangle_special_for_type (type, "TV");
3721 /* Returns an identifier for the mangled name of the VTT for TYPE. */
3723 tree
3724 mangle_vtt_for_type (const tree type)
3726 return mangle_special_for_type (type, "TT");
3729 /* Return an identifier for a construction vtable group. TYPE is
3730 the most derived class in the hierarchy; BINFO is the base
3731 subobject for which this construction vtable group will be used.
3733 This mangling isn't part of the ABI specification; in the ABI
3734 specification, the vtable group is dumped in the same COMDAT as the
3735 main vtable, and is referenced only from that vtable, so it doesn't
3736 need an external name. For binary formats without COMDAT sections,
3737 though, we need external names for the vtable groups.
3739 We use the production
3741 <special-name> ::= CT <type> <offset number> _ <base type> */
3743 tree
3744 mangle_ctor_vtbl_for_type (const tree type, const tree binfo)
3746 tree result;
3748 start_mangling (type);
3750 write_string ("_Z");
3751 write_string ("TC");
3752 write_type (type);
3753 write_integer_cst (BINFO_OFFSET (binfo));
3754 write_char ('_');
3755 write_type (BINFO_TYPE (binfo));
3757 result = finish_mangling_get_identifier ();
3758 if (DEBUG_MANGLE)
3759 fprintf (stderr, "mangle_ctor_vtbl_for_type = %s\n\n",
3760 IDENTIFIER_POINTER (result));
3761 return result;
3764 /* Mangle a this pointer or result pointer adjustment.
3766 <call-offset> ::= h <fixed offset number> _
3767 ::= v <fixed offset number> _ <virtual offset number> _ */
3769 static void
3770 mangle_call_offset (const tree fixed_offset, const tree virtual_offset)
3772 write_char (virtual_offset ? 'v' : 'h');
3774 /* For either flavor, write the fixed offset. */
3775 write_integer_cst (fixed_offset);
3776 write_char ('_');
3778 /* For a virtual thunk, add the virtual offset. */
3779 if (virtual_offset)
3781 write_integer_cst (virtual_offset);
3782 write_char ('_');
3786 /* Return an identifier for the mangled name of a this-adjusting or
3787 covariant thunk to FN_DECL. FIXED_OFFSET is the initial adjustment
3788 to this used to find the vptr. If VIRTUAL_OFFSET is non-NULL, this
3789 is a virtual thunk, and it is the vtbl offset in
3790 bytes. THIS_ADJUSTING is nonzero for a this adjusting thunk and
3791 zero for a covariant thunk. Note, that FN_DECL might be a covariant
3792 thunk itself. A covariant thunk name always includes the adjustment
3793 for the this pointer, even if there is none.
3795 <special-name> ::= T <call-offset> <base encoding>
3796 ::= Tc <this_adjust call-offset> <result_adjust call-offset>
3797 <base encoding> */
3799 tree
3800 mangle_thunk (tree fn_decl, const int this_adjusting, tree fixed_offset,
3801 tree virtual_offset)
3803 tree result;
3805 start_mangling (fn_decl);
3807 write_string ("_Z");
3808 write_char ('T');
3810 if (!this_adjusting)
3812 /* Covariant thunk with no this adjustment */
3813 write_char ('c');
3814 mangle_call_offset (integer_zero_node, NULL_TREE);
3815 mangle_call_offset (fixed_offset, virtual_offset);
3817 else if (!DECL_THUNK_P (fn_decl))
3818 /* Plain this adjusting thunk. */
3819 mangle_call_offset (fixed_offset, virtual_offset);
3820 else
3822 /* This adjusting thunk to covariant thunk. */
3823 write_char ('c');
3824 mangle_call_offset (fixed_offset, virtual_offset);
3825 fixed_offset = ssize_int (THUNK_FIXED_OFFSET (fn_decl));
3826 virtual_offset = THUNK_VIRTUAL_OFFSET (fn_decl);
3827 if (virtual_offset)
3828 virtual_offset = BINFO_VPTR_FIELD (virtual_offset);
3829 mangle_call_offset (fixed_offset, virtual_offset);
3830 fn_decl = THUNK_TARGET (fn_decl);
3833 /* Scoped name. */
3834 write_encoding (fn_decl);
3836 result = finish_mangling_get_identifier ();
3837 if (DEBUG_MANGLE)
3838 fprintf (stderr, "mangle_thunk = %s\n\n", IDENTIFIER_POINTER (result));
3839 return result;
3842 struct conv_type_hasher : ggc_ptr_hash<tree_node>
3844 static hashval_t hash (tree);
3845 static bool equal (tree, tree);
3848 /* This hash table maps TYPEs to the IDENTIFIER for a conversion
3849 operator to TYPE. The nodes are IDENTIFIERs whose TREE_TYPE is the
3850 TYPE. */
3852 static GTY (()) hash_table<conv_type_hasher> *conv_type_names;
3854 /* Hash a node (VAL1) in the table. */
3856 hashval_t
3857 conv_type_hasher::hash (tree val)
3859 return (hashval_t) TYPE_UID (TREE_TYPE (val));
3862 /* Compare VAL1 (a node in the table) with VAL2 (a TYPE). */
3864 bool
3865 conv_type_hasher::equal (tree val1, tree val2)
3867 return TREE_TYPE (val1) == val2;
3870 /* Return an identifier for the mangled unqualified name for a
3871 conversion operator to TYPE. This mangling is not specified by the
3872 ABI spec; it is only used internally. */
3874 tree
3875 mangle_conv_op_name_for_type (const tree type)
3877 tree *slot;
3878 tree identifier;
3880 if (type == error_mark_node)
3881 return error_mark_node;
3883 if (conv_type_names == NULL)
3884 conv_type_names = hash_table<conv_type_hasher>::create_ggc (31);
3886 slot = conv_type_names->find_slot_with_hash (type,
3887 (hashval_t) TYPE_UID (type),
3888 INSERT);
3889 identifier = *slot;
3890 if (!identifier)
3892 char buffer[64];
3894 /* Create a unique name corresponding to TYPE. */
3895 sprintf (buffer, "operator %lu",
3896 (unsigned long) conv_type_names->elements ());
3897 identifier = get_identifier (buffer);
3898 *slot = identifier;
3900 /* Hang TYPE off the identifier so it can be found easily later
3901 when performing conversions. */
3902 TREE_TYPE (identifier) = type;
3904 /* Set bits on the identifier so we know later it's a conversion. */
3905 IDENTIFIER_OPNAME_P (identifier) = 1;
3906 IDENTIFIER_TYPENAME_P (identifier) = 1;
3909 return identifier;
3912 /* Write out the appropriate string for this variable when generating
3913 another mangled name based on this one. */
3915 static void
3916 write_guarded_var_name (const tree variable)
3918 if (DECL_NAME (variable)
3919 && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
3920 /* The name of a guard variable for a reference temporary should refer
3921 to the reference, not the temporary. */
3922 write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
3923 else
3924 write_name (variable, /*ignore_local_scope=*/0);
3927 /* Return an identifier for the name of an initialization guard
3928 variable for indicated VARIABLE. */
3930 tree
3931 mangle_guard_variable (const tree variable)
3933 start_mangling (variable);
3934 write_string ("_ZGV");
3935 write_guarded_var_name (variable);
3936 return finish_mangling_get_identifier ();
3939 /* Return an identifier for the name of a thread_local initialization
3940 function for VARIABLE. */
3942 tree
3943 mangle_tls_init_fn (const tree variable)
3945 start_mangling (variable);
3946 write_string ("_ZTH");
3947 write_guarded_var_name (variable);
3948 return finish_mangling_get_identifier ();
3951 /* Return an identifier for the name of a thread_local wrapper
3952 function for VARIABLE. */
3954 #define TLS_WRAPPER_PREFIX "_ZTW"
3956 tree
3957 mangle_tls_wrapper_fn (const tree variable)
3959 start_mangling (variable);
3960 write_string (TLS_WRAPPER_PREFIX);
3961 write_guarded_var_name (variable);
3962 return finish_mangling_get_identifier ();
3965 /* Return true iff FN is a thread_local wrapper function. */
3967 bool
3968 decl_tls_wrapper_p (const tree fn)
3970 if (TREE_CODE (fn) != FUNCTION_DECL)
3971 return false;
3972 tree name = DECL_NAME (fn);
3973 return strncmp (IDENTIFIER_POINTER (name), TLS_WRAPPER_PREFIX,
3974 strlen (TLS_WRAPPER_PREFIX)) == 0;
3977 /* Return an identifier for the name of a temporary variable used to
3978 initialize a static reference. This isn't part of the ABI, but we might
3979 as well call them something readable. */
3981 static GTY(()) int temp_count;
3983 tree
3984 mangle_ref_init_variable (const tree variable)
3986 start_mangling (variable);
3987 write_string ("_ZGR");
3988 write_name (variable, /*ignore_local_scope=*/0);
3989 /* Avoid name clashes with aggregate initialization of multiple
3990 references at once. */
3991 write_unsigned_number (temp_count++);
3992 return finish_mangling_get_identifier ();
3996 /* Foreign language type mangling section. */
3998 /* How to write the type codes for the integer Java type. */
4000 static void
4001 write_java_integer_type_codes (const tree type)
4003 if (type == java_int_type_node)
4004 write_char ('i');
4005 else if (type == java_short_type_node)
4006 write_char ('s');
4007 else if (type == java_byte_type_node)
4008 write_char ('c');
4009 else if (type == java_char_type_node)
4010 write_char ('w');
4011 else if (type == java_long_type_node)
4012 write_char ('x');
4013 else if (type == java_boolean_type_node)
4014 write_char ('b');
4015 else
4016 gcc_unreachable ();
4019 /* Given a CLASS_TYPE, such as a record for std::bad_exception this
4020 function generates a mangled name for the vtable map variable of
4021 the class type. For example, if the class type is
4022 "std::bad_exception", the mangled name for the class is
4023 "St13bad_exception". This function would generate the name
4024 "_ZN4_VTVISt13bad_exceptionE12__vtable_mapE", which unmangles as:
4025 "_VTV<std::bad_exception>::__vtable_map". */
4028 char *
4029 get_mangled_vtable_map_var_name (tree class_type)
4031 char *var_name = NULL;
4032 const char *prefix = "_ZN4_VTVI";
4033 const char *postfix = "E12__vtable_mapE";
4035 gcc_assert (TREE_CODE (class_type) == RECORD_TYPE);
4037 tree class_id = DECL_ASSEMBLER_NAME (TYPE_NAME (class_type));
4038 unsigned int len = strlen (IDENTIFIER_POINTER (class_id)) +
4039 strlen (prefix) +
4040 strlen (postfix) + 1;
4042 var_name = (char *) xmalloc (len);
4044 sprintf (var_name, "%s%s%s", prefix, IDENTIFIER_POINTER (class_id), postfix);
4046 return var_name;
4049 #include "gt-cp-mangle.h"