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