]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/decl2.c
4bdac94a8e038c3bcff6c5c246edcf1df2366599
[thirdparty/gcc.git] / gcc / cp / decl2.c
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2016 Free Software Foundation, Inc.
3 Hacked by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it 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,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU 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
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
25
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "cp-tree.h"
34 #include "c-family/c-common.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "varasm.h"
39 #include "attribs.h"
40 #include "stor-layout.h"
41 #include "calls.h"
42 #include "decl.h"
43 #include "toplev.h"
44 #include "c-family/c-objc.h"
45 #include "c-family/c-pragma.h"
46 #include "dumpfile.h"
47 #include "intl.h"
48 #include "c-family/c-ada-spec.h"
49 #include "asan.h"
50
51 extern cpp_reader *parse_in;
52
53 /* This structure contains information about the initializations
54 and/or destructions required for a particular priority level. */
55 typedef struct priority_info_s {
56 /* Nonzero if there have been any initializations at this priority
57 throughout the translation unit. */
58 int initializations_p;
59 /* Nonzero if there have been any destructions at this priority
60 throughout the translation unit. */
61 int destructions_p;
62 } *priority_info;
63
64 static void mark_vtable_entries (tree);
65 static bool maybe_emit_vtables (tree);
66 static bool acceptable_java_type (tree);
67 static tree start_objects (int, int);
68 static void finish_objects (int, int, tree);
69 static tree start_static_storage_duration_function (unsigned);
70 static void finish_static_storage_duration_function (tree);
71 static priority_info get_priority_info (int);
72 static void do_static_initialization_or_destruction (tree, bool);
73 static void one_static_initialization_or_destruction (tree, tree, bool);
74 static void generate_ctor_or_dtor_function (bool, int, location_t *);
75 static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
76 void *);
77 static tree prune_vars_needing_no_initialization (tree *);
78 static void write_out_vars (tree);
79 static void import_export_class (tree);
80 static tree get_guard_bits (tree);
81 static void determine_visibility_from_class (tree, tree);
82 static bool determine_hidden_inline (tree);
83 static bool decl_defined_p (tree);
84 static void maybe_instantiate_decl (tree);
85
86 /* A list of static class variables. This is needed, because a
87 static class variable can be declared inside the class without
88 an initializer, and then initialized, statically, outside the class. */
89 static GTY(()) vec<tree, va_gc> *pending_statics;
90
91 /* A list of functions which were declared inline, but which we
92 may need to emit outline anyway. */
93 static GTY(()) vec<tree, va_gc> *deferred_fns;
94
95 /* A list of decls that use types with no linkage, which we need to make
96 sure are defined. */
97 static GTY(()) vec<tree, va_gc> *no_linkage_decls;
98
99 /* A vector of alternating decls and identifiers, where the latter
100 is to be an alias for the former if the former is defined. */
101 static GTY(()) vec<tree, va_gc> *mangling_aliases;
102
103 /* Nonzero if we're done parsing and into end-of-file activities. */
104
105 int at_eof;
106
107 /* True if note_mangling_alias should enqueue mangling aliases for
108 later generation, rather than emitting them right away. */
109
110 bool defer_mangling_aliases = true;
111 \f
112
113 /* Return a member function type (a METHOD_TYPE), given FNTYPE (a
114 FUNCTION_TYPE), CTYPE (class type), and QUALS (the cv-qualifiers
115 that apply to the function). */
116
117 tree
118 build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals,
119 cp_ref_qualifier rqual)
120 {
121 tree raises;
122 tree attrs;
123 int type_quals;
124 bool late_return_type_p;
125
126 if (fntype == error_mark_node || ctype == error_mark_node)
127 return error_mark_node;
128
129 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
130 || TREE_CODE (fntype) == METHOD_TYPE);
131
132 type_quals = quals & ~TYPE_QUAL_RESTRICT;
133 ctype = cp_build_qualified_type (ctype, type_quals);
134 raises = TYPE_RAISES_EXCEPTIONS (fntype);
135 attrs = TYPE_ATTRIBUTES (fntype);
136 late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (fntype);
137 fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
138 (TREE_CODE (fntype) == METHOD_TYPE
139 ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
140 : TYPE_ARG_TYPES (fntype)));
141 if (attrs)
142 fntype = cp_build_type_attribute_variant (fntype, attrs);
143 if (rqual)
144 fntype = build_ref_qualified_type (fntype, rqual);
145 if (raises)
146 fntype = build_exception_variant (fntype, raises);
147 if (late_return_type_p)
148 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
149
150 return fntype;
151 }
152
153 /* Return a variant of FNTYPE, a FUNCTION_TYPE or METHOD_TYPE, with its
154 return type changed to NEW_RET. */
155
156 tree
157 change_return_type (tree new_ret, tree fntype)
158 {
159 tree newtype;
160 tree args = TYPE_ARG_TYPES (fntype);
161 tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
162 tree attrs = TYPE_ATTRIBUTES (fntype);
163 bool late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (fntype);
164
165 if (new_ret == error_mark_node)
166 return fntype;
167
168 if (same_type_p (new_ret, TREE_TYPE (fntype)))
169 return fntype;
170
171 if (TREE_CODE (fntype) == FUNCTION_TYPE)
172 {
173 newtype = build_function_type (new_ret, args);
174 newtype = apply_memfn_quals (newtype,
175 type_memfn_quals (fntype),
176 type_memfn_rqual (fntype));
177 }
178 else
179 newtype = build_method_type_directly
180 (class_of_this_parm (fntype), new_ret, TREE_CHAIN (args));
181 if (FUNCTION_REF_QUALIFIED (fntype))
182 newtype = build_ref_qualified_type (newtype, type_memfn_rqual (fntype));
183 if (raises)
184 newtype = build_exception_variant (newtype, raises);
185 if (attrs)
186 newtype = cp_build_type_attribute_variant (newtype, attrs);
187 if (late_return_type_p)
188 TYPE_HAS_LATE_RETURN_TYPE (newtype) = 1;
189
190 return newtype;
191 }
192
193 /* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
194 appropriately. */
195
196 tree
197 cp_build_parm_decl (tree name, tree type)
198 {
199 tree parm = build_decl (input_location,
200 PARM_DECL, name, type);
201 /* DECL_ARG_TYPE is only used by the back end and the back end never
202 sees templates. */
203 if (!processing_template_decl)
204 DECL_ARG_TYPE (parm) = type_passed_as (type);
205
206 return parm;
207 }
208
209 /* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
210 indicated NAME. */
211
212 tree
213 build_artificial_parm (tree name, tree type)
214 {
215 tree parm = cp_build_parm_decl (name, type);
216 DECL_ARTIFICIAL (parm) = 1;
217 /* All our artificial parms are implicitly `const'; they cannot be
218 assigned to. */
219 TREE_READONLY (parm) = 1;
220 return parm;
221 }
222
223 /* Constructors for types with virtual baseclasses need an "in-charge" flag
224 saying whether this constructor is responsible for initialization of
225 virtual baseclasses or not. All destructors also need this "in-charge"
226 flag, which additionally determines whether or not the destructor should
227 free the memory for the object.
228
229 This function adds the "in-charge" flag to member function FN if
230 appropriate. It is called from grokclassfn and tsubst.
231 FN must be either a constructor or destructor.
232
233 The in-charge flag follows the 'this' parameter, and is followed by the
234 VTT parm (if any), then the user-written parms. */
235
236 void
237 maybe_retrofit_in_chrg (tree fn)
238 {
239 tree basetype, arg_types, parms, parm, fntype;
240
241 /* If we've already add the in-charge parameter don't do it again. */
242 if (DECL_HAS_IN_CHARGE_PARM_P (fn))
243 return;
244
245 /* When processing templates we can't know, in general, whether or
246 not we're going to have virtual baseclasses. */
247 if (processing_template_decl)
248 return;
249
250 /* We don't need an in-charge parameter for constructors that don't
251 have virtual bases. */
252 if (DECL_CONSTRUCTOR_P (fn)
253 && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
254 return;
255
256 arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
257 basetype = TREE_TYPE (TREE_VALUE (arg_types));
258 arg_types = TREE_CHAIN (arg_types);
259
260 parms = DECL_CHAIN (DECL_ARGUMENTS (fn));
261
262 /* If this is a subobject constructor or destructor, our caller will
263 pass us a pointer to our VTT. */
264 if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
265 {
266 parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
267
268 /* First add it to DECL_ARGUMENTS between 'this' and the real args... */
269 DECL_CHAIN (parm) = parms;
270 parms = parm;
271
272 /* ...and then to TYPE_ARG_TYPES. */
273 arg_types = hash_tree_chain (vtt_parm_type, arg_types);
274
275 DECL_HAS_VTT_PARM_P (fn) = 1;
276 }
277
278 /* Then add the in-charge parm (before the VTT parm). */
279 parm = build_artificial_parm (in_charge_identifier, integer_type_node);
280 DECL_CHAIN (parm) = parms;
281 parms = parm;
282 arg_types = hash_tree_chain (integer_type_node, arg_types);
283
284 /* Insert our new parameter(s) into the list. */
285 DECL_CHAIN (DECL_ARGUMENTS (fn)) = parms;
286
287 /* And rebuild the function type. */
288 fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
289 arg_types);
290 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
291 fntype = build_exception_variant (fntype,
292 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
293 if (TYPE_ATTRIBUTES (TREE_TYPE (fn)))
294 fntype = (cp_build_type_attribute_variant
295 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (fn))));
296 TREE_TYPE (fn) = fntype;
297
298 /* Now we've got the in-charge parameter. */
299 DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
300 }
301
302 /* Classes overload their constituent function names automatically.
303 When a function name is declared in a record structure,
304 its name is changed to it overloaded name. Since names for
305 constructors and destructors can conflict, we place a leading
306 '$' for destructors.
307
308 CNAME is the name of the class we are grokking for.
309
310 FUNCTION is a FUNCTION_DECL. It was created by `grokdeclarator'.
311
312 FLAGS contains bits saying what's special about today's
313 arguments. DTOR_FLAG == DESTRUCTOR.
314
315 If FUNCTION is a destructor, then we must add the `auto-delete' field
316 as a second parameter. There is some hair associated with the fact
317 that we must "declare" this variable in the manner consistent with the
318 way the rest of the arguments were declared.
319
320 QUALS are the qualifiers for the this pointer. */
321
322 void
323 grokclassfn (tree ctype, tree function, enum overload_flags flags)
324 {
325 tree fn_name = DECL_NAME (function);
326
327 /* Even within an `extern "C"' block, members get C++ linkage. See
328 [dcl.link] for details. */
329 SET_DECL_LANGUAGE (function, lang_cplusplus);
330
331 if (fn_name == NULL_TREE)
332 {
333 error ("name missing for member function");
334 fn_name = get_identifier ("<anonymous>");
335 DECL_NAME (function) = fn_name;
336 }
337
338 DECL_CONTEXT (function) = ctype;
339
340 if (flags == DTOR_FLAG)
341 DECL_DESTRUCTOR_P (function) = 1;
342
343 if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
344 maybe_retrofit_in_chrg (function);
345 }
346
347 /* Create an ARRAY_REF, checking for the user doing things backwards
348 along the way. DECLTYPE_P is for N3276, as in the parser. */
349
350 tree
351 grok_array_decl (location_t loc, tree array_expr, tree index_exp,
352 bool decltype_p)
353 {
354 tree type;
355 tree expr;
356 tree orig_array_expr = array_expr;
357 tree orig_index_exp = index_exp;
358 tree overload = NULL_TREE;
359
360 if (error_operand_p (array_expr) || error_operand_p (index_exp))
361 return error_mark_node;
362
363 if (processing_template_decl)
364 {
365 if (type_dependent_expression_p (array_expr)
366 || type_dependent_expression_p (index_exp))
367 return build_min_nt_loc (loc, ARRAY_REF, array_expr, index_exp,
368 NULL_TREE, NULL_TREE);
369 array_expr = build_non_dependent_expr (array_expr);
370 index_exp = build_non_dependent_expr (index_exp);
371 }
372
373 type = TREE_TYPE (array_expr);
374 gcc_assert (type);
375 type = non_reference (type);
376
377 /* If they have an `operator[]', use that. */
378 if (MAYBE_CLASS_TYPE_P (type) || MAYBE_CLASS_TYPE_P (TREE_TYPE (index_exp)))
379 {
380 tsubst_flags_t complain = tf_warning_or_error;
381 if (decltype_p)
382 complain |= tf_decltype;
383 expr = build_new_op (loc, ARRAY_REF, LOOKUP_NORMAL, array_expr,
384 index_exp, NULL_TREE, &overload, complain);
385 }
386 else
387 {
388 tree p1, p2, i1, i2;
389
390 /* Otherwise, create an ARRAY_REF for a pointer or array type.
391 It is a little-known fact that, if `a' is an array and `i' is
392 an int, you can write `i[a]', which means the same thing as
393 `a[i]'. */
394 if (TREE_CODE (type) == ARRAY_TYPE || VECTOR_TYPE_P (type))
395 p1 = array_expr;
396 else
397 p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
398
399 if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
400 p2 = index_exp;
401 else
402 p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
403
404 i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
405 false);
406 i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
407 false);
408
409 if ((p1 && i2) && (i1 && p2))
410 error ("ambiguous conversion for array subscript");
411
412 if (p1 && i2)
413 array_expr = p1, index_exp = i2;
414 else if (i1 && p2)
415 array_expr = p2, index_exp = i1;
416 else
417 {
418 error ("invalid types %<%T[%T]%> for array subscript",
419 type, TREE_TYPE (index_exp));
420 return error_mark_node;
421 }
422
423 if (array_expr == error_mark_node || index_exp == error_mark_node)
424 error ("ambiguous conversion for array subscript");
425
426 expr = build_array_ref (input_location, array_expr, index_exp);
427 }
428 if (processing_template_decl && expr != error_mark_node)
429 {
430 if (overload != NULL_TREE)
431 return (build_min_non_dep_op_overload
432 (ARRAY_REF, expr, overload, orig_array_expr, orig_index_exp));
433
434 return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
435 NULL_TREE, NULL_TREE);
436 }
437 return expr;
438 }
439
440 /* Given the cast expression EXP, checking out its validity. Either return
441 an error_mark_node if there was an unavoidable error, return a cast to
442 void for trying to delete a pointer w/ the value 0, or return the
443 call to delete. If DOING_VEC is true, we handle things differently
444 for doing an array delete.
445 Implements ARM $5.3.4. This is called from the parser. */
446
447 tree
448 delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete,
449 tsubst_flags_t complain)
450 {
451 tree t, type;
452
453 if (exp == error_mark_node)
454 return exp;
455
456 if (processing_template_decl)
457 {
458 t = build_min (DELETE_EXPR, void_type_node, exp, size);
459 DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
460 DELETE_EXPR_USE_VEC (t) = doing_vec;
461 TREE_SIDE_EFFECTS (t) = 1;
462 return t;
463 }
464
465 /* An array can't have been allocated by new, so complain. */
466 if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
467 warning (0, "deleting array %q#E", exp);
468
469 t = build_expr_type_conversion (WANT_POINTER, exp, true);
470
471 if (t == NULL_TREE || t == error_mark_node)
472 {
473 error ("type %q#T argument given to %<delete%>, expected pointer",
474 TREE_TYPE (exp));
475 return error_mark_node;
476 }
477
478 type = TREE_TYPE (t);
479
480 /* As of Valley Forge, you can delete a pointer to const. */
481
482 /* You can't delete functions. */
483 if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
484 {
485 error ("cannot delete a function. Only pointer-to-objects are "
486 "valid arguments to %<delete%>");
487 return error_mark_node;
488 }
489
490 /* Deleting ptr to void is undefined behavior [expr.delete/3]. */
491 if (VOID_TYPE_P (TREE_TYPE (type)))
492 {
493 warning (OPT_Wdelete_incomplete, "deleting %qT is undefined", type);
494 doing_vec = 0;
495 }
496
497 /* Deleting a pointer with the value zero is valid and has no effect. */
498 if (integer_zerop (t))
499 return build1 (NOP_EXPR, void_type_node, t);
500
501 if (doing_vec)
502 return build_vec_delete (t, /*maxindex=*/NULL_TREE,
503 sfk_deleting_destructor,
504 use_global_delete, complain);
505 else
506 return build_delete (type, t, sfk_deleting_destructor,
507 LOOKUP_NORMAL, use_global_delete,
508 complain);
509 }
510
511 /* Report an error if the indicated template declaration is not the
512 sort of thing that should be a member template. */
513
514 void
515 check_member_template (tree tmpl)
516 {
517 tree decl;
518
519 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
520 decl = DECL_TEMPLATE_RESULT (tmpl);
521
522 if (TREE_CODE (decl) == FUNCTION_DECL
523 || DECL_ALIAS_TEMPLATE_P (tmpl)
524 || (TREE_CODE (decl) == TYPE_DECL
525 && MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
526 {
527 /* The parser rejects template declarations in local classes
528 (with the exception of generic lambdas). */
529 gcc_assert (!current_function_decl || LAMBDA_FUNCTION_P (decl));
530 /* The parser rejects any use of virtual in a function template. */
531 gcc_assert (!(TREE_CODE (decl) == FUNCTION_DECL
532 && DECL_VIRTUAL_P (decl)));
533
534 /* The debug-information generating code doesn't know what to do
535 with member templates. */
536 DECL_IGNORED_P (tmpl) = 1;
537 }
538 else if (variable_template_p (tmpl))
539 /* OK */;
540 else
541 error ("template declaration of %q#D", decl);
542 }
543
544 /* Return true iff TYPE is a valid Java parameter or return type. */
545
546 static bool
547 acceptable_java_type (tree type)
548 {
549 if (type == error_mark_node)
550 return false;
551
552 if (VOID_TYPE_P (type) || TYPE_FOR_JAVA (type))
553 return true;
554 if (TYPE_PTR_P (type) || TREE_CODE (type) == REFERENCE_TYPE)
555 {
556 type = TREE_TYPE (type);
557 if (TREE_CODE (type) == RECORD_TYPE)
558 {
559 tree args; int i;
560 if (! TYPE_FOR_JAVA (type))
561 return false;
562 if (! CLASSTYPE_TEMPLATE_INFO (type))
563 return true;
564 args = CLASSTYPE_TI_ARGS (type);
565 i = TREE_VEC_LENGTH (args);
566 while (--i >= 0)
567 {
568 type = TREE_VEC_ELT (args, i);
569 if (TYPE_PTR_P (type))
570 type = TREE_TYPE (type);
571 if (! TYPE_FOR_JAVA (type))
572 return false;
573 }
574 return true;
575 }
576 }
577 return false;
578 }
579
580 /* For a METHOD in a Java class CTYPE, return true if
581 the parameter and return types are valid Java types.
582 Otherwise, print appropriate error messages, and return false. */
583
584 bool
585 check_java_method (tree method)
586 {
587 bool jerr = false;
588 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
589 tree ret_type = TREE_TYPE (TREE_TYPE (method));
590
591 if (!acceptable_java_type (ret_type))
592 {
593 error ("Java method %qD has non-Java return type %qT",
594 method, ret_type);
595 jerr = true;
596 }
597
598 arg_types = TREE_CHAIN (arg_types);
599 if (DECL_HAS_IN_CHARGE_PARM_P (method))
600 arg_types = TREE_CHAIN (arg_types);
601 if (DECL_HAS_VTT_PARM_P (method))
602 arg_types = TREE_CHAIN (arg_types);
603
604 for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
605 {
606 tree type = TREE_VALUE (arg_types);
607 if (!acceptable_java_type (type))
608 {
609 if (type != error_mark_node)
610 error ("Java method %qD has non-Java parameter type %qT",
611 method, type);
612 jerr = true;
613 }
614 }
615 return !jerr;
616 }
617
618 /* Sanity check: report error if this function FUNCTION is not
619 really a member of the class (CTYPE) it is supposed to belong to.
620 TEMPLATE_PARMS is used to specify the template parameters of a member
621 template passed as FUNCTION_DECL. If the member template is passed as a
622 TEMPLATE_DECL, it can be NULL since the parameters can be extracted
623 from the declaration. If the function is not a function template, it
624 must be NULL.
625 It returns the original declaration for the function, NULL_TREE if
626 no declaration was found, error_mark_node if an error was emitted. */
627
628 tree
629 check_classfn (tree ctype, tree function, tree template_parms)
630 {
631 int ix;
632 bool is_template;
633 tree pushed_scope;
634
635 if (DECL_USE_TEMPLATE (function)
636 && !(TREE_CODE (function) == TEMPLATE_DECL
637 && DECL_TEMPLATE_SPECIALIZATION (function))
638 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
639 /* Since this is a specialization of a member template,
640 we're not going to find the declaration in the class.
641 For example, in:
642
643 struct S { template <typename T> void f(T); };
644 template <> void S::f(int);
645
646 we're not going to find `S::f(int)', but there's no
647 reason we should, either. We let our callers know we didn't
648 find the method, but we don't complain. */
649 return NULL_TREE;
650
651 /* Basic sanity check: for a template function, the template parameters
652 either were not passed, or they are the same of DECL_TEMPLATE_PARMS. */
653 if (TREE_CODE (function) == TEMPLATE_DECL)
654 {
655 if (template_parms
656 && !comp_template_parms (template_parms,
657 DECL_TEMPLATE_PARMS (function)))
658 {
659 error ("template parameter lists provided don%'t match the "
660 "template parameters of %qD", function);
661 return error_mark_node;
662 }
663 template_parms = DECL_TEMPLATE_PARMS (function);
664 }
665
666 /* OK, is this a definition of a member template? */
667 is_template = (template_parms != NULL_TREE);
668
669 /* [temp.mem]
670
671 A destructor shall not be a member template. */
672 if (DECL_DESTRUCTOR_P (function) && is_template)
673 {
674 error ("destructor %qD declared as member template", function);
675 return error_mark_node;
676 }
677
678 /* We must enter the scope here, because conversion operators are
679 named by target type, and type equivalence relies on typenames
680 resolving within the scope of CTYPE. */
681 pushed_scope = push_scope (ctype);
682 ix = class_method_index_for_fn (complete_type (ctype), function);
683 if (ix >= 0)
684 {
685 vec<tree, va_gc> *methods = CLASSTYPE_METHOD_VEC (ctype);
686 tree fndecls, fndecl = 0;
687 bool is_conv_op;
688 const char *format = NULL;
689
690 for (fndecls = (*methods)[ix];
691 fndecls; fndecls = OVL_NEXT (fndecls))
692 {
693 tree p1, p2;
694
695 fndecl = OVL_CURRENT (fndecls);
696 p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
697 p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
698
699 /* We cannot simply call decls_match because this doesn't
700 work for static member functions that are pretending to
701 be methods, and because the name may have been changed by
702 asm("new_name"). */
703
704 /* Get rid of the this parameter on functions that become
705 static. */
706 if (DECL_STATIC_FUNCTION_P (fndecl)
707 && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
708 p1 = TREE_CHAIN (p1);
709
710 /* A member template definition only matches a member template
711 declaration. */
712 if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
713 continue;
714
715 /* ref-qualifier or absence of same must match. */
716 if (type_memfn_rqual (TREE_TYPE (function))
717 != type_memfn_rqual (TREE_TYPE (fndecl)))
718 continue;
719
720 // Include constraints in the match.
721 tree c1 = get_constraints (function);
722 tree c2 = get_constraints (fndecl);
723
724 /* While finding a match, same types and params are not enough
725 if the function is versioned. Also check version ("target")
726 attributes. */
727 if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
728 TREE_TYPE (TREE_TYPE (fndecl)))
729 && compparms (p1, p2)
730 && !targetm.target_option.function_versions (function, fndecl)
731 && (!is_template
732 || comp_template_parms (template_parms,
733 DECL_TEMPLATE_PARMS (fndecl)))
734 && equivalent_constraints (c1, c2)
735 && (DECL_TEMPLATE_SPECIALIZATION (function)
736 == DECL_TEMPLATE_SPECIALIZATION (fndecl))
737 && (!DECL_TEMPLATE_SPECIALIZATION (function)
738 || (DECL_TI_TEMPLATE (function)
739 == DECL_TI_TEMPLATE (fndecl))))
740 break;
741 }
742 if (fndecls)
743 {
744 if (pushed_scope)
745 pop_scope (pushed_scope);
746 return OVL_CURRENT (fndecls);
747 }
748
749 error_at (DECL_SOURCE_LOCATION (function),
750 "prototype for %q#D does not match any in class %qT",
751 function, ctype);
752 is_conv_op = DECL_CONV_FN_P (fndecl);
753
754 if (is_conv_op)
755 ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
756 fndecls = (*methods)[ix];
757 while (fndecls)
758 {
759 fndecl = OVL_CURRENT (fndecls);
760 fndecls = OVL_NEXT (fndecls);
761
762 if (!fndecls && is_conv_op)
763 {
764 if (methods->length () > (size_t) ++ix)
765 {
766 fndecls = (*methods)[ix];
767 if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
768 {
769 fndecls = NULL_TREE;
770 is_conv_op = false;
771 }
772 }
773 else
774 is_conv_op = false;
775 }
776 if (format)
777 format = " %+#D";
778 else if (fndecls)
779 format = N_("candidates are: %+#D");
780 else
781 format = N_("candidate is: %+#D");
782 error (format, fndecl);
783 }
784 }
785 else if (!COMPLETE_TYPE_P (ctype))
786 cxx_incomplete_type_error (function, ctype);
787 else
788 error ("no %q#D member function declared in class %qT",
789 function, ctype);
790
791 if (pushed_scope)
792 pop_scope (pushed_scope);
793 return error_mark_node;
794 }
795
796 /* DECL is a function with vague linkage. Remember it so that at the
797 end of the translation unit we can decide whether or not to emit
798 it. */
799
800 void
801 note_vague_linkage_fn (tree decl)
802 {
803 DECL_DEFER_OUTPUT (decl) = 1;
804 vec_safe_push (deferred_fns, decl);
805 }
806
807 /* As above, but for variable template instantiations. */
808
809 void
810 note_variable_template_instantiation (tree decl)
811 {
812 vec_safe_push (pending_statics, decl);
813 }
814
815 /* We have just processed the DECL, which is a static data member.
816 The other parameters are as for cp_finish_decl. */
817
818 void
819 finish_static_data_member_decl (tree decl,
820 tree init, bool init_const_expr_p,
821 tree asmspec_tree,
822 int flags)
823 {
824 DECL_CONTEXT (decl) = current_class_type;
825
826 /* We cannot call pushdecl here, because that would fill in the
827 TREE_CHAIN of our decl. Instead, we modify cp_finish_decl to do
828 the right thing, namely, to put this decl out straight away. */
829
830 if (! processing_template_decl)
831 vec_safe_push (pending_statics, decl);
832
833 if (LOCAL_CLASS_P (current_class_type)
834 /* We already complained about the template definition. */
835 && !DECL_TEMPLATE_INSTANTIATION (decl))
836 permerror (input_location, "local class %q#T shall not have static data member %q#D",
837 current_class_type, decl);
838 else
839 for (tree t = current_class_type; TYPE_P (t);
840 t = CP_TYPE_CONTEXT (t))
841 if (TYPE_UNNAMED_P (t))
842 {
843 if (permerror (DECL_SOURCE_LOCATION (decl),
844 "static data member %qD in unnamed class", decl))
845 inform (DECL_SOURCE_LOCATION (TYPE_NAME (t)),
846 "unnamed class defined here");
847 break;
848 }
849
850 DECL_IN_AGGR_P (decl) = 1;
851
852 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
853 && TYPE_DOMAIN (TREE_TYPE (decl)) == NULL_TREE)
854 SET_VAR_HAD_UNKNOWN_BOUND (decl);
855
856 cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
857 }
858
859 /* DECLARATOR and DECLSPECS correspond to a class member. The other
860 parameters are as for cp_finish_decl. Return the DECL for the
861 class member declared. */
862
863 tree
864 grokfield (const cp_declarator *declarator,
865 cp_decl_specifier_seq *declspecs,
866 tree init, bool init_const_expr_p,
867 tree asmspec_tree,
868 tree attrlist)
869 {
870 tree value;
871 const char *asmspec = 0;
872 int flags;
873 tree name;
874
875 if (init
876 && TREE_CODE (init) == TREE_LIST
877 && TREE_VALUE (init) == error_mark_node
878 && TREE_CHAIN (init) == NULL_TREE)
879 init = NULL_TREE;
880
881 value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
882 if (! value || value == error_mark_node)
883 /* friend or constructor went bad. */
884 return error_mark_node;
885 if (TREE_TYPE (value) == error_mark_node)
886 return value;
887
888 if (TREE_CODE (value) == TYPE_DECL && init)
889 {
890 error ("typedef %qD is initialized (use decltype instead)", value);
891 init = NULL_TREE;
892 }
893
894 /* Pass friendly classes back. */
895 if (value == void_type_node)
896 return value;
897
898
899 name = DECL_NAME (value);
900
901 if (name != NULL_TREE)
902 {
903 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
904 {
905 error ("explicit template argument list not allowed");
906 return error_mark_node;
907 }
908
909 if (IDENTIFIER_POINTER (name)[0] == '_'
910 && ! strcmp (IDENTIFIER_POINTER (name), "_vptr"))
911 error ("member %qD conflicts with virtual function table field name",
912 value);
913 }
914
915 /* Stash away type declarations. */
916 if (TREE_CODE (value) == TYPE_DECL)
917 {
918 DECL_NONLOCAL (value) = 1;
919 DECL_CONTEXT (value) = current_class_type;
920
921 if (attrlist)
922 {
923 int attrflags = 0;
924
925 /* If this is a typedef that names the class for linkage purposes
926 (7.1.3p8), apply any attributes directly to the type. */
927 if (OVERLOAD_TYPE_P (TREE_TYPE (value))
928 && value == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))))
929 attrflags = ATTR_FLAG_TYPE_IN_PLACE;
930
931 cplus_decl_attributes (&value, attrlist, attrflags);
932 }
933
934 if (decl_spec_seq_has_spec_p (declspecs, ds_typedef)
935 && TREE_TYPE (value) != error_mark_node
936 && TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))) != value)
937 set_underlying_type (value);
938
939 /* It's important that push_template_decl below follows
940 set_underlying_type above so that the created template
941 carries the properly set type of VALUE. */
942 if (processing_template_decl)
943 value = push_template_decl (value);
944
945 record_locally_defined_typedef (value);
946 return value;
947 }
948
949 int friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
950
951 if (!friendp && DECL_IN_AGGR_P (value))
952 {
953 error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
954 return void_type_node;
955 }
956
957 if (asmspec_tree && asmspec_tree != error_mark_node)
958 asmspec = TREE_STRING_POINTER (asmspec_tree);
959
960 if (init)
961 {
962 if (TREE_CODE (value) == FUNCTION_DECL)
963 {
964 if (init == ridpointers[(int)RID_DELETE])
965 {
966 DECL_DELETED_FN (value) = 1;
967 DECL_DECLARED_INLINE_P (value) = 1;
968 DECL_INITIAL (value) = error_mark_node;
969 }
970 else if (init == ridpointers[(int)RID_DEFAULT])
971 {
972 if (defaultable_fn_check (value))
973 {
974 DECL_DEFAULTED_FN (value) = 1;
975 DECL_INITIALIZED_IN_CLASS_P (value) = 1;
976 DECL_DECLARED_INLINE_P (value) = 1;
977 }
978 }
979 else if (TREE_CODE (init) == DEFAULT_ARG)
980 error ("invalid initializer for member function %qD", value);
981 else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
982 {
983 if (integer_zerop (init))
984 DECL_PURE_VIRTUAL_P (value) = 1;
985 else if (error_operand_p (init))
986 ; /* An error has already been reported. */
987 else
988 error ("invalid initializer for member function %qD",
989 value);
990 }
991 else
992 {
993 gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
994 if (friendp)
995 error ("initializer specified for friend function %qD",
996 value);
997 else
998 error ("initializer specified for static member function %qD",
999 value);
1000 }
1001 }
1002 else if (TREE_CODE (value) == FIELD_DECL)
1003 /* C++11 NSDMI, keep going. */;
1004 else if (!VAR_P (value))
1005 gcc_unreachable ();
1006 }
1007
1008 /* Pass friend decls back. */
1009 if ((TREE_CODE (value) == FUNCTION_DECL
1010 || TREE_CODE (value) == TEMPLATE_DECL)
1011 && DECL_CONTEXT (value) != current_class_type)
1012 return value;
1013
1014 /* Need to set this before push_template_decl. */
1015 if (VAR_P (value))
1016 DECL_CONTEXT (value) = current_class_type;
1017
1018 if (processing_template_decl && VAR_OR_FUNCTION_DECL_P (value))
1019 {
1020 value = push_template_decl (value);
1021 if (error_operand_p (value))
1022 return error_mark_node;
1023 }
1024
1025 if (attrlist)
1026 cplus_decl_attributes (&value, attrlist, 0);
1027
1028 if (init && DIRECT_LIST_INIT_P (init))
1029 flags = LOOKUP_NORMAL;
1030 else
1031 flags = LOOKUP_IMPLICIT;
1032
1033 switch (TREE_CODE (value))
1034 {
1035 case VAR_DECL:
1036 finish_static_data_member_decl (value, init, init_const_expr_p,
1037 asmspec_tree, flags);
1038 return value;
1039
1040 case FIELD_DECL:
1041 if (asmspec)
1042 error ("%<asm%> specifiers are not permitted on non-static data members");
1043 if (DECL_INITIAL (value) == error_mark_node)
1044 init = error_mark_node;
1045 cp_finish_decl (value, init, /*init_const_expr_p=*/false,
1046 NULL_TREE, flags);
1047 DECL_IN_AGGR_P (value) = 1;
1048 return value;
1049
1050 case FUNCTION_DECL:
1051 if (asmspec)
1052 set_user_assembler_name (value, asmspec);
1053
1054 cp_finish_decl (value,
1055 /*init=*/NULL_TREE,
1056 /*init_const_expr_p=*/false,
1057 asmspec_tree, flags);
1058
1059 /* Pass friends back this way. */
1060 if (DECL_FRIEND_P (value))
1061 return void_type_node;
1062
1063 DECL_IN_AGGR_P (value) = 1;
1064 return value;
1065
1066 default:
1067 gcc_unreachable ();
1068 }
1069 return NULL_TREE;
1070 }
1071
1072 /* Like `grokfield', but for bitfields.
1073 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node. */
1074
1075 tree
1076 grokbitfield (const cp_declarator *declarator,
1077 cp_decl_specifier_seq *declspecs, tree width,
1078 tree attrlist)
1079 {
1080 tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
1081
1082 if (value == error_mark_node)
1083 return NULL_TREE; /* friends went bad. */
1084 if (TREE_TYPE (value) == error_mark_node)
1085 return value;
1086
1087 /* Pass friendly classes back. */
1088 if (VOID_TYPE_P (value))
1089 return void_type_node;
1090
1091 if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value))
1092 && (POINTER_TYPE_P (value)
1093 || !dependent_type_p (TREE_TYPE (value))))
1094 {
1095 error ("bit-field %qD with non-integral type", value);
1096 return error_mark_node;
1097 }
1098
1099 if (TREE_CODE (value) == TYPE_DECL)
1100 {
1101 error ("cannot declare %qD to be a bit-field type", value);
1102 return NULL_TREE;
1103 }
1104
1105 /* Usually, finish_struct_1 catches bitfields with invalid types.
1106 But, in the case of bitfields with function type, we confuse
1107 ourselves into thinking they are member functions, so we must
1108 check here. */
1109 if (TREE_CODE (value) == FUNCTION_DECL)
1110 {
1111 error ("cannot declare bit-field %qD with function type",
1112 DECL_NAME (value));
1113 return NULL_TREE;
1114 }
1115
1116 if (DECL_IN_AGGR_P (value))
1117 {
1118 error ("%qD is already defined in the class %qT", value,
1119 DECL_CONTEXT (value));
1120 return void_type_node;
1121 }
1122
1123 if (TREE_STATIC (value))
1124 {
1125 error ("static member %qD cannot be a bit-field", value);
1126 return NULL_TREE;
1127 }
1128 cp_finish_decl (value, NULL_TREE, false, NULL_TREE, 0);
1129
1130 if (width != error_mark_node)
1131 {
1132 /* The width must be an integer type. */
1133 if (!type_dependent_expression_p (width)
1134 && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (width)))
1135 error ("width of bit-field %qD has non-integral type %qT", value,
1136 TREE_TYPE (width));
1137 DECL_INITIAL (value) = width;
1138 SET_DECL_C_BIT_FIELD (value);
1139 }
1140
1141 DECL_IN_AGGR_P (value) = 1;
1142
1143 if (attrlist)
1144 cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1145
1146 return value;
1147 }
1148
1149 \f
1150 /* Returns true iff ATTR is an attribute which needs to be applied at
1151 instantiation time rather than template definition time. */
1152
1153 static bool
1154 is_late_template_attribute (tree attr, tree decl)
1155 {
1156 tree name = get_attribute_name (attr);
1157 tree args = TREE_VALUE (attr);
1158 const struct attribute_spec *spec = lookup_attribute_spec (name);
1159 tree arg;
1160
1161 if (!spec)
1162 /* Unknown attribute. */
1163 return false;
1164
1165 /* Attribute weak handling wants to write out assembly right away. */
1166 if (is_attribute_p ("weak", name))
1167 return true;
1168
1169 /* Attribute unused is applied directly, as it appertains to
1170 decls. */
1171 if (is_attribute_p ("unused", name))
1172 return false;
1173
1174 /* Attribute tls_model wants to modify the symtab. */
1175 if (is_attribute_p ("tls_model", name))
1176 return true;
1177
1178 /* #pragma omp declare simd attribute needs to be always deferred. */
1179 if (flag_openmp
1180 && is_attribute_p ("omp declare simd", name))
1181 return true;
1182
1183 /* An attribute pack is clearly dependent. */
1184 if (args && PACK_EXPANSION_P (args))
1185 return true;
1186
1187 /* If any of the arguments are dependent expressions, we can't evaluate
1188 the attribute until instantiation time. */
1189 for (arg = args; arg; arg = TREE_CHAIN (arg))
1190 {
1191 tree t = TREE_VALUE (arg);
1192
1193 /* If the first attribute argument is an identifier, only consider
1194 second and following arguments. Attributes like mode, format,
1195 cleanup and several target specific attributes aren't late
1196 just because they have an IDENTIFIER_NODE as first argument. */
1197 if (arg == args && attribute_takes_identifier_p (name)
1198 && identifier_p (t))
1199 continue;
1200
1201 if (value_dependent_expression_p (t)
1202 || type_dependent_expression_p (t))
1203 return true;
1204 }
1205
1206 if (TREE_CODE (decl) == TYPE_DECL
1207 || TYPE_P (decl)
1208 || spec->type_required)
1209 {
1210 tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1211
1212 /* We can't apply any attributes to a completely unknown type until
1213 instantiation time. */
1214 enum tree_code code = TREE_CODE (type);
1215 if (code == TEMPLATE_TYPE_PARM
1216 || code == BOUND_TEMPLATE_TEMPLATE_PARM
1217 || code == TYPENAME_TYPE)
1218 return true;
1219 /* Also defer most attributes on dependent types. This is not
1220 necessary in all cases, but is the better default. */
1221 else if (dependent_type_p (type)
1222 /* But some attributes specifically apply to templates. */
1223 && !is_attribute_p ("abi_tag", name)
1224 && !is_attribute_p ("deprecated", name)
1225 && !is_attribute_p ("visibility", name))
1226 return true;
1227 else
1228 return false;
1229 }
1230 else
1231 return false;
1232 }
1233
1234 /* ATTR_P is a list of attributes. Remove any attributes which need to be
1235 applied at instantiation time and return them. If IS_DEPENDENT is true,
1236 the declaration itself is dependent, so all attributes should be applied
1237 at instantiation time. */
1238
1239 static tree
1240 splice_template_attributes (tree *attr_p, tree decl)
1241 {
1242 tree *p = attr_p;
1243 tree late_attrs = NULL_TREE;
1244 tree *q = &late_attrs;
1245
1246 if (!p)
1247 return NULL_TREE;
1248
1249 for (; *p; )
1250 {
1251 if (is_late_template_attribute (*p, decl))
1252 {
1253 ATTR_IS_DEPENDENT (*p) = 1;
1254 *q = *p;
1255 *p = TREE_CHAIN (*p);
1256 q = &TREE_CHAIN (*q);
1257 *q = NULL_TREE;
1258 }
1259 else
1260 p = &TREE_CHAIN (*p);
1261 }
1262
1263 return late_attrs;
1264 }
1265
1266 /* Remove any late attributes from the list in ATTR_P and attach them to
1267 DECL_P. */
1268
1269 static void
1270 save_template_attributes (tree *attr_p, tree *decl_p)
1271 {
1272 tree *q;
1273
1274 if (attr_p && *attr_p == error_mark_node)
1275 return;
1276
1277 tree late_attrs = splice_template_attributes (attr_p, *decl_p);
1278 if (!late_attrs)
1279 return;
1280
1281 if (DECL_P (*decl_p))
1282 q = &DECL_ATTRIBUTES (*decl_p);
1283 else
1284 q = &TYPE_ATTRIBUTES (*decl_p);
1285
1286 tree old_attrs = *q;
1287
1288 /* Merge the late attributes at the beginning with the attribute
1289 list. */
1290 late_attrs = merge_attributes (late_attrs, *q);
1291 *q = late_attrs;
1292
1293 if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1294 {
1295 /* We've added new attributes directly to the main variant, so
1296 now we need to update all of the other variants to include
1297 these new attributes. */
1298 tree variant;
1299 for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1300 variant = TYPE_NEXT_VARIANT (variant))
1301 {
1302 gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1303 TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1304 }
1305 }
1306 }
1307
1308 /* True if ATTRS contains any dependent attributes that affect type
1309 identity. */
1310
1311 bool
1312 any_dependent_type_attributes_p (tree attrs)
1313 {
1314 for (tree a = attrs; a; a = TREE_CHAIN (a))
1315 if (ATTR_IS_DEPENDENT (a))
1316 {
1317 const attribute_spec *as = lookup_attribute_spec (TREE_PURPOSE (a));
1318 if (as && as->affects_type_identity)
1319 return true;
1320 }
1321 return false;
1322 }
1323
1324 /* Return true iff ATTRS are acceptable attributes to be applied in-place
1325 to a typedef which gives a previously unnamed class or enum a name for
1326 linkage purposes. */
1327
1328 bool
1329 attributes_naming_typedef_ok (tree attrs)
1330 {
1331 for (; attrs; attrs = TREE_CHAIN (attrs))
1332 {
1333 tree name = get_attribute_name (attrs);
1334 if (is_attribute_p ("vector_size", name))
1335 return false;
1336 }
1337 return true;
1338 }
1339
1340 /* Like reconstruct_complex_type, but handle also template trees. */
1341
1342 tree
1343 cp_reconstruct_complex_type (tree type, tree bottom)
1344 {
1345 tree inner, outer;
1346 bool late_return_type_p = false;
1347
1348 if (TYPE_PTR_P (type))
1349 {
1350 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1351 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1352 TYPE_REF_CAN_ALIAS_ALL (type));
1353 }
1354 else if (TREE_CODE (type) == REFERENCE_TYPE)
1355 {
1356 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1357 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1358 TYPE_REF_CAN_ALIAS_ALL (type));
1359 }
1360 else if (TREE_CODE (type) == ARRAY_TYPE)
1361 {
1362 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1363 outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1364 /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1365 element type qualification will be handled by the recursive
1366 cp_reconstruct_complex_type call and cp_build_qualified_type
1367 for ARRAY_TYPEs changes the element type. */
1368 return outer;
1369 }
1370 else if (TREE_CODE (type) == FUNCTION_TYPE)
1371 {
1372 late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (type);
1373 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1374 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1375 outer = apply_memfn_quals (outer,
1376 type_memfn_quals (type),
1377 type_memfn_rqual (type));
1378 }
1379 else if (TREE_CODE (type) == METHOD_TYPE)
1380 {
1381 late_return_type_p = TYPE_HAS_LATE_RETURN_TYPE (type);
1382 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1383 /* The build_method_type_directly() routine prepends 'this' to argument list,
1384 so we must compensate by getting rid of it. */
1385 outer
1386 = build_method_type_directly
1387 (class_of_this_parm (type), inner,
1388 TREE_CHAIN (TYPE_ARG_TYPES (type)));
1389 }
1390 else if (TREE_CODE (type) == OFFSET_TYPE)
1391 {
1392 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1393 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1394 }
1395 else
1396 return bottom;
1397
1398 if (TYPE_ATTRIBUTES (type))
1399 outer = cp_build_type_attribute_variant (outer, TYPE_ATTRIBUTES (type));
1400 outer = cp_build_qualified_type (outer, cp_type_quals (type));
1401
1402 if (late_return_type_p)
1403 TYPE_HAS_LATE_RETURN_TYPE (outer) = 1;
1404
1405 return outer;
1406 }
1407
1408 /* Replaces any constexpr expression that may be into the attributes
1409 arguments with their reduced value. */
1410
1411 static void
1412 cp_check_const_attributes (tree attributes)
1413 {
1414 if (attributes == error_mark_node)
1415 return;
1416
1417 tree attr;
1418 for (attr = attributes; attr; attr = TREE_CHAIN (attr))
1419 {
1420 tree arg;
1421 for (arg = TREE_VALUE (attr); arg; arg = TREE_CHAIN (arg))
1422 {
1423 tree expr = TREE_VALUE (arg);
1424 if (EXPR_P (expr))
1425 TREE_VALUE (arg) = maybe_constant_value (expr);
1426 }
1427 }
1428 }
1429
1430 /* Return true if TYPE is an OpenMP mappable type. */
1431 bool
1432 cp_omp_mappable_type (tree type)
1433 {
1434 /* Mappable type has to be complete. */
1435 if (type == error_mark_node || !COMPLETE_TYPE_P (type))
1436 return false;
1437 /* Arrays have mappable type if the elements have mappable type. */
1438 while (TREE_CODE (type) == ARRAY_TYPE)
1439 type = TREE_TYPE (type);
1440 /* A mappable type cannot contain virtual members. */
1441 if (CLASS_TYPE_P (type) && CLASSTYPE_VTABLES (type))
1442 return false;
1443 /* All data members must be non-static. */
1444 if (CLASS_TYPE_P (type))
1445 {
1446 tree field;
1447 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1448 if (VAR_P (field))
1449 return false;
1450 /* All fields must have mappable types. */
1451 else if (TREE_CODE (field) == FIELD_DECL
1452 && !cp_omp_mappable_type (TREE_TYPE (field)))
1453 return false;
1454 }
1455 return true;
1456 }
1457
1458 /* Like decl_attributes, but handle C++ complexity. */
1459
1460 void
1461 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1462 {
1463 if (*decl == NULL_TREE || *decl == void_type_node
1464 || *decl == error_mark_node)
1465 return;
1466
1467 /* Add implicit "omp declare target" attribute if requested. */
1468 if (scope_chain->omp_declare_target_attribute
1469 && ((VAR_P (*decl)
1470 && (TREE_STATIC (*decl) || DECL_EXTERNAL (*decl)))
1471 || TREE_CODE (*decl) == FUNCTION_DECL))
1472 {
1473 if (VAR_P (*decl)
1474 && DECL_CLASS_SCOPE_P (*decl))
1475 error ("%q+D static data member inside of declare target directive",
1476 *decl);
1477 else if (!processing_template_decl
1478 && VAR_P (*decl)
1479 && !cp_omp_mappable_type (TREE_TYPE (*decl)))
1480 error ("%q+D in declare target directive does not have mappable type",
1481 *decl);
1482 else
1483 attributes = tree_cons (get_identifier ("omp declare target"),
1484 NULL_TREE, attributes);
1485 }
1486
1487 if (processing_template_decl)
1488 {
1489 if (check_for_bare_parameter_packs (attributes))
1490 return;
1491
1492 save_template_attributes (&attributes, decl);
1493 }
1494
1495 cp_check_const_attributes (attributes);
1496
1497 if (TREE_CODE (*decl) == TEMPLATE_DECL)
1498 decl = &DECL_TEMPLATE_RESULT (*decl);
1499
1500 if (TREE_TYPE (*decl) && TYPE_PTRMEMFUNC_P (TREE_TYPE (*decl)))
1501 {
1502 attributes
1503 = decl_attributes (decl, attributes, flags | ATTR_FLAG_FUNCTION_NEXT);
1504 decl_attributes (&TYPE_PTRMEMFUNC_FN_TYPE_RAW (TREE_TYPE (*decl)),
1505 attributes, flags);
1506 }
1507 else
1508 decl_attributes (decl, attributes, flags);
1509
1510 if (TREE_CODE (*decl) == TYPE_DECL)
1511 SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1512
1513 /* Propagate deprecation out to the template. */
1514 if (TREE_DEPRECATED (*decl))
1515 if (tree ti = get_template_info (*decl))
1516 {
1517 tree tmpl = TI_TEMPLATE (ti);
1518 tree pattern = (TYPE_P (*decl) ? TREE_TYPE (tmpl)
1519 : DECL_TEMPLATE_RESULT (tmpl));
1520 if (*decl == pattern)
1521 TREE_DEPRECATED (tmpl) = true;
1522 }
1523 }
1524 \f
1525 /* Walks through the namespace- or function-scope anonymous union
1526 OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1527 Returns one of the fields for use in the mangled name. */
1528
1529 static tree
1530 build_anon_union_vars (tree type, tree object)
1531 {
1532 tree main_decl = NULL_TREE;
1533 tree field;
1534
1535 /* Rather than write the code to handle the non-union case,
1536 just give an error. */
1537 if (TREE_CODE (type) != UNION_TYPE)
1538 {
1539 error ("anonymous struct not inside named type");
1540 return error_mark_node;
1541 }
1542
1543 for (field = TYPE_FIELDS (type);
1544 field != NULL_TREE;
1545 field = DECL_CHAIN (field))
1546 {
1547 tree decl;
1548 tree ref;
1549
1550 if (DECL_ARTIFICIAL (field))
1551 continue;
1552 if (TREE_CODE (field) != FIELD_DECL)
1553 {
1554 permerror (DECL_SOURCE_LOCATION (field),
1555 "%q#D invalid; an anonymous union can only "
1556 "have non-static data members", field);
1557 continue;
1558 }
1559
1560 if (TREE_PRIVATE (field))
1561 permerror (DECL_SOURCE_LOCATION (field),
1562 "private member %q#D in anonymous union", field);
1563 else if (TREE_PROTECTED (field))
1564 permerror (DECL_SOURCE_LOCATION (field),
1565 "protected member %q#D in anonymous union", field);
1566
1567 if (processing_template_decl)
1568 ref = build_min_nt_loc (UNKNOWN_LOCATION, COMPONENT_REF, object,
1569 DECL_NAME (field), NULL_TREE);
1570 else
1571 ref = build_class_member_access_expr (object, field, NULL_TREE,
1572 false, tf_warning_or_error);
1573
1574 if (DECL_NAME (field))
1575 {
1576 tree base;
1577
1578 decl = build_decl (input_location,
1579 VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1580 DECL_ANON_UNION_VAR_P (decl) = 1;
1581 DECL_ARTIFICIAL (decl) = 1;
1582
1583 base = get_base_address (object);
1584 TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1585 TREE_STATIC (decl) = TREE_STATIC (base);
1586 DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1587
1588 SET_DECL_VALUE_EXPR (decl, ref);
1589 DECL_HAS_VALUE_EXPR_P (decl) = 1;
1590
1591 decl = pushdecl (decl);
1592 }
1593 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1594 decl = build_anon_union_vars (TREE_TYPE (field), ref);
1595 else
1596 decl = 0;
1597
1598 if (main_decl == NULL_TREE)
1599 main_decl = decl;
1600 }
1601
1602 return main_decl;
1603 }
1604
1605 /* Finish off the processing of a UNION_TYPE structure. If the union is an
1606 anonymous union, then all members must be laid out together. PUBLIC_P
1607 is nonzero if this union is not declared static. */
1608
1609 void
1610 finish_anon_union (tree anon_union_decl)
1611 {
1612 tree type;
1613 tree main_decl;
1614 bool public_p;
1615
1616 if (anon_union_decl == error_mark_node)
1617 return;
1618
1619 type = TREE_TYPE (anon_union_decl);
1620 public_p = TREE_PUBLIC (anon_union_decl);
1621
1622 /* The VAR_DECL's context is the same as the TYPE's context. */
1623 DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1624
1625 if (TYPE_FIELDS (type) == NULL_TREE)
1626 return;
1627
1628 if (public_p)
1629 {
1630 error ("namespace-scope anonymous aggregates must be static");
1631 return;
1632 }
1633
1634 main_decl = build_anon_union_vars (type, anon_union_decl);
1635 if (main_decl == error_mark_node)
1636 return;
1637 if (main_decl == NULL_TREE)
1638 {
1639 warning (0, "anonymous union with no members");
1640 return;
1641 }
1642
1643 if (!processing_template_decl)
1644 {
1645 /* Use main_decl to set the mangled name. */
1646 DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1647 maybe_commonize_var (anon_union_decl);
1648 if (TREE_STATIC (anon_union_decl) || DECL_EXTERNAL (anon_union_decl))
1649 mangle_decl (anon_union_decl);
1650 DECL_NAME (anon_union_decl) = NULL_TREE;
1651 }
1652
1653 pushdecl (anon_union_decl);
1654 cp_finish_decl (anon_union_decl, NULL_TREE, false, NULL_TREE, 0);
1655 }
1656 \f
1657 /* Auxiliary functions to make type signatures for
1658 `operator new' and `operator delete' correspond to
1659 what compiler will be expecting. */
1660
1661 tree
1662 coerce_new_type (tree type)
1663 {
1664 int e = 0;
1665 tree args = TYPE_ARG_TYPES (type);
1666
1667 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1668
1669 if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1670 {
1671 e = 1;
1672 error ("%<operator new%> must return type %qT", ptr_type_node);
1673 }
1674
1675 if (args && args != void_list_node)
1676 {
1677 if (TREE_PURPOSE (args))
1678 {
1679 /* [basic.stc.dynamic.allocation]
1680
1681 The first parameter shall not have an associated default
1682 argument. */
1683 error ("the first parameter of %<operator new%> cannot "
1684 "have a default argument");
1685 /* Throw away the default argument. */
1686 TREE_PURPOSE (args) = NULL_TREE;
1687 }
1688
1689 if (!same_type_p (TREE_VALUE (args), size_type_node))
1690 {
1691 e = 2;
1692 args = TREE_CHAIN (args);
1693 }
1694 }
1695 else
1696 e = 2;
1697
1698 if (e == 2)
1699 permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1700 "as first parameter", size_type_node);
1701
1702 switch (e)
1703 {
1704 case 2:
1705 args = tree_cons (NULL_TREE, size_type_node, args);
1706 /* Fall through. */
1707 case 1:
1708 type = build_exception_variant
1709 (build_function_type (ptr_type_node, args),
1710 TYPE_RAISES_EXCEPTIONS (type));
1711 /* Fall through. */
1712 default:;
1713 }
1714 return type;
1715 }
1716
1717 tree
1718 coerce_delete_type (tree type)
1719 {
1720 int e = 0;
1721 tree args = TYPE_ARG_TYPES (type);
1722
1723 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1724
1725 if (!same_type_p (TREE_TYPE (type), void_type_node))
1726 {
1727 e = 1;
1728 error ("%<operator delete%> must return type %qT", void_type_node);
1729 }
1730
1731 if (!args || args == void_list_node
1732 || !same_type_p (TREE_VALUE (args), ptr_type_node))
1733 {
1734 e = 2;
1735 if (args && args != void_list_node)
1736 args = TREE_CHAIN (args);
1737 error ("%<operator delete%> takes type %qT as first parameter",
1738 ptr_type_node);
1739 }
1740 switch (e)
1741 {
1742 case 2:
1743 args = tree_cons (NULL_TREE, ptr_type_node, args);
1744 /* Fall through. */
1745 case 1:
1746 type = build_exception_variant
1747 (build_function_type (void_type_node, args),
1748 TYPE_RAISES_EXCEPTIONS (type));
1749 /* Fall through. */
1750 default:;
1751 }
1752
1753 return type;
1754 }
1755 \f
1756 /* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1757 and mark them as needed. */
1758
1759 static void
1760 mark_vtable_entries (tree decl)
1761 {
1762 tree fnaddr;
1763 unsigned HOST_WIDE_INT idx;
1764
1765 /* It's OK for the vtable to refer to deprecated virtual functions. */
1766 warning_sentinel w(warn_deprecated_decl);
1767
1768 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1769 idx, fnaddr)
1770 {
1771 tree fn;
1772
1773 STRIP_NOPS (fnaddr);
1774
1775 if (TREE_CODE (fnaddr) != ADDR_EXPR
1776 && TREE_CODE (fnaddr) != FDESC_EXPR)
1777 /* This entry is an offset: a virtual base class offset, a
1778 virtual call offset, an RTTI offset, etc. */
1779 continue;
1780
1781 fn = TREE_OPERAND (fnaddr, 0);
1782 TREE_ADDRESSABLE (fn) = 1;
1783 /* When we don't have vcall offsets, we output thunks whenever
1784 we output the vtables that contain them. With vcall offsets,
1785 we know all the thunks we'll need when we emit a virtual
1786 function, so we emit the thunks there instead. */
1787 if (DECL_THUNK_P (fn))
1788 use_thunk (fn, /*emit_p=*/0);
1789 mark_used (fn);
1790 }
1791 }
1792
1793 /* Set DECL up to have the closest approximation of "initialized common"
1794 linkage available. */
1795
1796 void
1797 comdat_linkage (tree decl)
1798 {
1799 if (flag_weak)
1800 make_decl_one_only (decl, cxx_comdat_group (decl));
1801 else if (TREE_CODE (decl) == FUNCTION_DECL
1802 || (VAR_P (decl) && DECL_ARTIFICIAL (decl)))
1803 /* We can just emit function and compiler-generated variables
1804 statically; having multiple copies is (for the most part) only
1805 a waste of space.
1806
1807 There are two correctness issues, however: the address of a
1808 template instantiation with external linkage should be the
1809 same, independent of what translation unit asks for the
1810 address, and this will not hold when we emit multiple copies of
1811 the function. However, there's little else we can do.
1812
1813 Also, by default, the typeinfo implementation assumes that
1814 there will be only one copy of the string used as the name for
1815 each type. Therefore, if weak symbols are unavailable, the
1816 run-time library should perform a more conservative check; it
1817 should perform a string comparison, rather than an address
1818 comparison. */
1819 TREE_PUBLIC (decl) = 0;
1820 else
1821 {
1822 /* Static data member template instantiations, however, cannot
1823 have multiple copies. */
1824 if (DECL_INITIAL (decl) == 0
1825 || DECL_INITIAL (decl) == error_mark_node)
1826 DECL_COMMON (decl) = 1;
1827 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1828 {
1829 DECL_COMMON (decl) = 1;
1830 DECL_INITIAL (decl) = error_mark_node;
1831 }
1832 else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1833 {
1834 /* We can't do anything useful; leave vars for explicit
1835 instantiation. */
1836 DECL_EXTERNAL (decl) = 1;
1837 DECL_NOT_REALLY_EXTERN (decl) = 0;
1838 }
1839 }
1840
1841 if (TREE_PUBLIC (decl))
1842 DECL_COMDAT (decl) = 1;
1843 }
1844
1845 /* For win32 we also want to put explicit instantiations in
1846 linkonce sections, so that they will be merged with implicit
1847 instantiations; otherwise we get duplicate symbol errors.
1848 For Darwin we do not want explicit instantiations to be
1849 linkonce. */
1850
1851 void
1852 maybe_make_one_only (tree decl)
1853 {
1854 /* We used to say that this was not necessary on targets that support weak
1855 symbols, because the implicit instantiations will defer to the explicit
1856 one. However, that's not actually the case in SVR4; a strong definition
1857 after a weak one is an error. Also, not making explicit
1858 instantiations one_only means that we can end up with two copies of
1859 some template instantiations. */
1860 if (! flag_weak)
1861 return;
1862
1863 /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1864 we can get away with not emitting them if they aren't used. We need
1865 to for variables so that cp_finish_decl will update their linkage,
1866 because their DECL_INITIAL may not have been set properly yet. */
1867
1868 if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1869 || (! DECL_EXPLICIT_INSTANTIATION (decl)
1870 && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1871 {
1872 make_decl_one_only (decl, cxx_comdat_group (decl));
1873
1874 if (VAR_P (decl))
1875 {
1876 varpool_node *node = varpool_node::get_create (decl);
1877 DECL_COMDAT (decl) = 1;
1878 /* Mark it needed so we don't forget to emit it. */
1879 node->forced_by_abi = true;
1880 TREE_USED (decl) = 1;
1881 }
1882 }
1883 }
1884
1885 /* Returns true iff DECL, a FUNCTION_DECL or VAR_DECL, has vague linkage.
1886 This predicate will give the right answer during parsing of the
1887 function, which other tests may not. */
1888
1889 bool
1890 vague_linkage_p (tree decl)
1891 {
1892 if (!TREE_PUBLIC (decl))
1893 {
1894 gcc_checking_assert (!DECL_COMDAT (decl));
1895 return false;
1896 }
1897 /* Unfortunately, import_export_decl has not always been called
1898 before the function is processed, so we cannot simply check
1899 DECL_COMDAT. */
1900 if (DECL_COMDAT (decl)
1901 || (TREE_CODE (decl) == FUNCTION_DECL
1902 && DECL_DECLARED_INLINE_P (decl))
1903 || (DECL_LANG_SPECIFIC (decl)
1904 && DECL_TEMPLATE_INSTANTIATION (decl)))
1905 return true;
1906 else if (DECL_FUNCTION_SCOPE_P (decl))
1907 /* A local static in an inline effectively has vague linkage. */
1908 return (TREE_STATIC (decl)
1909 && vague_linkage_p (DECL_CONTEXT (decl)));
1910 else
1911 return false;
1912 }
1913
1914 /* Determine whether or not we want to specifically import or export CTYPE,
1915 using various heuristics. */
1916
1917 static void
1918 import_export_class (tree ctype)
1919 {
1920 /* -1 for imported, 1 for exported. */
1921 int import_export = 0;
1922
1923 /* It only makes sense to call this function at EOF. The reason is
1924 that this function looks at whether or not the first non-inline
1925 non-abstract virtual member function has been defined in this
1926 translation unit. But, we can't possibly know that until we've
1927 seen the entire translation unit. */
1928 gcc_assert (at_eof);
1929
1930 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1931 return;
1932
1933 /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1934 we will have CLASSTYPE_INTERFACE_ONLY set but not
1935 CLASSTYPE_INTERFACE_KNOWN. In that case, we don't want to use this
1936 heuristic because someone will supply a #pragma implementation
1937 elsewhere, and deducing it here would produce a conflict. */
1938 if (CLASSTYPE_INTERFACE_ONLY (ctype))
1939 return;
1940
1941 if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1942 import_export = -1;
1943 else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1944 import_export = 1;
1945 else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1946 && !flag_implicit_templates)
1947 /* For a template class, without -fimplicit-templates, check the
1948 repository. If the virtual table is assigned to this
1949 translation unit, then export the class; otherwise, import
1950 it. */
1951 import_export = repo_export_class_p (ctype) ? 1 : -1;
1952 else if (TYPE_POLYMORPHIC_P (ctype))
1953 {
1954 /* The ABI specifies that the virtual table and associated
1955 information are emitted with the key method, if any. */
1956 tree method = CLASSTYPE_KEY_METHOD (ctype);
1957 /* If weak symbol support is not available, then we must be
1958 careful not to emit the vtable when the key function is
1959 inline. An inline function can be defined in multiple
1960 translation units. If we were to emit the vtable in each
1961 translation unit containing a definition, we would get
1962 multiple definition errors at link-time. */
1963 if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1964 import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1965 }
1966
1967 /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1968 a definition anywhere else. */
1969 if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1970 import_export = 0;
1971
1972 /* Allow back ends the chance to overrule the decision. */
1973 if (targetm.cxx.import_export_class)
1974 import_export = targetm.cxx.import_export_class (ctype, import_export);
1975
1976 if (import_export)
1977 {
1978 SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1979 CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1980 }
1981 }
1982
1983 /* Return true if VAR has already been provided to the back end; in that
1984 case VAR should not be modified further by the front end. */
1985 static bool
1986 var_finalized_p (tree var)
1987 {
1988 return varpool_node::get_create (var)->definition;
1989 }
1990
1991 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1992 must be emitted in this translation unit. Mark it as such. */
1993
1994 void
1995 mark_needed (tree decl)
1996 {
1997 TREE_USED (decl) = 1;
1998 if (TREE_CODE (decl) == FUNCTION_DECL)
1999 {
2000 /* Extern inline functions don't become needed when referenced.
2001 If we know a method will be emitted in other TU and no new
2002 functions can be marked reachable, just use the external
2003 definition. */
2004 struct cgraph_node *node = cgraph_node::get_create (decl);
2005 node->forced_by_abi = true;
2006
2007 /* #pragma interface and -frepo code can call mark_needed for
2008 maybe-in-charge 'tors; mark the clones as well. */
2009 tree clone;
2010 FOR_EACH_CLONE (clone, decl)
2011 mark_needed (clone);
2012 }
2013 else if (VAR_P (decl))
2014 {
2015 varpool_node *node = varpool_node::get_create (decl);
2016 /* C++ frontend use mark_decl_references to force COMDAT variables
2017 to be output that might appear dead otherwise. */
2018 node->forced_by_abi = true;
2019 }
2020 }
2021
2022 /* DECL is either a FUNCTION_DECL or a VAR_DECL. This function
2023 returns true if a definition of this entity should be provided in
2024 this object file. Callers use this function to determine whether
2025 or not to let the back end know that a definition of DECL is
2026 available in this translation unit. */
2027
2028 bool
2029 decl_needed_p (tree decl)
2030 {
2031 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
2032 /* This function should only be called at the end of the translation
2033 unit. We cannot be sure of whether or not something will be
2034 COMDAT until that point. */
2035 gcc_assert (at_eof);
2036
2037 /* All entities with external linkage that are not COMDAT/EXTERN should be
2038 emitted; they may be referred to from other object files. */
2039 if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl) && !DECL_REALLY_EXTERN (decl))
2040 return true;
2041 /* Functions marked "dllexport" must be emitted so that they are
2042 visible to other DLLs. */
2043 if (flag_keep_inline_dllexport
2044 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
2045 return true;
2046
2047 /* When not optimizing, do not bother to produce definitions for extern
2048 symbols. */
2049 if (DECL_REALLY_EXTERN (decl)
2050 && ((TREE_CODE (decl) != FUNCTION_DECL
2051 && !optimize)
2052 || (TREE_CODE (decl) == FUNCTION_DECL
2053 && !opt_for_fn (decl, optimize)))
2054 && !lookup_attribute ("always_inline", decl))
2055 return false;
2056
2057 /* If this entity was used, let the back end see it; it will decide
2058 whether or not to emit it into the object file. */
2059 if (TREE_USED (decl))
2060 return true;
2061 /* Virtual functions might be needed for devirtualization. */
2062 if (flag_devirtualize
2063 && TREE_CODE (decl) == FUNCTION_DECL
2064 && DECL_VIRTUAL_P (decl))
2065 return true;
2066 /* Otherwise, DECL does not need to be emitted -- yet. A subsequent
2067 reference to DECL might cause it to be emitted later. */
2068 return false;
2069 }
2070
2071 /* If necessary, write out the vtables for the dynamic class CTYPE.
2072 Returns true if any vtables were emitted. */
2073
2074 static bool
2075 maybe_emit_vtables (tree ctype)
2076 {
2077 tree vtbl;
2078 tree primary_vtbl;
2079 int needed = 0;
2080 varpool_node *current = NULL, *last = NULL;
2081
2082 /* If the vtables for this class have already been emitted there is
2083 nothing more to do. */
2084 primary_vtbl = CLASSTYPE_VTABLES (ctype);
2085 if (var_finalized_p (primary_vtbl))
2086 return false;
2087 /* Ignore dummy vtables made by get_vtable_decl. */
2088 if (TREE_TYPE (primary_vtbl) == void_type_node)
2089 return false;
2090
2091 /* On some targets, we cannot determine the key method until the end
2092 of the translation unit -- which is when this function is
2093 called. */
2094 if (!targetm.cxx.key_method_may_be_inline ())
2095 determine_key_method (ctype);
2096
2097 /* See if any of the vtables are needed. */
2098 for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
2099 {
2100 import_export_decl (vtbl);
2101 if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
2102 needed = 1;
2103 }
2104 if (!needed)
2105 {
2106 /* If the references to this class' vtables are optimized away,
2107 still emit the appropriate debugging information. See
2108 dfs_debug_mark. */
2109 if (DECL_COMDAT (primary_vtbl)
2110 && CLASSTYPE_DEBUG_REQUESTED (ctype))
2111 note_debug_info_needed (ctype);
2112 return false;
2113 }
2114
2115 /* The ABI requires that we emit all of the vtables if we emit any
2116 of them. */
2117 for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
2118 {
2119 /* Mark entities references from the virtual table as used. */
2120 mark_vtable_entries (vtbl);
2121
2122 if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
2123 {
2124 vec<tree, va_gc> *cleanups = NULL;
2125 tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), &cleanups,
2126 LOOKUP_NORMAL);
2127
2128 /* It had better be all done at compile-time. */
2129 gcc_assert (!expr && !cleanups);
2130 }
2131
2132 /* Write it out. */
2133 DECL_EXTERNAL (vtbl) = 0;
2134 rest_of_decl_compilation (vtbl, 1, 1);
2135
2136 /* Because we're only doing syntax-checking, we'll never end up
2137 actually marking the variable as written. */
2138 if (flag_syntax_only)
2139 TREE_ASM_WRITTEN (vtbl) = 1;
2140 else if (DECL_ONE_ONLY (vtbl))
2141 {
2142 current = varpool_node::get_create (vtbl);
2143 if (last)
2144 current->add_to_same_comdat_group (last);
2145 last = current;
2146 }
2147 }
2148
2149 /* Since we're writing out the vtable here, also write the debug
2150 info. */
2151 note_debug_info_needed (ctype);
2152
2153 return true;
2154 }
2155
2156 /* A special return value from type_visibility meaning internal
2157 linkage. */
2158
2159 enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
2160
2161 /* walk_tree helper function for type_visibility. */
2162
2163 static tree
2164 min_vis_r (tree *tp, int *walk_subtrees, void *data)
2165 {
2166 int *vis_p = (int *)data;
2167 if (! TYPE_P (*tp))
2168 {
2169 *walk_subtrees = 0;
2170 }
2171 else if (OVERLOAD_TYPE_P (*tp)
2172 && !TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
2173 {
2174 *vis_p = VISIBILITY_ANON;
2175 return *tp;
2176 }
2177 else if (CLASS_TYPE_P (*tp)
2178 && CLASSTYPE_VISIBILITY (*tp) > *vis_p)
2179 *vis_p = CLASSTYPE_VISIBILITY (*tp);
2180 return NULL;
2181 }
2182
2183 /* Returns the visibility of TYPE, which is the minimum visibility of its
2184 component types. */
2185
2186 static int
2187 type_visibility (tree type)
2188 {
2189 int vis = VISIBILITY_DEFAULT;
2190 cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
2191 return vis;
2192 }
2193
2194 /* Limit the visibility of DECL to VISIBILITY, if not explicitly
2195 specified (or if VISIBILITY is static). If TMPL is true, this
2196 constraint is for a template argument, and takes precedence
2197 over explicitly-specified visibility on the template. */
2198
2199 static void
2200 constrain_visibility (tree decl, int visibility, bool tmpl)
2201 {
2202 if (visibility == VISIBILITY_ANON)
2203 {
2204 /* extern "C" declarations aren't affected by the anonymous
2205 namespace. */
2206 if (!DECL_EXTERN_C_P (decl))
2207 {
2208 TREE_PUBLIC (decl) = 0;
2209 DECL_WEAK (decl) = 0;
2210 DECL_COMMON (decl) = 0;
2211 DECL_COMDAT (decl) = false;
2212 if (VAR_OR_FUNCTION_DECL_P (decl))
2213 {
2214 struct symtab_node *snode = symtab_node::get (decl);
2215
2216 if (snode)
2217 snode->set_comdat_group (NULL);
2218 }
2219 DECL_INTERFACE_KNOWN (decl) = 1;
2220 if (DECL_LANG_SPECIFIC (decl))
2221 DECL_NOT_REALLY_EXTERN (decl) = 1;
2222 }
2223 }
2224 else if (visibility > DECL_VISIBILITY (decl)
2225 && (tmpl || !DECL_VISIBILITY_SPECIFIED (decl)))
2226 {
2227 DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
2228 /* This visibility was not specified. */
2229 DECL_VISIBILITY_SPECIFIED (decl) = false;
2230 }
2231 }
2232
2233 /* Constrain the visibility of DECL based on the visibility of its template
2234 arguments. */
2235
2236 static void
2237 constrain_visibility_for_template (tree decl, tree targs)
2238 {
2239 /* If this is a template instantiation, check the innermost
2240 template args for visibility constraints. The outer template
2241 args are covered by the class check. */
2242 tree args = INNERMOST_TEMPLATE_ARGS (targs);
2243 int i;
2244 for (i = TREE_VEC_LENGTH (args); i > 0; --i)
2245 {
2246 int vis = 0;
2247
2248 tree arg = TREE_VEC_ELT (args, i-1);
2249 if (TYPE_P (arg))
2250 vis = type_visibility (arg);
2251 else
2252 {
2253 if (REFERENCE_REF_P (arg))
2254 arg = TREE_OPERAND (arg, 0);
2255 if (TREE_TYPE (arg))
2256 STRIP_NOPS (arg);
2257 if (TREE_CODE (arg) == ADDR_EXPR)
2258 arg = TREE_OPERAND (arg, 0);
2259 if (VAR_OR_FUNCTION_DECL_P (arg))
2260 {
2261 if (! TREE_PUBLIC (arg))
2262 vis = VISIBILITY_ANON;
2263 else
2264 vis = DECL_VISIBILITY (arg);
2265 }
2266 }
2267 if (vis)
2268 constrain_visibility (decl, vis, true);
2269 }
2270 }
2271
2272 /* Like c_determine_visibility, but with additional C++-specific
2273 behavior.
2274
2275 Function-scope entities can rely on the function's visibility because
2276 it is set in start_preparsed_function.
2277
2278 Class-scope entities cannot rely on the class's visibility until the end
2279 of the enclosing class definition.
2280
2281 Note that because namespaces have multiple independent definitions,
2282 namespace visibility is handled elsewhere using the #pragma visibility
2283 machinery rather than by decorating the namespace declaration.
2284
2285 The goal is for constraints from the type to give a diagnostic, and
2286 other constraints to be applied silently. */
2287
2288 void
2289 determine_visibility (tree decl)
2290 {
2291 tree class_type = NULL_TREE;
2292 bool use_template;
2293 bool orig_visibility_specified;
2294 enum symbol_visibility orig_visibility;
2295
2296 /* Remember that all decls get VISIBILITY_DEFAULT when built. */
2297
2298 /* Only relevant for names with external linkage. */
2299 if (!TREE_PUBLIC (decl))
2300 return;
2301
2302 /* Cloned constructors and destructors get the same visibility as
2303 the underlying function. That should be set up in
2304 maybe_clone_body. */
2305 gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
2306
2307 orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
2308 orig_visibility = DECL_VISIBILITY (decl);
2309
2310 if (TREE_CODE (decl) == TYPE_DECL)
2311 {
2312 if (CLASS_TYPE_P (TREE_TYPE (decl)))
2313 use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
2314 else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
2315 use_template = 1;
2316 else
2317 use_template = 0;
2318 }
2319 else if (DECL_LANG_SPECIFIC (decl))
2320 use_template = DECL_USE_TEMPLATE (decl);
2321 else
2322 use_template = 0;
2323
2324 /* If DECL is a member of a class, visibility specifiers on the
2325 class can influence the visibility of the DECL. */
2326 if (DECL_CLASS_SCOPE_P (decl))
2327 class_type = DECL_CONTEXT (decl);
2328 else
2329 {
2330 /* Not a class member. */
2331
2332 /* Virtual tables have DECL_CONTEXT set to their associated class,
2333 so they are automatically handled above. */
2334 gcc_assert (!VAR_P (decl)
2335 || !DECL_VTABLE_OR_VTT_P (decl));
2336
2337 if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
2338 {
2339 /* Local statics and classes get the visibility of their
2340 containing function by default, except that
2341 -fvisibility-inlines-hidden doesn't affect them. */
2342 tree fn = DECL_CONTEXT (decl);
2343 if (DECL_VISIBILITY_SPECIFIED (fn))
2344 {
2345 DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2346 DECL_VISIBILITY_SPECIFIED (decl) =
2347 DECL_VISIBILITY_SPECIFIED (fn);
2348 }
2349 else
2350 {
2351 if (DECL_CLASS_SCOPE_P (fn))
2352 determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2353 else if (determine_hidden_inline (fn))
2354 {
2355 DECL_VISIBILITY (decl) = default_visibility;
2356 DECL_VISIBILITY_SPECIFIED (decl) =
2357 visibility_options.inpragma;
2358 }
2359 else
2360 {
2361 DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2362 DECL_VISIBILITY_SPECIFIED (decl) =
2363 DECL_VISIBILITY_SPECIFIED (fn);
2364 }
2365 }
2366
2367 /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2368 but have no TEMPLATE_INFO, so don't try to check it. */
2369 use_template = 0;
2370 }
2371 else if (VAR_P (decl) && DECL_TINFO_P (decl)
2372 && flag_visibility_ms_compat)
2373 {
2374 /* Under -fvisibility-ms-compat, types are visible by default,
2375 even though their contents aren't. */
2376 tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2377 int underlying_vis = type_visibility (underlying_type);
2378 if (underlying_vis == VISIBILITY_ANON
2379 || (CLASS_TYPE_P (underlying_type)
2380 && CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
2381 constrain_visibility (decl, underlying_vis, false);
2382 else
2383 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2384 }
2385 else if (VAR_P (decl) && DECL_TINFO_P (decl))
2386 {
2387 /* tinfo visibility is based on the type it's for. */
2388 constrain_visibility
2389 (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))), false);
2390
2391 /* Give the target a chance to override the visibility associated
2392 with DECL. */
2393 if (TREE_PUBLIC (decl)
2394 && !DECL_REALLY_EXTERN (decl)
2395 && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2396 && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2397 targetm.cxx.determine_class_data_visibility (decl);
2398 }
2399 else if (use_template)
2400 /* Template instantiations and specializations get visibility based
2401 on their template unless they override it with an attribute. */;
2402 else if (! DECL_VISIBILITY_SPECIFIED (decl))
2403 {
2404 if (determine_hidden_inline (decl))
2405 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2406 else
2407 {
2408 /* Set default visibility to whatever the user supplied with
2409 #pragma GCC visibility or a namespace visibility attribute. */
2410 DECL_VISIBILITY (decl) = default_visibility;
2411 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2412 }
2413 }
2414 }
2415
2416 if (use_template)
2417 {
2418 /* If the specialization doesn't specify visibility, use the
2419 visibility from the template. */
2420 tree tinfo = get_template_info (decl);
2421 tree args = TI_ARGS (tinfo);
2422 tree attribs = (TREE_CODE (decl) == TYPE_DECL
2423 ? TYPE_ATTRIBUTES (TREE_TYPE (decl))
2424 : DECL_ATTRIBUTES (decl));
2425
2426 if (args != error_mark_node)
2427 {
2428 tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2429
2430 if (!DECL_VISIBILITY_SPECIFIED (decl))
2431 {
2432 if (!DECL_VISIBILITY_SPECIFIED (pattern)
2433 && determine_hidden_inline (decl))
2434 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2435 else
2436 {
2437 DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2438 DECL_VISIBILITY_SPECIFIED (decl)
2439 = DECL_VISIBILITY_SPECIFIED (pattern);
2440 }
2441 }
2442
2443 if (args
2444 /* Template argument visibility outweighs #pragma or namespace
2445 visibility, but not an explicit attribute. */
2446 && !lookup_attribute ("visibility", attribs))
2447 {
2448 int depth = TMPL_ARGS_DEPTH (args);
2449 if (DECL_VISIBILITY_SPECIFIED (decl))
2450 {
2451 /* A class template member with explicit visibility
2452 overrides the class visibility, so we need to apply
2453 all the levels of template args directly. */
2454 int i;
2455 for (i = 1; i <= depth; ++i)
2456 {
2457 tree lev = TMPL_ARGS_LEVEL (args, i);
2458 constrain_visibility_for_template (decl, lev);
2459 }
2460 }
2461 else if (PRIMARY_TEMPLATE_P (TI_TEMPLATE (tinfo)))
2462 /* Limit visibility based on its template arguments. */
2463 constrain_visibility_for_template (decl, args);
2464 }
2465 }
2466 }
2467
2468 if (class_type)
2469 determine_visibility_from_class (decl, class_type);
2470
2471 if (decl_anon_ns_mem_p (decl))
2472 /* Names in an anonymous namespace get internal linkage.
2473 This might change once we implement export. */
2474 constrain_visibility (decl, VISIBILITY_ANON, false);
2475 else if (TREE_CODE (decl) != TYPE_DECL)
2476 {
2477 /* Propagate anonymity from type to decl. */
2478 int tvis = type_visibility (TREE_TYPE (decl));
2479 if (tvis == VISIBILITY_ANON
2480 || ! DECL_VISIBILITY_SPECIFIED (decl))
2481 constrain_visibility (decl, tvis, false);
2482 }
2483 else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2484 /* DR 757: A type without linkage shall not be used as the type of a
2485 variable or function with linkage, unless
2486 o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2487 o the variable or function is not used (3.2 [basic.def.odr]) or is
2488 defined in the same translation unit.
2489
2490 Since non-extern "C" decls need to be defined in the same
2491 translation unit, we can make the type internal. */
2492 constrain_visibility (decl, VISIBILITY_ANON, false);
2493
2494 /* If visibility changed and DECL already has DECL_RTL, ensure
2495 symbol flags are updated. */
2496 if ((DECL_VISIBILITY (decl) != orig_visibility
2497 || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2498 && ((VAR_P (decl) && TREE_STATIC (decl))
2499 || TREE_CODE (decl) == FUNCTION_DECL)
2500 && DECL_RTL_SET_P (decl))
2501 make_decl_rtl (decl);
2502 }
2503
2504 /* By default, static data members and function members receive
2505 the visibility of their containing class. */
2506
2507 static void
2508 determine_visibility_from_class (tree decl, tree class_type)
2509 {
2510 if (DECL_VISIBILITY_SPECIFIED (decl))
2511 return;
2512
2513 if (determine_hidden_inline (decl))
2514 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2515 else
2516 {
2517 /* Default to the class visibility. */
2518 DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2519 DECL_VISIBILITY_SPECIFIED (decl)
2520 = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2521 }
2522
2523 /* Give the target a chance to override the visibility associated
2524 with DECL. */
2525 if (VAR_P (decl)
2526 && (DECL_TINFO_P (decl)
2527 || (DECL_VTABLE_OR_VTT_P (decl)
2528 /* Construction virtual tables are not exported because
2529 they cannot be referred to from other object files;
2530 their name is not standardized by the ABI. */
2531 && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2532 && TREE_PUBLIC (decl)
2533 && !DECL_REALLY_EXTERN (decl)
2534 && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2535 targetm.cxx.determine_class_data_visibility (decl);
2536 }
2537
2538 /* Returns true iff DECL is an inline that should get hidden visibility
2539 because of -fvisibility-inlines-hidden. */
2540
2541 static bool
2542 determine_hidden_inline (tree decl)
2543 {
2544 return (visibility_options.inlines_hidden
2545 /* Don't do this for inline templates; specializations might not be
2546 inline, and we don't want them to inherit the hidden
2547 visibility. We'll set it here for all inline instantiations. */
2548 && !processing_template_decl
2549 && TREE_CODE (decl) == FUNCTION_DECL
2550 && DECL_DECLARED_INLINE_P (decl)
2551 && (! DECL_LANG_SPECIFIC (decl)
2552 || ! DECL_EXPLICIT_INSTANTIATION (decl)));
2553 }
2554
2555 /* Constrain the visibility of a class TYPE based on the visibility of its
2556 field types. Warn if any fields require lesser visibility. */
2557
2558 void
2559 constrain_class_visibility (tree type)
2560 {
2561 tree binfo;
2562 tree t;
2563 int i;
2564
2565 int vis = type_visibility (type);
2566
2567 if (vis == VISIBILITY_ANON
2568 || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2569 return;
2570
2571 /* Don't warn about visibility if the class has explicit visibility. */
2572 if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2573 vis = VISIBILITY_INTERNAL;
2574
2575 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
2576 if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2577 {
2578 tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2579 int subvis = type_visibility (ftype);
2580
2581 if (subvis == VISIBILITY_ANON)
2582 {
2583 if (!in_main_input_context())
2584 {
2585 tree nlt = no_linkage_check (ftype, /*relaxed_p=*/false);
2586 if (nlt)
2587 {
2588 if (same_type_p (TREE_TYPE (t), nlt))
2589 warning (OPT_Wsubobject_linkage, "\
2590 %qT has a field %qD whose type has no linkage",
2591 type, t);
2592 else
2593 warning (OPT_Wsubobject_linkage, "\
2594 %qT has a field %qD whose type depends on the type %qT which has no linkage",
2595 type, t, nlt);
2596 }
2597 else
2598 warning (OPT_Wsubobject_linkage, "\
2599 %qT has a field %qD whose type uses the anonymous namespace",
2600 type, t);
2601 }
2602 }
2603 else if (MAYBE_CLASS_TYPE_P (ftype)
2604 && vis < VISIBILITY_HIDDEN
2605 && subvis >= VISIBILITY_HIDDEN)
2606 warning (OPT_Wattributes, "\
2607 %qT declared with greater visibility than the type of its field %qD",
2608 type, t);
2609 }
2610
2611 binfo = TYPE_BINFO (type);
2612 for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2613 {
2614 int subvis = type_visibility (TREE_TYPE (t));
2615
2616 if (subvis == VISIBILITY_ANON)
2617 {
2618 if (!in_main_input_context())
2619 {
2620 tree nlt = no_linkage_check (TREE_TYPE (t), /*relaxed_p=*/false);
2621 if (nlt)
2622 {
2623 if (same_type_p (TREE_TYPE (t), nlt))
2624 warning (OPT_Wsubobject_linkage, "\
2625 %qT has a base %qT whose type has no linkage",
2626 type, TREE_TYPE (t));
2627 else
2628 warning (OPT_Wsubobject_linkage, "\
2629 %qT has a base %qT whose type depends on the type %qT which has no linkage",
2630 type, TREE_TYPE (t), nlt);
2631 }
2632 else
2633 warning (OPT_Wsubobject_linkage, "\
2634 %qT has a base %qT whose type uses the anonymous namespace",
2635 type, TREE_TYPE (t));
2636 }
2637 }
2638 else if (vis < VISIBILITY_HIDDEN
2639 && subvis >= VISIBILITY_HIDDEN)
2640 warning (OPT_Wattributes, "\
2641 %qT declared with greater visibility than its base %qT",
2642 type, TREE_TYPE (t));
2643 }
2644 }
2645
2646 /* Functions for adjusting the visibility of a tagged type and its nested
2647 types and declarations when it gets a name for linkage purposes from a
2648 typedef. */
2649
2650 static void bt_reset_linkage_1 (binding_entry, void *);
2651 static void bt_reset_linkage_2 (binding_entry, void *);
2652
2653 /* First reset the visibility of all the types. */
2654
2655 static void
2656 reset_type_linkage_1 (tree type)
2657 {
2658 set_linkage_according_to_type (type, TYPE_MAIN_DECL (type));
2659 if (CLASS_TYPE_P (type))
2660 binding_table_foreach (CLASSTYPE_NESTED_UTDS (type),
2661 bt_reset_linkage_1, NULL);
2662 }
2663 static void
2664 bt_reset_linkage_1 (binding_entry b, void */*data*/)
2665 {
2666 reset_type_linkage_1 (b->type);
2667 }
2668
2669 /* Then reset the visibility of any static data members or member
2670 functions that use those types. */
2671
2672 static void
2673 reset_decl_linkage (tree decl)
2674 {
2675 if (TREE_PUBLIC (decl))
2676 return;
2677 if (DECL_CLONED_FUNCTION_P (decl))
2678 return;
2679 TREE_PUBLIC (decl) = true;
2680 DECL_INTERFACE_KNOWN (decl) = false;
2681 determine_visibility (decl);
2682 tentative_decl_linkage (decl);
2683 }
2684 static void
2685 reset_type_linkage_2 (tree type)
2686 {
2687 if (CLASS_TYPE_P (type))
2688 {
2689 if (tree vt = CLASSTYPE_VTABLES (type))
2690 {
2691 tree name = mangle_vtbl_for_type (type);
2692 DECL_NAME (vt) = name;
2693 SET_DECL_ASSEMBLER_NAME (vt, name);
2694 reset_decl_linkage (vt);
2695 }
2696 if (tree ti = CLASSTYPE_TYPEINFO_VAR (type))
2697 {
2698 tree name = mangle_typeinfo_for_type (type);
2699 DECL_NAME (ti) = name;
2700 SET_DECL_ASSEMBLER_NAME (ti, name);
2701 TREE_TYPE (name) = type;
2702 reset_decl_linkage (ti);
2703 }
2704 for (tree m = TYPE_FIELDS (type); m; m = DECL_CHAIN (m))
2705 {
2706 tree mem = STRIP_TEMPLATE (m);
2707 if (VAR_P (mem))
2708 reset_decl_linkage (mem);
2709 }
2710 for (tree m = TYPE_METHODS (type); m; m = DECL_CHAIN (m))
2711 {
2712 tree mem = STRIP_TEMPLATE (m);
2713 reset_decl_linkage (mem);
2714 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (mem))
2715 {
2716 /* Also update its name, for cxx_dwarf_name. */
2717 DECL_NAME (mem) = TYPE_IDENTIFIER (type);
2718 if (m != mem)
2719 DECL_NAME (m) = TYPE_IDENTIFIER (type);
2720 }
2721 }
2722 binding_table_foreach (CLASSTYPE_NESTED_UTDS (type),
2723 bt_reset_linkage_2, NULL);
2724 }
2725 }
2726 static void
2727 bt_reset_linkage_2 (binding_entry b, void */*data*/)
2728 {
2729 reset_type_linkage_2 (b->type);
2730 }
2731 void
2732 reset_type_linkage (tree type)
2733 {
2734 reset_type_linkage_1 (type);
2735 reset_type_linkage_2 (type);
2736 }
2737
2738 /* Set up our initial idea of what the linkage of DECL should be. */
2739
2740 void
2741 tentative_decl_linkage (tree decl)
2742 {
2743 if (DECL_INTERFACE_KNOWN (decl))
2744 /* We've already made a decision as to how this function will
2745 be handled. */;
2746 else if (vague_linkage_p (decl))
2747 {
2748 if (TREE_CODE (decl) == FUNCTION_DECL
2749 && decl_defined_p (decl))
2750 {
2751 DECL_EXTERNAL (decl) = 1;
2752 DECL_NOT_REALLY_EXTERN (decl) = 1;
2753 note_vague_linkage_fn (decl);
2754 /* A non-template inline function with external linkage will
2755 always be COMDAT. As we must eventually determine the
2756 linkage of all functions, and as that causes writes to
2757 the data mapped in from the PCH file, it's advantageous
2758 to mark the functions at this point. */
2759 if (DECL_DECLARED_INLINE_P (decl)
2760 && (!DECL_IMPLICIT_INSTANTIATION (decl)
2761 || DECL_DEFAULTED_FN (decl)))
2762 {
2763 /* This function must have external linkage, as
2764 otherwise DECL_INTERFACE_KNOWN would have been
2765 set. */
2766 gcc_assert (TREE_PUBLIC (decl));
2767 comdat_linkage (decl);
2768 DECL_INTERFACE_KNOWN (decl) = 1;
2769 }
2770 }
2771 else if (VAR_P (decl))
2772 maybe_commonize_var (decl);
2773 }
2774 }
2775
2776 /* DECL is a FUNCTION_DECL or VAR_DECL. If the object file linkage
2777 for DECL has not already been determined, do so now by setting
2778 DECL_EXTERNAL, DECL_COMDAT and other related flags. Until this
2779 function is called entities with vague linkage whose definitions
2780 are available must have TREE_PUBLIC set.
2781
2782 If this function decides to place DECL in COMDAT, it will set
2783 appropriate flags -- but will not clear DECL_EXTERNAL. It is up to
2784 the caller to decide whether or not to clear DECL_EXTERNAL. Some
2785 callers defer that decision until it is clear that DECL is actually
2786 required. */
2787
2788 void
2789 import_export_decl (tree decl)
2790 {
2791 int emit_p;
2792 bool comdat_p;
2793 bool import_p;
2794 tree class_type = NULL_TREE;
2795
2796 if (DECL_INTERFACE_KNOWN (decl))
2797 return;
2798
2799 /* We cannot determine what linkage to give to an entity with vague
2800 linkage until the end of the file. For example, a virtual table
2801 for a class will be defined if and only if the key method is
2802 defined in this translation unit. As a further example, consider
2803 that when compiling a translation unit that uses PCH file with
2804 "-frepo" it would be incorrect to make decisions about what
2805 entities to emit when building the PCH; those decisions must be
2806 delayed until the repository information has been processed. */
2807 gcc_assert (at_eof);
2808 /* Object file linkage for explicit instantiations is handled in
2809 mark_decl_instantiated. For static variables in functions with
2810 vague linkage, maybe_commonize_var is used.
2811
2812 Therefore, the only declarations that should be provided to this
2813 function are those with external linkage that are:
2814
2815 * implicit instantiations of function templates
2816
2817 * inline function
2818
2819 * implicit instantiations of static data members of class
2820 templates
2821
2822 * virtual tables
2823
2824 * typeinfo objects
2825
2826 Furthermore, all entities that reach this point must have a
2827 definition available in this translation unit.
2828
2829 The following assertions check these conditions. */
2830 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
2831 /* Any code that creates entities with TREE_PUBLIC cleared should
2832 also set DECL_INTERFACE_KNOWN. */
2833 gcc_assert (TREE_PUBLIC (decl));
2834 if (TREE_CODE (decl) == FUNCTION_DECL)
2835 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2836 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2837 || DECL_DECLARED_INLINE_P (decl));
2838 else
2839 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2840 || DECL_VTABLE_OR_VTT_P (decl)
2841 || DECL_TINFO_P (decl));
2842 /* Check that a definition of DECL is available in this translation
2843 unit. */
2844 gcc_assert (!DECL_REALLY_EXTERN (decl));
2845
2846 /* Assume that DECL will not have COMDAT linkage. */
2847 comdat_p = false;
2848 /* Assume that DECL will not be imported into this translation
2849 unit. */
2850 import_p = false;
2851
2852 /* See if the repository tells us whether or not to emit DECL in
2853 this translation unit. */
2854 emit_p = repo_emit_p (decl);
2855 if (emit_p == 0)
2856 import_p = true;
2857 else if (emit_p == 1)
2858 {
2859 /* The repository indicates that this entity should be defined
2860 here. Make sure the back end honors that request. */
2861 mark_needed (decl);
2862 /* Output the definition as an ordinary strong definition. */
2863 DECL_EXTERNAL (decl) = 0;
2864 DECL_INTERFACE_KNOWN (decl) = 1;
2865 return;
2866 }
2867
2868 if (import_p)
2869 /* We have already decided what to do with this DECL; there is no
2870 need to check anything further. */
2871 ;
2872 else if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
2873 {
2874 class_type = DECL_CONTEXT (decl);
2875 import_export_class (class_type);
2876 if (TYPE_FOR_JAVA (class_type))
2877 import_p = true;
2878 else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2879 && CLASSTYPE_INTERFACE_ONLY (class_type))
2880 import_p = true;
2881 else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2882 && !CLASSTYPE_USE_TEMPLATE (class_type)
2883 && CLASSTYPE_KEY_METHOD (class_type)
2884 && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2885 /* The ABI requires that all virtual tables be emitted with
2886 COMDAT linkage. However, on systems where COMDAT symbols
2887 don't show up in the table of contents for a static
2888 archive, or on systems without weak symbols (where we
2889 approximate COMDAT linkage by using internal linkage), the
2890 linker will report errors about undefined symbols because
2891 it will not see the virtual table definition. Therefore,
2892 in the case that we know that the virtual table will be
2893 emitted in only one translation unit, we make the virtual
2894 table an ordinary definition with external linkage. */
2895 DECL_EXTERNAL (decl) = 0;
2896 else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2897 {
2898 /* CLASS_TYPE is being exported from this translation unit,
2899 so DECL should be defined here. */
2900 if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2901 /* If a class is declared in a header with the "extern
2902 template" extension, then it will not be instantiated,
2903 even in translation units that would normally require
2904 it. Often such classes are explicitly instantiated in
2905 one translation unit. Therefore, the explicit
2906 instantiation must be made visible to other translation
2907 units. */
2908 DECL_EXTERNAL (decl) = 0;
2909 else
2910 {
2911 /* The generic C++ ABI says that class data is always
2912 COMDAT, even if there is a key function. Some
2913 variants (e.g., the ARM EABI) says that class data
2914 only has COMDAT linkage if the class data might be
2915 emitted in more than one translation unit. When the
2916 key method can be inline and is inline, we still have
2917 to arrange for comdat even though
2918 class_data_always_comdat is false. */
2919 if (!CLASSTYPE_KEY_METHOD (class_type)
2920 || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2921 || targetm.cxx.class_data_always_comdat ())
2922 {
2923 /* The ABI requires COMDAT linkage. Normally, we
2924 only emit COMDAT things when they are needed;
2925 make sure that we realize that this entity is
2926 indeed needed. */
2927 comdat_p = true;
2928 mark_needed (decl);
2929 }
2930 }
2931 }
2932 else if (!flag_implicit_templates
2933 && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2934 import_p = true;
2935 else
2936 comdat_p = true;
2937 }
2938 else if (VAR_P (decl) && DECL_TINFO_P (decl))
2939 {
2940 tree type = TREE_TYPE (DECL_NAME (decl));
2941 if (CLASS_TYPE_P (type))
2942 {
2943 class_type = type;
2944 import_export_class (type);
2945 if (CLASSTYPE_INTERFACE_KNOWN (type)
2946 && TYPE_POLYMORPHIC_P (type)
2947 && CLASSTYPE_INTERFACE_ONLY (type)
2948 /* If -fno-rtti was specified, then we cannot be sure
2949 that RTTI information will be emitted with the
2950 virtual table of the class, so we must emit it
2951 wherever it is used. */
2952 && flag_rtti)
2953 import_p = true;
2954 else
2955 {
2956 if (CLASSTYPE_INTERFACE_KNOWN (type)
2957 && !CLASSTYPE_INTERFACE_ONLY (type))
2958 {
2959 comdat_p = (targetm.cxx.class_data_always_comdat ()
2960 || (CLASSTYPE_KEY_METHOD (type)
2961 && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2962 mark_needed (decl);
2963 if (!flag_weak)
2964 {
2965 comdat_p = false;
2966 DECL_EXTERNAL (decl) = 0;
2967 }
2968 }
2969 else
2970 comdat_p = true;
2971 }
2972 }
2973 else
2974 comdat_p = true;
2975 }
2976 else if (DECL_TEMPLOID_INSTANTIATION (decl))
2977 {
2978 /* DECL is an implicit instantiation of a function or static
2979 data member. */
2980 if ((flag_implicit_templates
2981 && !flag_use_repository)
2982 || (flag_implicit_inline_templates
2983 && TREE_CODE (decl) == FUNCTION_DECL
2984 && DECL_DECLARED_INLINE_P (decl)))
2985 comdat_p = true;
2986 else
2987 /* If we are not implicitly generating templates, then mark
2988 this entity as undefined in this translation unit. */
2989 import_p = true;
2990 }
2991 else if (DECL_FUNCTION_MEMBER_P (decl))
2992 {
2993 if (!DECL_DECLARED_INLINE_P (decl))
2994 {
2995 tree ctype = DECL_CONTEXT (decl);
2996 import_export_class (ctype);
2997 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2998 {
2999 DECL_NOT_REALLY_EXTERN (decl)
3000 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
3001 || (DECL_DECLARED_INLINE_P (decl)
3002 && ! flag_implement_inlines
3003 && !DECL_VINDEX (decl)));
3004
3005 if (!DECL_NOT_REALLY_EXTERN (decl))
3006 DECL_EXTERNAL (decl) = 1;
3007
3008 /* Always make artificials weak. */
3009 if (DECL_ARTIFICIAL (decl) && flag_weak)
3010 comdat_p = true;
3011 else
3012 maybe_make_one_only (decl);
3013 }
3014 }
3015 else
3016 comdat_p = true;
3017 }
3018 else
3019 comdat_p = true;
3020
3021 if (import_p)
3022 {
3023 /* If we are importing DECL into this translation unit, mark is
3024 an undefined here. */
3025 DECL_EXTERNAL (decl) = 1;
3026 DECL_NOT_REALLY_EXTERN (decl) = 0;
3027 }
3028 else if (comdat_p)
3029 {
3030 /* If we decided to put DECL in COMDAT, mark it accordingly at
3031 this point. */
3032 comdat_linkage (decl);
3033 }
3034
3035 DECL_INTERFACE_KNOWN (decl) = 1;
3036 }
3037
3038 /* Return an expression that performs the destruction of DECL, which
3039 must be a VAR_DECL whose type has a non-trivial destructor, or is
3040 an array whose (innermost) elements have a non-trivial destructor. */
3041
3042 tree
3043 build_cleanup (tree decl)
3044 {
3045 tree clean = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
3046 gcc_assert (clean != NULL_TREE);
3047 return clean;
3048 }
3049
3050 /* Returns the initialization guard variable for the variable DECL,
3051 which has static storage duration. */
3052
3053 tree
3054 get_guard (tree decl)
3055 {
3056 tree sname;
3057 tree guard;
3058
3059 sname = mangle_guard_variable (decl);
3060 guard = IDENTIFIER_GLOBAL_VALUE (sname);
3061 if (! guard)
3062 {
3063 tree guard_type;
3064
3065 /* We use a type that is big enough to contain a mutex as well
3066 as an integer counter. */
3067 guard_type = targetm.cxx.guard_type ();
3068 guard = build_decl (DECL_SOURCE_LOCATION (decl),
3069 VAR_DECL, sname, guard_type);
3070
3071 /* The guard should have the same linkage as what it guards. */
3072 TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
3073 TREE_STATIC (guard) = TREE_STATIC (decl);
3074 DECL_COMMON (guard) = DECL_COMMON (decl);
3075 DECL_COMDAT (guard) = DECL_COMDAT (decl);
3076 CP_DECL_THREAD_LOCAL_P (guard) = CP_DECL_THREAD_LOCAL_P (decl);
3077 set_decl_tls_model (guard, DECL_TLS_MODEL (decl));
3078 if (DECL_ONE_ONLY (decl))
3079 make_decl_one_only (guard, cxx_comdat_group (guard));
3080 if (TREE_PUBLIC (decl))
3081 DECL_WEAK (guard) = DECL_WEAK (decl);
3082 DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
3083 DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
3084
3085 DECL_ARTIFICIAL (guard) = 1;
3086 DECL_IGNORED_P (guard) = 1;
3087 TREE_USED (guard) = 1;
3088 pushdecl_top_level_and_finish (guard, NULL_TREE);
3089 }
3090 return guard;
3091 }
3092
3093 /* Return an atomic load of src with the appropriate memory model. */
3094
3095 static tree
3096 build_atomic_load_byte (tree src, HOST_WIDE_INT model)
3097 {
3098 tree ptr_type = build_pointer_type (char_type_node);
3099 tree mem_model = build_int_cst (integer_type_node, model);
3100 tree t, addr, val;
3101 unsigned int size;
3102 int fncode;
3103
3104 size = tree_to_uhwi (TYPE_SIZE_UNIT (char_type_node));
3105
3106 fncode = BUILT_IN_ATOMIC_LOAD_N + exact_log2 (size) + 1;
3107 t = builtin_decl_implicit ((enum built_in_function) fncode);
3108
3109 addr = build1 (ADDR_EXPR, ptr_type, src);
3110 val = build_call_expr (t, 2, addr, mem_model);
3111 return val;
3112 }
3113
3114 /* Return those bits of the GUARD variable that should be set when the
3115 guarded entity is actually initialized. */
3116
3117 static tree
3118 get_guard_bits (tree guard)
3119 {
3120 if (!targetm.cxx.guard_mask_bit ())
3121 {
3122 /* We only set the first byte of the guard, in order to leave room
3123 for a mutex in the high-order bits. */
3124 guard = build1 (ADDR_EXPR,
3125 build_pointer_type (TREE_TYPE (guard)),
3126 guard);
3127 guard = build1 (NOP_EXPR,
3128 build_pointer_type (char_type_node),
3129 guard);
3130 guard = build1 (INDIRECT_REF, char_type_node, guard);
3131 }
3132
3133 return guard;
3134 }
3135
3136 /* Return an expression which determines whether or not the GUARD
3137 variable has already been initialized. */
3138
3139 tree
3140 get_guard_cond (tree guard, bool thread_safe)
3141 {
3142 tree guard_value;
3143
3144 if (!thread_safe)
3145 guard = get_guard_bits (guard);
3146 else
3147 guard = build_atomic_load_byte (guard, MEMMODEL_ACQUIRE);
3148
3149 /* Mask off all but the low bit. */
3150 if (targetm.cxx.guard_mask_bit ())
3151 {
3152 guard_value = integer_one_node;
3153 if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
3154 guard_value = fold_convert (TREE_TYPE (guard), guard_value);
3155 guard = cp_build_binary_op (input_location,
3156 BIT_AND_EXPR, guard, guard_value,
3157 tf_warning_or_error);
3158 }
3159
3160 guard_value = integer_zero_node;
3161 if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
3162 guard_value = fold_convert (TREE_TYPE (guard), guard_value);
3163 return cp_build_binary_op (input_location,
3164 EQ_EXPR, guard, guard_value,
3165 tf_warning_or_error);
3166 }
3167
3168 /* Return an expression which sets the GUARD variable, indicating that
3169 the variable being guarded has been initialized. */
3170
3171 tree
3172 set_guard (tree guard)
3173 {
3174 tree guard_init;
3175
3176 /* Set the GUARD to one. */
3177 guard = get_guard_bits (guard);
3178 guard_init = integer_one_node;
3179 if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
3180 guard_init = fold_convert (TREE_TYPE (guard), guard_init);
3181 return cp_build_modify_expr (input_location, guard, NOP_EXPR, guard_init,
3182 tf_warning_or_error);
3183 }
3184
3185 /* Returns true iff we can tell that VAR does not have a dynamic
3186 initializer. */
3187
3188 static bool
3189 var_defined_without_dynamic_init (tree var)
3190 {
3191 /* If it's defined in another TU, we can't tell. */
3192 if (DECL_EXTERNAL (var))
3193 return false;
3194 /* If it has a non-trivial destructor, registering the destructor
3195 counts as dynamic initialization. */
3196 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (var)))
3197 return false;
3198 /* If it's in this TU, its initializer has been processed, unless
3199 it's a case of self-initialization, then DECL_INITIALIZED_P is
3200 false while the initializer is handled by finish_id_expression. */
3201 if (!DECL_INITIALIZED_P (var))
3202 return false;
3203 /* If it has no initializer or a constant one, it's not dynamic. */
3204 return (!DECL_NONTRIVIALLY_INITIALIZED_P (var)
3205 || DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (var));
3206 }
3207
3208 /* Returns true iff VAR is a variable that needs uses to be
3209 wrapped for possible dynamic initialization. */
3210
3211 static bool
3212 var_needs_tls_wrapper (tree var)
3213 {
3214 return (!error_operand_p (var)
3215 && CP_DECL_THREAD_LOCAL_P (var)
3216 && !DECL_GNU_TLS_P (var)
3217 && !DECL_FUNCTION_SCOPE_P (var)
3218 && !var_defined_without_dynamic_init (var));
3219 }
3220
3221 /* Get the FUNCTION_DECL for the shared TLS init function for this
3222 translation unit. */
3223
3224 static tree
3225 get_local_tls_init_fn (void)
3226 {
3227 tree sname = get_identifier ("__tls_init");
3228 tree fn = IDENTIFIER_GLOBAL_VALUE (sname);
3229 if (!fn)
3230 {
3231 fn = build_lang_decl (FUNCTION_DECL, sname,
3232 build_function_type (void_type_node,
3233 void_list_node));
3234 SET_DECL_LANGUAGE (fn, lang_c);
3235 TREE_PUBLIC (fn) = false;
3236 DECL_ARTIFICIAL (fn) = true;
3237 mark_used (fn);
3238 SET_IDENTIFIER_GLOBAL_VALUE (sname, fn);
3239 }
3240 return fn;
3241 }
3242
3243 /* Get a FUNCTION_DECL for the init function for the thread_local
3244 variable VAR. The init function will be an alias to the function
3245 that initializes all the non-local TLS variables in the translation
3246 unit. The init function is only used by the wrapper function. */
3247
3248 static tree
3249 get_tls_init_fn (tree var)
3250 {
3251 /* Only C++11 TLS vars need this init fn. */
3252 if (!var_needs_tls_wrapper (var))
3253 return NULL_TREE;
3254
3255 /* If -fno-extern-tls-init, assume that we don't need to call
3256 a tls init function for a variable defined in another TU. */
3257 if (!flag_extern_tls_init && DECL_EXTERNAL (var))
3258 return NULL_TREE;
3259
3260 #ifdef ASM_OUTPUT_DEF
3261 /* If the variable is internal, or if we can't generate aliases,
3262 call the local init function directly. */
3263 if (!TREE_PUBLIC (var))
3264 #endif
3265 return get_local_tls_init_fn ();
3266
3267 tree sname = mangle_tls_init_fn (var);
3268 tree fn = IDENTIFIER_GLOBAL_VALUE (sname);
3269 if (!fn)
3270 {
3271 fn = build_lang_decl (FUNCTION_DECL, sname,
3272 build_function_type (void_type_node,
3273 void_list_node));
3274 SET_DECL_LANGUAGE (fn, lang_c);
3275 TREE_PUBLIC (fn) = TREE_PUBLIC (var);
3276 DECL_ARTIFICIAL (fn) = true;
3277 DECL_COMDAT (fn) = DECL_COMDAT (var);
3278 DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
3279 if (DECL_ONE_ONLY (var))
3280 make_decl_one_only (fn, cxx_comdat_group (fn));
3281 if (TREE_PUBLIC (var))
3282 {
3283 tree obtype = strip_array_types (non_reference (TREE_TYPE (var)));
3284 /* If the variable is defined somewhere else and might have static
3285 initialization, make the init function a weak reference. */
3286 if ((!TYPE_NEEDS_CONSTRUCTING (obtype)
3287 || TYPE_HAS_CONSTEXPR_CTOR (obtype))
3288 && TYPE_HAS_TRIVIAL_DESTRUCTOR (obtype)
3289 && DECL_EXTERNAL (var))
3290 declare_weak (fn);
3291 else
3292 DECL_WEAK (fn) = DECL_WEAK (var);
3293 }
3294 DECL_VISIBILITY (fn) = DECL_VISIBILITY (var);
3295 DECL_VISIBILITY_SPECIFIED (fn) = DECL_VISIBILITY_SPECIFIED (var);
3296 DECL_DLLIMPORT_P (fn) = DECL_DLLIMPORT_P (var);
3297 DECL_IGNORED_P (fn) = 1;
3298 mark_used (fn);
3299
3300 DECL_BEFRIENDING_CLASSES (fn) = var;
3301
3302 SET_IDENTIFIER_GLOBAL_VALUE (sname, fn);
3303 }
3304 return fn;
3305 }
3306
3307 /* Get a FUNCTION_DECL for the init wrapper function for the thread_local
3308 variable VAR. The wrapper function calls the init function (if any) for
3309 VAR and then returns a reference to VAR. The wrapper function is used
3310 in place of VAR everywhere VAR is mentioned. */
3311
3312 tree
3313 get_tls_wrapper_fn (tree var)
3314 {
3315 /* Only C++11 TLS vars need this wrapper fn. */
3316 if (!var_needs_tls_wrapper (var))
3317 return NULL_TREE;
3318
3319 tree sname = mangle_tls_wrapper_fn (var);
3320 tree fn = IDENTIFIER_GLOBAL_VALUE (sname);
3321 if (!fn)
3322 {
3323 /* A named rvalue reference is an lvalue, so the wrapper should
3324 always return an lvalue reference. */
3325 tree type = non_reference (TREE_TYPE (var));
3326 type = build_reference_type (type);
3327 tree fntype = build_function_type (type, void_list_node);
3328 fn = build_lang_decl (FUNCTION_DECL, sname, fntype);
3329 SET_DECL_LANGUAGE (fn, lang_c);
3330 TREE_PUBLIC (fn) = TREE_PUBLIC (var);
3331 DECL_ARTIFICIAL (fn) = true;
3332 DECL_IGNORED_P (fn) = 1;
3333 /* The wrapper is inline and emitted everywhere var is used. */
3334 DECL_DECLARED_INLINE_P (fn) = true;
3335 if (TREE_PUBLIC (var))
3336 {
3337 comdat_linkage (fn);
3338 #ifdef HAVE_GAS_HIDDEN
3339 /* Make the wrapper bind locally; there's no reason to share
3340 the wrapper between multiple shared objects. */
3341 DECL_VISIBILITY (fn) = VISIBILITY_INTERNAL;
3342 DECL_VISIBILITY_SPECIFIED (fn) = true;
3343 #endif
3344 }
3345 if (!TREE_PUBLIC (fn))
3346 DECL_INTERFACE_KNOWN (fn) = true;
3347 mark_used (fn);
3348 note_vague_linkage_fn (fn);
3349
3350 #if 0
3351 /* We want CSE to commonize calls to the wrapper, but marking it as
3352 pure is unsafe since it has side-effects. I guess we need a new
3353 ECF flag even weaker than ECF_PURE. FIXME! */
3354 DECL_PURE_P (fn) = true;
3355 #endif
3356
3357 DECL_BEFRIENDING_CLASSES (fn) = var;
3358
3359 SET_IDENTIFIER_GLOBAL_VALUE (sname, fn);
3360 }
3361 return fn;
3362 }
3363
3364 /* At EOF, generate the definition for the TLS wrapper function FN:
3365
3366 T& var_wrapper() {
3367 if (init_fn) init_fn();
3368 return var;
3369 } */
3370
3371 static void
3372 generate_tls_wrapper (tree fn)
3373 {
3374 tree var = DECL_BEFRIENDING_CLASSES (fn);
3375
3376 start_preparsed_function (fn, NULL_TREE, SF_DEFAULT | SF_PRE_PARSED);
3377 tree body = begin_function_body ();
3378 /* Only call the init fn if there might be one. */
3379 if (tree init_fn = get_tls_init_fn (var))
3380 {
3381 tree if_stmt = NULL_TREE;
3382 /* If init_fn is a weakref, make sure it exists before calling. */
3383 if (lookup_attribute ("weak", DECL_ATTRIBUTES (init_fn)))
3384 {
3385 if_stmt = begin_if_stmt ();
3386 tree addr = cp_build_addr_expr (init_fn, tf_warning_or_error);
3387 tree cond = cp_build_binary_op (DECL_SOURCE_LOCATION (var),
3388 NE_EXPR, addr, nullptr_node,
3389 tf_warning_or_error);
3390 finish_if_stmt_cond (cond, if_stmt);
3391 }
3392 finish_expr_stmt (build_cxx_call
3393 (init_fn, 0, NULL, tf_warning_or_error));
3394 if (if_stmt)
3395 {
3396 finish_then_clause (if_stmt);
3397 finish_if_stmt (if_stmt);
3398 }
3399 }
3400 else
3401 /* If there's no initialization, the wrapper is a constant function. */
3402 TREE_READONLY (fn) = true;
3403 finish_return_stmt (convert_from_reference (var));
3404 finish_function_body (body);
3405 expand_or_defer_fn (finish_function (0));
3406 }
3407
3408 /* Start the process of running a particular set of global constructors
3409 or destructors. Subroutine of do_[cd]tors. Also called from
3410 vtv_start_verification_constructor_init_function. */
3411
3412 static tree
3413 start_objects (int method_type, int initp)
3414 {
3415 tree body;
3416 tree fndecl;
3417 char type[14];
3418
3419 /* Make ctor or dtor function. METHOD_TYPE may be 'I' or 'D'. */
3420
3421 if (initp != DEFAULT_INIT_PRIORITY)
3422 {
3423 char joiner;
3424
3425 #ifdef JOINER
3426 joiner = JOINER;
3427 #else
3428 joiner = '_';
3429 #endif
3430
3431 sprintf (type, "sub_%c%c%.5u", method_type, joiner, initp);
3432 }
3433 else
3434 sprintf (type, "sub_%c", method_type);
3435
3436 fndecl = build_lang_decl (FUNCTION_DECL,
3437 get_file_function_name (type),
3438 build_function_type_list (void_type_node,
3439 NULL_TREE));
3440 start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
3441
3442 TREE_PUBLIC (current_function_decl) = 0;
3443
3444 /* Mark as artificial because it's not explicitly in the user's
3445 source code. */
3446 DECL_ARTIFICIAL (current_function_decl) = 1;
3447
3448 /* Mark this declaration as used to avoid spurious warnings. */
3449 TREE_USED (current_function_decl) = 1;
3450
3451 /* Mark this function as a global constructor or destructor. */
3452 if (method_type == 'I')
3453 DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
3454 else
3455 DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
3456
3457 body = begin_compound_stmt (BCS_FN_BODY);
3458
3459 return body;
3460 }
3461
3462 /* Finish the process of running a particular set of global constructors
3463 or destructors. Subroutine of do_[cd]tors. */
3464
3465 static void
3466 finish_objects (int method_type, int initp, tree body)
3467 {
3468 tree fn;
3469
3470 /* Finish up. */
3471 finish_compound_stmt (body);
3472 fn = finish_function (0);
3473
3474 if (method_type == 'I')
3475 {
3476 DECL_STATIC_CONSTRUCTOR (fn) = 1;
3477 decl_init_priority_insert (fn, initp);
3478 }
3479 else
3480 {
3481 DECL_STATIC_DESTRUCTOR (fn) = 1;
3482 decl_fini_priority_insert (fn, initp);
3483 }
3484
3485 expand_or_defer_fn (fn);
3486 }
3487
3488 /* The names of the parameters to the function created to handle
3489 initializations and destructions for objects with static storage
3490 duration. */
3491 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
3492 #define PRIORITY_IDENTIFIER "__priority"
3493
3494 /* The name of the function we create to handle initializations and
3495 destructions for objects with static storage duration. */
3496 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
3497
3498 /* The declaration for the __INITIALIZE_P argument. */
3499 static GTY(()) tree initialize_p_decl;
3500
3501 /* The declaration for the __PRIORITY argument. */
3502 static GTY(()) tree priority_decl;
3503
3504 /* The declaration for the static storage duration function. */
3505 static GTY(()) tree ssdf_decl;
3506
3507 /* All the static storage duration functions created in this
3508 translation unit. */
3509 static GTY(()) vec<tree, va_gc> *ssdf_decls;
3510
3511 /* A map from priority levels to information about that priority
3512 level. There may be many such levels, so efficient lookup is
3513 important. */
3514 static splay_tree priority_info_map;
3515
3516 /* Begins the generation of the function that will handle all
3517 initialization and destruction of objects with static storage
3518 duration. The function generated takes two parameters of type
3519 `int': __INITIALIZE_P and __PRIORITY. If __INITIALIZE_P is
3520 nonzero, it performs initializations. Otherwise, it performs
3521 destructions. It only performs those initializations or
3522 destructions with the indicated __PRIORITY. The generated function
3523 returns no value.
3524
3525 It is assumed that this function will only be called once per
3526 translation unit. */
3527
3528 static tree
3529 start_static_storage_duration_function (unsigned count)
3530 {
3531 tree type;
3532 tree body;
3533 char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
3534
3535 /* Create the identifier for this function. It will be of the form
3536 SSDF_IDENTIFIER_<number>. */
3537 sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
3538
3539 type = build_function_type_list (void_type_node,
3540 integer_type_node, integer_type_node,
3541 NULL_TREE);
3542
3543 /* Create the FUNCTION_DECL itself. */
3544 ssdf_decl = build_lang_decl (FUNCTION_DECL,
3545 get_identifier (id),
3546 type);
3547 TREE_PUBLIC (ssdf_decl) = 0;
3548 DECL_ARTIFICIAL (ssdf_decl) = 1;
3549
3550 /* Put this function in the list of functions to be called from the
3551 static constructors and destructors. */
3552 if (!ssdf_decls)
3553 {
3554 vec_alloc (ssdf_decls, 32);
3555
3556 /* Take this opportunity to initialize the map from priority
3557 numbers to information about that priority level. */
3558 priority_info_map = splay_tree_new (splay_tree_compare_ints,
3559 /*delete_key_fn=*/0,
3560 /*delete_value_fn=*/
3561 (splay_tree_delete_value_fn) &free);
3562
3563 /* We always need to generate functions for the
3564 DEFAULT_INIT_PRIORITY so enter it now. That way when we walk
3565 priorities later, we'll be sure to find the
3566 DEFAULT_INIT_PRIORITY. */
3567 get_priority_info (DEFAULT_INIT_PRIORITY);
3568 }
3569
3570 vec_safe_push (ssdf_decls, ssdf_decl);
3571
3572 /* Create the argument list. */
3573 initialize_p_decl = cp_build_parm_decl
3574 (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
3575 DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
3576 TREE_USED (initialize_p_decl) = 1;
3577 priority_decl = cp_build_parm_decl
3578 (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
3579 DECL_CONTEXT (priority_decl) = ssdf_decl;
3580 TREE_USED (priority_decl) = 1;
3581
3582 DECL_CHAIN (initialize_p_decl) = priority_decl;
3583 DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
3584
3585 /* Put the function in the global scope. */
3586 pushdecl (ssdf_decl);
3587
3588 /* Start the function itself. This is equivalent to declaring the
3589 function as:
3590
3591 static void __ssdf (int __initialize_p, init __priority_p);
3592
3593 It is static because we only need to call this function from the
3594 various constructor and destructor functions for this module. */
3595 start_preparsed_function (ssdf_decl,
3596 /*attrs=*/NULL_TREE,
3597 SF_PRE_PARSED);
3598
3599 /* Set up the scope of the outermost block in the function. */
3600 body = begin_compound_stmt (BCS_FN_BODY);
3601
3602 return body;
3603 }
3604
3605 /* Finish the generation of the function which performs initialization
3606 and destruction of objects with static storage duration. After
3607 this point, no more such objects can be created. */
3608
3609 static void
3610 finish_static_storage_duration_function (tree body)
3611 {
3612 /* Close out the function. */
3613 finish_compound_stmt (body);
3614 expand_or_defer_fn (finish_function (0));
3615 }
3616
3617 /* Return the information about the indicated PRIORITY level. If no
3618 code to handle this level has yet been generated, generate the
3619 appropriate prologue. */
3620
3621 static priority_info
3622 get_priority_info (int priority)
3623 {
3624 priority_info pi;
3625 splay_tree_node n;
3626
3627 n = splay_tree_lookup (priority_info_map,
3628 (splay_tree_key) priority);
3629 if (!n)
3630 {
3631 /* Create a new priority information structure, and insert it
3632 into the map. */
3633 pi = XNEW (struct priority_info_s);
3634 pi->initializations_p = 0;
3635 pi->destructions_p = 0;
3636 splay_tree_insert (priority_info_map,
3637 (splay_tree_key) priority,
3638 (splay_tree_value) pi);
3639 }
3640 else
3641 pi = (priority_info) n->value;
3642
3643 return pi;
3644 }
3645
3646 /* The effective initialization priority of a DECL. */
3647
3648 #define DECL_EFFECTIVE_INIT_PRIORITY(decl) \
3649 ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
3650 ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
3651
3652 /* Whether a DECL needs a guard to protect it against multiple
3653 initialization. */
3654
3655 #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl) \
3656 || DECL_ONE_ONLY (decl) \
3657 || DECL_WEAK (decl)))
3658
3659 /* Called from one_static_initialization_or_destruction(),
3660 via walk_tree.
3661 Walks the initializer list of a global variable and looks for
3662 temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
3663 and that have their DECL_CONTEXT() == NULL.
3664 For each such temporary variable, set their DECL_CONTEXT() to
3665 the current function. This is necessary because otherwise
3666 some optimizers (enabled by -O2 -fprofile-arcs) might crash
3667 when trying to refer to a temporary variable that does not have
3668 it's DECL_CONTECT() properly set. */
3669 static tree
3670 fix_temporary_vars_context_r (tree *node,
3671 int * /*unused*/,
3672 void * /*unused1*/)
3673 {
3674 gcc_assert (current_function_decl);
3675
3676 if (TREE_CODE (*node) == BIND_EXPR)
3677 {
3678 tree var;
3679
3680 for (var = BIND_EXPR_VARS (*node); var; var = DECL_CHAIN (var))
3681 if (VAR_P (var)
3682 && !DECL_NAME (var)
3683 && DECL_ARTIFICIAL (var)
3684 && !DECL_CONTEXT (var))
3685 DECL_CONTEXT (var) = current_function_decl;
3686 }
3687
3688 return NULL_TREE;
3689 }
3690
3691 /* Set up to handle the initialization or destruction of DECL. If
3692 INITP is nonzero, we are initializing the variable. Otherwise, we
3693 are destroying it. */
3694
3695 static void
3696 one_static_initialization_or_destruction (tree decl, tree init, bool initp)
3697 {
3698 tree guard_if_stmt = NULL_TREE;
3699 tree guard;
3700
3701 /* If we are supposed to destruct and there's a trivial destructor,
3702 nothing has to be done. */
3703 if (!initp
3704 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3705 return;
3706
3707 /* Trick the compiler into thinking we are at the file and line
3708 where DECL was declared so that error-messages make sense, and so
3709 that the debugger will show somewhat sensible file and line
3710 information. */
3711 input_location = DECL_SOURCE_LOCATION (decl);
3712
3713 /* Make sure temporary variables in the initialiser all have
3714 their DECL_CONTEXT() set to a value different from NULL_TREE.
3715 This can happen when global variables initialisers are built.
3716 In that case, the DECL_CONTEXT() of the global variables _AND_ of all
3717 the temporary variables that might have been generated in the
3718 accompagning initialisers is NULL_TREE, meaning the variables have been
3719 declared in the global namespace.
3720 What we want to do here is to fix that and make sure the DECL_CONTEXT()
3721 of the temporaries are set to the current function decl. */
3722 cp_walk_tree_without_duplicates (&init,
3723 fix_temporary_vars_context_r,
3724 NULL);
3725
3726 /* Because of:
3727
3728 [class.access.spec]
3729
3730 Access control for implicit calls to the constructors,
3731 the conversion functions, or the destructor called to
3732 create and destroy a static data member is performed as
3733 if these calls appeared in the scope of the member's
3734 class.
3735
3736 we pretend we are in a static member function of the class of
3737 which the DECL is a member. */
3738 if (member_p (decl))
3739 {
3740 DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3741 DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3742 }
3743
3744 /* Assume we don't need a guard. */
3745 guard = NULL_TREE;
3746 /* We need a guard if this is an object with external linkage that
3747 might be initialized in more than one place. (For example, a
3748 static data member of a template, when the data member requires
3749 construction.) */
3750 if (NEEDS_GUARD_P (decl))
3751 {
3752 tree guard_cond;
3753
3754 guard = get_guard (decl);
3755
3756 /* When using __cxa_atexit, we just check the GUARD as we would
3757 for a local static. */
3758 if (flag_use_cxa_atexit)
3759 {
3760 /* When using __cxa_atexit, we never try to destroy
3761 anything from a static destructor. */
3762 gcc_assert (initp);
3763 guard_cond = get_guard_cond (guard, false);
3764 }
3765 /* If we don't have __cxa_atexit, then we will be running
3766 destructors from .fini sections, or their equivalents. So,
3767 we need to know how many times we've tried to initialize this
3768 object. We do initializations only if the GUARD is zero,
3769 i.e., if we are the first to initialize the variable. We do
3770 destructions only if the GUARD is one, i.e., if we are the
3771 last to destroy the variable. */
3772 else if (initp)
3773 guard_cond
3774 = cp_build_binary_op (input_location,
3775 EQ_EXPR,
3776 cp_build_unary_op (PREINCREMENT_EXPR,
3777 guard,
3778 /*noconvert=*/true,
3779 tf_warning_or_error),
3780 integer_one_node,
3781 tf_warning_or_error);
3782 else
3783 guard_cond
3784 = cp_build_binary_op (input_location,
3785 EQ_EXPR,
3786 cp_build_unary_op (PREDECREMENT_EXPR,
3787 guard,
3788 /*noconvert=*/true,
3789 tf_warning_or_error),
3790 integer_zero_node,
3791 tf_warning_or_error);
3792
3793 guard_if_stmt = begin_if_stmt ();
3794 finish_if_stmt_cond (guard_cond, guard_if_stmt);
3795 }
3796
3797
3798 /* If we're using __cxa_atexit, we have not already set the GUARD,
3799 so we must do so now. */
3800 if (guard && initp && flag_use_cxa_atexit)
3801 finish_expr_stmt (set_guard (guard));
3802
3803 /* Perform the initialization or destruction. */
3804 if (initp)
3805 {
3806 if (init)
3807 {
3808 finish_expr_stmt (init);
3809 if (flag_sanitize & SANITIZE_ADDRESS)
3810 {
3811 varpool_node *vnode = varpool_node::get (decl);
3812 if (vnode)
3813 vnode->dynamically_initialized = 1;
3814 }
3815 }
3816
3817 /* If we're using __cxa_atexit, register a function that calls the
3818 destructor for the object. */
3819 if (flag_use_cxa_atexit)
3820 finish_expr_stmt (register_dtor_fn (decl));
3821 }
3822 else
3823 finish_expr_stmt (build_cleanup (decl));
3824
3825 /* Finish the guard if-stmt, if necessary. */
3826 if (guard)
3827 {
3828 finish_then_clause (guard_if_stmt);
3829 finish_if_stmt (guard_if_stmt);
3830 }
3831
3832 /* Now that we're done with DECL we don't need to pretend to be a
3833 member of its class any longer. */
3834 DECL_CONTEXT (current_function_decl) = NULL_TREE;
3835 DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3836 }
3837
3838 /* Generate code to do the initialization or destruction of the decls in VARS,
3839 a TREE_LIST of VAR_DECL with static storage duration.
3840 Whether initialization or destruction is performed is specified by INITP. */
3841
3842 static void
3843 do_static_initialization_or_destruction (tree vars, bool initp)
3844 {
3845 tree node, init_if_stmt, cond;
3846
3847 /* Build the outer if-stmt to check for initialization or destruction. */
3848 init_if_stmt = begin_if_stmt ();
3849 cond = initp ? integer_one_node : integer_zero_node;
3850 cond = cp_build_binary_op (input_location,
3851 EQ_EXPR,
3852 initialize_p_decl,
3853 cond,
3854 tf_warning_or_error);
3855 finish_if_stmt_cond (cond, init_if_stmt);
3856
3857 /* To make sure dynamic construction doesn't access globals from other
3858 compilation units where they might not be yet constructed, for
3859 -fsanitize=address insert __asan_before_dynamic_init call that
3860 prevents access to either all global variables that need construction
3861 in other compilation units, or at least those that haven't been
3862 initialized yet. Variables that need dynamic construction in
3863 the current compilation unit are kept accessible. */
3864 if (initp && (flag_sanitize & SANITIZE_ADDRESS))
3865 finish_expr_stmt (asan_dynamic_init_call (/*after_p=*/false));
3866
3867 node = vars;
3868 do {
3869 tree decl = TREE_VALUE (node);
3870 tree priority_if_stmt;
3871 int priority;
3872 priority_info pi;
3873
3874 /* If we don't need a destructor, there's nothing to do. Avoid
3875 creating a possibly empty if-stmt. */
3876 if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3877 {
3878 node = TREE_CHAIN (node);
3879 continue;
3880 }
3881
3882 /* Remember that we had an initialization or finalization at this
3883 priority. */
3884 priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3885 pi = get_priority_info (priority);
3886 if (initp)
3887 pi->initializations_p = 1;
3888 else
3889 pi->destructions_p = 1;
3890
3891 /* Conditionalize this initialization on being in the right priority
3892 and being initializing/finalizing appropriately. */
3893 priority_if_stmt = begin_if_stmt ();
3894 cond = cp_build_binary_op (input_location,
3895 EQ_EXPR,
3896 priority_decl,
3897 build_int_cst (NULL_TREE, priority),
3898 tf_warning_or_error);
3899 finish_if_stmt_cond (cond, priority_if_stmt);
3900
3901 /* Process initializers with same priority. */
3902 for (; node
3903 && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3904 node = TREE_CHAIN (node))
3905 /* Do one initialization or destruction. */
3906 one_static_initialization_or_destruction (TREE_VALUE (node),
3907 TREE_PURPOSE (node), initp);
3908
3909 /* Finish up the priority if-stmt body. */
3910 finish_then_clause (priority_if_stmt);
3911 finish_if_stmt (priority_if_stmt);
3912
3913 } while (node);
3914
3915 /* Revert what __asan_before_dynamic_init did by calling
3916 __asan_after_dynamic_init. */
3917 if (initp && (flag_sanitize & SANITIZE_ADDRESS))
3918 finish_expr_stmt (asan_dynamic_init_call (/*after_p=*/true));
3919
3920 /* Finish up the init/destruct if-stmt body. */
3921 finish_then_clause (init_if_stmt);
3922 finish_if_stmt (init_if_stmt);
3923 }
3924
3925 /* VARS is a list of variables with static storage duration which may
3926 need initialization and/or finalization. Remove those variables
3927 that don't really need to be initialized or finalized, and return
3928 the resulting list. The order in which the variables appear in
3929 VARS is in reverse order of the order in which they should actually
3930 be initialized. The list we return is in the unreversed order;
3931 i.e., the first variable should be initialized first. */
3932
3933 static tree
3934 prune_vars_needing_no_initialization (tree *vars)
3935 {
3936 tree *var = vars;
3937 tree result = NULL_TREE;
3938
3939 while (*var)
3940 {
3941 tree t = *var;
3942 tree decl = TREE_VALUE (t);
3943 tree init = TREE_PURPOSE (t);
3944
3945 /* Deal gracefully with error. */
3946 if (decl == error_mark_node)
3947 {
3948 var = &TREE_CHAIN (t);
3949 continue;
3950 }
3951
3952 /* The only things that can be initialized are variables. */
3953 gcc_assert (VAR_P (decl));
3954
3955 /* If this object is not defined, we don't need to do anything
3956 here. */
3957 if (DECL_EXTERNAL (decl))
3958 {
3959 var = &TREE_CHAIN (t);
3960 continue;
3961 }
3962
3963 /* Also, if the initializer already contains errors, we can bail
3964 out now. */
3965 if (init && TREE_CODE (init) == TREE_LIST
3966 && value_member (error_mark_node, init))
3967 {
3968 var = &TREE_CHAIN (t);
3969 continue;
3970 }
3971
3972 /* This variable is going to need initialization and/or
3973 finalization, so we add it to the list. */
3974 *var = TREE_CHAIN (t);
3975 TREE_CHAIN (t) = result;
3976 result = t;
3977 }
3978
3979 return result;
3980 }
3981
3982 /* Make sure we have told the back end about all the variables in
3983 VARS. */
3984
3985 static void
3986 write_out_vars (tree vars)
3987 {
3988 tree v;
3989
3990 for (v = vars; v; v = TREE_CHAIN (v))
3991 {
3992 tree var = TREE_VALUE (v);
3993 if (!var_finalized_p (var))
3994 {
3995 import_export_decl (var);
3996 rest_of_decl_compilation (var, 1, 1);
3997 }
3998 }
3999 }
4000
4001 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
4002 (otherwise) that will initialize all global objects with static
4003 storage duration having the indicated PRIORITY. */
4004
4005 static void
4006 generate_ctor_or_dtor_function (bool constructor_p, int priority,
4007 location_t *locus)
4008 {
4009 char function_key;
4010 tree fndecl;
4011 tree body;
4012 size_t i;
4013
4014 input_location = *locus;
4015 /* ??? */
4016 /* Was: locus->line++; */
4017
4018 /* We use `I' to indicate initialization and `D' to indicate
4019 destruction. */
4020 function_key = constructor_p ? 'I' : 'D';
4021
4022 /* We emit the function lazily, to avoid generating empty
4023 global constructors and destructors. */
4024 body = NULL_TREE;
4025
4026 /* For Objective-C++, we may need to initialize metadata found in this module.
4027 This must be done _before_ any other static initializations. */
4028 if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
4029 && constructor_p && objc_static_init_needed_p ())
4030 {
4031 body = start_objects (function_key, priority);
4032 objc_generate_static_init_call (NULL_TREE);
4033 }
4034
4035 /* Call the static storage duration function with appropriate
4036 arguments. */
4037 FOR_EACH_VEC_SAFE_ELT (ssdf_decls, i, fndecl)
4038 {
4039 /* Calls to pure or const functions will expand to nothing. */
4040 if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
4041 {
4042 tree call;
4043
4044 if (! body)
4045 body = start_objects (function_key, priority);
4046
4047 call = cp_build_function_call_nary (fndecl, tf_warning_or_error,
4048 build_int_cst (NULL_TREE,
4049 constructor_p),
4050 build_int_cst (NULL_TREE,
4051 priority),
4052 NULL_TREE);
4053 finish_expr_stmt (call);
4054 }
4055 }
4056
4057 /* Close out the function. */
4058 if (body)
4059 finish_objects (function_key, priority, body);
4060 }
4061
4062 /* Generate constructor and destructor functions for the priority
4063 indicated by N. */
4064
4065 static int
4066 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
4067 {
4068 location_t *locus = (location_t *) data;
4069 int priority = (int) n->key;
4070 priority_info pi = (priority_info) n->value;
4071
4072 /* Generate the functions themselves, but only if they are really
4073 needed. */
4074 if (pi->initializations_p)
4075 generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
4076 if (pi->destructions_p)
4077 generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
4078
4079 /* Keep iterating. */
4080 return 0;
4081 }
4082
4083 /* Java requires that we be able to reference a local address for a
4084 method, and not be confused by PLT entries. If supported, create a
4085 hidden alias for all such methods. */
4086
4087 static void
4088 build_java_method_aliases (void)
4089 {
4090 #ifndef HAVE_GAS_HIDDEN
4091 return;
4092 #endif
4093
4094 struct cgraph_node *node;
4095 FOR_EACH_FUNCTION (node)
4096 {
4097 tree fndecl = node->decl;
4098
4099 if (DECL_CLASS_SCOPE_P (fndecl)
4100 && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
4101 && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
4102 {
4103 /* Mangle the name in a predictable way; we need to reference
4104 this from a java compiled object file. */
4105 tree oid = DECL_ASSEMBLER_NAME (fndecl);
4106 const char *oname = IDENTIFIER_POINTER (oid);
4107 gcc_assert (oname[0] == '_' && oname[1] == 'Z');
4108 char *nname = ACONCAT (("_ZGA", oname + 2, NULL));
4109
4110 tree alias = make_alias_for (fndecl, get_identifier (nname));
4111 TREE_PUBLIC (alias) = 1;
4112 DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
4113
4114 cgraph_node::create_same_body_alias (alias, fndecl);
4115 }
4116 }
4117 }
4118
4119 /* Return C++ property of T, based on given operation OP. */
4120
4121 static int
4122 cpp_check (tree t, cpp_operation op)
4123 {
4124 switch (op)
4125 {
4126 case HAS_DEPENDENT_TEMPLATE_ARGS:
4127 {
4128 tree ti = CLASSTYPE_TEMPLATE_INFO (t);
4129 if (!ti)
4130 return 0;
4131 ++processing_template_decl;
4132 const bool dep = any_dependent_template_arguments_p (TI_ARGS (ti));
4133 --processing_template_decl;
4134 return dep;
4135 }
4136 case IS_ABSTRACT:
4137 return DECL_PURE_VIRTUAL_P (t);
4138 case IS_CONSTRUCTOR:
4139 return DECL_CONSTRUCTOR_P (t);
4140 case IS_DESTRUCTOR:
4141 return DECL_DESTRUCTOR_P (t);
4142 case IS_COPY_CONSTRUCTOR:
4143 return DECL_COPY_CONSTRUCTOR_P (t);
4144 case IS_MOVE_CONSTRUCTOR:
4145 return DECL_MOVE_CONSTRUCTOR_P (t);
4146 case IS_TEMPLATE:
4147 return TREE_CODE (t) == TEMPLATE_DECL;
4148 case IS_TRIVIAL:
4149 return trivial_type_p (t);
4150 default:
4151 return 0;
4152 }
4153 }
4154
4155 /* Collect source file references recursively, starting from NAMESPC. */
4156
4157 static void
4158 collect_source_refs (tree namespc)
4159 {
4160 tree t;
4161
4162 if (!namespc)
4163 return;
4164
4165 /* Iterate over names in this name space. */
4166 for (t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
4167 if (!DECL_IS_BUILTIN (t) )
4168 collect_source_ref (DECL_SOURCE_FILE (t));
4169
4170 /* Dump siblings, if any */
4171 collect_source_refs (TREE_CHAIN (namespc));
4172
4173 /* Dump children, if any */
4174 collect_source_refs (NAMESPACE_LEVEL (namespc)->namespaces);
4175 }
4176
4177 /* Collect decls relevant to SOURCE_FILE from all namespaces recursively,
4178 starting from NAMESPC. */
4179
4180 static void
4181 collect_ada_namespace (tree namespc, const char *source_file)
4182 {
4183 if (!namespc)
4184 return;
4185
4186 /* Collect decls from this namespace */
4187 collect_ada_nodes (NAMESPACE_LEVEL (namespc)->names, source_file);
4188
4189 /* Collect siblings, if any */
4190 collect_ada_namespace (TREE_CHAIN (namespc), source_file);
4191
4192 /* Collect children, if any */
4193 collect_ada_namespace (NAMESPACE_LEVEL (namespc)->namespaces, source_file);
4194 }
4195
4196 /* Returns true iff there is a definition available for variable or
4197 function DECL. */
4198
4199 static bool
4200 decl_defined_p (tree decl)
4201 {
4202 if (TREE_CODE (decl) == FUNCTION_DECL)
4203 return (DECL_INITIAL (decl) != NULL_TREE);
4204 else
4205 {
4206 gcc_assert (VAR_P (decl));
4207 return !DECL_EXTERNAL (decl);
4208 }
4209 }
4210
4211 /* Nonzero for a VAR_DECL whose value can be used in a constant expression.
4212
4213 [expr.const]
4214
4215 An integral constant-expression can only involve ... const
4216 variables of integral or enumeration types initialized with
4217 constant expressions ...
4218
4219 C++0x also allows constexpr variables and temporaries initialized
4220 with constant expressions. We handle the former here, but the latter
4221 are just folded away in cxx_eval_constant_expression.
4222
4223 The standard does not require that the expression be non-volatile.
4224 G++ implements the proposed correction in DR 457. */
4225
4226 bool
4227 decl_constant_var_p (tree decl)
4228 {
4229 if (!decl_maybe_constant_var_p (decl))
4230 return false;
4231
4232 /* We don't know if a template static data member is initialized with
4233 a constant expression until we instantiate its initializer. Even
4234 in the case of a constexpr variable, we can't treat it as a
4235 constant until its initializer is complete in case it's used in
4236 its own initializer. */
4237 maybe_instantiate_decl (decl);
4238 return DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl);
4239 }
4240
4241 /* Returns true if DECL could be a symbolic constant variable, depending on
4242 its initializer. */
4243
4244 bool
4245 decl_maybe_constant_var_p (tree decl)
4246 {
4247 tree type = TREE_TYPE (decl);
4248 if (!VAR_P (decl))
4249 return false;
4250 if (DECL_DECLARED_CONSTEXPR_P (decl))
4251 return true;
4252 if (DECL_HAS_VALUE_EXPR_P (decl))
4253 /* A proxy isn't constant. */
4254 return false;
4255 return (CP_TYPE_CONST_NON_VOLATILE_P (type)
4256 && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
4257 }
4258
4259 /* Complain that DECL uses a type with no linkage. In C++98 mode this is
4260 called from grokfndecl and grokvardecl; in all modes it is called from
4261 cp_write_global_declarations. */
4262
4263 void
4264 no_linkage_error (tree decl)
4265 {
4266 if (cxx_dialect >= cxx11 && decl_defined_p (decl))
4267 /* In C++11 it's ok if the decl is defined. */
4268 return;
4269 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
4270 if (t == NULL_TREE)
4271 /* The type that got us on no_linkage_decls must have gotten a name for
4272 linkage purposes. */;
4273 else if (CLASS_TYPE_P (t) && TYPE_BEING_DEFINED (t))
4274 /* The type might end up having a typedef name for linkage purposes. */
4275 vec_safe_push (no_linkage_decls, decl);
4276 else if (TYPE_UNNAMED_P (t))
4277 {
4278 bool d = false;
4279 if (cxx_dialect >= cxx11)
4280 d = permerror (DECL_SOURCE_LOCATION (decl), "%q#D, declared using "
4281 "unnamed type, is used but never defined", decl);
4282 else if (DECL_EXTERN_C_P (decl))
4283 /* Allow this; it's pretty common in C. */;
4284 else if (VAR_P (decl))
4285 /* DRs 132, 319 and 389 seem to indicate types with
4286 no linkage can only be used to declare extern "C"
4287 entities. Since it's not always an error in the
4288 ISO C++ 90 Standard, we only issue a warning. */
4289 d = warning_at (DECL_SOURCE_LOCATION (decl), 0, "unnamed type "
4290 "with no linkage used to declare variable %q#D with "
4291 "linkage", decl);
4292 else
4293 d = permerror (DECL_SOURCE_LOCATION (decl), "unnamed type with no "
4294 "linkage used to declare function %q#D with linkage",
4295 decl);
4296 if (d && is_typedef_decl (TYPE_NAME (t)))
4297 inform (DECL_SOURCE_LOCATION (TYPE_NAME (t)), "%q#D does not refer "
4298 "to the unqualified type, so it is not used for linkage",
4299 TYPE_NAME (t));
4300 }
4301 else if (cxx_dialect >= cxx11)
4302 {
4303 if (VAR_P (decl) || !DECL_PURE_VIRTUAL_P (decl))
4304 permerror (DECL_SOURCE_LOCATION (decl),
4305 "%q#D, declared using local type "
4306 "%qT, is used but never defined", decl, t);
4307 }
4308 else if (VAR_P (decl))
4309 warning_at (DECL_SOURCE_LOCATION (decl), 0, "type %qT with no linkage "
4310 "used to declare variable %q#D with linkage", t, decl);
4311 else
4312 permerror (DECL_SOURCE_LOCATION (decl), "type %qT with no linkage used "
4313 "to declare function %q#D with linkage", t, decl);
4314 }
4315
4316 /* Collect declarations from all namespaces relevant to SOURCE_FILE. */
4317
4318 static void
4319 collect_all_refs (const char *source_file)
4320 {
4321 collect_ada_namespace (global_namespace, source_file);
4322 }
4323
4324 /* Clear DECL_EXTERNAL for NODE. */
4325
4326 static bool
4327 clear_decl_external (struct cgraph_node *node, void * /*data*/)
4328 {
4329 DECL_EXTERNAL (node->decl) = 0;
4330 return false;
4331 }
4332
4333 /* Build up the function to run dynamic initializers for thread_local
4334 variables in this translation unit and alias the init functions for the
4335 individual variables to it. */
4336
4337 static void
4338 handle_tls_init (void)
4339 {
4340 tree vars = prune_vars_needing_no_initialization (&tls_aggregates);
4341 if (vars == NULL_TREE)
4342 return;
4343
4344 location_t loc = DECL_SOURCE_LOCATION (TREE_VALUE (vars));
4345
4346 write_out_vars (vars);
4347
4348 tree guard = build_decl (loc, VAR_DECL, get_identifier ("__tls_guard"),
4349 boolean_type_node);
4350 TREE_PUBLIC (guard) = false;
4351 TREE_STATIC (guard) = true;
4352 DECL_ARTIFICIAL (guard) = true;
4353 DECL_IGNORED_P (guard) = true;
4354 TREE_USED (guard) = true;
4355 CP_DECL_THREAD_LOCAL_P (guard) = true;
4356 set_decl_tls_model (guard, decl_default_tls_model (guard));
4357 pushdecl_top_level_and_finish (guard, NULL_TREE);
4358
4359 tree fn = get_local_tls_init_fn ();
4360 start_preparsed_function (fn, NULL_TREE, SF_PRE_PARSED);
4361 tree body = begin_function_body ();
4362 tree if_stmt = begin_if_stmt ();
4363 tree cond = cp_build_unary_op (TRUTH_NOT_EXPR, guard, false,
4364 tf_warning_or_error);
4365 finish_if_stmt_cond (cond, if_stmt);
4366 finish_expr_stmt (cp_build_modify_expr (loc, guard, NOP_EXPR,
4367 boolean_true_node,
4368 tf_warning_or_error));
4369 for (; vars; vars = TREE_CHAIN (vars))
4370 {
4371 tree var = TREE_VALUE (vars);
4372 tree init = TREE_PURPOSE (vars);
4373 one_static_initialization_or_destruction (var, init, true);
4374
4375 #ifdef ASM_OUTPUT_DEF
4376 /* Output init aliases even with -fno-extern-tls-init. */
4377 if (TREE_PUBLIC (var))
4378 {
4379 tree single_init_fn = get_tls_init_fn (var);
4380 if (single_init_fn == NULL_TREE)
4381 continue;
4382 cgraph_node *alias
4383 = cgraph_node::get_create (fn)->create_same_body_alias
4384 (single_init_fn, fn);
4385 gcc_assert (alias != NULL);
4386 }
4387 #endif
4388 }
4389
4390 finish_then_clause (if_stmt);
4391 finish_if_stmt (if_stmt);
4392 finish_function_body (body);
4393 expand_or_defer_fn (finish_function (0));
4394 }
4395
4396 /* We're at the end of compilation, so generate any mangling aliases that
4397 we've been saving up, if DECL is going to be output and ID2 isn't
4398 already taken by another declaration. */
4399
4400 static void
4401 generate_mangling_alias (tree decl, tree id2)
4402 {
4403 /* If there's a declaration already using this mangled name,
4404 don't create a compatibility alias that conflicts. */
4405 if (IDENTIFIER_GLOBAL_VALUE (id2))
4406 return;
4407
4408 struct cgraph_node *n = NULL;
4409 if (TREE_CODE (decl) == FUNCTION_DECL
4410 && !(n = cgraph_node::get (decl)))
4411 /* Don't create an alias to an unreferenced function. */
4412 return;
4413
4414 tree alias = make_alias_for (decl, id2);
4415 SET_IDENTIFIER_GLOBAL_VALUE (id2, alias);
4416 DECL_IGNORED_P (alias) = 1;
4417 TREE_PUBLIC (alias) = TREE_PUBLIC (decl);
4418 DECL_VISIBILITY (alias) = DECL_VISIBILITY (decl);
4419 if (vague_linkage_p (decl))
4420 DECL_WEAK (alias) = 1;
4421 if (TREE_CODE (decl) == FUNCTION_DECL)
4422 n->create_same_body_alias (alias, decl);
4423 else
4424 varpool_node::create_extra_name_alias (alias, decl);
4425 }
4426
4427 /* Note that we might want to emit an alias with the symbol ID2 for DECL at
4428 the end of translation, for compatibility across bugs in the mangling
4429 implementation. */
4430
4431 void
4432 note_mangling_alias (tree decl ATTRIBUTE_UNUSED, tree id2 ATTRIBUTE_UNUSED)
4433 {
4434 #ifdef ASM_OUTPUT_DEF
4435 if (!defer_mangling_aliases)
4436 generate_mangling_alias (decl, id2);
4437 else
4438 {
4439 vec_safe_push (mangling_aliases, decl);
4440 vec_safe_push (mangling_aliases, id2);
4441 }
4442 #endif
4443 }
4444
4445 /* Emit all mangling aliases that were deferred up to this point. */
4446
4447 void
4448 generate_mangling_aliases ()
4449 {
4450 while (!vec_safe_is_empty (mangling_aliases))
4451 {
4452 tree id2 = mangling_aliases->pop();
4453 tree decl = mangling_aliases->pop();
4454 generate_mangling_alias (decl, id2);
4455 }
4456 defer_mangling_aliases = false;
4457 }
4458
4459 /* The entire file is now complete. If requested, dump everything
4460 to a file. */
4461
4462 static void
4463 dump_tu (void)
4464 {
4465 int flags;
4466 FILE *stream = dump_begin (TDI_tu, &flags);
4467
4468 if (stream)
4469 {
4470 dump_node (global_namespace, flags & ~TDF_SLIM, stream);
4471 dump_end (TDI_tu, stream);
4472 }
4473 }
4474
4475 static location_t locus_at_end_of_parsing;
4476
4477 /* Check the deallocation functions for CODE to see if we want to warn that
4478 only one was defined. */
4479
4480 static void
4481 maybe_warn_sized_delete (enum tree_code code)
4482 {
4483 tree sized = NULL_TREE;
4484 tree unsized = NULL_TREE;
4485
4486 for (tree ovl = IDENTIFIER_GLOBAL_VALUE (ansi_opname (code));
4487 ovl; ovl = OVL_NEXT (ovl))
4488 {
4489 tree fn = OVL_CURRENT (ovl);
4490 /* We're only interested in usual deallocation functions. */
4491 if (!usual_deallocation_fn_p (fn))
4492 continue;
4493 if (FUNCTION_ARG_CHAIN (fn) == void_list_node)
4494 unsized = fn;
4495 else
4496 sized = fn;
4497 }
4498 if (DECL_INITIAL (unsized) && !DECL_INITIAL (sized))
4499 warning_at (DECL_SOURCE_LOCATION (unsized), OPT_Wsized_deallocation,
4500 "the program should also define %qD", sized);
4501 else if (!DECL_INITIAL (unsized) && DECL_INITIAL (sized))
4502 warning_at (DECL_SOURCE_LOCATION (sized), OPT_Wsized_deallocation,
4503 "the program should also define %qD", unsized);
4504 }
4505
4506 /* Check the global deallocation functions to see if we want to warn about
4507 defining unsized without sized (or vice versa). */
4508
4509 static void
4510 maybe_warn_sized_delete ()
4511 {
4512 if (!flag_sized_deallocation || !warn_sized_deallocation)
4513 return;
4514 maybe_warn_sized_delete (DELETE_EXPR);
4515 maybe_warn_sized_delete (VEC_DELETE_EXPR);
4516 }
4517
4518 /* Earlier we left PTRMEM_CST in variable initializers alone so that we could
4519 look them up when evaluating non-type template parameters. Now we need to
4520 lower them to something the back end can understand. */
4521
4522 static void
4523 lower_var_init ()
4524 {
4525 varpool_node *node;
4526 FOR_EACH_VARIABLE (node)
4527 {
4528 tree d = node->decl;
4529 if (tree init = DECL_INITIAL (d))
4530 DECL_INITIAL (d) = cplus_expand_constant (init);
4531 }
4532 }
4533
4534 /* This routine is called at the end of compilation.
4535 Its job is to create all the code needed to initialize and
4536 destroy the global aggregates. We do the destruction
4537 first, since that way we only need to reverse the decls once. */
4538
4539 void
4540 c_parse_final_cleanups (void)
4541 {
4542 tree vars;
4543 bool reconsider;
4544 size_t i;
4545 unsigned ssdf_count = 0;
4546 int retries = 0;
4547 tree decl;
4548
4549 locus_at_end_of_parsing = input_location;
4550 at_eof = 1;
4551
4552 /* Bad parse errors. Just forget about it. */
4553 if (! global_bindings_p () || current_class_type
4554 || !vec_safe_is_empty (decl_namespace_list))
4555 return;
4556
4557 /* This is the point to write out a PCH if we're doing that.
4558 In that case we do not want to do anything else. */
4559 if (pch_file)
4560 {
4561 /* Mangle all symbols at PCH creation time. */
4562 symtab_node *node;
4563 FOR_EACH_SYMBOL (node)
4564 if (! is_a <varpool_node *> (node)
4565 || ! DECL_HARD_REGISTER (node->decl))
4566 DECL_ASSEMBLER_NAME (node->decl);
4567 c_common_write_pch ();
4568 dump_tu ();
4569 return;
4570 }
4571
4572 timevar_stop (TV_PHASE_PARSING);
4573 timevar_start (TV_PHASE_DEFERRED);
4574
4575 symtab->process_same_body_aliases ();
4576
4577 /* Handle -fdump-ada-spec[-slim] */
4578 if (flag_dump_ada_spec || flag_dump_ada_spec_slim)
4579 {
4580 if (flag_dump_ada_spec_slim)
4581 collect_source_ref (main_input_filename);
4582 else
4583 collect_source_refs (global_namespace);
4584
4585 dump_ada_specs (collect_all_refs, cpp_check);
4586 }
4587
4588 /* FIXME - huh? was input_line -= 1;*/
4589
4590 /* We now have to write out all the stuff we put off writing out.
4591 These include:
4592
4593 o Template specializations that we have not yet instantiated,
4594 but which are needed.
4595 o Initialization and destruction for non-local objects with
4596 static storage duration. (Local objects with static storage
4597 duration are initialized when their scope is first entered,
4598 and are cleaned up via atexit.)
4599 o Virtual function tables.
4600
4601 All of these may cause others to be needed. For example,
4602 instantiating one function may cause another to be needed, and
4603 generating the initializer for an object may cause templates to be
4604 instantiated, etc., etc. */
4605
4606 emit_support_tinfos ();
4607
4608 do
4609 {
4610 tree t;
4611 tree decl;
4612
4613 reconsider = false;
4614
4615 /* If there are templates that we've put off instantiating, do
4616 them now. */
4617 instantiate_pending_templates (retries);
4618 ggc_collect ();
4619
4620 /* Write out virtual tables as required. Note that writing out
4621 the virtual table for a template class may cause the
4622 instantiation of members of that class. If we write out
4623 vtables then we remove the class from our list so we don't
4624 have to look at it again. */
4625
4626 while (keyed_classes != NULL_TREE
4627 && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
4628 {
4629 reconsider = true;
4630 keyed_classes = TREE_CHAIN (keyed_classes);
4631 }
4632
4633 t = keyed_classes;
4634 if (t != NULL_TREE)
4635 {
4636 tree next = TREE_CHAIN (t);
4637
4638 while (next)
4639 {
4640 if (maybe_emit_vtables (TREE_VALUE (next)))
4641 {
4642 reconsider = true;
4643 TREE_CHAIN (t) = TREE_CHAIN (next);
4644 }
4645 else
4646 t = next;
4647
4648 next = TREE_CHAIN (t);
4649 }
4650 }
4651
4652 /* Write out needed type info variables. We have to be careful
4653 looping through unemitted decls, because emit_tinfo_decl may
4654 cause other variables to be needed. New elements will be
4655 appended, and we remove from the vector those that actually
4656 get emitted. */
4657 for (i = unemitted_tinfo_decls->length ();
4658 unemitted_tinfo_decls->iterate (--i, &t);)
4659 if (emit_tinfo_decl (t))
4660 {
4661 reconsider = true;
4662 unemitted_tinfo_decls->unordered_remove (i);
4663 }
4664
4665 /* The list of objects with static storage duration is built up
4666 in reverse order. We clear STATIC_AGGREGATES so that any new
4667 aggregates added during the initialization of these will be
4668 initialized in the correct order when we next come around the
4669 loop. */
4670 vars = prune_vars_needing_no_initialization (&static_aggregates);
4671
4672 if (vars)
4673 {
4674 /* We need to start a new initialization function each time
4675 through the loop. That's because we need to know which
4676 vtables have been referenced, and TREE_SYMBOL_REFERENCED
4677 isn't computed until a function is finished, and written
4678 out. That's a deficiency in the back end. When this is
4679 fixed, these initialization functions could all become
4680 inline, with resulting performance improvements. */
4681 tree ssdf_body;
4682
4683 /* Set the line and file, so that it is obviously not from
4684 the source file. */
4685 input_location = locus_at_end_of_parsing;
4686 ssdf_body = start_static_storage_duration_function (ssdf_count);
4687
4688 /* Make sure the back end knows about all the variables. */
4689 write_out_vars (vars);
4690
4691 /* First generate code to do all the initializations. */
4692 if (vars)
4693 do_static_initialization_or_destruction (vars, /*initp=*/true);
4694
4695 /* Then, generate code to do all the destructions. Do these
4696 in reverse order so that the most recently constructed
4697 variable is the first destroyed. If we're using
4698 __cxa_atexit, then we don't need to do this; functions
4699 were registered at initialization time to destroy the
4700 local statics. */
4701 if (!flag_use_cxa_atexit && vars)
4702 {
4703 vars = nreverse (vars);
4704 do_static_initialization_or_destruction (vars, /*initp=*/false);
4705 }
4706 else
4707 vars = NULL_TREE;
4708
4709 /* Finish up the static storage duration function for this
4710 round. */
4711 input_location = locus_at_end_of_parsing;
4712 finish_static_storage_duration_function (ssdf_body);
4713
4714 /* All those initializations and finalizations might cause
4715 us to need more inline functions, more template
4716 instantiations, etc. */
4717 reconsider = true;
4718 ssdf_count++;
4719 /* ??? was: locus_at_end_of_parsing.line++; */
4720 }
4721
4722 /* Now do the same for thread_local variables. */
4723 handle_tls_init ();
4724
4725 /* Go through the set of inline functions whose bodies have not
4726 been emitted yet. If out-of-line copies of these functions
4727 are required, emit them. */
4728 FOR_EACH_VEC_SAFE_ELT (deferred_fns, i, decl)
4729 {
4730 /* Does it need synthesizing? */
4731 if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
4732 && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
4733 {
4734 /* Even though we're already at the top-level, we push
4735 there again. That way, when we pop back a few lines
4736 hence, all of our state is restored. Otherwise,
4737 finish_function doesn't clean things up, and we end
4738 up with CURRENT_FUNCTION_DECL set. */
4739 push_to_top_level ();
4740 /* The decl's location will mark where it was first
4741 needed. Save that so synthesize method can indicate
4742 where it was needed from, in case of error */
4743 input_location = DECL_SOURCE_LOCATION (decl);
4744 synthesize_method (decl);
4745 pop_from_top_level ();
4746 reconsider = true;
4747 }
4748
4749 if (!DECL_INITIAL (decl) && decl_tls_wrapper_p (decl))
4750 generate_tls_wrapper (decl);
4751
4752 if (!DECL_SAVED_TREE (decl))
4753 continue;
4754
4755 /* We lie to the back end, pretending that some functions
4756 are not defined when they really are. This keeps these
4757 functions from being put out unnecessarily. But, we must
4758 stop lying when the functions are referenced, or if they
4759 are not comdat since they need to be put out now. If
4760 DECL_INTERFACE_KNOWN, then we have already set
4761 DECL_EXTERNAL appropriately, so there's no need to check
4762 again, and we do not want to clear DECL_EXTERNAL if a
4763 previous call to import_export_decl set it.
4764
4765 This is done in a separate for cycle, because if some
4766 deferred function is contained in another deferred
4767 function later in deferred_fns varray,
4768 rest_of_compilation would skip this function and we
4769 really cannot expand the same function twice. */
4770 import_export_decl (decl);
4771 if (DECL_NOT_REALLY_EXTERN (decl)
4772 && DECL_INITIAL (decl)
4773 && decl_needed_p (decl))
4774 {
4775 struct cgraph_node *node, *next;
4776
4777 node = cgraph_node::get (decl);
4778 if (node->cpp_implicit_alias)
4779 node = node->get_alias_target ();
4780
4781 node->call_for_symbol_thunks_and_aliases (clear_decl_external,
4782 NULL, true);
4783 /* If we mark !DECL_EXTERNAL one of the symbols in some comdat
4784 group, we need to mark all symbols in the same comdat group
4785 that way. */
4786 if (node->same_comdat_group)
4787 for (next = dyn_cast<cgraph_node *> (node->same_comdat_group);
4788 next != node;
4789 next = dyn_cast<cgraph_node *> (next->same_comdat_group))
4790 next->call_for_symbol_thunks_and_aliases (clear_decl_external,
4791 NULL, true);
4792 }
4793
4794 /* If we're going to need to write this function out, and
4795 there's already a body for it, create RTL for it now.
4796 (There might be no body if this is a method we haven't
4797 gotten around to synthesizing yet.) */
4798 if (!DECL_EXTERNAL (decl)
4799 && decl_needed_p (decl)
4800 && !TREE_ASM_WRITTEN (decl)
4801 && !cgraph_node::get (decl)->definition)
4802 {
4803 /* We will output the function; no longer consider it in this
4804 loop. */
4805 DECL_DEFER_OUTPUT (decl) = 0;
4806 /* Generate RTL for this function now that we know we
4807 need it. */
4808 expand_or_defer_fn (decl);
4809 /* If we're compiling -fsyntax-only pretend that this
4810 function has been written out so that we don't try to
4811 expand it again. */
4812 if (flag_syntax_only)
4813 TREE_ASM_WRITTEN (decl) = 1;
4814 reconsider = true;
4815 }
4816 }
4817
4818 if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
4819 reconsider = true;
4820
4821 /* Static data members are just like namespace-scope globals. */
4822 FOR_EACH_VEC_SAFE_ELT (pending_statics, i, decl)
4823 {
4824 if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
4825 /* Don't write it out if we haven't seen a definition. */
4826 || DECL_IN_AGGR_P (decl))
4827 continue;
4828 import_export_decl (decl);
4829 /* If this static data member is needed, provide it to the
4830 back end. */
4831 if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
4832 DECL_EXTERNAL (decl) = 0;
4833 }
4834 if (vec_safe_length (pending_statics) != 0
4835 && wrapup_global_declarations (pending_statics->address (),
4836 pending_statics->length ()))
4837 reconsider = true;
4838
4839 retries++;
4840 }
4841 while (reconsider);
4842
4843 lower_var_init ();
4844
4845 generate_mangling_aliases ();
4846
4847 /* All used inline functions must have a definition at this point. */
4848 FOR_EACH_VEC_SAFE_ELT (deferred_fns, i, decl)
4849 {
4850 if (/* Check online inline functions that were actually used. */
4851 DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
4852 /* If the definition actually was available here, then the
4853 fact that the function was not defined merely represents
4854 that for some reason (use of a template repository,
4855 #pragma interface, etc.) we decided not to emit the
4856 definition here. */
4857 && !DECL_INITIAL (decl)
4858 /* Don't complain if the template was defined. */
4859 && !(DECL_TEMPLATE_INSTANTIATION (decl)
4860 && DECL_INITIAL (DECL_TEMPLATE_RESULT
4861 (template_for_substitution (decl)))))
4862 {
4863 warning_at (DECL_SOURCE_LOCATION (decl), 0,
4864 "inline function %qD used but never defined", decl);
4865 /* Avoid a duplicate warning from check_global_declaration. */
4866 TREE_NO_WARNING (decl) = 1;
4867 }
4868 }
4869
4870 /* So must decls that use a type with no linkage. */
4871 FOR_EACH_VEC_SAFE_ELT (no_linkage_decls, i, decl)
4872 no_linkage_error (decl);
4873
4874 maybe_warn_sized_delete ();
4875
4876 /* Then, do the Objective-C stuff. This is where all the
4877 Objective-C module stuff gets generated (symtab,
4878 class/protocol/selector lists etc). This must be done after C++
4879 templates, destructors etc. so that selectors used in C++
4880 templates are properly allocated. */
4881 if (c_dialect_objc ())
4882 objc_write_global_declarations ();
4883
4884 /* We give C linkage to static constructors and destructors. */
4885 push_lang_context (lang_name_c);
4886
4887 /* Generate initialization and destruction functions for all
4888 priorities for which they are required. */
4889 if (priority_info_map)
4890 splay_tree_foreach (priority_info_map,
4891 generate_ctor_and_dtor_functions_for_priority,
4892 /*data=*/&locus_at_end_of_parsing);
4893 else if (c_dialect_objc () && objc_static_init_needed_p ())
4894 /* If this is obj-c++ and we need a static init, call
4895 generate_ctor_or_dtor_function. */
4896 generate_ctor_or_dtor_function (/*constructor_p=*/true,
4897 DEFAULT_INIT_PRIORITY,
4898 &locus_at_end_of_parsing);
4899
4900 /* We're done with the splay-tree now. */
4901 if (priority_info_map)
4902 splay_tree_delete (priority_info_map);
4903
4904 /* Generate any missing aliases. */
4905 maybe_apply_pending_pragma_weaks ();
4906
4907 /* We're done with static constructors, so we can go back to "C++"
4908 linkage now. */
4909 pop_lang_context ();
4910
4911 /* Generate Java hidden aliases. */
4912 build_java_method_aliases ();
4913
4914 if (flag_vtable_verify)
4915 {
4916 vtv_recover_class_info ();
4917 vtv_compute_class_hierarchy_transitive_closure ();
4918 vtv_build_vtable_verify_fndecl ();
4919 }
4920
4921 perform_deferred_noexcept_checks ();
4922
4923 finish_repo ();
4924
4925 fini_constexpr ();
4926
4927 /* The entire file is now complete. If requested, dump everything
4928 to a file. */
4929 dump_tu ();
4930
4931 if (flag_detailed_statistics)
4932 {
4933 dump_tree_statistics ();
4934 dump_time_statistics ();
4935 }
4936
4937 timevar_stop (TV_PHASE_DEFERRED);
4938 timevar_start (TV_PHASE_PARSING);
4939
4940 /* Indicate that we're done with front end processing. */
4941 at_eof = 2;
4942 }
4943
4944 /* Perform any post compilation-proper cleanups for the C++ front-end.
4945 This should really go away. No front-end should need to do
4946 anything past the compilation process. */
4947
4948 void
4949 cxx_post_compilation_parsing_cleanups (void)
4950 {
4951 timevar_start (TV_PHASE_LATE_PARSING_CLEANUPS);
4952
4953 if (flag_vtable_verify)
4954 {
4955 /* Generate the special constructor initialization function that
4956 calls __VLTRegisterPairs, and give it a very high
4957 initialization priority. This must be done after
4958 finalize_compilation_unit so that we have accurate
4959 information about which vtable will actually be emitted. */
4960 vtv_generate_init_routine ();
4961 }
4962
4963 input_location = locus_at_end_of_parsing;
4964
4965 if (flag_checking)
4966 validate_conversion_obstack ();
4967
4968 timevar_stop (TV_PHASE_LATE_PARSING_CLEANUPS);
4969 }
4970
4971 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
4972 function to call in parse-tree form; it has not yet been
4973 semantically analyzed. ARGS are the arguments to the function.
4974 They have already been semantically analyzed. This may change
4975 ARGS. */
4976
4977 tree
4978 build_offset_ref_call_from_tree (tree fn, vec<tree, va_gc> **args,
4979 tsubst_flags_t complain)
4980 {
4981 tree orig_fn;
4982 vec<tree, va_gc> *orig_args = NULL;
4983 tree expr;
4984 tree object;
4985
4986 orig_fn = fn;
4987 object = TREE_OPERAND (fn, 0);
4988
4989 if (processing_template_decl)
4990 {
4991 gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
4992 || TREE_CODE (fn) == MEMBER_REF);
4993 if (type_dependent_expression_p (fn)
4994 || any_type_dependent_arguments_p (*args))
4995 return build_nt_call_vec (fn, *args);
4996
4997 orig_args = make_tree_vector_copy (*args);
4998
4999 /* Transform the arguments and add the implicit "this"
5000 parameter. That must be done before the FN is transformed
5001 because we depend on the form of FN. */
5002 make_args_non_dependent (*args);
5003 object = build_non_dependent_expr (object);
5004 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
5005 {
5006 if (TREE_CODE (fn) == DOTSTAR_EXPR)
5007 object = cp_build_addr_expr (object, complain);
5008 vec_safe_insert (*args, 0, object);
5009 }
5010 /* Now that the arguments are done, transform FN. */
5011 fn = build_non_dependent_expr (fn);
5012 }
5013
5014 /* A qualified name corresponding to a bound pointer-to-member is
5015 represented as an OFFSET_REF:
5016
5017 struct B { void g(); };
5018 void (B::*p)();
5019 void B::g() { (this->*p)(); } */
5020 if (TREE_CODE (fn) == OFFSET_REF)
5021 {
5022 tree object_addr = cp_build_addr_expr (object, complain);
5023 fn = TREE_OPERAND (fn, 1);
5024 fn = get_member_function_from_ptrfunc (&object_addr, fn,
5025 complain);
5026 vec_safe_insert (*args, 0, object_addr);
5027 }
5028
5029 if (CLASS_TYPE_P (TREE_TYPE (fn)))
5030 expr = build_op_call (fn, args, complain);
5031 else
5032 expr = cp_build_function_call_vec (fn, args, complain);
5033 if (processing_template_decl && expr != error_mark_node)
5034 expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
5035
5036 if (orig_args != NULL)
5037 release_tree_vector (orig_args);
5038
5039 return expr;
5040 }
5041
5042
5043 void
5044 check_default_args (tree x)
5045 {
5046 tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
5047 bool saw_def = false;
5048 int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
5049 for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
5050 {
5051 if (TREE_PURPOSE (arg))
5052 saw_def = true;
5053 else if (saw_def && !PACK_EXPANSION_P (TREE_VALUE (arg)))
5054 {
5055 error ("default argument missing for parameter %P of %q+#D", i, x);
5056 TREE_PURPOSE (arg) = error_mark_node;
5057 }
5058 }
5059 }
5060
5061 /* Return true if function DECL can be inlined. This is used to force
5062 instantiation of methods that might be interesting for inlining. */
5063 bool
5064 possibly_inlined_p (tree decl)
5065 {
5066 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
5067 if (DECL_UNINLINABLE (decl))
5068 return false;
5069 if (!optimize || pragma_java_exceptions)
5070 return DECL_DECLARED_INLINE_P (decl);
5071 /* When optimizing, we might inline everything when flatten
5072 attribute or heuristics inlining for size or autoinlining
5073 is used. */
5074 return true;
5075 }
5076
5077 /* Normally, we can wait until instantiation-time to synthesize DECL.
5078 However, if DECL is a static data member initialized with a constant
5079 or a constexpr function, we need it right now because a reference to
5080 such a data member or a call to such function is not value-dependent.
5081 For a function that uses auto in the return type, we need to instantiate
5082 it to find out its type. For OpenMP user defined reductions, we need
5083 them instantiated for reduction clauses which inline them by hand
5084 directly. */
5085
5086 static void
5087 maybe_instantiate_decl (tree decl)
5088 {
5089 if (DECL_LANG_SPECIFIC (decl)
5090 && DECL_TEMPLATE_INFO (decl)
5091 && (decl_maybe_constant_var_p (decl)
5092 || (TREE_CODE (decl) == FUNCTION_DECL
5093 && DECL_OMP_DECLARE_REDUCTION_P (decl))
5094 || undeduced_auto_decl (decl))
5095 && !DECL_DECLARED_CONCEPT_P (decl)
5096 && !uses_template_parms (DECL_TI_ARGS (decl)))
5097 {
5098 /* Instantiating a function will result in garbage collection. We
5099 must treat this situation as if we were within the body of a
5100 function so as to avoid collecting live data only referenced from
5101 the stack (such as overload resolution candidates). */
5102 ++function_depth;
5103 instantiate_decl (decl, /*defer_ok=*/false,
5104 /*expl_inst_class_mem_p=*/false);
5105 --function_depth;
5106 }
5107 }
5108
5109 /* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
5110 If DECL is a specialization or implicitly declared class member,
5111 generate the actual definition. Return false if something goes
5112 wrong, true otherwise. */
5113
5114 bool
5115 mark_used (tree decl, tsubst_flags_t complain)
5116 {
5117 /* If DECL is a BASELINK for a single function, then treat it just
5118 like the DECL for the function. Otherwise, if the BASELINK is
5119 for an overloaded function, we don't know which function was
5120 actually used until after overload resolution. */
5121 if (BASELINK_P (decl))
5122 {
5123 decl = BASELINK_FUNCTIONS (decl);
5124 if (really_overloaded_fn (decl))
5125 return true;
5126 decl = OVL_CURRENT (decl);
5127 }
5128
5129 /* Set TREE_USED for the benefit of -Wunused. */
5130 TREE_USED (decl) = 1;
5131
5132 if (TREE_CODE (decl) == TEMPLATE_DECL)
5133 return true;
5134
5135 if (DECL_CLONED_FUNCTION_P (decl))
5136 TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
5137
5138 /* Mark enumeration types as used. */
5139 if (TREE_CODE (decl) == CONST_DECL)
5140 used_types_insert (DECL_CONTEXT (decl));
5141
5142 if (TREE_CODE (decl) == FUNCTION_DECL)
5143 maybe_instantiate_noexcept (decl);
5144
5145 if (TREE_CODE (decl) == FUNCTION_DECL
5146 && DECL_DELETED_FN (decl))
5147 {
5148 if (DECL_ARTIFICIAL (decl))
5149 {
5150 if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
5151 && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
5152 {
5153 /* We mark a lambda conversion op as deleted if we can't
5154 generate it properly; see maybe_add_lambda_conv_op. */
5155 sorry ("converting lambda which uses %<...%> to "
5156 "function pointer");
5157 return false;
5158 }
5159 }
5160 if (complain & tf_error)
5161 {
5162 error ("use of deleted function %qD", decl);
5163 if (!maybe_explain_implicit_delete (decl))
5164 inform (DECL_SOURCE_LOCATION (decl), "declared here");
5165 }
5166 return false;
5167 }
5168
5169 if (TREE_DEPRECATED (decl) && (complain & tf_warning)
5170 && deprecated_state != DEPRECATED_SUPPRESS)
5171 warn_deprecated_use (decl, NULL_TREE);
5172
5173 /* We can only check DECL_ODR_USED on variables or functions with
5174 DECL_LANG_SPECIFIC set, and these are also the only decls that we
5175 might need special handling for. */
5176 if (!VAR_OR_FUNCTION_DECL_P (decl)
5177 || DECL_LANG_SPECIFIC (decl) == NULL
5178 || DECL_THUNK_P (decl))
5179 {
5180 if (!processing_template_decl && type_uses_auto (TREE_TYPE (decl)))
5181 {
5182 if (complain & tf_error)
5183 error ("use of %qD before deduction of %<auto%>", decl);
5184 return false;
5185 }
5186 return true;
5187 }
5188
5189 /* We only want to do this processing once. We don't need to keep trying
5190 to instantiate inline templates, because unit-at-a-time will make sure
5191 we get them compiled before functions that want to inline them. */
5192 if (DECL_ODR_USED (decl))
5193 return true;
5194
5195 /* Normally, we can wait until instantiation-time to synthesize DECL.
5196 However, if DECL is a static data member initialized with a constant
5197 or a constexpr function, we need it right now because a reference to
5198 such a data member or a call to such function is not value-dependent.
5199 For a function that uses auto in the return type, we need to instantiate
5200 it to find out its type. For OpenMP user defined reductions, we need
5201 them instantiated for reduction clauses which inline them by hand
5202 directly. */
5203 maybe_instantiate_decl (decl);
5204
5205 if (processing_template_decl || in_template_function ())
5206 return true;
5207
5208 /* Check this too in case we're within instantiate_non_dependent_expr. */
5209 if (DECL_TEMPLATE_INFO (decl)
5210 && uses_template_parms (DECL_TI_ARGS (decl)))
5211 return true;
5212
5213 if (undeduced_auto_decl (decl))
5214 {
5215 if (complain & tf_error)
5216 error ("use of %qD before deduction of %<auto%>", decl);
5217 return false;
5218 }
5219
5220 /* If we don't need a value, then we don't need to synthesize DECL. */
5221 if (cp_unevaluated_operand != 0)
5222 return true;
5223
5224 DECL_ODR_USED (decl) = 1;
5225 if (DECL_CLONED_FUNCTION_P (decl))
5226 DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
5227
5228 /* DR 757: A type without linkage shall not be used as the type of a
5229 variable or function with linkage, unless
5230 o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
5231 o the variable or function is not used (3.2 [basic.def.odr]) or is
5232 defined in the same translation unit. */
5233 if (cxx_dialect > cxx98
5234 && decl_linkage (decl) != lk_none
5235 && !DECL_EXTERN_C_P (decl)
5236 && !DECL_ARTIFICIAL (decl)
5237 && !decl_defined_p (decl)
5238 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
5239 {
5240 if (is_local_extern (decl))
5241 /* There's no way to define a local extern, and adding it to
5242 the vector interferes with GC, so give an error now. */
5243 no_linkage_error (decl);
5244 else
5245 vec_safe_push (no_linkage_decls, decl);
5246 }
5247
5248 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
5249 && !DECL_INITIAL (decl) && !DECL_ARTIFICIAL (decl))
5250 /* Remember it, so we can check it was defined. */
5251 note_vague_linkage_fn (decl);
5252
5253 /* Is it a synthesized method that needs to be synthesized? */
5254 if (TREE_CODE (decl) == FUNCTION_DECL
5255 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
5256 && DECL_DEFAULTED_FN (decl)
5257 /* A function defaulted outside the class is synthesized either by
5258 cp_finish_decl or instantiate_decl. */
5259 && !DECL_DEFAULTED_OUTSIDE_CLASS_P (decl)
5260 && ! DECL_INITIAL (decl))
5261 {
5262 /* Defer virtual destructors so that thunks get the right
5263 linkage. */
5264 if (DECL_VIRTUAL_P (decl) && !at_eof)
5265 {
5266 note_vague_linkage_fn (decl);
5267 return true;
5268 }
5269
5270 /* Remember the current location for a function we will end up
5271 synthesizing. Then we can inform the user where it was
5272 required in the case of error. */
5273 DECL_SOURCE_LOCATION (decl) = input_location;
5274
5275 /* Synthesizing an implicitly defined member function will result in
5276 garbage collection. We must treat this situation as if we were
5277 within the body of a function so as to avoid collecting live data
5278 on the stack (such as overload resolution candidates).
5279
5280 We could just let cp_write_global_declarations handle synthesizing
5281 this function by adding it to deferred_fns, but doing
5282 it at the use site produces better error messages. */
5283 ++function_depth;
5284 synthesize_method (decl);
5285 --function_depth;
5286 /* If this is a synthesized method we don't need to
5287 do the instantiation test below. */
5288 }
5289 else if (VAR_OR_FUNCTION_DECL_P (decl)
5290 && DECL_TEMPLATE_INFO (decl)
5291 && !DECL_DECLARED_CONCEPT_P (decl)
5292 && (!DECL_EXPLICIT_INSTANTIATION (decl)
5293 || always_instantiate_p (decl)))
5294 /* If this is a function or variable that is an instance of some
5295 template, we now know that we will need to actually do the
5296 instantiation. We check that DECL is not an explicit
5297 instantiation because that is not checked in instantiate_decl.
5298
5299 We put off instantiating functions in order to improve compile
5300 times. Maintaining a stack of active functions is expensive,
5301 and the inliner knows to instantiate any functions it might
5302 need. Therefore, we always try to defer instantiation. */
5303 {
5304 ++function_depth;
5305 instantiate_decl (decl, /*defer_ok=*/true,
5306 /*expl_inst_class_mem_p=*/false);
5307 --function_depth;
5308 }
5309
5310 return true;
5311 }
5312
5313 bool
5314 mark_used (tree decl)
5315 {
5316 return mark_used (decl, tf_warning_or_error);
5317 }
5318
5319 tree
5320 vtv_start_verification_constructor_init_function (void)
5321 {
5322 return start_objects ('I', MAX_RESERVED_INIT_PRIORITY - 1);
5323 }
5324
5325 tree
5326 vtv_finish_verification_constructor_init_function (tree function_body)
5327 {
5328 tree fn;
5329
5330 finish_compound_stmt (function_body);
5331 fn = finish_function (0);
5332 DECL_STATIC_CONSTRUCTOR (fn) = 1;
5333 decl_init_priority_insert (fn, MAX_RESERVED_INIT_PRIORITY - 1);
5334
5335 return fn;
5336 }
5337
5338 #include "gt-cp-decl2.h"