xref: /dflybsd-src/contrib/gcc-8.0/gcc/cp/cp-objcp-common.c (revision 38fd149817dfbff97799f62fcb70be98c4e32523)
1*38fd1498Szrj /* Some code common to C++ and ObjC++ front ends.
2*38fd1498Szrj    Copyright (C) 2004-2018 Free Software Foundation, Inc.
3*38fd1498Szrj    Contributed by Ziemowit Laski  <zlaski@apple.com>
4*38fd1498Szrj 
5*38fd1498Szrj This file is part of GCC.
6*38fd1498Szrj 
7*38fd1498Szrj GCC is free software; you can redistribute it and/or modify it under
8*38fd1498Szrj the terms of the GNU General Public License as published by the Free
9*38fd1498Szrj Software Foundation; either version 3, or (at your option) any later
10*38fd1498Szrj version.
11*38fd1498Szrj 
12*38fd1498Szrj GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13*38fd1498Szrj WARRANTY; without even the implied warranty of MERCHANTABILITY or
14*38fd1498Szrj FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15*38fd1498Szrj for more details.
16*38fd1498Szrj 
17*38fd1498Szrj You should have received a copy of the GNU General Public License
18*38fd1498Szrj along with GCC; see the file COPYING3.  If not see
19*38fd1498Szrj <http://www.gnu.org/licenses/>.  */
20*38fd1498Szrj 
21*38fd1498Szrj #include "config.h"
22*38fd1498Szrj #include "system.h"
23*38fd1498Szrj #include "coretypes.h"
24*38fd1498Szrj #include "cp-tree.h"
25*38fd1498Szrj #include "cp-objcp-common.h"
26*38fd1498Szrj #include "dwarf2.h"
27*38fd1498Szrj 
28*38fd1498Szrj /* Special routine to get the alias set for C++.  */
29*38fd1498Szrj 
30*38fd1498Szrj alias_set_type
cxx_get_alias_set(tree t)31*38fd1498Szrj cxx_get_alias_set (tree t)
32*38fd1498Szrj {
33*38fd1498Szrj   if (IS_FAKE_BASE_TYPE (t))
34*38fd1498Szrj     /* The base variant of a type must be in the same alias set as the
35*38fd1498Szrj        complete type.  */
36*38fd1498Szrj     return get_alias_set (TYPE_CONTEXT (t));
37*38fd1498Szrj 
38*38fd1498Szrj   /* Punt on PMFs until we canonicalize functions properly.  */
39*38fd1498Szrj   if (TYPE_PTRMEMFUNC_P (t)
40*38fd1498Szrj       || (POINTER_TYPE_P (t)
41*38fd1498Szrj 	  && TYPE_PTRMEMFUNC_P (TREE_TYPE (t))))
42*38fd1498Szrj     return 0;
43*38fd1498Szrj 
44*38fd1498Szrj   return c_common_get_alias_set (t);
45*38fd1498Szrj }
46*38fd1498Szrj 
47*38fd1498Szrj /* Called from check_global_declaration.  */
48*38fd1498Szrj 
49*38fd1498Szrj bool
cxx_warn_unused_global_decl(const_tree decl)50*38fd1498Szrj cxx_warn_unused_global_decl (const_tree decl)
51*38fd1498Szrj {
52*38fd1498Szrj   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl))
53*38fd1498Szrj     return false;
54*38fd1498Szrj   if (DECL_IN_SYSTEM_HEADER (decl))
55*38fd1498Szrj     return false;
56*38fd1498Szrj 
57*38fd1498Szrj   return true;
58*38fd1498Szrj }
59*38fd1498Szrj 
60*38fd1498Szrj /* Langhook for tree_size: determine size of our 'x' and 'c' nodes.  */
61*38fd1498Szrj size_t
cp_tree_size(enum tree_code code)62*38fd1498Szrj cp_tree_size (enum tree_code code)
63*38fd1498Szrj {
64*38fd1498Szrj   gcc_checking_assert (code >= NUM_TREE_CODES);
65*38fd1498Szrj   switch (code)
66*38fd1498Szrj     {
67*38fd1498Szrj     case PTRMEM_CST:		return sizeof (ptrmem_cst);
68*38fd1498Szrj     case BASELINK:		return sizeof (tree_baselink);
69*38fd1498Szrj     case TEMPLATE_PARM_INDEX:	return sizeof (template_parm_index);
70*38fd1498Szrj     case DEFAULT_ARG:		return sizeof (tree_default_arg);
71*38fd1498Szrj     case DEFERRED_NOEXCEPT:	return sizeof (tree_deferred_noexcept);
72*38fd1498Szrj     case OVERLOAD:		return sizeof (tree_overload);
73*38fd1498Szrj     case STATIC_ASSERT:         return sizeof (tree_static_assert);
74*38fd1498Szrj     case TYPE_ARGUMENT_PACK:
75*38fd1498Szrj     case TYPE_PACK_EXPANSION:	return sizeof (tree_type_non_common);
76*38fd1498Szrj     case NONTYPE_ARGUMENT_PACK:
77*38fd1498Szrj     case EXPR_PACK_EXPANSION:	return sizeof (tree_exp);
78*38fd1498Szrj     case ARGUMENT_PACK_SELECT:	return sizeof (tree_argument_pack_select);
79*38fd1498Szrj     case TRAIT_EXPR:		return sizeof (tree_trait_expr);
80*38fd1498Szrj     case LAMBDA_EXPR:           return sizeof (tree_lambda_expr);
81*38fd1498Szrj     case TEMPLATE_INFO:         return sizeof (tree_template_info);
82*38fd1498Szrj     case CONSTRAINT_INFO:       return sizeof (tree_constraint_info);
83*38fd1498Szrj     case USERDEF_LITERAL:	return sizeof (tree_userdef_literal);
84*38fd1498Szrj     case TEMPLATE_DECL:		return sizeof (tree_template_decl);
85*38fd1498Szrj     default:
86*38fd1498Szrj       switch (TREE_CODE_CLASS (code))
87*38fd1498Szrj 	{
88*38fd1498Szrj 	case tcc_declaration:	return sizeof (tree_decl_non_common);
89*38fd1498Szrj 	case tcc_type:		return sizeof (tree_type_non_common);
90*38fd1498Szrj 	default: gcc_unreachable ();
91*38fd1498Szrj 	}
92*38fd1498Szrj     }
93*38fd1498Szrj   /* NOTREACHED */
94*38fd1498Szrj }
95*38fd1498Szrj 
96*38fd1498Szrj /* Returns true if T is a variably modified type, in the sense of C99.
97*38fd1498Szrj    FN is as passed to variably_modified_p.
98*38fd1498Szrj    This routine needs only check cases that cannot be handled by the
99*38fd1498Szrj    language-independent logic in tree.c.  */
100*38fd1498Szrj 
101*38fd1498Szrj bool
cp_var_mod_type_p(tree type,tree fn)102*38fd1498Szrj cp_var_mod_type_p (tree type, tree fn)
103*38fd1498Szrj {
104*38fd1498Szrj   /* If TYPE is a pointer-to-member, it is variably modified if either
105*38fd1498Szrj      the class or the member are variably modified.  */
106*38fd1498Szrj   if (TYPE_PTRMEM_P (type))
107*38fd1498Szrj     return (variably_modified_type_p (TYPE_PTRMEM_CLASS_TYPE (type), fn)
108*38fd1498Szrj 	    || variably_modified_type_p (TYPE_PTRMEM_POINTED_TO_TYPE (type),
109*38fd1498Szrj 					 fn));
110*38fd1498Szrj 
111*38fd1498Szrj   /* All other types are not variably modified.  */
112*38fd1498Szrj   return false;
113*38fd1498Szrj }
114*38fd1498Szrj 
115*38fd1498Szrj /* This compares two types for equivalence ("compatible" in C-based languages).
116*38fd1498Szrj    This routine should only return 1 if it is sure.  It should not be used
117*38fd1498Szrj    in contexts where erroneously returning 0 causes problems.  */
118*38fd1498Szrj 
119*38fd1498Szrj int
cxx_types_compatible_p(tree x,tree y)120*38fd1498Szrj cxx_types_compatible_p (tree x, tree y)
121*38fd1498Szrj {
122*38fd1498Szrj   return same_type_ignoring_top_level_qualifiers_p (x, y);
123*38fd1498Szrj }
124*38fd1498Szrj 
125*38fd1498Szrj static GTY((cache)) tree_cache_map *debug_type_map;
126*38fd1498Szrj 
127*38fd1498Szrj /* Return a type to use in the debug info instead of TYPE, or NULL_TREE to
128*38fd1498Szrj    keep TYPE.  */
129*38fd1498Szrj 
130*38fd1498Szrj tree
cp_get_debug_type(const_tree type)131*38fd1498Szrj cp_get_debug_type (const_tree type)
132*38fd1498Szrj {
133*38fd1498Szrj   tree dtype = NULL_TREE;
134*38fd1498Szrj 
135*38fd1498Szrj   if (TYPE_PTRMEMFUNC_P (type) && !typedef_variant_p (type))
136*38fd1498Szrj     dtype = build_offset_type (TYPE_PTRMEMFUNC_OBJECT_TYPE (type),
137*38fd1498Szrj 			       TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type)));
138*38fd1498Szrj 
139*38fd1498Szrj   /* We cannot simply return the debug type here because the function uses
140*38fd1498Szrj      the type canonicalization hashtable, which is GC-ed, so its behavior
141*38fd1498Szrj      depends on the actual collection points.  Since we are building these
142*38fd1498Szrj      types on the fly for the debug info only, they would not be attached
143*38fd1498Szrj      to any GC root and always be swept, so we would make the contents of
144*38fd1498Szrj      the debug info depend on the collection points.  */
145*38fd1498Szrj   if (dtype)
146*38fd1498Szrj     {
147*38fd1498Szrj       tree ktype = CONST_CAST_TREE (type);
148*38fd1498Szrj       if (debug_type_map == NULL)
149*38fd1498Szrj 	debug_type_map = tree_cache_map::create_ggc (512);
150*38fd1498Szrj       else if (tree *slot = debug_type_map->get (ktype))
151*38fd1498Szrj 	return *slot;
152*38fd1498Szrj       debug_type_map->put (ktype, dtype);
153*38fd1498Szrj     }
154*38fd1498Szrj 
155*38fd1498Szrj   return dtype;
156*38fd1498Szrj }
157*38fd1498Szrj 
158*38fd1498Szrj /* Return -1 if dwarf ATTR shouldn't be added for DECL, or the attribute
159*38fd1498Szrj    value otherwise.  */
160*38fd1498Szrj int
cp_decl_dwarf_attribute(const_tree decl,int attr)161*38fd1498Szrj cp_decl_dwarf_attribute (const_tree decl, int attr)
162*38fd1498Szrj {
163*38fd1498Szrj   if (decl == NULL_TREE)
164*38fd1498Szrj     return -1;
165*38fd1498Szrj 
166*38fd1498Szrj   switch (attr)
167*38fd1498Szrj     {
168*38fd1498Szrj     case DW_AT_explicit:
169*38fd1498Szrj       if (TREE_CODE (decl) == FUNCTION_DECL
170*38fd1498Szrj 	  && DECL_LANG_SPECIFIC (STRIP_TEMPLATE (decl))
171*38fd1498Szrj 	  && DECL_NONCONVERTING_P (decl))
172*38fd1498Szrj 	return 1;
173*38fd1498Szrj       break;
174*38fd1498Szrj 
175*38fd1498Szrj     case DW_AT_deleted:
176*38fd1498Szrj       if (TREE_CODE (decl) == FUNCTION_DECL
177*38fd1498Szrj 	  && DECL_LANG_SPECIFIC (STRIP_TEMPLATE (decl))
178*38fd1498Szrj 	  && DECL_DELETED_FN (decl))
179*38fd1498Szrj 	return 1;
180*38fd1498Szrj       break;
181*38fd1498Szrj 
182*38fd1498Szrj     case DW_AT_defaulted:
183*38fd1498Szrj       if (TREE_CODE (decl) == FUNCTION_DECL
184*38fd1498Szrj 	  && DECL_LANG_SPECIFIC (STRIP_TEMPLATE (decl))
185*38fd1498Szrj 	  && DECL_DEFAULTED_FN (decl))
186*38fd1498Szrj 	{
187*38fd1498Szrj 	  if (DECL_DEFAULTED_IN_CLASS_P (decl))
188*38fd1498Szrj 	    return DW_DEFAULTED_in_class;
189*38fd1498Szrj 
190*38fd1498Szrj 	  if (DECL_DEFAULTED_OUTSIDE_CLASS_P (decl))
191*38fd1498Szrj 	    return DW_DEFAULTED_out_of_class;
192*38fd1498Szrj 	}
193*38fd1498Szrj       break;
194*38fd1498Szrj 
195*38fd1498Szrj     case DW_AT_const_expr:
196*38fd1498Szrj       if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_DECLARED_CONSTEXPR_P (decl))
197*38fd1498Szrj 	return 1;
198*38fd1498Szrj       break;
199*38fd1498Szrj 
200*38fd1498Szrj     case DW_AT_reference:
201*38fd1498Szrj       if (TREE_CODE (decl) == FUNCTION_DECL
202*38fd1498Szrj 	  && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
203*38fd1498Szrj 	  && FUNCTION_REF_QUALIFIED (TREE_TYPE (decl))
204*38fd1498Szrj 	  && !FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (decl)))
205*38fd1498Szrj 	return 1;
206*38fd1498Szrj       break;
207*38fd1498Szrj 
208*38fd1498Szrj     case DW_AT_rvalue_reference:
209*38fd1498Szrj       if (TREE_CODE (decl) == FUNCTION_DECL
210*38fd1498Szrj 	  && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
211*38fd1498Szrj 	  && FUNCTION_REF_QUALIFIED (TREE_TYPE (decl))
212*38fd1498Szrj 	  && FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (decl)))
213*38fd1498Szrj 	return 1;
214*38fd1498Szrj       break;
215*38fd1498Szrj 
216*38fd1498Szrj     case DW_AT_inline:
217*38fd1498Szrj       if (VAR_P (decl) && DECL_INLINE_VAR_P (decl))
218*38fd1498Szrj 	{
219*38fd1498Szrj 	  if (DECL_VAR_DECLARED_INLINE_P (decl))
220*38fd1498Szrj 	    return DW_INL_declared_inlined;
221*38fd1498Szrj 	  else
222*38fd1498Szrj 	    return DW_INL_inlined;
223*38fd1498Szrj 	}
224*38fd1498Szrj       break;
225*38fd1498Szrj 
226*38fd1498Szrj     case DW_AT_export_symbols:
227*38fd1498Szrj       if (TREE_CODE (decl) == NAMESPACE_DECL
228*38fd1498Szrj 	  && (DECL_NAMESPACE_INLINE_P (decl)
229*38fd1498Szrj 	      || (DECL_NAME (decl) == NULL_TREE && dwarf_version >= 5)))
230*38fd1498Szrj 	return 1;
231*38fd1498Szrj       break;
232*38fd1498Szrj 
233*38fd1498Szrj     default:
234*38fd1498Szrj       break;
235*38fd1498Szrj     }
236*38fd1498Szrj 
237*38fd1498Szrj   return -1;
238*38fd1498Szrj }
239*38fd1498Szrj 
240*38fd1498Szrj /* Return -1 if dwarf ATTR shouldn't be added for TYPE, or the attribute
241*38fd1498Szrj    value otherwise.  */
242*38fd1498Szrj int
cp_type_dwarf_attribute(const_tree type,int attr)243*38fd1498Szrj cp_type_dwarf_attribute (const_tree type, int attr)
244*38fd1498Szrj {
245*38fd1498Szrj   if (type == NULL_TREE)
246*38fd1498Szrj     return -1;
247*38fd1498Szrj 
248*38fd1498Szrj   switch (attr)
249*38fd1498Szrj     {
250*38fd1498Szrj     case DW_AT_reference:
251*38fd1498Szrj       if ((TREE_CODE (type) == FUNCTION_TYPE
252*38fd1498Szrj 	   || TREE_CODE (type) == METHOD_TYPE)
253*38fd1498Szrj 	  && FUNCTION_REF_QUALIFIED (type)
254*38fd1498Szrj 	  && !FUNCTION_RVALUE_QUALIFIED (type))
255*38fd1498Szrj 	return 1;
256*38fd1498Szrj       break;
257*38fd1498Szrj 
258*38fd1498Szrj     case DW_AT_rvalue_reference:
259*38fd1498Szrj       if ((TREE_CODE (type) == FUNCTION_TYPE
260*38fd1498Szrj 	   || TREE_CODE (type) == METHOD_TYPE)
261*38fd1498Szrj 	  && FUNCTION_REF_QUALIFIED (type)
262*38fd1498Szrj 	  && FUNCTION_RVALUE_QUALIFIED (type))
263*38fd1498Szrj 	return 1;
264*38fd1498Szrj       break;
265*38fd1498Szrj 
266*38fd1498Szrj     default:
267*38fd1498Szrj       break;
268*38fd1498Szrj     }
269*38fd1498Szrj 
270*38fd1498Szrj   return -1;
271*38fd1498Szrj }
272*38fd1498Szrj 
273*38fd1498Szrj /* Return the unit size of TYPE without reusable tail padding.  */
274*38fd1498Szrj 
275*38fd1498Szrj tree
cp_unit_size_without_reusable_padding(tree type)276*38fd1498Szrj cp_unit_size_without_reusable_padding (tree type)
277*38fd1498Szrj {
278*38fd1498Szrj   if (CLASS_TYPE_P (type))
279*38fd1498Szrj     return CLASSTYPE_SIZE_UNIT (type);
280*38fd1498Szrj   return TYPE_SIZE_UNIT (type);
281*38fd1498Szrj }
282*38fd1498Szrj 
283*38fd1498Szrj /* Stubs to keep c-opts.c happy.  */
284*38fd1498Szrj void
push_file_scope(void)285*38fd1498Szrj push_file_scope (void)
286*38fd1498Szrj {
287*38fd1498Szrj }
288*38fd1498Szrj 
289*38fd1498Szrj void
pop_file_scope(void)290*38fd1498Szrj pop_file_scope (void)
291*38fd1498Szrj {
292*38fd1498Szrj }
293*38fd1498Szrj 
294*38fd1498Szrj /* c-pragma.c needs to query whether a decl has extern "C" linkage.  */
295*38fd1498Szrj bool
has_c_linkage(const_tree decl)296*38fd1498Szrj has_c_linkage (const_tree decl)
297*38fd1498Szrj {
298*38fd1498Szrj   return DECL_EXTERN_C_P (decl);
299*38fd1498Szrj }
300*38fd1498Szrj 
301*38fd1498Szrj static GTY ((cache))
302*38fd1498Szrj      hash_table<tree_decl_map_cache_hasher> *shadowed_var_for_decl;
303*38fd1498Szrj 
304*38fd1498Szrj /* Lookup a shadowed var for FROM, and return it if we find one.  */
305*38fd1498Szrj 
306*38fd1498Szrj tree
decl_shadowed_for_var_lookup(tree from)307*38fd1498Szrj decl_shadowed_for_var_lookup (tree from)
308*38fd1498Szrj {
309*38fd1498Szrj   struct tree_decl_map *h, in;
310*38fd1498Szrj   in.base.from = from;
311*38fd1498Szrj 
312*38fd1498Szrj   h = shadowed_var_for_decl->find_with_hash (&in, DECL_UID (from));
313*38fd1498Szrj   if (h)
314*38fd1498Szrj     return h->to;
315*38fd1498Szrj   return NULL_TREE;
316*38fd1498Szrj }
317*38fd1498Szrj 
318*38fd1498Szrj /* Insert a mapping FROM->TO in the shadowed var hashtable.  */
319*38fd1498Szrj 
320*38fd1498Szrj void
decl_shadowed_for_var_insert(tree from,tree to)321*38fd1498Szrj decl_shadowed_for_var_insert (tree from, tree to)
322*38fd1498Szrj {
323*38fd1498Szrj   struct tree_decl_map *h;
324*38fd1498Szrj 
325*38fd1498Szrj   h = ggc_alloc<tree_decl_map> ();
326*38fd1498Szrj   h->base.from = from;
327*38fd1498Szrj   h->to = to;
328*38fd1498Szrj   *shadowed_var_for_decl->find_slot_with_hash (h, DECL_UID (from), INSERT) = h;
329*38fd1498Szrj }
330*38fd1498Szrj 
331*38fd1498Szrj void
init_shadowed_var_for_decl(void)332*38fd1498Szrj init_shadowed_var_for_decl (void)
333*38fd1498Szrj {
334*38fd1498Szrj   shadowed_var_for_decl
335*38fd1498Szrj     = hash_table<tree_decl_map_cache_hasher>::create_ggc (512);
336*38fd1498Szrj }
337*38fd1498Szrj 
338*38fd1498Szrj /* Return true if stmt can fall through.  Used by block_may_fallthru
339*38fd1498Szrj    default case.  */
340*38fd1498Szrj 
341*38fd1498Szrj bool
cxx_block_may_fallthru(const_tree stmt)342*38fd1498Szrj cxx_block_may_fallthru (const_tree stmt)
343*38fd1498Szrj {
344*38fd1498Szrj   switch (TREE_CODE (stmt))
345*38fd1498Szrj     {
346*38fd1498Szrj     case EXPR_STMT:
347*38fd1498Szrj       return block_may_fallthru (EXPR_STMT_EXPR (stmt));
348*38fd1498Szrj 
349*38fd1498Szrj     case THROW_EXPR:
350*38fd1498Szrj       return false;
351*38fd1498Szrj 
352*38fd1498Szrj     case IF_STMT:
353*38fd1498Szrj       if (block_may_fallthru (THEN_CLAUSE (stmt)))
354*38fd1498Szrj 	return true;
355*38fd1498Szrj       return block_may_fallthru (ELSE_CLAUSE (stmt));
356*38fd1498Szrj 
357*38fd1498Szrj     case SWITCH_STMT:
358*38fd1498Szrj       return (!SWITCH_STMT_ALL_CASES_P (stmt)
359*38fd1498Szrj 	      || !SWITCH_STMT_NO_BREAK_P (stmt)
360*38fd1498Szrj 	      || block_may_fallthru (SWITCH_STMT_BODY (stmt)));
361*38fd1498Szrj 
362*38fd1498Szrj     default:
363*38fd1498Szrj       return true;
364*38fd1498Szrj     }
365*38fd1498Szrj }
366*38fd1498Szrj 
367*38fd1498Szrj /* Return the list of decls in the global namespace.  */
368*38fd1498Szrj 
369*38fd1498Szrj tree
cp_get_global_decls()370*38fd1498Szrj cp_get_global_decls ()
371*38fd1498Szrj {
372*38fd1498Szrj   return NAMESPACE_LEVEL (global_namespace)->names;
373*38fd1498Szrj }
374*38fd1498Szrj 
375*38fd1498Szrj /* Push DECL into the current scope.  */
376*38fd1498Szrj 
377*38fd1498Szrj tree
cp_pushdecl(tree decl)378*38fd1498Szrj cp_pushdecl (tree decl)
379*38fd1498Szrj {
380*38fd1498Szrj   return pushdecl (decl);
381*38fd1498Szrj }
382*38fd1498Szrj 
383*38fd1498Szrj /* Get the global value binding of NAME.  Called directly from
384*38fd1498Szrj    c-common.c, not via a hook. */
385*38fd1498Szrj 
386*38fd1498Szrj tree
identifier_global_value(tree name)387*38fd1498Szrj identifier_global_value (tree name)
388*38fd1498Szrj {
389*38fd1498Szrj   return get_global_binding (name);
390*38fd1498Szrj }
391*38fd1498Szrj 
392*38fd1498Szrj /* Register c++-specific dumps.  */
393*38fd1498Szrj 
394*38fd1498Szrj void
cp_register_dumps(gcc::dump_manager * dumps)395*38fd1498Szrj cp_register_dumps (gcc::dump_manager *dumps)
396*38fd1498Szrj {
397*38fd1498Szrj   class_dump_id = dumps->dump_register
398*38fd1498Szrj     (".class", "lang-class", "lang-class", DK_lang, OPTGROUP_NONE, false);
399*38fd1498Szrj 
400*38fd1498Szrj   raw_dump_id = dumps->dump_register
401*38fd1498Szrj     (".raw", "lang-raw", "lang-raw", DK_lang, OPTGROUP_NONE, false);
402*38fd1498Szrj }
403*38fd1498Szrj 
404*38fd1498Szrj void
cp_common_init_ts(void)405*38fd1498Szrj cp_common_init_ts (void)
406*38fd1498Szrj {
407*38fd1498Szrj   MARK_TS_DECL_NON_COMMON (USING_DECL);
408*38fd1498Szrj   MARK_TS_DECL_COMMON (TEMPLATE_DECL);
409*38fd1498Szrj   MARK_TS_DECL_COMMON (WILDCARD_DECL);
410*38fd1498Szrj 
411*38fd1498Szrj   MARK_TS_COMMON (TEMPLATE_TEMPLATE_PARM);
412*38fd1498Szrj   MARK_TS_COMMON (TEMPLATE_TYPE_PARM);
413*38fd1498Szrj   MARK_TS_COMMON (TEMPLATE_PARM_INDEX);
414*38fd1498Szrj   MARK_TS_COMMON (OVERLOAD);
415*38fd1498Szrj   MARK_TS_COMMON (TEMPLATE_INFO);
416*38fd1498Szrj   MARK_TS_COMMON (TYPENAME_TYPE);
417*38fd1498Szrj   MARK_TS_COMMON (TYPEOF_TYPE);
418*38fd1498Szrj   MARK_TS_COMMON (UNDERLYING_TYPE);
419*38fd1498Szrj   MARK_TS_COMMON (BASELINK);
420*38fd1498Szrj   MARK_TS_COMMON (TYPE_PACK_EXPANSION);
421*38fd1498Szrj   MARK_TS_COMMON (TYPE_ARGUMENT_PACK);
422*38fd1498Szrj   MARK_TS_COMMON (DECLTYPE_TYPE);
423*38fd1498Szrj   MARK_TS_COMMON (BOUND_TEMPLATE_TEMPLATE_PARM);
424*38fd1498Szrj   MARK_TS_COMMON (UNBOUND_CLASS_TEMPLATE);
425*38fd1498Szrj 
426*38fd1498Szrj   MARK_TS_TYPED (EXPR_PACK_EXPANSION);
427*38fd1498Szrj   MARK_TS_TYPED (SWITCH_STMT);
428*38fd1498Szrj   MARK_TS_TYPED (IF_STMT);
429*38fd1498Szrj   MARK_TS_TYPED (FOR_STMT);
430*38fd1498Szrj   MARK_TS_TYPED (RANGE_FOR_STMT);
431*38fd1498Szrj   MARK_TS_TYPED (AGGR_INIT_EXPR);
432*38fd1498Szrj   MARK_TS_TYPED (EXPR_STMT);
433*38fd1498Szrj   MARK_TS_TYPED (EH_SPEC_BLOCK);
434*38fd1498Szrj   MARK_TS_TYPED (CLEANUP_STMT);
435*38fd1498Szrj   MARK_TS_TYPED (SCOPE_REF);
436*38fd1498Szrj   MARK_TS_TYPED (CAST_EXPR);
437*38fd1498Szrj   MARK_TS_TYPED (NON_DEPENDENT_EXPR);
438*38fd1498Szrj   MARK_TS_TYPED (MODOP_EXPR);
439*38fd1498Szrj   MARK_TS_TYPED (TRY_BLOCK);
440*38fd1498Szrj   MARK_TS_TYPED (THROW_EXPR);
441*38fd1498Szrj   MARK_TS_TYPED (HANDLER);
442*38fd1498Szrj   MARK_TS_TYPED (REINTERPRET_CAST_EXPR);
443*38fd1498Szrj   MARK_TS_TYPED (CONST_CAST_EXPR);
444*38fd1498Szrj   MARK_TS_TYPED (STATIC_CAST_EXPR);
445*38fd1498Szrj   MARK_TS_TYPED (DYNAMIC_CAST_EXPR);
446*38fd1498Szrj   MARK_TS_TYPED (IMPLICIT_CONV_EXPR);
447*38fd1498Szrj   MARK_TS_TYPED (TEMPLATE_ID_EXPR);
448*38fd1498Szrj   MARK_TS_TYPED (ARROW_EXPR);
449*38fd1498Szrj   MARK_TS_TYPED (SIZEOF_EXPR);
450*38fd1498Szrj   MARK_TS_TYPED (ALIGNOF_EXPR);
451*38fd1498Szrj   MARK_TS_TYPED (AT_ENCODE_EXPR);
452*38fd1498Szrj   MARK_TS_TYPED (UNARY_PLUS_EXPR);
453*38fd1498Szrj   MARK_TS_TYPED (TRAIT_EXPR);
454*38fd1498Szrj   MARK_TS_TYPED (TYPE_ARGUMENT_PACK);
455*38fd1498Szrj   MARK_TS_TYPED (NOEXCEPT_EXPR);
456*38fd1498Szrj   MARK_TS_TYPED (NONTYPE_ARGUMENT_PACK);
457*38fd1498Szrj   MARK_TS_TYPED (WHILE_STMT);
458*38fd1498Szrj   MARK_TS_TYPED (NEW_EXPR);
459*38fd1498Szrj   MARK_TS_TYPED (VEC_NEW_EXPR);
460*38fd1498Szrj   MARK_TS_TYPED (BREAK_STMT);
461*38fd1498Szrj   MARK_TS_TYPED (MEMBER_REF);
462*38fd1498Szrj   MARK_TS_TYPED (DOTSTAR_EXPR);
463*38fd1498Szrj   MARK_TS_TYPED (DO_STMT);
464*38fd1498Szrj   MARK_TS_TYPED (DELETE_EXPR);
465*38fd1498Szrj   MARK_TS_TYPED (VEC_DELETE_EXPR);
466*38fd1498Szrj   MARK_TS_TYPED (CONTINUE_STMT);
467*38fd1498Szrj   MARK_TS_TYPED (TAG_DEFN);
468*38fd1498Szrj   MARK_TS_TYPED (PSEUDO_DTOR_EXPR);
469*38fd1498Szrj   MARK_TS_TYPED (TYPEID_EXPR);
470*38fd1498Szrj   MARK_TS_TYPED (MUST_NOT_THROW_EXPR);
471*38fd1498Szrj   MARK_TS_TYPED (STMT_EXPR);
472*38fd1498Szrj   MARK_TS_TYPED (OFFSET_REF);
473*38fd1498Szrj   MARK_TS_TYPED (OFFSETOF_EXPR);
474*38fd1498Szrj   MARK_TS_TYPED (ADDRESSOF_EXPR);
475*38fd1498Szrj   MARK_TS_TYPED (PTRMEM_CST);
476*38fd1498Szrj   MARK_TS_TYPED (EMPTY_CLASS_EXPR);
477*38fd1498Szrj   MARK_TS_TYPED (VEC_INIT_EXPR);
478*38fd1498Szrj   MARK_TS_TYPED (USING_STMT);
479*38fd1498Szrj   MARK_TS_TYPED (LAMBDA_EXPR);
480*38fd1498Szrj   MARK_TS_TYPED (CTOR_INITIALIZER);
481*38fd1498Szrj   MARK_TS_TYPED (REQUIRES_EXPR);
482*38fd1498Szrj   MARK_TS_TYPED (UNARY_LEFT_FOLD_EXPR);
483*38fd1498Szrj   MARK_TS_TYPED (UNARY_RIGHT_FOLD_EXPR);
484*38fd1498Szrj   MARK_TS_TYPED (BINARY_LEFT_FOLD_EXPR);
485*38fd1498Szrj   MARK_TS_TYPED (BINARY_RIGHT_FOLD_EXPR);
486*38fd1498Szrj }
487*38fd1498Szrj 
488*38fd1498Szrj #include "gt-cp-cp-objcp-common.h"
489