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