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