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