Partial implementation of C++11 thread_local.
[official-gcc.git] / gcc / cp / decl2.c
blobf7db1d81b5d905b1fd256a434407a87c0db8a8a6
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010,
4 2011, 2012 Free Software Foundation, Inc.
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
24 /* Process declarations and symbol lookup for C++ front end.
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
28 /* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "flags.h"
37 #include "cp-tree.h"
38 #include "decl.h"
39 #include "toplev.h"
40 #include "timevar.h"
41 #include "cpplib.h"
42 #include "target.h"
43 #include "c-family/c-common.h"
44 #include "c-family/c-objc.h"
45 #include "cgraph.h"
46 #include "tree-inline.h"
47 #include "c-family/c-pragma.h"
48 #include "dumpfile.h"
49 #include "intl.h"
50 #include "gimple.h"
51 #include "pointer-set.h"
52 #include "splay-tree.h"
53 #include "langhooks.h"
54 #include "c-family/c-ada-spec.h"
56 extern cpp_reader *parse_in;
58 /* This structure contains information about the initializations
59 and/or destructions required for a particular priority level. */
60 typedef struct priority_info_s {
61 /* Nonzero if there have been any initializations at this priority
62 throughout the translation unit. */
63 int initializations_p;
64 /* Nonzero if there have been any destructions at this priority
65 throughout the translation unit. */
66 int destructions_p;
67 } *priority_info;
69 static void mark_vtable_entries (tree);
70 static bool maybe_emit_vtables (tree);
71 static bool acceptable_java_type (tree);
72 static tree start_objects (int, int);
73 static void finish_objects (int, int, tree);
74 static tree start_static_storage_duration_function (unsigned);
75 static void finish_static_storage_duration_function (tree);
76 static priority_info get_priority_info (int);
77 static void do_static_initialization_or_destruction (tree, bool);
78 static void one_static_initialization_or_destruction (tree, tree, bool);
79 static void generate_ctor_or_dtor_function (bool, int, location_t *);
80 static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
81 void *);
82 static tree prune_vars_needing_no_initialization (tree *);
83 static void write_out_vars (tree);
84 static void import_export_class (tree);
85 static tree get_guard_bits (tree);
86 static void determine_visibility_from_class (tree, tree);
87 static bool determine_hidden_inline (tree);
88 static bool decl_defined_p (tree);
90 /* A list of static class variables. This is needed, because a
91 static class variable can be declared inside the class without
92 an initializer, and then initialized, statically, outside the class. */
93 static GTY(()) VEC(tree,gc) *pending_statics;
95 /* A list of functions which were declared inline, but which we
96 may need to emit outline anyway. */
97 static GTY(()) VEC(tree,gc) *deferred_fns;
99 /* A list of decls that use types with no linkage, which we need to make
100 sure are defined. */
101 static GTY(()) VEC(tree,gc) *no_linkage_decls;
103 /* Nonzero if we're done parsing and into end-of-file activities. */
105 int at_eof;
109 /* Return a member function type (a METHOD_TYPE), given FNTYPE (a
110 FUNCTION_TYPE), CTYPE (class type), and QUALS (the cv-qualifiers
111 that apply to the function). */
113 tree
114 build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals)
116 tree raises;
117 tree attrs;
118 int type_quals;
120 if (fntype == error_mark_node || ctype == error_mark_node)
121 return error_mark_node;
123 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
124 || TREE_CODE (fntype) == METHOD_TYPE);
126 type_quals = quals & ~TYPE_QUAL_RESTRICT;
127 ctype = cp_build_qualified_type (ctype, type_quals);
128 raises = TYPE_RAISES_EXCEPTIONS (fntype);
129 attrs = TYPE_ATTRIBUTES (fntype);
130 fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
131 (TREE_CODE (fntype) == METHOD_TYPE
132 ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
133 : TYPE_ARG_TYPES (fntype)));
134 if (raises)
135 fntype = build_exception_variant (fntype, raises);
136 if (attrs)
137 fntype = cp_build_type_attribute_variant (fntype, attrs);
139 return fntype;
142 /* Return a variant of FNTYPE, a FUNCTION_TYPE or METHOD_TYPE, with its
143 return type changed to NEW_RET. */
145 tree
146 change_return_type (tree new_ret, tree fntype)
148 tree newtype;
149 tree args = TYPE_ARG_TYPES (fntype);
150 tree raises = TYPE_RAISES_EXCEPTIONS (fntype);
151 tree attrs = TYPE_ATTRIBUTES (fntype);
153 if (new_ret == error_mark_node)
154 return fntype;
156 if (same_type_p (new_ret, TREE_TYPE (fntype)))
157 return fntype;
159 if (TREE_CODE (fntype) == FUNCTION_TYPE)
161 newtype = build_function_type (new_ret, args);
162 newtype = apply_memfn_quals (newtype, type_memfn_quals (fntype));
164 else
165 newtype = build_method_type_directly
166 (class_of_this_parm (fntype), new_ret, TREE_CHAIN (args));
167 if (raises)
168 newtype = build_exception_variant (newtype, raises);
169 if (attrs)
170 newtype = cp_build_type_attribute_variant (newtype, attrs);
172 return newtype;
175 /* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
176 appropriately. */
178 tree
179 cp_build_parm_decl (tree name, tree type)
181 tree parm = build_decl (input_location,
182 PARM_DECL, name, type);
183 /* DECL_ARG_TYPE is only used by the back end and the back end never
184 sees templates. */
185 if (!processing_template_decl)
186 DECL_ARG_TYPE (parm) = type_passed_as (type);
188 /* If the type is a pack expansion, then we have a function
189 parameter pack. */
190 if (type && TREE_CODE (type) == TYPE_PACK_EXPANSION)
191 FUNCTION_PARAMETER_PACK_P (parm) = 1;
193 return parm;
196 /* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
197 indicated NAME. */
199 tree
200 build_artificial_parm (tree name, tree type)
202 tree parm = cp_build_parm_decl (name, type);
203 DECL_ARTIFICIAL (parm) = 1;
204 /* All our artificial parms are implicitly `const'; they cannot be
205 assigned to. */
206 TREE_READONLY (parm) = 1;
207 return parm;
210 /* Constructors for types with virtual baseclasses need an "in-charge" flag
211 saying whether this constructor is responsible for initialization of
212 virtual baseclasses or not. All destructors also need this "in-charge"
213 flag, which additionally determines whether or not the destructor should
214 free the memory for the object.
216 This function adds the "in-charge" flag to member function FN if
217 appropriate. It is called from grokclassfn and tsubst.
218 FN must be either a constructor or destructor.
220 The in-charge flag follows the 'this' parameter, and is followed by the
221 VTT parm (if any), then the user-written parms. */
223 void
224 maybe_retrofit_in_chrg (tree fn)
226 tree basetype, arg_types, parms, parm, fntype;
228 /* If we've already add the in-charge parameter don't do it again. */
229 if (DECL_HAS_IN_CHARGE_PARM_P (fn))
230 return;
232 /* When processing templates we can't know, in general, whether or
233 not we're going to have virtual baseclasses. */
234 if (processing_template_decl)
235 return;
237 /* We don't need an in-charge parameter for constructors that don't
238 have virtual bases. */
239 if (DECL_CONSTRUCTOR_P (fn)
240 && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
241 return;
243 arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
244 basetype = TREE_TYPE (TREE_VALUE (arg_types));
245 arg_types = TREE_CHAIN (arg_types);
247 parms = DECL_CHAIN (DECL_ARGUMENTS (fn));
249 /* If this is a subobject constructor or destructor, our caller will
250 pass us a pointer to our VTT. */
251 if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
253 parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
255 /* First add it to DECL_ARGUMENTS between 'this' and the real args... */
256 DECL_CHAIN (parm) = parms;
257 parms = parm;
259 /* ...and then to TYPE_ARG_TYPES. */
260 arg_types = hash_tree_chain (vtt_parm_type, arg_types);
262 DECL_HAS_VTT_PARM_P (fn) = 1;
265 /* Then add the in-charge parm (before the VTT parm). */
266 parm = build_artificial_parm (in_charge_identifier, integer_type_node);
267 DECL_CHAIN (parm) = parms;
268 parms = parm;
269 arg_types = hash_tree_chain (integer_type_node, arg_types);
271 /* Insert our new parameter(s) into the list. */
272 DECL_CHAIN (DECL_ARGUMENTS (fn)) = parms;
274 /* And rebuild the function type. */
275 fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
276 arg_types);
277 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
278 fntype = build_exception_variant (fntype,
279 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
280 if (TYPE_ATTRIBUTES (TREE_TYPE (fn)))
281 fntype = (cp_build_type_attribute_variant
282 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (fn))));
283 TREE_TYPE (fn) = fntype;
285 /* Now we've got the in-charge parameter. */
286 DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
289 /* Classes overload their constituent function names automatically.
290 When a function name is declared in a record structure,
291 its name is changed to it overloaded name. Since names for
292 constructors and destructors can conflict, we place a leading
293 '$' for destructors.
295 CNAME is the name of the class we are grokking for.
297 FUNCTION is a FUNCTION_DECL. It was created by `grokdeclarator'.
299 FLAGS contains bits saying what's special about today's
300 arguments. DTOR_FLAG == DESTRUCTOR.
302 If FUNCTION is a destructor, then we must add the `auto-delete' field
303 as a second parameter. There is some hair associated with the fact
304 that we must "declare" this variable in the manner consistent with the
305 way the rest of the arguments were declared.
307 QUALS are the qualifiers for the this pointer. */
309 void
310 grokclassfn (tree ctype, tree function, enum overload_flags flags)
312 tree fn_name = DECL_NAME (function);
314 /* Even within an `extern "C"' block, members get C++ linkage. See
315 [dcl.link] for details. */
316 SET_DECL_LANGUAGE (function, lang_cplusplus);
318 if (fn_name == NULL_TREE)
320 error ("name missing for member function");
321 fn_name = get_identifier ("<anonymous>");
322 DECL_NAME (function) = fn_name;
325 DECL_CONTEXT (function) = ctype;
327 if (flags == DTOR_FLAG)
328 DECL_DESTRUCTOR_P (function) = 1;
330 if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
331 maybe_retrofit_in_chrg (function);
334 /* Create an ARRAY_REF, checking for the user doing things backwards
335 along the way. */
337 tree
338 grok_array_decl (location_t loc, tree array_expr, tree index_exp)
340 tree type;
341 tree expr;
342 tree orig_array_expr = array_expr;
343 tree orig_index_exp = index_exp;
345 if (error_operand_p (array_expr) || error_operand_p (index_exp))
346 return error_mark_node;
348 if (processing_template_decl)
350 if (type_dependent_expression_p (array_expr)
351 || type_dependent_expression_p (index_exp))
352 return build_min_nt_loc (loc, ARRAY_REF, array_expr, index_exp,
353 NULL_TREE, NULL_TREE);
354 array_expr = build_non_dependent_expr (array_expr);
355 index_exp = build_non_dependent_expr (index_exp);
358 type = TREE_TYPE (array_expr);
359 gcc_assert (type);
360 type = non_reference (type);
362 /* If they have an `operator[]', use that. */
363 if (MAYBE_CLASS_TYPE_P (type) || MAYBE_CLASS_TYPE_P (TREE_TYPE (index_exp)))
364 expr = build_new_op (loc, ARRAY_REF, LOOKUP_NORMAL, array_expr, index_exp,
365 NULL_TREE, /*overload=*/NULL, tf_warning_or_error);
366 else
368 tree p1, p2, i1, i2;
370 /* Otherwise, create an ARRAY_REF for a pointer or array type.
371 It is a little-known fact that, if `a' is an array and `i' is
372 an int, you can write `i[a]', which means the same thing as
373 `a[i]'. */
374 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
375 p1 = array_expr;
376 else
377 p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
379 if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
380 p2 = index_exp;
381 else
382 p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
384 i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
385 false);
386 i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
387 false);
389 if ((p1 && i2) && (i1 && p2))
390 error ("ambiguous conversion for array subscript");
392 if (p1 && i2)
393 array_expr = p1, index_exp = i2;
394 else if (i1 && p2)
395 array_expr = p2, index_exp = i1;
396 else
398 error ("invalid types %<%T[%T]%> for array subscript",
399 type, TREE_TYPE (index_exp));
400 return error_mark_node;
403 if (array_expr == error_mark_node || index_exp == error_mark_node)
404 error ("ambiguous conversion for array subscript");
406 expr = build_array_ref (input_location, array_expr, index_exp);
408 if (processing_template_decl && expr != error_mark_node)
409 return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
410 NULL_TREE, NULL_TREE);
411 return expr;
414 /* Given the cast expression EXP, checking out its validity. Either return
415 an error_mark_node if there was an unavoidable error, return a cast to
416 void for trying to delete a pointer w/ the value 0, or return the
417 call to delete. If DOING_VEC is true, we handle things differently
418 for doing an array delete.
419 Implements ARM $5.3.4. This is called from the parser. */
421 tree
422 delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete,
423 tsubst_flags_t complain)
425 tree t, type;
427 if (exp == error_mark_node)
428 return exp;
430 if (processing_template_decl)
432 t = build_min (DELETE_EXPR, void_type_node, exp, size);
433 DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
434 DELETE_EXPR_USE_VEC (t) = doing_vec;
435 TREE_SIDE_EFFECTS (t) = 1;
436 return t;
439 /* An array can't have been allocated by new, so complain. */
440 if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
441 warning (0, "deleting array %q#E", exp);
443 t = build_expr_type_conversion (WANT_POINTER, exp, true);
445 if (t == NULL_TREE || t == error_mark_node)
447 error ("type %q#T argument given to %<delete%>, expected pointer",
448 TREE_TYPE (exp));
449 return error_mark_node;
452 type = TREE_TYPE (t);
454 /* As of Valley Forge, you can delete a pointer to const. */
456 /* You can't delete functions. */
457 if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
459 error ("cannot delete a function. Only pointer-to-objects are "
460 "valid arguments to %<delete%>");
461 return error_mark_node;
464 /* Deleting ptr to void is undefined behavior [expr.delete/3]. */
465 if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
467 warning (0, "deleting %qT is undefined", type);
468 doing_vec = 0;
471 /* Deleting a pointer with the value zero is valid and has no effect. */
472 if (integer_zerop (t))
473 return build1 (NOP_EXPR, void_type_node, t);
475 if (doing_vec)
476 return build_vec_delete (t, /*maxindex=*/NULL_TREE,
477 sfk_deleting_destructor,
478 use_global_delete, complain);
479 else
480 return build_delete (type, t, sfk_deleting_destructor,
481 LOOKUP_NORMAL, use_global_delete,
482 complain);
485 /* Report an error if the indicated template declaration is not the
486 sort of thing that should be a member template. */
488 void
489 check_member_template (tree tmpl)
491 tree decl;
493 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
494 decl = DECL_TEMPLATE_RESULT (tmpl);
496 if (TREE_CODE (decl) == FUNCTION_DECL
497 || DECL_ALIAS_TEMPLATE_P (tmpl)
498 || (TREE_CODE (decl) == TYPE_DECL
499 && MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
501 /* The parser rejects template declarations in local classes. */
502 gcc_assert (!current_function_decl);
503 /* The parser rejects any use of virtual in a function template. */
504 gcc_assert (!(TREE_CODE (decl) == FUNCTION_DECL
505 && DECL_VIRTUAL_P (decl)));
507 /* The debug-information generating code doesn't know what to do
508 with member templates. */
509 DECL_IGNORED_P (tmpl) = 1;
511 else
512 error ("template declaration of %q#D", decl);
515 /* Return true iff TYPE is a valid Java parameter or return type. */
517 static bool
518 acceptable_java_type (tree type)
520 if (type == error_mark_node)
521 return false;
523 if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
524 return true;
525 if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
527 type = TREE_TYPE (type);
528 if (TREE_CODE (type) == RECORD_TYPE)
530 tree args; int i;
531 if (! TYPE_FOR_JAVA (type))
532 return false;
533 if (! CLASSTYPE_TEMPLATE_INFO (type))
534 return true;
535 args = CLASSTYPE_TI_ARGS (type);
536 i = TREE_VEC_LENGTH (args);
537 while (--i >= 0)
539 type = TREE_VEC_ELT (args, i);
540 if (TREE_CODE (type) == POINTER_TYPE)
541 type = TREE_TYPE (type);
542 if (! TYPE_FOR_JAVA (type))
543 return false;
545 return true;
548 return false;
551 /* For a METHOD in a Java class CTYPE, return true if
552 the parameter and return types are valid Java types.
553 Otherwise, print appropriate error messages, and return false. */
555 bool
556 check_java_method (tree method)
558 bool jerr = false;
559 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
560 tree ret_type = TREE_TYPE (TREE_TYPE (method));
562 if (!acceptable_java_type (ret_type))
564 error ("Java method %qD has non-Java return type %qT",
565 method, ret_type);
566 jerr = true;
569 arg_types = TREE_CHAIN (arg_types);
570 if (DECL_HAS_IN_CHARGE_PARM_P (method))
571 arg_types = TREE_CHAIN (arg_types);
572 if (DECL_HAS_VTT_PARM_P (method))
573 arg_types = TREE_CHAIN (arg_types);
575 for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
577 tree type = TREE_VALUE (arg_types);
578 if (!acceptable_java_type (type))
580 if (type != error_mark_node)
581 error ("Java method %qD has non-Java parameter type %qT",
582 method, type);
583 jerr = true;
586 return !jerr;
589 /* Sanity check: report error if this function FUNCTION is not
590 really a member of the class (CTYPE) it is supposed to belong to.
591 TEMPLATE_PARMS is used to specify the template parameters of a member
592 template passed as FUNCTION_DECL. If the member template is passed as a
593 TEMPLATE_DECL, it can be NULL since the parameters can be extracted
594 from the declaration. If the function is not a function template, it
595 must be NULL.
596 It returns the original declaration for the function, NULL_TREE if
597 no declaration was found, error_mark_node if an error was emitted. */
599 tree
600 check_classfn (tree ctype, tree function, tree template_parms)
602 int ix;
603 bool is_template;
604 tree pushed_scope;
606 if (DECL_USE_TEMPLATE (function)
607 && !(TREE_CODE (function) == TEMPLATE_DECL
608 && DECL_TEMPLATE_SPECIALIZATION (function))
609 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
610 /* Since this is a specialization of a member template,
611 we're not going to find the declaration in the class.
612 For example, in:
614 struct S { template <typename T> void f(T); };
615 template <> void S::f(int);
617 we're not going to find `S::f(int)', but there's no
618 reason we should, either. We let our callers know we didn't
619 find the method, but we don't complain. */
620 return NULL_TREE;
622 /* Basic sanity check: for a template function, the template parameters
623 either were not passed, or they are the same of DECL_TEMPLATE_PARMS. */
624 if (TREE_CODE (function) == TEMPLATE_DECL)
626 if (template_parms
627 && !comp_template_parms (template_parms,
628 DECL_TEMPLATE_PARMS (function)))
630 error ("template parameter lists provided don%'t match the "
631 "template parameters of %qD", function);
632 return error_mark_node;
634 template_parms = DECL_TEMPLATE_PARMS (function);
637 /* OK, is this a definition of a member template? */
638 is_template = (template_parms != NULL_TREE);
640 /* We must enter the scope here, because conversion operators are
641 named by target type, and type equivalence relies on typenames
642 resolving within the scope of CTYPE. */
643 pushed_scope = push_scope (ctype);
644 ix = class_method_index_for_fn (complete_type (ctype), function);
645 if (ix >= 0)
647 VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype);
648 tree fndecls, fndecl = 0;
649 bool is_conv_op;
650 const char *format = NULL;
652 for (fndecls = VEC_index (tree, methods, ix);
653 fndecls; fndecls = OVL_NEXT (fndecls))
655 tree p1, p2;
657 fndecl = OVL_CURRENT (fndecls);
658 p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
659 p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
661 /* We cannot simply call decls_match because this doesn't
662 work for static member functions that are pretending to
663 be methods, and because the name may have been changed by
664 asm("new_name"). */
666 /* Get rid of the this parameter on functions that become
667 static. */
668 if (DECL_STATIC_FUNCTION_P (fndecl)
669 && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
670 p1 = TREE_CHAIN (p1);
672 /* A member template definition only matches a member template
673 declaration. */
674 if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
675 continue;
677 if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
678 TREE_TYPE (TREE_TYPE (fndecl)))
679 && compparms (p1, p2)
680 && (!is_template
681 || comp_template_parms (template_parms,
682 DECL_TEMPLATE_PARMS (fndecl)))
683 && (DECL_TEMPLATE_SPECIALIZATION (function)
684 == DECL_TEMPLATE_SPECIALIZATION (fndecl))
685 && (!DECL_TEMPLATE_SPECIALIZATION (function)
686 || (DECL_TI_TEMPLATE (function)
687 == DECL_TI_TEMPLATE (fndecl))))
688 break;
690 if (fndecls)
692 if (pushed_scope)
693 pop_scope (pushed_scope);
694 return OVL_CURRENT (fndecls);
697 error_at (DECL_SOURCE_LOCATION (function),
698 "prototype for %q#D does not match any in class %qT",
699 function, ctype);
700 is_conv_op = DECL_CONV_FN_P (fndecl);
702 if (is_conv_op)
703 ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
704 fndecls = VEC_index (tree, methods, ix);
705 while (fndecls)
707 fndecl = OVL_CURRENT (fndecls);
708 fndecls = OVL_NEXT (fndecls);
710 if (!fndecls && is_conv_op)
712 if (VEC_length (tree, methods) > (size_t) ++ix)
714 fndecls = VEC_index (tree, methods, ix);
715 if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
717 fndecls = NULL_TREE;
718 is_conv_op = false;
721 else
722 is_conv_op = false;
724 if (format)
725 format = " %+#D";
726 else if (fndecls)
727 format = N_("candidates are: %+#D");
728 else
729 format = N_("candidate is: %+#D");
730 error (format, fndecl);
733 else if (!COMPLETE_TYPE_P (ctype))
734 cxx_incomplete_type_error (function, ctype);
735 else
736 error ("no %q#D member function declared in class %qT",
737 function, ctype);
739 if (pushed_scope)
740 pop_scope (pushed_scope);
741 return error_mark_node;
744 /* DECL is a function with vague linkage. Remember it so that at the
745 end of the translation unit we can decide whether or not to emit
746 it. */
748 void
749 note_vague_linkage_fn (tree decl)
751 DECL_DEFER_OUTPUT (decl) = 1;
752 VEC_safe_push (tree, gc, deferred_fns, decl);
755 /* We have just processed the DECL, which is a static data member.
756 The other parameters are as for cp_finish_decl. */
758 void
759 finish_static_data_member_decl (tree decl,
760 tree init, bool init_const_expr_p,
761 tree asmspec_tree,
762 int flags)
764 DECL_CONTEXT (decl) = current_class_type;
766 /* We cannot call pushdecl here, because that would fill in the
767 TREE_CHAIN of our decl. Instead, we modify cp_finish_decl to do
768 the right thing, namely, to put this decl out straight away. */
770 if (! processing_template_decl)
771 VEC_safe_push (tree, gc, pending_statics, decl);
773 if (LOCAL_CLASS_P (current_class_type)
774 /* We already complained about the template definition. */
775 && !DECL_TEMPLATE_INSTANTIATION (decl))
776 permerror (input_location, "local class %q#T shall not have static data member %q#D",
777 current_class_type, decl);
779 DECL_IN_AGGR_P (decl) = 1;
781 if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE
782 && TYPE_DOMAIN (TREE_TYPE (decl)) == NULL_TREE)
783 SET_VAR_HAD_UNKNOWN_BOUND (decl);
785 cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
788 /* DECLARATOR and DECLSPECS correspond to a class member. The other
789 parameters are as for cp_finish_decl. Return the DECL for the
790 class member declared. */
792 tree
793 grokfield (const cp_declarator *declarator,
794 cp_decl_specifier_seq *declspecs,
795 tree init, bool init_const_expr_p,
796 tree asmspec_tree,
797 tree attrlist)
799 tree value;
800 const char *asmspec = 0;
801 int flags;
802 tree name;
804 if (init
805 && TREE_CODE (init) == TREE_LIST
806 && TREE_VALUE (init) == error_mark_node
807 && TREE_CHAIN (init) == NULL_TREE)
808 init = NULL_TREE;
810 value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
811 if (! value || error_operand_p (value))
812 /* friend or constructor went bad. */
813 return error_mark_node;
815 if (TREE_CODE (value) == TYPE_DECL && init)
817 error ("typedef %qD is initialized (use decltype instead)", value);
818 init = NULL_TREE;
821 /* Pass friendly classes back. */
822 if (value == void_type_node)
823 return value;
825 /* Pass friend decls back. */
826 if ((TREE_CODE (value) == FUNCTION_DECL
827 || TREE_CODE (value) == TEMPLATE_DECL)
828 && DECL_CONTEXT (value) != current_class_type)
829 return value;
831 name = DECL_NAME (value);
833 if (name != NULL_TREE)
835 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
837 error ("explicit template argument list not allowed");
838 return error_mark_node;
841 if (IDENTIFIER_POINTER (name)[0] == '_'
842 && ! strcmp (IDENTIFIER_POINTER (name), "_vptr"))
843 error ("member %qD conflicts with virtual function table field name",
844 value);
847 /* Stash away type declarations. */
848 if (TREE_CODE (value) == TYPE_DECL)
850 DECL_NONLOCAL (value) = 1;
851 DECL_CONTEXT (value) = current_class_type;
853 if (attrlist)
855 int attrflags = 0;
857 /* If this is a typedef that names the class for linkage purposes
858 (7.1.3p8), apply any attributes directly to the type. */
859 if (TAGGED_TYPE_P (TREE_TYPE (value))
860 && value == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))))
861 attrflags = ATTR_FLAG_TYPE_IN_PLACE;
863 cplus_decl_attributes (&value, attrlist, attrflags);
866 if (decl_spec_seq_has_spec_p (declspecs, ds_typedef)
867 && TREE_TYPE (value) != error_mark_node
868 && TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))) != value)
869 set_underlying_type (value);
871 /* It's important that push_template_decl below follows
872 set_underlying_type above so that the created template
873 carries the properly set type of VALUE. */
874 if (processing_template_decl)
875 value = push_template_decl (value);
877 record_locally_defined_typedef (value);
878 return value;
881 if (DECL_IN_AGGR_P (value))
883 error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
884 return void_type_node;
887 if (asmspec_tree && asmspec_tree != error_mark_node)
888 asmspec = TREE_STRING_POINTER (asmspec_tree);
890 if (init)
892 if (TREE_CODE (value) == FUNCTION_DECL)
894 /* Initializers for functions are rejected early in the parser.
895 If we get here, it must be a pure specifier for a method. */
896 if (init == ridpointers[(int)RID_DELETE])
898 DECL_DELETED_FN (value) = 1;
899 DECL_DECLARED_INLINE_P (value) = 1;
900 DECL_INITIAL (value) = error_mark_node;
902 else if (init == ridpointers[(int)RID_DEFAULT])
904 if (defaultable_fn_check (value))
906 DECL_DEFAULTED_FN (value) = 1;
907 DECL_INITIALIZED_IN_CLASS_P (value) = 1;
908 DECL_DECLARED_INLINE_P (value) = 1;
911 else if (TREE_CODE (init) == DEFAULT_ARG)
912 error ("invalid initializer for member function %qD", value);
913 else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
915 if (integer_zerop (init))
916 DECL_PURE_VIRTUAL_P (value) = 1;
917 else if (error_operand_p (init))
918 ; /* An error has already been reported. */
919 else
920 error ("invalid initializer for member function %qD",
921 value);
923 else
925 gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
926 error ("initializer specified for static member function %qD",
927 value);
930 else if (TREE_CODE (value) == FIELD_DECL)
931 /* C++11 NSDMI, keep going. */;
932 else if (TREE_CODE (value) != VAR_DECL)
933 gcc_unreachable ();
934 else if (!processing_template_decl)
936 if (TREE_CODE (init) == CONSTRUCTOR)
937 init = digest_init (TREE_TYPE (value), init, tf_warning_or_error);
938 init = maybe_constant_init (init);
940 if (init != error_mark_node && !TREE_CONSTANT (init))
942 /* We can allow references to things that are effectively
943 static, since references are initialized with the
944 address. */
945 if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
946 || (TREE_STATIC (init) == 0
947 && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
949 error ("field initializer is not constant");
950 init = error_mark_node;
956 if (processing_template_decl
957 && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
959 value = push_template_decl (value);
960 if (error_operand_p (value))
961 return error_mark_node;
964 if (attrlist)
965 cplus_decl_attributes (&value, attrlist, 0);
967 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
968 && CONSTRUCTOR_IS_DIRECT_INIT (init))
969 flags = LOOKUP_NORMAL;
970 else
971 flags = LOOKUP_IMPLICIT;
973 switch (TREE_CODE (value))
975 case VAR_DECL:
976 finish_static_data_member_decl (value, init, init_const_expr_p,
977 asmspec_tree, flags);
978 return value;
980 case FIELD_DECL:
981 if (asmspec)
982 error ("%<asm%> specifiers are not permitted on non-static data members");
983 if (DECL_INITIAL (value) == error_mark_node)
984 init = error_mark_node;
985 cp_finish_decl (value, init, /*init_const_expr_p=*/false,
986 NULL_TREE, flags);
987 DECL_IN_AGGR_P (value) = 1;
988 return value;
990 case FUNCTION_DECL:
991 if (asmspec)
992 set_user_assembler_name (value, asmspec);
994 cp_finish_decl (value,
995 /*init=*/NULL_TREE,
996 /*init_const_expr_p=*/false,
997 asmspec_tree, flags);
999 /* Pass friends back this way. */
1000 if (DECL_FRIEND_P (value))
1001 return void_type_node;
1003 DECL_IN_AGGR_P (value) = 1;
1004 return value;
1006 default:
1007 gcc_unreachable ();
1009 return NULL_TREE;
1012 /* Like `grokfield', but for bitfields.
1013 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node. */
1015 tree
1016 grokbitfield (const cp_declarator *declarator,
1017 cp_decl_specifier_seq *declspecs, tree width,
1018 tree attrlist)
1020 tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
1022 if (value == error_mark_node)
1023 return NULL_TREE; /* friends went bad. */
1025 /* Pass friendly classes back. */
1026 if (TREE_CODE (value) == VOID_TYPE)
1027 return void_type_node;
1029 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))
1030 && (POINTER_TYPE_P (value)
1031 || !dependent_type_p (TREE_TYPE (value))))
1033 error ("bit-field %qD with non-integral type", value);
1034 return error_mark_node;
1037 if (TREE_CODE (value) == TYPE_DECL)
1039 error ("cannot declare %qD to be a bit-field type", value);
1040 return NULL_TREE;
1043 /* Usually, finish_struct_1 catches bitfields with invalid types.
1044 But, in the case of bitfields with function type, we confuse
1045 ourselves into thinking they are member functions, so we must
1046 check here. */
1047 if (TREE_CODE (value) == FUNCTION_DECL)
1049 error ("cannot declare bit-field %qD with function type",
1050 DECL_NAME (value));
1051 return NULL_TREE;
1054 if (DECL_IN_AGGR_P (value))
1056 error ("%qD is already defined in the class %qT", value,
1057 DECL_CONTEXT (value));
1058 return void_type_node;
1061 if (TREE_STATIC (value))
1063 error ("static member %qD cannot be a bit-field", value);
1064 return NULL_TREE;
1066 cp_finish_decl (value, NULL_TREE, false, NULL_TREE, 0);
1068 if (width != error_mark_node)
1070 /* The width must be an integer type. */
1071 if (!type_dependent_expression_p (width)
1072 && !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (width)))
1073 error ("width of bit-field %qD has non-integral type %qT", value,
1074 TREE_TYPE (width));
1075 DECL_INITIAL (value) = width;
1076 SET_DECL_C_BIT_FIELD (value);
1079 DECL_IN_AGGR_P (value) = 1;
1081 if (attrlist)
1082 cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1084 return value;
1088 /* Returns true iff ATTR is an attribute which needs to be applied at
1089 instantiation time rather than template definition time. */
1091 static bool
1092 is_late_template_attribute (tree attr, tree decl)
1094 tree name = get_attribute_name (attr);
1095 tree args = TREE_VALUE (attr);
1096 const struct attribute_spec *spec = lookup_attribute_spec (name);
1097 tree arg;
1099 if (!spec)
1100 /* Unknown attribute. */
1101 return false;
1103 /* Attribute weak handling wants to write out assembly right away. */
1104 if (is_attribute_p ("weak", name))
1105 return true;
1107 /* Attribute unused is applied directly, as it appertains to
1108 decls. */
1109 if (is_attribute_p ("unused", name))
1110 return false;
1112 /* If any of the arguments are dependent expressions, we can't evaluate
1113 the attribute until instantiation time. */
1114 for (arg = args; arg; arg = TREE_CHAIN (arg))
1116 tree t = TREE_VALUE (arg);
1118 /* If the first attribute argument is an identifier, only consider
1119 second and following arguments. Attributes like mode, format,
1120 cleanup and several target specific attributes aren't late
1121 just because they have an IDENTIFIER_NODE as first argument. */
1122 if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
1123 continue;
1125 if (value_dependent_expression_p (t)
1126 || type_dependent_expression_p (t))
1127 return true;
1130 if (TREE_CODE (decl) == TYPE_DECL
1131 || TYPE_P (decl)
1132 || spec->type_required)
1134 tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1136 /* We can't apply any attributes to a completely unknown type until
1137 instantiation time. */
1138 enum tree_code code = TREE_CODE (type);
1139 if (code == TEMPLATE_TYPE_PARM
1140 || code == BOUND_TEMPLATE_TEMPLATE_PARM
1141 || code == TYPENAME_TYPE)
1142 return true;
1143 /* Also defer most attributes on dependent types. This is not
1144 necessary in all cases, but is the better default. */
1145 else if (dependent_type_p (type)
1146 /* But attribute visibility specifically works on
1147 templates. */
1148 && !is_attribute_p ("visibility", name))
1149 return true;
1150 else
1151 return false;
1153 else
1154 return false;
1157 /* ATTR_P is a list of attributes. Remove any attributes which need to be
1158 applied at instantiation time and return them. If IS_DEPENDENT is true,
1159 the declaration itself is dependent, so all attributes should be applied
1160 at instantiation time. */
1162 static tree
1163 splice_template_attributes (tree *attr_p, tree decl)
1165 tree *p = attr_p;
1166 tree late_attrs = NULL_TREE;
1167 tree *q = &late_attrs;
1169 if (!p)
1170 return NULL_TREE;
1172 for (; *p; )
1174 if (is_late_template_attribute (*p, decl))
1176 ATTR_IS_DEPENDENT (*p) = 1;
1177 *q = *p;
1178 *p = TREE_CHAIN (*p);
1179 q = &TREE_CHAIN (*q);
1180 *q = NULL_TREE;
1182 else
1183 p = &TREE_CHAIN (*p);
1186 return late_attrs;
1189 /* Remove any late attributes from the list in ATTR_P and attach them to
1190 DECL_P. */
1192 static void
1193 save_template_attributes (tree *attr_p, tree *decl_p)
1195 tree late_attrs = splice_template_attributes (attr_p, *decl_p);
1196 tree *q;
1197 tree old_attrs = NULL_TREE;
1199 if (!late_attrs)
1200 return;
1202 if (DECL_P (*decl_p))
1203 q = &DECL_ATTRIBUTES (*decl_p);
1204 else
1205 q = &TYPE_ATTRIBUTES (*decl_p);
1207 old_attrs = *q;
1209 /* Merge the late attributes at the beginning with the attribute
1210 list. */
1211 late_attrs = merge_attributes (late_attrs, *q);
1212 *q = late_attrs;
1214 if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1216 /* We've added new attributes directly to the main variant, so
1217 now we need to update all of the other variants to include
1218 these new attributes. */
1219 tree variant;
1220 for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1221 variant = TYPE_NEXT_VARIANT (variant))
1223 gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1224 TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1229 /* Like reconstruct_complex_type, but handle also template trees. */
1231 tree
1232 cp_reconstruct_complex_type (tree type, tree bottom)
1234 tree inner, outer;
1236 if (TREE_CODE (type) == POINTER_TYPE)
1238 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1239 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1240 TYPE_REF_CAN_ALIAS_ALL (type));
1242 else if (TREE_CODE (type) == REFERENCE_TYPE)
1244 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1245 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1246 TYPE_REF_CAN_ALIAS_ALL (type));
1248 else if (TREE_CODE (type) == ARRAY_TYPE)
1250 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1251 outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1252 /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1253 element type qualification will be handled by the recursive
1254 cp_reconstruct_complex_type call and cp_build_qualified_type
1255 for ARRAY_TYPEs changes the element type. */
1256 return outer;
1258 else if (TREE_CODE (type) == FUNCTION_TYPE)
1260 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1261 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1262 outer = apply_memfn_quals (outer, type_memfn_quals (type));
1264 else if (TREE_CODE (type) == METHOD_TYPE)
1266 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1267 /* The build_method_type_directly() routine prepends 'this' to argument list,
1268 so we must compensate by getting rid of it. */
1269 outer
1270 = build_method_type_directly
1271 (class_of_this_parm (type), inner,
1272 TREE_CHAIN (TYPE_ARG_TYPES (type)));
1274 else if (TREE_CODE (type) == OFFSET_TYPE)
1276 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1277 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1279 else
1280 return bottom;
1282 if (TYPE_ATTRIBUTES (type))
1283 outer = cp_build_type_attribute_variant (outer, TYPE_ATTRIBUTES (type));
1284 return cp_build_qualified_type (outer, cp_type_quals (type));
1287 /* Replaces any constexpr expression that may be into the attributes
1288 arguments with their reduced value. */
1290 static void
1291 cp_check_const_attributes (tree attributes)
1293 tree attr;
1294 for (attr = attributes; attr; attr = TREE_CHAIN (attr))
1296 tree arg;
1297 for (arg = TREE_VALUE (attr); arg; arg = TREE_CHAIN (arg))
1299 tree expr = TREE_VALUE (arg);
1300 if (EXPR_P (expr))
1301 TREE_VALUE (arg) = maybe_constant_value (expr);
1306 /* Like decl_attributes, but handle C++ complexity. */
1308 void
1309 cplus_decl_attributes (tree *decl, tree attributes, int flags)
1311 if (*decl == NULL_TREE || *decl == void_type_node
1312 || *decl == error_mark_node
1313 || attributes == NULL_TREE)
1314 return;
1316 if (processing_template_decl)
1318 if (check_for_bare_parameter_packs (attributes))
1319 return;
1321 save_template_attributes (&attributes, decl);
1322 if (attributes == NULL_TREE)
1323 return;
1326 cp_check_const_attributes (attributes);
1328 if (TREE_CODE (*decl) == TEMPLATE_DECL)
1329 decl = &DECL_TEMPLATE_RESULT (*decl);
1331 decl_attributes (decl, attributes, flags);
1333 if (TREE_CODE (*decl) == TYPE_DECL)
1334 SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
1337 /* Walks through the namespace- or function-scope anonymous union
1338 OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
1339 Returns one of the fields for use in the mangled name. */
1341 static tree
1342 build_anon_union_vars (tree type, tree object)
1344 tree main_decl = NULL_TREE;
1345 tree field;
1347 /* Rather than write the code to handle the non-union case,
1348 just give an error. */
1349 if (TREE_CODE (type) != UNION_TYPE)
1351 error ("anonymous struct not inside named type");
1352 return error_mark_node;
1355 for (field = TYPE_FIELDS (type);
1356 field != NULL_TREE;
1357 field = DECL_CHAIN (field))
1359 tree decl;
1360 tree ref;
1362 if (DECL_ARTIFICIAL (field))
1363 continue;
1364 if (TREE_CODE (field) != FIELD_DECL)
1366 permerror (input_location, "%q+#D invalid; an anonymous union can only "
1367 "have non-static data members", field);
1368 continue;
1371 if (TREE_PRIVATE (field))
1372 permerror (input_location, "private member %q+#D in anonymous union", field);
1373 else if (TREE_PROTECTED (field))
1374 permerror (input_location, "protected member %q+#D in anonymous union", field);
1376 if (processing_template_decl)
1377 ref = build_min_nt_loc (UNKNOWN_LOCATION, COMPONENT_REF, object,
1378 DECL_NAME (field), NULL_TREE);
1379 else
1380 ref = build_class_member_access_expr (object, field, NULL_TREE,
1381 false, tf_warning_or_error);
1383 if (DECL_NAME (field))
1385 tree base;
1387 decl = build_decl (input_location,
1388 VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
1389 DECL_ANON_UNION_VAR_P (decl) = 1;
1390 DECL_ARTIFICIAL (decl) = 1;
1392 base = get_base_address (object);
1393 TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1394 TREE_STATIC (decl) = TREE_STATIC (base);
1395 DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1397 SET_DECL_VALUE_EXPR (decl, ref);
1398 DECL_HAS_VALUE_EXPR_P (decl) = 1;
1400 decl = pushdecl (decl);
1402 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
1403 decl = build_anon_union_vars (TREE_TYPE (field), ref);
1404 else
1405 decl = 0;
1407 if (main_decl == NULL_TREE)
1408 main_decl = decl;
1411 return main_decl;
1414 /* Finish off the processing of a UNION_TYPE structure. If the union is an
1415 anonymous union, then all members must be laid out together. PUBLIC_P
1416 is nonzero if this union is not declared static. */
1418 void
1419 finish_anon_union (tree anon_union_decl)
1421 tree type;
1422 tree main_decl;
1423 bool public_p;
1425 if (anon_union_decl == error_mark_node)
1426 return;
1428 type = TREE_TYPE (anon_union_decl);
1429 public_p = TREE_PUBLIC (anon_union_decl);
1431 /* The VAR_DECL's context is the same as the TYPE's context. */
1432 DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
1434 if (TYPE_FIELDS (type) == NULL_TREE)
1435 return;
1437 if (public_p)
1439 error ("namespace-scope anonymous aggregates must be static");
1440 return;
1443 main_decl = build_anon_union_vars (type, anon_union_decl);
1444 if (main_decl == error_mark_node)
1445 return;
1446 if (main_decl == NULL_TREE)
1448 warning (0, "anonymous union with no members");
1449 return;
1452 if (!processing_template_decl)
1454 /* Use main_decl to set the mangled name. */
1455 DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
1456 maybe_commonize_var (anon_union_decl);
1457 if (TREE_STATIC (anon_union_decl) || DECL_EXTERNAL (anon_union_decl))
1458 mangle_decl (anon_union_decl);
1459 DECL_NAME (anon_union_decl) = NULL_TREE;
1462 pushdecl (anon_union_decl);
1463 cp_finish_decl (anon_union_decl, NULL_TREE, false, NULL_TREE, 0);
1466 /* Auxiliary functions to make type signatures for
1467 `operator new' and `operator delete' correspond to
1468 what compiler will be expecting. */
1470 tree
1471 coerce_new_type (tree type)
1473 int e = 0;
1474 tree args = TYPE_ARG_TYPES (type);
1476 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1478 if (!same_type_p (TREE_TYPE (type), ptr_type_node))
1480 e = 1;
1481 error ("%<operator new%> must return type %qT", ptr_type_node);
1484 if (args && args != void_list_node)
1486 if (TREE_PURPOSE (args))
1488 /* [basic.stc.dynamic.allocation]
1490 The first parameter shall not have an associated default
1491 argument. */
1492 error ("the first parameter of %<operator new%> cannot "
1493 "have a default argument");
1494 /* Throw away the default argument. */
1495 TREE_PURPOSE (args) = NULL_TREE;
1498 if (!same_type_p (TREE_VALUE (args), size_type_node))
1500 e = 2;
1501 args = TREE_CHAIN (args);
1504 else
1505 e = 2;
1507 if (e == 2)
1508 permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
1509 "as first parameter", size_type_node);
1511 switch (e)
1513 case 2:
1514 args = tree_cons (NULL_TREE, size_type_node, args);
1515 /* Fall through. */
1516 case 1:
1517 type = build_exception_variant
1518 (build_function_type (ptr_type_node, args),
1519 TYPE_RAISES_EXCEPTIONS (type));
1520 /* Fall through. */
1521 default:;
1523 return type;
1526 tree
1527 coerce_delete_type (tree type)
1529 int e = 0;
1530 tree args = TYPE_ARG_TYPES (type);
1532 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
1534 if (!same_type_p (TREE_TYPE (type), void_type_node))
1536 e = 1;
1537 error ("%<operator delete%> must return type %qT", void_type_node);
1540 if (!args || args == void_list_node
1541 || !same_type_p (TREE_VALUE (args), ptr_type_node))
1543 e = 2;
1544 if (args && args != void_list_node)
1545 args = TREE_CHAIN (args);
1546 error ("%<operator delete%> takes type %qT as first parameter",
1547 ptr_type_node);
1549 switch (e)
1551 case 2:
1552 args = tree_cons (NULL_TREE, ptr_type_node, args);
1553 /* Fall through. */
1554 case 1:
1555 type = build_exception_variant
1556 (build_function_type (void_type_node, args),
1557 TYPE_RAISES_EXCEPTIONS (type));
1558 /* Fall through. */
1559 default:;
1562 return type;
1565 /* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1566 and mark them as needed. */
1568 static void
1569 mark_vtable_entries (tree decl)
1571 tree fnaddr;
1572 unsigned HOST_WIDE_INT idx;
1574 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1575 idx, fnaddr)
1577 tree fn;
1579 STRIP_NOPS (fnaddr);
1581 if (TREE_CODE (fnaddr) != ADDR_EXPR
1582 && TREE_CODE (fnaddr) != FDESC_EXPR)
1583 /* This entry is an offset: a virtual base class offset, a
1584 virtual call offset, an RTTI offset, etc. */
1585 continue;
1587 fn = TREE_OPERAND (fnaddr, 0);
1588 TREE_ADDRESSABLE (fn) = 1;
1589 /* When we don't have vcall offsets, we output thunks whenever
1590 we output the vtables that contain them. With vcall offsets,
1591 we know all the thunks we'll need when we emit a virtual
1592 function, so we emit the thunks there instead. */
1593 if (DECL_THUNK_P (fn))
1594 use_thunk (fn, /*emit_p=*/0);
1595 mark_used (fn);
1599 /* Set DECL up to have the closest approximation of "initialized common"
1600 linkage available. */
1602 void
1603 comdat_linkage (tree decl)
1605 if (flag_weak)
1606 make_decl_one_only (decl, cxx_comdat_group (decl));
1607 else if (TREE_CODE (decl) == FUNCTION_DECL
1608 || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1609 /* We can just emit function and compiler-generated variables
1610 statically; having multiple copies is (for the most part) only
1611 a waste of space.
1613 There are two correctness issues, however: the address of a
1614 template instantiation with external linkage should be the
1615 same, independent of what translation unit asks for the
1616 address, and this will not hold when we emit multiple copies of
1617 the function. However, there's little else we can do.
1619 Also, by default, the typeinfo implementation assumes that
1620 there will be only one copy of the string used as the name for
1621 each type. Therefore, if weak symbols are unavailable, the
1622 run-time library should perform a more conservative check; it
1623 should perform a string comparison, rather than an address
1624 comparison. */
1625 TREE_PUBLIC (decl) = 0;
1626 else
1628 /* Static data member template instantiations, however, cannot
1629 have multiple copies. */
1630 if (DECL_INITIAL (decl) == 0
1631 || DECL_INITIAL (decl) == error_mark_node)
1632 DECL_COMMON (decl) = 1;
1633 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1635 DECL_COMMON (decl) = 1;
1636 DECL_INITIAL (decl) = error_mark_node;
1638 else if (!DECL_EXPLICIT_INSTANTIATION (decl))
1640 /* We can't do anything useful; leave vars for explicit
1641 instantiation. */
1642 DECL_EXTERNAL (decl) = 1;
1643 DECL_NOT_REALLY_EXTERN (decl) = 0;
1647 DECL_COMDAT (decl) = 1;
1650 /* For win32 we also want to put explicit instantiations in
1651 linkonce sections, so that they will be merged with implicit
1652 instantiations; otherwise we get duplicate symbol errors.
1653 For Darwin we do not want explicit instantiations to be
1654 linkonce. */
1656 void
1657 maybe_make_one_only (tree decl)
1659 /* We used to say that this was not necessary on targets that support weak
1660 symbols, because the implicit instantiations will defer to the explicit
1661 one. However, that's not actually the case in SVR4; a strong definition
1662 after a weak one is an error. Also, not making explicit
1663 instantiations one_only means that we can end up with two copies of
1664 some template instantiations. */
1665 if (! flag_weak)
1666 return;
1668 /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
1669 we can get away with not emitting them if they aren't used. We need
1670 to for variables so that cp_finish_decl will update their linkage,
1671 because their DECL_INITIAL may not have been set properly yet. */
1673 if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
1674 || (! DECL_EXPLICIT_INSTANTIATION (decl)
1675 && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
1677 make_decl_one_only (decl, cxx_comdat_group (decl));
1679 if (TREE_CODE (decl) == VAR_DECL)
1681 DECL_COMDAT (decl) = 1;
1682 /* Mark it needed so we don't forget to emit it. */
1683 mark_decl_referenced (decl);
1684 TREE_USED (decl) = 1;
1689 /* Returns true iff DECL, a FUNCTION_DECL or VAR_DECL, has vague linkage.
1690 This predicate will give the right answer during parsing of the
1691 function, which other tests may not. */
1693 bool
1694 vague_linkage_p (tree decl)
1696 /* Unfortunately, import_export_decl has not always been called
1697 before the function is processed, so we cannot simply check
1698 DECL_COMDAT. */
1699 return (DECL_COMDAT (decl)
1700 || (((TREE_CODE (decl) == FUNCTION_DECL
1701 && DECL_DECLARED_INLINE_P (decl))
1702 || (DECL_LANG_SPECIFIC (decl)
1703 && DECL_TEMPLATE_INSTANTIATION (decl)))
1704 && TREE_PUBLIC (decl)));
1707 /* Determine whether or not we want to specifically import or export CTYPE,
1708 using various heuristics. */
1710 static void
1711 import_export_class (tree ctype)
1713 /* -1 for imported, 1 for exported. */
1714 int import_export = 0;
1716 /* It only makes sense to call this function at EOF. The reason is
1717 that this function looks at whether or not the first non-inline
1718 non-abstract virtual member function has been defined in this
1719 translation unit. But, we can't possibly know that until we've
1720 seen the entire translation unit. */
1721 gcc_assert (at_eof);
1723 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1724 return;
1726 /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
1727 we will have CLASSTYPE_INTERFACE_ONLY set but not
1728 CLASSTYPE_INTERFACE_KNOWN. In that case, we don't want to use this
1729 heuristic because someone will supply a #pragma implementation
1730 elsewhere, and deducing it here would produce a conflict. */
1731 if (CLASSTYPE_INTERFACE_ONLY (ctype))
1732 return;
1734 if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
1735 import_export = -1;
1736 else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
1737 import_export = 1;
1738 else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1739 && !flag_implicit_templates)
1740 /* For a template class, without -fimplicit-templates, check the
1741 repository. If the virtual table is assigned to this
1742 translation unit, then export the class; otherwise, import
1743 it. */
1744 import_export = repo_export_class_p (ctype) ? 1 : -1;
1745 else if (TYPE_POLYMORPHIC_P (ctype))
1747 /* The ABI specifies that the virtual table and associated
1748 information are emitted with the key method, if any. */
1749 tree method = CLASSTYPE_KEY_METHOD (ctype);
1750 /* If weak symbol support is not available, then we must be
1751 careful not to emit the vtable when the key function is
1752 inline. An inline function can be defined in multiple
1753 translation units. If we were to emit the vtable in each
1754 translation unit containing a definition, we would get
1755 multiple definition errors at link-time. */
1756 if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
1757 import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
1760 /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1761 a definition anywhere else. */
1762 if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
1763 import_export = 0;
1765 /* Allow back ends the chance to overrule the decision. */
1766 if (targetm.cxx.import_export_class)
1767 import_export = targetm.cxx.import_export_class (ctype, import_export);
1769 if (import_export)
1771 SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
1772 CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1776 /* Return true if VAR has already been provided to the back end; in that
1777 case VAR should not be modified further by the front end. */
1778 static bool
1779 var_finalized_p (tree var)
1781 return varpool_node (var)->finalized;
1784 /* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1785 must be emitted in this translation unit. Mark it as such. */
1787 void
1788 mark_needed (tree decl)
1790 TREE_USED (decl) = 1;
1791 mark_decl_referenced (decl);
1794 /* DECL is either a FUNCTION_DECL or a VAR_DECL. This function
1795 returns true if a definition of this entity should be provided in
1796 this object file. Callers use this function to determine whether
1797 or not to let the back end know that a definition of DECL is
1798 available in this translation unit. */
1800 bool
1801 decl_needed_p (tree decl)
1803 gcc_assert (TREE_CODE (decl) == VAR_DECL
1804 || TREE_CODE (decl) == FUNCTION_DECL);
1805 /* This function should only be called at the end of the translation
1806 unit. We cannot be sure of whether or not something will be
1807 COMDAT until that point. */
1808 gcc_assert (at_eof);
1810 /* All entities with external linkage that are not COMDAT should be
1811 emitted; they may be referred to from other object files. */
1812 if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1813 return true;
1814 /* If this entity was used, let the back end see it; it will decide
1815 whether or not to emit it into the object file. */
1816 if (TREE_USED (decl))
1817 return true;
1818 /* Functions marked "dllexport" must be emitted so that they are
1819 visible to other DLLs. */
1820 if (flag_keep_inline_dllexport
1821 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (decl)))
1822 return true;
1823 /* Otherwise, DECL does not need to be emitted -- yet. A subsequent
1824 reference to DECL might cause it to be emitted later. */
1825 return false;
1828 /* If necessary, write out the vtables for the dynamic class CTYPE.
1829 Returns true if any vtables were emitted. */
1831 static bool
1832 maybe_emit_vtables (tree ctype)
1834 tree vtbl;
1835 tree primary_vtbl;
1836 int needed = 0;
1837 struct varpool_node *current = NULL, *last = NULL;
1839 /* If the vtables for this class have already been emitted there is
1840 nothing more to do. */
1841 primary_vtbl = CLASSTYPE_VTABLES (ctype);
1842 if (var_finalized_p (primary_vtbl))
1843 return false;
1844 /* Ignore dummy vtables made by get_vtable_decl. */
1845 if (TREE_TYPE (primary_vtbl) == void_type_node)
1846 return false;
1848 /* On some targets, we cannot determine the key method until the end
1849 of the translation unit -- which is when this function is
1850 called. */
1851 if (!targetm.cxx.key_method_may_be_inline ())
1852 determine_key_method (ctype);
1854 /* See if any of the vtables are needed. */
1855 for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1857 import_export_decl (vtbl);
1858 if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1859 needed = 1;
1861 if (!needed)
1863 /* If the references to this class' vtables are optimized away,
1864 still emit the appropriate debugging information. See
1865 dfs_debug_mark. */
1866 if (DECL_COMDAT (primary_vtbl)
1867 && CLASSTYPE_DEBUG_REQUESTED (ctype))
1868 note_debug_info_needed (ctype);
1869 return false;
1872 /* The ABI requires that we emit all of the vtables if we emit any
1873 of them. */
1874 for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = DECL_CHAIN (vtbl))
1876 /* Mark entities references from the virtual table as used. */
1877 mark_vtable_entries (vtbl);
1879 if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
1881 VEC(tree,gc)* cleanups = NULL;
1882 tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl), &cleanups,
1883 LOOKUP_NORMAL);
1885 /* It had better be all done at compile-time. */
1886 gcc_assert (!expr && !cleanups);
1889 /* Write it out. */
1890 DECL_EXTERNAL (vtbl) = 0;
1891 rest_of_decl_compilation (vtbl, 1, 1);
1893 /* Because we're only doing syntax-checking, we'll never end up
1894 actually marking the variable as written. */
1895 if (flag_syntax_only)
1896 TREE_ASM_WRITTEN (vtbl) = 1;
1897 else if (DECL_ONE_ONLY (vtbl))
1899 current = varpool_node (vtbl);
1900 if (last)
1901 symtab_add_to_same_comdat_group ((symtab_node) current, (symtab_node) last);
1902 last = current;
1906 /* Since we're writing out the vtable here, also write the debug
1907 info. */
1908 note_debug_info_needed (ctype);
1910 return true;
1913 /* A special return value from type_visibility meaning internal
1914 linkage. */
1916 enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
1918 /* walk_tree helper function for type_visibility. */
1920 static tree
1921 min_vis_r (tree *tp, int *walk_subtrees, void *data)
1923 int *vis_p = (int *)data;
1924 if (! TYPE_P (*tp))
1926 *walk_subtrees = 0;
1928 else if (CLASS_TYPE_P (*tp))
1930 if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1932 *vis_p = VISIBILITY_ANON;
1933 return *tp;
1935 else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1936 *vis_p = CLASSTYPE_VISIBILITY (*tp);
1938 return NULL;
1941 /* Returns the visibility of TYPE, which is the minimum visibility of its
1942 component types. */
1944 static int
1945 type_visibility (tree type)
1947 int vis = VISIBILITY_DEFAULT;
1948 cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
1949 return vis;
1952 /* Limit the visibility of DECL to VISIBILITY, if not explicitly
1953 specified (or if VISIBILITY is static). If TMPL is true, this
1954 constraint is for a template argument, and takes precedence
1955 over explicitly-specified visibility on the template. */
1957 static void
1958 constrain_visibility (tree decl, int visibility, bool tmpl)
1960 if (visibility == VISIBILITY_ANON)
1962 /* extern "C" declarations aren't affected by the anonymous
1963 namespace. */
1964 if (!DECL_EXTERN_C_P (decl))
1966 TREE_PUBLIC (decl) = 0;
1967 DECL_WEAK (decl) = 0;
1968 DECL_COMMON (decl) = 0;
1969 DECL_COMDAT_GROUP (decl) = NULL_TREE;
1970 DECL_INTERFACE_KNOWN (decl) = 1;
1971 if (DECL_LANG_SPECIFIC (decl))
1972 DECL_NOT_REALLY_EXTERN (decl) = 1;
1975 else if (visibility > DECL_VISIBILITY (decl)
1976 && (tmpl || !DECL_VISIBILITY_SPECIFIED (decl)))
1978 DECL_VISIBILITY (decl) = (enum symbol_visibility) visibility;
1979 /* This visibility was not specified. */
1980 DECL_VISIBILITY_SPECIFIED (decl) = false;
1984 /* Constrain the visibility of DECL based on the visibility of its template
1985 arguments. */
1987 static void
1988 constrain_visibility_for_template (tree decl, tree targs)
1990 /* If this is a template instantiation, check the innermost
1991 template args for visibility constraints. The outer template
1992 args are covered by the class check. */
1993 tree args = INNERMOST_TEMPLATE_ARGS (targs);
1994 int i;
1995 for (i = TREE_VEC_LENGTH (args); i > 0; --i)
1997 int vis = 0;
1999 tree arg = TREE_VEC_ELT (args, i-1);
2000 if (TYPE_P (arg))
2001 vis = type_visibility (arg);
2002 else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
2004 STRIP_NOPS (arg);
2005 if (TREE_CODE (arg) == ADDR_EXPR)
2006 arg = TREE_OPERAND (arg, 0);
2007 if (TREE_CODE (arg) == VAR_DECL
2008 || TREE_CODE (arg) == FUNCTION_DECL)
2010 if (! TREE_PUBLIC (arg))
2011 vis = VISIBILITY_ANON;
2012 else
2013 vis = DECL_VISIBILITY (arg);
2016 if (vis)
2017 constrain_visibility (decl, vis, true);
2021 /* Like c_determine_visibility, but with additional C++-specific
2022 behavior.
2024 Function-scope entities can rely on the function's visibility because
2025 it is set in start_preparsed_function.
2027 Class-scope entities cannot rely on the class's visibility until the end
2028 of the enclosing class definition.
2030 Note that because namespaces have multiple independent definitions,
2031 namespace visibility is handled elsewhere using the #pragma visibility
2032 machinery rather than by decorating the namespace declaration.
2034 The goal is for constraints from the type to give a diagnostic, and
2035 other constraints to be applied silently. */
2037 void
2038 determine_visibility (tree decl)
2040 tree class_type = NULL_TREE;
2041 bool use_template;
2042 bool orig_visibility_specified;
2043 enum symbol_visibility orig_visibility;
2045 /* Remember that all decls get VISIBILITY_DEFAULT when built. */
2047 /* Only relevant for names with external linkage. */
2048 if (!TREE_PUBLIC (decl))
2049 return;
2051 /* Cloned constructors and destructors get the same visibility as
2052 the underlying function. That should be set up in
2053 maybe_clone_body. */
2054 gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
2056 orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
2057 orig_visibility = DECL_VISIBILITY (decl);
2059 if (TREE_CODE (decl) == TYPE_DECL)
2061 if (CLASS_TYPE_P (TREE_TYPE (decl)))
2062 use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
2063 else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
2064 use_template = 1;
2065 else
2066 use_template = 0;
2068 else if (DECL_LANG_SPECIFIC (decl))
2069 use_template = DECL_USE_TEMPLATE (decl);
2070 else
2071 use_template = 0;
2073 /* If DECL is a member of a class, visibility specifiers on the
2074 class can influence the visibility of the DECL. */
2075 if (DECL_CLASS_SCOPE_P (decl))
2076 class_type = DECL_CONTEXT (decl);
2077 else
2079 /* Not a class member. */
2081 /* Virtual tables have DECL_CONTEXT set to their associated class,
2082 so they are automatically handled above. */
2083 gcc_assert (TREE_CODE (decl) != VAR_DECL
2084 || !DECL_VTABLE_OR_VTT_P (decl));
2086 if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
2088 /* Local statics and classes get the visibility of their
2089 containing function by default, except that
2090 -fvisibility-inlines-hidden doesn't affect them. */
2091 tree fn = DECL_CONTEXT (decl);
2092 if (DECL_VISIBILITY_SPECIFIED (fn))
2094 DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2095 DECL_VISIBILITY_SPECIFIED (decl) =
2096 DECL_VISIBILITY_SPECIFIED (fn);
2098 else
2100 if (DECL_CLASS_SCOPE_P (fn))
2101 determine_visibility_from_class (decl, DECL_CONTEXT (fn));
2102 else if (determine_hidden_inline (fn))
2104 DECL_VISIBILITY (decl) = default_visibility;
2105 DECL_VISIBILITY_SPECIFIED (decl) =
2106 visibility_options.inpragma;
2108 else
2110 DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
2111 DECL_VISIBILITY_SPECIFIED (decl) =
2112 DECL_VISIBILITY_SPECIFIED (fn);
2116 /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
2117 but have no TEMPLATE_INFO, so don't try to check it. */
2118 use_template = 0;
2120 else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
2121 && flag_visibility_ms_compat)
2123 /* Under -fvisibility-ms-compat, types are visible by default,
2124 even though their contents aren't. */
2125 tree underlying_type = TREE_TYPE (DECL_NAME (decl));
2126 int underlying_vis = type_visibility (underlying_type);
2127 if (underlying_vis == VISIBILITY_ANON
2128 || (CLASS_TYPE_P (underlying_type)
2129 && CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type)))
2130 constrain_visibility (decl, underlying_vis, false);
2131 else
2132 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2134 else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2136 /* tinfo visibility is based on the type it's for. */
2137 constrain_visibility
2138 (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))), false);
2140 /* Give the target a chance to override the visibility associated
2141 with DECL. */
2142 if (TREE_PUBLIC (decl)
2143 && !DECL_REALLY_EXTERN (decl)
2144 && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2145 && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2146 targetm.cxx.determine_class_data_visibility (decl);
2148 else if (use_template)
2149 /* Template instantiations and specializations get visibility based
2150 on their template unless they override it with an attribute. */;
2151 else if (! DECL_VISIBILITY_SPECIFIED (decl))
2153 if (determine_hidden_inline (decl))
2154 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2155 else
2157 /* Set default visibility to whatever the user supplied with
2158 #pragma GCC visibility or a namespace visibility attribute. */
2159 DECL_VISIBILITY (decl) = default_visibility;
2160 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2165 if (use_template)
2167 /* If the specialization doesn't specify visibility, use the
2168 visibility from the template. */
2169 tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2170 ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2171 : DECL_TEMPLATE_INFO (decl));
2172 tree args = TI_ARGS (tinfo);
2173 tree attribs = (TREE_CODE (decl) == TYPE_DECL
2174 ? TYPE_ATTRIBUTES (TREE_TYPE (decl))
2175 : DECL_ATTRIBUTES (decl));
2177 if (args != error_mark_node)
2179 tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2181 if (!DECL_VISIBILITY_SPECIFIED (decl))
2183 if (!DECL_VISIBILITY_SPECIFIED (pattern)
2184 && determine_hidden_inline (decl))
2185 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2186 else
2188 DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2189 DECL_VISIBILITY_SPECIFIED (decl)
2190 = DECL_VISIBILITY_SPECIFIED (pattern);
2194 if (args
2195 /* Template argument visibility outweighs #pragma or namespace
2196 visibility, but not an explicit attribute. */
2197 && !lookup_attribute ("visibility", attribs))
2199 int depth = TMPL_ARGS_DEPTH (args);
2200 int class_depth = 0;
2201 if (class_type && CLASSTYPE_TEMPLATE_INFO (class_type))
2202 class_depth = TMPL_ARGS_DEPTH (CLASSTYPE_TI_ARGS (class_type));
2203 if (DECL_VISIBILITY_SPECIFIED (decl))
2205 /* A class template member with explicit visibility
2206 overrides the class visibility, so we need to apply
2207 all the levels of template args directly. */
2208 int i;
2209 for (i = 1; i <= depth; ++i)
2211 tree lev = TMPL_ARGS_LEVEL (args, i);
2212 constrain_visibility_for_template (decl, lev);
2215 else if (depth > class_depth)
2216 /* Limit visibility based on its template arguments. */
2217 constrain_visibility_for_template (decl, args);
2222 if (class_type)
2223 determine_visibility_from_class (decl, class_type);
2225 if (decl_anon_ns_mem_p (decl))
2226 /* Names in an anonymous namespace get internal linkage.
2227 This might change once we implement export. */
2228 constrain_visibility (decl, VISIBILITY_ANON, false);
2229 else if (TREE_CODE (decl) != TYPE_DECL)
2231 /* Propagate anonymity from type to decl. */
2232 int tvis = type_visibility (TREE_TYPE (decl));
2233 if (tvis == VISIBILITY_ANON
2234 || ! DECL_VISIBILITY_SPECIFIED (decl))
2235 constrain_visibility (decl, tvis, false);
2237 else if (no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/true))
2238 /* DR 757: A type without linkage shall not be used as the type of a
2239 variable or function with linkage, unless
2240 o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
2241 o the variable or function is not used (3.2 [basic.def.odr]) or is
2242 defined in the same translation unit.
2244 Since non-extern "C" decls need to be defined in the same
2245 translation unit, we can make the type internal. */
2246 constrain_visibility (decl, VISIBILITY_ANON, false);
2248 /* If visibility changed and DECL already has DECL_RTL, ensure
2249 symbol flags are updated. */
2250 if ((DECL_VISIBILITY (decl) != orig_visibility
2251 || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2252 && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2253 || TREE_CODE (decl) == FUNCTION_DECL)
2254 && DECL_RTL_SET_P (decl))
2255 make_decl_rtl (decl);
2258 /* By default, static data members and function members receive
2259 the visibility of their containing class. */
2261 static void
2262 determine_visibility_from_class (tree decl, tree class_type)
2264 if (DECL_VISIBILITY_SPECIFIED (decl))
2265 return;
2267 if (determine_hidden_inline (decl))
2268 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
2269 else
2271 /* Default to the class visibility. */
2272 DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2273 DECL_VISIBILITY_SPECIFIED (decl)
2274 = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2277 /* Give the target a chance to override the visibility associated
2278 with DECL. */
2279 if (TREE_CODE (decl) == VAR_DECL
2280 && (DECL_TINFO_P (decl)
2281 || (DECL_VTABLE_OR_VTT_P (decl)
2282 /* Construction virtual tables are not exported because
2283 they cannot be referred to from other object files;
2284 their name is not standardized by the ABI. */
2285 && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2286 && TREE_PUBLIC (decl)
2287 && !DECL_REALLY_EXTERN (decl)
2288 && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
2289 targetm.cxx.determine_class_data_visibility (decl);
2292 /* Returns true iff DECL is an inline that should get hidden visibility
2293 because of -fvisibility-inlines-hidden. */
2295 static bool
2296 determine_hidden_inline (tree decl)
2298 return (visibility_options.inlines_hidden
2299 /* Don't do this for inline templates; specializations might not be
2300 inline, and we don't want them to inherit the hidden
2301 visibility. We'll set it here for all inline instantiations. */
2302 && !processing_template_decl
2303 && TREE_CODE (decl) == FUNCTION_DECL
2304 && DECL_DECLARED_INLINE_P (decl)
2305 && (! DECL_LANG_SPECIFIC (decl)
2306 || ! DECL_EXPLICIT_INSTANTIATION (decl)));
2309 /* Constrain the visibility of a class TYPE based on the visibility of its
2310 field types. Warn if any fields require lesser visibility. */
2312 void
2313 constrain_class_visibility (tree type)
2315 tree binfo;
2316 tree t;
2317 int i;
2319 int vis = type_visibility (type);
2321 if (vis == VISIBILITY_ANON
2322 || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
2323 return;
2325 /* Don't warn about visibility if the class has explicit visibility. */
2326 if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2327 vis = VISIBILITY_INTERNAL;
2329 for (t = TYPE_FIELDS (type); t; t = DECL_CHAIN (t))
2330 if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2332 tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
2333 int subvis = type_visibility (ftype);
2335 if (subvis == VISIBILITY_ANON)
2337 if (!in_main_input_context ())
2338 warning (0, "\
2339 %qT has a field %qD whose type uses the anonymous namespace",
2340 type, t);
2342 else if (MAYBE_CLASS_TYPE_P (ftype)
2343 && vis < VISIBILITY_HIDDEN
2344 && subvis >= VISIBILITY_HIDDEN)
2345 warning (OPT_Wattributes, "\
2346 %qT declared with greater visibility than the type of its field %qD",
2347 type, t);
2350 binfo = TYPE_BINFO (type);
2351 for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
2353 int subvis = type_visibility (TREE_TYPE (t));
2355 if (subvis == VISIBILITY_ANON)
2357 if (!in_main_input_context())
2358 warning (0, "\
2359 %qT has a base %qT whose type uses the anonymous namespace",
2360 type, TREE_TYPE (t));
2362 else if (vis < VISIBILITY_HIDDEN
2363 && subvis >= VISIBILITY_HIDDEN)
2364 warning (OPT_Wattributes, "\
2365 %qT declared with greater visibility than its base %qT",
2366 type, TREE_TYPE (t));
2370 /* DECL is a FUNCTION_DECL or VAR_DECL. If the object file linkage
2371 for DECL has not already been determined, do so now by setting
2372 DECL_EXTERNAL, DECL_COMDAT and other related flags. Until this
2373 function is called entities with vague linkage whose definitions
2374 are available must have TREE_PUBLIC set.
2376 If this function decides to place DECL in COMDAT, it will set
2377 appropriate flags -- but will not clear DECL_EXTERNAL. It is up to
2378 the caller to decide whether or not to clear DECL_EXTERNAL. Some
2379 callers defer that decision until it is clear that DECL is actually
2380 required. */
2382 void
2383 import_export_decl (tree decl)
2385 int emit_p;
2386 bool comdat_p;
2387 bool import_p;
2388 tree class_type = NULL_TREE;
2390 if (DECL_INTERFACE_KNOWN (decl))
2391 return;
2393 /* We cannot determine what linkage to give to an entity with vague
2394 linkage until the end of the file. For example, a virtual table
2395 for a class will be defined if and only if the key method is
2396 defined in this translation unit. As a further example, consider
2397 that when compiling a translation unit that uses PCH file with
2398 "-frepo" it would be incorrect to make decisions about what
2399 entities to emit when building the PCH; those decisions must be
2400 delayed until the repository information has been processed. */
2401 gcc_assert (at_eof);
2402 /* Object file linkage for explicit instantiations is handled in
2403 mark_decl_instantiated. For static variables in functions with
2404 vague linkage, maybe_commonize_var is used.
2406 Therefore, the only declarations that should be provided to this
2407 function are those with external linkage that are:
2409 * implicit instantiations of function templates
2411 * inline function
2413 * implicit instantiations of static data members of class
2414 templates
2416 * virtual tables
2418 * typeinfo objects
2420 Furthermore, all entities that reach this point must have a
2421 definition available in this translation unit.
2423 The following assertions check these conditions. */
2424 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2425 || TREE_CODE (decl) == VAR_DECL);
2426 /* Any code that creates entities with TREE_PUBLIC cleared should
2427 also set DECL_INTERFACE_KNOWN. */
2428 gcc_assert (TREE_PUBLIC (decl));
2429 if (TREE_CODE (decl) == FUNCTION_DECL)
2430 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2431 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2432 || DECL_DECLARED_INLINE_P (decl));
2433 else
2434 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2435 || DECL_VTABLE_OR_VTT_P (decl)
2436 || DECL_TINFO_P (decl));
2437 /* Check that a definition of DECL is available in this translation
2438 unit. */
2439 gcc_assert (!DECL_REALLY_EXTERN (decl));
2441 /* Assume that DECL will not have COMDAT linkage. */
2442 comdat_p = false;
2443 /* Assume that DECL will not be imported into this translation
2444 unit. */
2445 import_p = false;
2447 /* See if the repository tells us whether or not to emit DECL in
2448 this translation unit. */
2449 emit_p = repo_emit_p (decl);
2450 if (emit_p == 0)
2451 import_p = true;
2452 else if (emit_p == 1)
2454 /* The repository indicates that this entity should be defined
2455 here. Make sure the back end honors that request. */
2456 if (TREE_CODE (decl) == VAR_DECL)
2457 mark_needed (decl);
2458 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2459 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
2461 tree clone;
2462 FOR_EACH_CLONE (clone, decl)
2463 mark_needed (clone);
2465 else
2466 mark_needed (decl);
2467 /* Output the definition as an ordinary strong definition. */
2468 DECL_EXTERNAL (decl) = 0;
2469 DECL_INTERFACE_KNOWN (decl) = 1;
2470 return;
2473 if (import_p)
2474 /* We have already decided what to do with this DECL; there is no
2475 need to check anything further. */
2477 else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2479 class_type = DECL_CONTEXT (decl);
2480 import_export_class (class_type);
2481 if (TYPE_FOR_JAVA (class_type))
2482 import_p = true;
2483 else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2484 && CLASSTYPE_INTERFACE_ONLY (class_type))
2485 import_p = true;
2486 else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
2487 && !CLASSTYPE_USE_TEMPLATE (class_type)
2488 && CLASSTYPE_KEY_METHOD (class_type)
2489 && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
2490 /* The ABI requires that all virtual tables be emitted with
2491 COMDAT linkage. However, on systems where COMDAT symbols
2492 don't show up in the table of contents for a static
2493 archive, or on systems without weak symbols (where we
2494 approximate COMDAT linkage by using internal linkage), the
2495 linker will report errors about undefined symbols because
2496 it will not see the virtual table definition. Therefore,
2497 in the case that we know that the virtual table will be
2498 emitted in only one translation unit, we make the virtual
2499 table an ordinary definition with external linkage. */
2500 DECL_EXTERNAL (decl) = 0;
2501 else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
2503 /* CLASS_TYPE is being exported from this translation unit,
2504 so DECL should be defined here. */
2505 if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
2506 /* If a class is declared in a header with the "extern
2507 template" extension, then it will not be instantiated,
2508 even in translation units that would normally require
2509 it. Often such classes are explicitly instantiated in
2510 one translation unit. Therefore, the explicit
2511 instantiation must be made visible to other translation
2512 units. */
2513 DECL_EXTERNAL (decl) = 0;
2514 else
2516 /* The generic C++ ABI says that class data is always
2517 COMDAT, even if there is a key function. Some
2518 variants (e.g., the ARM EABI) says that class data
2519 only has COMDAT linkage if the class data might be
2520 emitted in more than one translation unit. When the
2521 key method can be inline and is inline, we still have
2522 to arrange for comdat even though
2523 class_data_always_comdat is false. */
2524 if (!CLASSTYPE_KEY_METHOD (class_type)
2525 || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
2526 || targetm.cxx.class_data_always_comdat ())
2528 /* The ABI requires COMDAT linkage. Normally, we
2529 only emit COMDAT things when they are needed;
2530 make sure that we realize that this entity is
2531 indeed needed. */
2532 comdat_p = true;
2533 mark_needed (decl);
2537 else if (!flag_implicit_templates
2538 && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
2539 import_p = true;
2540 else
2541 comdat_p = true;
2543 else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2545 tree type = TREE_TYPE (DECL_NAME (decl));
2546 if (CLASS_TYPE_P (type))
2548 class_type = type;
2549 import_export_class (type);
2550 if (CLASSTYPE_INTERFACE_KNOWN (type)
2551 && TYPE_POLYMORPHIC_P (type)
2552 && CLASSTYPE_INTERFACE_ONLY (type)
2553 /* If -fno-rtti was specified, then we cannot be sure
2554 that RTTI information will be emitted with the
2555 virtual table of the class, so we must emit it
2556 wherever it is used. */
2557 && flag_rtti)
2558 import_p = true;
2559 else
2561 if (CLASSTYPE_INTERFACE_KNOWN (type)
2562 && !CLASSTYPE_INTERFACE_ONLY (type))
2564 comdat_p = (targetm.cxx.class_data_always_comdat ()
2565 || (CLASSTYPE_KEY_METHOD (type)
2566 && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
2567 mark_needed (decl);
2568 if (!flag_weak)
2570 comdat_p = false;
2571 DECL_EXTERNAL (decl) = 0;
2574 else
2575 comdat_p = true;
2578 else
2579 comdat_p = true;
2581 else if (DECL_TEMPLATE_INSTANTIATION (decl)
2582 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2584 /* DECL is an implicit instantiation of a function or static
2585 data member. */
2586 if ((flag_implicit_templates
2587 && !flag_use_repository)
2588 || (flag_implicit_inline_templates
2589 && TREE_CODE (decl) == FUNCTION_DECL
2590 && DECL_DECLARED_INLINE_P (decl)))
2591 comdat_p = true;
2592 else
2593 /* If we are not implicitly generating templates, then mark
2594 this entity as undefined in this translation unit. */
2595 import_p = true;
2597 else if (DECL_FUNCTION_MEMBER_P (decl))
2599 if (!DECL_DECLARED_INLINE_P (decl))
2601 tree ctype = DECL_CONTEXT (decl);
2602 import_export_class (ctype);
2603 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2605 DECL_NOT_REALLY_EXTERN (decl)
2606 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
2607 || (DECL_DECLARED_INLINE_P (decl)
2608 && ! flag_implement_inlines
2609 && !DECL_VINDEX (decl)));
2611 if (!DECL_NOT_REALLY_EXTERN (decl))
2612 DECL_EXTERNAL (decl) = 1;
2614 /* Always make artificials weak. */
2615 if (DECL_ARTIFICIAL (decl) && flag_weak)
2616 comdat_p = true;
2617 else
2618 maybe_make_one_only (decl);
2621 else
2622 comdat_p = true;
2624 else
2625 comdat_p = true;
2627 if (import_p)
2629 /* If we are importing DECL into this translation unit, mark is
2630 an undefined here. */
2631 DECL_EXTERNAL (decl) = 1;
2632 DECL_NOT_REALLY_EXTERN (decl) = 0;
2634 else if (comdat_p)
2636 /* If we decided to put DECL in COMDAT, mark it accordingly at
2637 this point. */
2638 comdat_linkage (decl);
2641 DECL_INTERFACE_KNOWN (decl) = 1;
2644 /* Return an expression that performs the destruction of DECL, which
2645 must be a VAR_DECL whose type has a non-trivial destructor, or is
2646 an array whose (innermost) elements have a non-trivial destructor. */
2648 tree
2649 build_cleanup (tree decl)
2651 tree temp;
2652 tree type = TREE_TYPE (decl);
2654 /* This function should only be called for declarations that really
2655 require cleanups. */
2656 gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
2658 /* Treat all objects with destructors as used; the destructor may do
2659 something substantive. */
2660 mark_used (decl);
2662 if (TREE_CODE (type) == ARRAY_TYPE)
2663 temp = decl;
2664 else
2665 temp = build_address (decl);
2666 temp = build_delete (TREE_TYPE (temp), temp,
2667 sfk_complete_destructor,
2668 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
2669 tf_warning_or_error);
2670 return temp;
2673 /* Returns the initialization guard variable for the variable DECL,
2674 which has static storage duration. */
2676 tree
2677 get_guard (tree decl)
2679 tree sname;
2680 tree guard;
2682 sname = mangle_guard_variable (decl);
2683 guard = IDENTIFIER_GLOBAL_VALUE (sname);
2684 if (! guard)
2686 tree guard_type;
2688 /* We use a type that is big enough to contain a mutex as well
2689 as an integer counter. */
2690 guard_type = targetm.cxx.guard_type ();
2691 guard = build_decl (DECL_SOURCE_LOCATION (decl),
2692 VAR_DECL, sname, guard_type);
2694 /* The guard should have the same linkage as what it guards. */
2695 TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2696 TREE_STATIC (guard) = TREE_STATIC (decl);
2697 DECL_COMMON (guard) = DECL_COMMON (decl);
2698 DECL_COMDAT (guard) = DECL_COMDAT (decl);
2699 DECL_TLS_MODEL (guard) = DECL_TLS_MODEL (decl);
2700 if (DECL_ONE_ONLY (decl))
2701 make_decl_one_only (guard, cxx_comdat_group (guard));
2702 if (TREE_PUBLIC (decl))
2703 DECL_WEAK (guard) = DECL_WEAK (decl);
2704 DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2705 DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
2707 DECL_ARTIFICIAL (guard) = 1;
2708 DECL_IGNORED_P (guard) = 1;
2709 TREE_USED (guard) = 1;
2710 pushdecl_top_level_and_finish (guard, NULL_TREE);
2712 return guard;
2715 /* Return those bits of the GUARD variable that should be set when the
2716 guarded entity is actually initialized. */
2718 static tree
2719 get_guard_bits (tree guard)
2721 if (!targetm.cxx.guard_mask_bit ())
2723 /* We only set the first byte of the guard, in order to leave room
2724 for a mutex in the high-order bits. */
2725 guard = build1 (ADDR_EXPR,
2726 build_pointer_type (TREE_TYPE (guard)),
2727 guard);
2728 guard = build1 (NOP_EXPR,
2729 build_pointer_type (char_type_node),
2730 guard);
2731 guard = build1 (INDIRECT_REF, char_type_node, guard);
2734 return guard;
2737 /* Return an expression which determines whether or not the GUARD
2738 variable has already been initialized. */
2740 tree
2741 get_guard_cond (tree guard)
2743 tree guard_value;
2745 /* Check to see if the GUARD is zero. */
2746 guard = get_guard_bits (guard);
2748 /* Mask off all but the low bit. */
2749 if (targetm.cxx.guard_mask_bit ())
2751 guard_value = integer_one_node;
2752 if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2753 guard_value = convert (TREE_TYPE (guard), guard_value);
2754 guard = cp_build_binary_op (input_location,
2755 BIT_AND_EXPR, guard, guard_value,
2756 tf_warning_or_error);
2759 guard_value = integer_zero_node;
2760 if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2761 guard_value = convert (TREE_TYPE (guard), guard_value);
2762 return cp_build_binary_op (input_location,
2763 EQ_EXPR, guard, guard_value,
2764 tf_warning_or_error);
2767 /* Return an expression which sets the GUARD variable, indicating that
2768 the variable being guarded has been initialized. */
2770 tree
2771 set_guard (tree guard)
2773 tree guard_init;
2775 /* Set the GUARD to one. */
2776 guard = get_guard_bits (guard);
2777 guard_init = integer_one_node;
2778 if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2779 guard_init = convert (TREE_TYPE (guard), guard_init);
2780 return cp_build_modify_expr (guard, NOP_EXPR, guard_init,
2781 tf_warning_or_error);
2784 /* Start the process of running a particular set of global constructors
2785 or destructors. Subroutine of do_[cd]tors. */
2787 static tree
2788 start_objects (int method_type, int initp)
2790 tree body;
2791 tree fndecl;
2792 char type[14];
2794 /* Make ctor or dtor function. METHOD_TYPE may be 'I' or 'D'. */
2796 if (initp != DEFAULT_INIT_PRIORITY)
2798 char joiner;
2800 #ifdef JOINER
2801 joiner = JOINER;
2802 #else
2803 joiner = '_';
2804 #endif
2806 sprintf (type, "sub_%c%c%.5u", method_type, joiner, initp);
2808 else
2809 sprintf (type, "sub_%c", method_type);
2811 fndecl = build_lang_decl (FUNCTION_DECL,
2812 get_file_function_name (type),
2813 build_function_type_list (void_type_node,
2814 NULL_TREE));
2815 start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
2817 TREE_PUBLIC (current_function_decl) = 0;
2819 /* Mark as artificial because it's not explicitly in the user's
2820 source code. */
2821 DECL_ARTIFICIAL (current_function_decl) = 1;
2823 /* Mark this declaration as used to avoid spurious warnings. */
2824 TREE_USED (current_function_decl) = 1;
2826 /* Mark this function as a global constructor or destructor. */
2827 if (method_type == 'I')
2828 DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2829 else
2830 DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
2832 body = begin_compound_stmt (BCS_FN_BODY);
2834 return body;
2837 /* Finish the process of running a particular set of global constructors
2838 or destructors. Subroutine of do_[cd]tors. */
2840 static void
2841 finish_objects (int method_type, int initp, tree body)
2843 tree fn;
2845 /* Finish up. */
2846 finish_compound_stmt (body);
2847 fn = finish_function (0);
2849 if (method_type == 'I')
2851 DECL_STATIC_CONSTRUCTOR (fn) = 1;
2852 decl_init_priority_insert (fn, initp);
2854 else
2856 DECL_STATIC_DESTRUCTOR (fn) = 1;
2857 decl_fini_priority_insert (fn, initp);
2860 expand_or_defer_fn (fn);
2863 /* The names of the parameters to the function created to handle
2864 initializations and destructions for objects with static storage
2865 duration. */
2866 #define INITIALIZE_P_IDENTIFIER "__initialize_p"
2867 #define PRIORITY_IDENTIFIER "__priority"
2869 /* The name of the function we create to handle initializations and
2870 destructions for objects with static storage duration. */
2871 #define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2873 /* The declaration for the __INITIALIZE_P argument. */
2874 static GTY(()) tree initialize_p_decl;
2876 /* The declaration for the __PRIORITY argument. */
2877 static GTY(()) tree priority_decl;
2879 /* The declaration for the static storage duration function. */
2880 static GTY(()) tree ssdf_decl;
2882 /* All the static storage duration functions created in this
2883 translation unit. */
2884 static GTY(()) VEC(tree,gc) *ssdf_decls;
2886 /* A map from priority levels to information about that priority
2887 level. There may be many such levels, so efficient lookup is
2888 important. */
2889 static splay_tree priority_info_map;
2891 /* Begins the generation of the function that will handle all
2892 initialization and destruction of objects with static storage
2893 duration. The function generated takes two parameters of type
2894 `int': __INITIALIZE_P and __PRIORITY. If __INITIALIZE_P is
2895 nonzero, it performs initializations. Otherwise, it performs
2896 destructions. It only performs those initializations or
2897 destructions with the indicated __PRIORITY. The generated function
2898 returns no value.
2900 It is assumed that this function will only be called once per
2901 translation unit. */
2903 static tree
2904 start_static_storage_duration_function (unsigned count)
2906 tree type;
2907 tree body;
2908 char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2910 /* Create the identifier for this function. It will be of the form
2911 SSDF_IDENTIFIER_<number>. */
2912 sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
2914 type = build_function_type_list (void_type_node,
2915 integer_type_node, integer_type_node,
2916 NULL_TREE);
2918 /* Create the FUNCTION_DECL itself. */
2919 ssdf_decl = build_lang_decl (FUNCTION_DECL,
2920 get_identifier (id),
2921 type);
2922 TREE_PUBLIC (ssdf_decl) = 0;
2923 DECL_ARTIFICIAL (ssdf_decl) = 1;
2925 /* Put this function in the list of functions to be called from the
2926 static constructors and destructors. */
2927 if (!ssdf_decls)
2929 ssdf_decls = VEC_alloc (tree, gc, 32);
2931 /* Take this opportunity to initialize the map from priority
2932 numbers to information about that priority level. */
2933 priority_info_map = splay_tree_new (splay_tree_compare_ints,
2934 /*delete_key_fn=*/0,
2935 /*delete_value_fn=*/
2936 (splay_tree_delete_value_fn) &free);
2938 /* We always need to generate functions for the
2939 DEFAULT_INIT_PRIORITY so enter it now. That way when we walk
2940 priorities later, we'll be sure to find the
2941 DEFAULT_INIT_PRIORITY. */
2942 get_priority_info (DEFAULT_INIT_PRIORITY);
2945 VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
2947 /* Create the argument list. */
2948 initialize_p_decl = cp_build_parm_decl
2949 (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
2950 DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
2951 TREE_USED (initialize_p_decl) = 1;
2952 priority_decl = cp_build_parm_decl
2953 (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
2954 DECL_CONTEXT (priority_decl) = ssdf_decl;
2955 TREE_USED (priority_decl) = 1;
2957 DECL_CHAIN (initialize_p_decl) = priority_decl;
2958 DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2960 /* Put the function in the global scope. */
2961 pushdecl (ssdf_decl);
2963 /* Start the function itself. This is equivalent to declaring the
2964 function as:
2966 static void __ssdf (int __initialize_p, init __priority_p);
2968 It is static because we only need to call this function from the
2969 various constructor and destructor functions for this module. */
2970 start_preparsed_function (ssdf_decl,
2971 /*attrs=*/NULL_TREE,
2972 SF_PRE_PARSED);
2974 /* Set up the scope of the outermost block in the function. */
2975 body = begin_compound_stmt (BCS_FN_BODY);
2977 return body;
2980 /* Finish the generation of the function which performs initialization
2981 and destruction of objects with static storage duration. After
2982 this point, no more such objects can be created. */
2984 static void
2985 finish_static_storage_duration_function (tree body)
2987 /* Close out the function. */
2988 finish_compound_stmt (body);
2989 expand_or_defer_fn (finish_function (0));
2992 /* Return the information about the indicated PRIORITY level. If no
2993 code to handle this level has yet been generated, generate the
2994 appropriate prologue. */
2996 static priority_info
2997 get_priority_info (int priority)
2999 priority_info pi;
3000 splay_tree_node n;
3002 n = splay_tree_lookup (priority_info_map,
3003 (splay_tree_key) priority);
3004 if (!n)
3006 /* Create a new priority information structure, and insert it
3007 into the map. */
3008 pi = XNEW (struct priority_info_s);
3009 pi->initializations_p = 0;
3010 pi->destructions_p = 0;
3011 splay_tree_insert (priority_info_map,
3012 (splay_tree_key) priority,
3013 (splay_tree_value) pi);
3015 else
3016 pi = (priority_info) n->value;
3018 return pi;
3021 /* The effective initialization priority of a DECL. */
3023 #define DECL_EFFECTIVE_INIT_PRIORITY(decl) \
3024 ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
3025 ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
3027 /* Whether a DECL needs a guard to protect it against multiple
3028 initialization. */
3030 #define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl) \
3031 || DECL_ONE_ONLY (decl) \
3032 || DECL_WEAK (decl)))
3034 /* Called from one_static_initialization_or_destruction(),
3035 via walk_tree.
3036 Walks the initializer list of a global variable and looks for
3037 temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
3038 and that have their DECL_CONTEXT() == NULL.
3039 For each such temporary variable, set their DECL_CONTEXT() to
3040 the current function. This is necessary because otherwise
3041 some optimizers (enabled by -O2 -fprofile-arcs) might crash
3042 when trying to refer to a temporary variable that does not have
3043 it's DECL_CONTECT() properly set. */
3044 static tree
3045 fix_temporary_vars_context_r (tree *node,
3046 int * /*unused*/,
3047 void * /*unused1*/)
3049 gcc_assert (current_function_decl);
3051 if (TREE_CODE (*node) == BIND_EXPR)
3053 tree var;
3055 for (var = BIND_EXPR_VARS (*node); var; var = DECL_CHAIN (var))
3056 if (TREE_CODE (var) == VAR_DECL
3057 && !DECL_NAME (var)
3058 && DECL_ARTIFICIAL (var)
3059 && !DECL_CONTEXT (var))
3060 DECL_CONTEXT (var) = current_function_decl;
3063 return NULL_TREE;
3066 /* Set up to handle the initialization or destruction of DECL. If
3067 INITP is nonzero, we are initializing the variable. Otherwise, we
3068 are destroying it. */
3070 static void
3071 one_static_initialization_or_destruction (tree decl, tree init, bool initp)
3073 tree guard_if_stmt = NULL_TREE;
3074 tree guard;
3076 /* If we are supposed to destruct and there's a trivial destructor,
3077 nothing has to be done. */
3078 if (!initp
3079 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3080 return;
3082 /* Trick the compiler into thinking we are at the file and line
3083 where DECL was declared so that error-messages make sense, and so
3084 that the debugger will show somewhat sensible file and line
3085 information. */
3086 input_location = DECL_SOURCE_LOCATION (decl);
3088 /* Make sure temporary variables in the initialiser all have
3089 their DECL_CONTEXT() set to a value different from NULL_TREE.
3090 This can happen when global variables initialisers are built.
3091 In that case, the DECL_CONTEXT() of the global variables _AND_ of all
3092 the temporary variables that might have been generated in the
3093 accompagning initialisers is NULL_TREE, meaning the variables have been
3094 declared in the global namespace.
3095 What we want to do here is to fix that and make sure the DECL_CONTEXT()
3096 of the temporaries are set to the current function decl. */
3097 cp_walk_tree_without_duplicates (&init,
3098 fix_temporary_vars_context_r,
3099 NULL);
3101 /* Because of:
3103 [class.access.spec]
3105 Access control for implicit calls to the constructors,
3106 the conversion functions, or the destructor called to
3107 create and destroy a static data member is performed as
3108 if these calls appeared in the scope of the member's
3109 class.
3111 we pretend we are in a static member function of the class of
3112 which the DECL is a member. */
3113 if (member_p (decl))
3115 DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
3116 DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
3119 /* Assume we don't need a guard. */
3120 guard = NULL_TREE;
3121 /* We need a guard if this is an object with external linkage that
3122 might be initialized in more than one place. (For example, a
3123 static data member of a template, when the data member requires
3124 construction.) */
3125 if (NEEDS_GUARD_P (decl))
3127 tree guard_cond;
3129 guard = get_guard (decl);
3131 /* When using __cxa_atexit, we just check the GUARD as we would
3132 for a local static. */
3133 if (flag_use_cxa_atexit)
3135 /* When using __cxa_atexit, we never try to destroy
3136 anything from a static destructor. */
3137 gcc_assert (initp);
3138 guard_cond = get_guard_cond (guard);
3140 /* If we don't have __cxa_atexit, then we will be running
3141 destructors from .fini sections, or their equivalents. So,
3142 we need to know how many times we've tried to initialize this
3143 object. We do initializations only if the GUARD is zero,
3144 i.e., if we are the first to initialize the variable. We do
3145 destructions only if the GUARD is one, i.e., if we are the
3146 last to destroy the variable. */
3147 else if (initp)
3148 guard_cond
3149 = cp_build_binary_op (input_location,
3150 EQ_EXPR,
3151 cp_build_unary_op (PREINCREMENT_EXPR,
3152 guard,
3153 /*noconvert=*/1,
3154 tf_warning_or_error),
3155 integer_one_node,
3156 tf_warning_or_error);
3157 else
3158 guard_cond
3159 = cp_build_binary_op (input_location,
3160 EQ_EXPR,
3161 cp_build_unary_op (PREDECREMENT_EXPR,
3162 guard,
3163 /*noconvert=*/1,
3164 tf_warning_or_error),
3165 integer_zero_node,
3166 tf_warning_or_error);
3168 guard_if_stmt = begin_if_stmt ();
3169 finish_if_stmt_cond (guard_cond, guard_if_stmt);
3173 /* If we're using __cxa_atexit, we have not already set the GUARD,
3174 so we must do so now. */
3175 if (guard && initp && flag_use_cxa_atexit)
3176 finish_expr_stmt (set_guard (guard));
3178 /* Perform the initialization or destruction. */
3179 if (initp)
3181 if (init)
3182 finish_expr_stmt (init);
3184 /* If we're using __cxa_atexit, register a function that calls the
3185 destructor for the object. */
3186 if (flag_use_cxa_atexit)
3187 finish_expr_stmt (register_dtor_fn (decl));
3189 else
3190 finish_expr_stmt (build_cleanup (decl));
3192 /* Finish the guard if-stmt, if necessary. */
3193 if (guard)
3195 finish_then_clause (guard_if_stmt);
3196 finish_if_stmt (guard_if_stmt);
3199 /* Now that we're done with DECL we don't need to pretend to be a
3200 member of its class any longer. */
3201 DECL_CONTEXT (current_function_decl) = NULL_TREE;
3202 DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3205 /* Generate code to do the initialization or destruction of the decls in VARS,
3206 a TREE_LIST of VAR_DECL with static storage duration.
3207 Whether initialization or destruction is performed is specified by INITP. */
3209 static void
3210 do_static_initialization_or_destruction (tree vars, bool initp)
3212 tree node, init_if_stmt, cond;
3214 /* Build the outer if-stmt to check for initialization or destruction. */
3215 init_if_stmt = begin_if_stmt ();
3216 cond = initp ? integer_one_node : integer_zero_node;
3217 cond = cp_build_binary_op (input_location,
3218 EQ_EXPR,
3219 initialize_p_decl,
3220 cond,
3221 tf_warning_or_error);
3222 finish_if_stmt_cond (cond, init_if_stmt);
3224 node = vars;
3225 do {
3226 tree decl = TREE_VALUE (node);
3227 tree priority_if_stmt;
3228 int priority;
3229 priority_info pi;
3231 /* If we don't need a destructor, there's nothing to do. Avoid
3232 creating a possibly empty if-stmt. */
3233 if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3235 node = TREE_CHAIN (node);
3236 continue;
3239 /* Remember that we had an initialization or finalization at this
3240 priority. */
3241 priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3242 pi = get_priority_info (priority);
3243 if (initp)
3244 pi->initializations_p = 1;
3245 else
3246 pi->destructions_p = 1;
3248 /* Conditionalize this initialization on being in the right priority
3249 and being initializing/finalizing appropriately. */
3250 priority_if_stmt = begin_if_stmt ();
3251 cond = cp_build_binary_op (input_location,
3252 EQ_EXPR,
3253 priority_decl,
3254 build_int_cst (NULL_TREE, priority),
3255 tf_warning_or_error);
3256 finish_if_stmt_cond (cond, priority_if_stmt);
3258 /* Process initializers with same priority. */
3259 for (; node
3260 && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3261 node = TREE_CHAIN (node))
3262 /* Do one initialization or destruction. */
3263 one_static_initialization_or_destruction (TREE_VALUE (node),
3264 TREE_PURPOSE (node), initp);
3266 /* Finish up the priority if-stmt body. */
3267 finish_then_clause (priority_if_stmt);
3268 finish_if_stmt (priority_if_stmt);
3270 } while (node);
3272 /* Finish up the init/destruct if-stmt body. */
3273 finish_then_clause (init_if_stmt);
3274 finish_if_stmt (init_if_stmt);
3277 /* VARS is a list of variables with static storage duration which may
3278 need initialization and/or finalization. Remove those variables
3279 that don't really need to be initialized or finalized, and return
3280 the resulting list. The order in which the variables appear in
3281 VARS is in reverse order of the order in which they should actually
3282 be initialized. The list we return is in the unreversed order;
3283 i.e., the first variable should be initialized first. */
3285 static tree
3286 prune_vars_needing_no_initialization (tree *vars)
3288 tree *var = vars;
3289 tree result = NULL_TREE;
3291 while (*var)
3293 tree t = *var;
3294 tree decl = TREE_VALUE (t);
3295 tree init = TREE_PURPOSE (t);
3297 /* Deal gracefully with error. */
3298 if (decl == error_mark_node)
3300 var = &TREE_CHAIN (t);
3301 continue;
3304 /* The only things that can be initialized are variables. */
3305 gcc_assert (TREE_CODE (decl) == VAR_DECL);
3307 /* If this object is not defined, we don't need to do anything
3308 here. */
3309 if (DECL_EXTERNAL (decl))
3311 var = &TREE_CHAIN (t);
3312 continue;
3315 /* Also, if the initializer already contains errors, we can bail
3316 out now. */
3317 if (init && TREE_CODE (init) == TREE_LIST
3318 && value_member (error_mark_node, init))
3320 var = &TREE_CHAIN (t);
3321 continue;
3324 /* This variable is going to need initialization and/or
3325 finalization, so we add it to the list. */
3326 *var = TREE_CHAIN (t);
3327 TREE_CHAIN (t) = result;
3328 result = t;
3331 return result;
3334 /* Make sure we have told the back end about all the variables in
3335 VARS. */
3337 static void
3338 write_out_vars (tree vars)
3340 tree v;
3342 for (v = vars; v; v = TREE_CHAIN (v))
3344 tree var = TREE_VALUE (v);
3345 if (!var_finalized_p (var))
3347 import_export_decl (var);
3348 rest_of_decl_compilation (var, 1, 1);
3353 /* Generate a static constructor (if CONSTRUCTOR_P) or destructor
3354 (otherwise) that will initialize all global objects with static
3355 storage duration having the indicated PRIORITY. */
3357 static void
3358 generate_ctor_or_dtor_function (bool constructor_p, int priority,
3359 location_t *locus)
3361 char function_key;
3362 tree fndecl;
3363 tree body;
3364 size_t i;
3366 input_location = *locus;
3367 /* ??? */
3368 /* Was: locus->line++; */
3370 /* We use `I' to indicate initialization and `D' to indicate
3371 destruction. */
3372 function_key = constructor_p ? 'I' : 'D';
3374 /* We emit the function lazily, to avoid generating empty
3375 global constructors and destructors. */
3376 body = NULL_TREE;
3378 /* For Objective-C++, we may need to initialize metadata found in this module.
3379 This must be done _before_ any other static initializations. */
3380 if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3381 && constructor_p && objc_static_init_needed_p ())
3383 body = start_objects (function_key, priority);
3384 objc_generate_static_init_call (NULL_TREE);
3387 /* Call the static storage duration function with appropriate
3388 arguments. */
3389 FOR_EACH_VEC_ELT (tree, ssdf_decls, i, fndecl)
3391 /* Calls to pure or const functions will expand to nothing. */
3392 if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3394 tree call;
3396 if (! body)
3397 body = start_objects (function_key, priority);
3399 call = cp_build_function_call_nary (fndecl, tf_warning_or_error,
3400 build_int_cst (NULL_TREE,
3401 constructor_p),
3402 build_int_cst (NULL_TREE,
3403 priority),
3404 NULL_TREE);
3405 finish_expr_stmt (call);
3409 /* Close out the function. */
3410 if (body)
3411 finish_objects (function_key, priority, body);
3414 /* Generate constructor and destructor functions for the priority
3415 indicated by N. */
3417 static int
3418 generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
3420 location_t *locus = (location_t *) data;
3421 int priority = (int) n->key;
3422 priority_info pi = (priority_info) n->value;
3424 /* Generate the functions themselves, but only if they are really
3425 needed. */
3426 if (pi->initializations_p)
3427 generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
3428 if (pi->destructions_p)
3429 generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
3431 /* Keep iterating. */
3432 return 0;
3435 /* Java requires that we be able to reference a local address for a
3436 method, and not be confused by PLT entries. If hidden aliases are
3437 supported, collect and return all the functions for which we should
3438 emit a hidden alias. */
3440 static struct pointer_set_t *
3441 collect_candidates_for_java_method_aliases (void)
3443 struct cgraph_node *node;
3444 struct pointer_set_t *candidates = NULL;
3446 #ifndef HAVE_GAS_HIDDEN
3447 return candidates;
3448 #endif
3450 FOR_EACH_FUNCTION (node)
3452 tree fndecl = node->symbol.decl;
3454 if (DECL_CONTEXT (fndecl)
3455 && TYPE_P (DECL_CONTEXT (fndecl))
3456 && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3457 && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3459 if (candidates == NULL)
3460 candidates = pointer_set_create ();
3461 pointer_set_insert (candidates, fndecl);
3465 return candidates;
3469 /* Java requires that we be able to reference a local address for a
3470 method, and not be confused by PLT entries. If hidden aliases are
3471 supported, emit one for each java function that we've emitted.
3472 CANDIDATES is the set of FUNCTION_DECLs that were gathered
3473 by collect_candidates_for_java_method_aliases. */
3475 static void
3476 build_java_method_aliases (struct pointer_set_t *candidates)
3478 struct cgraph_node *node;
3480 #ifndef HAVE_GAS_HIDDEN
3481 return;
3482 #endif
3484 FOR_EACH_FUNCTION (node)
3486 tree fndecl = node->symbol.decl;
3488 if (TREE_ASM_WRITTEN (fndecl)
3489 && pointer_set_contains (candidates, fndecl))
3491 /* Mangle the name in a predictable way; we need to reference
3492 this from a java compiled object file. */
3493 tree oid, nid, alias;
3494 const char *oname;
3495 char *nname;
3497 oid = DECL_ASSEMBLER_NAME (fndecl);
3498 oname = IDENTIFIER_POINTER (oid);
3499 gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3500 nname = ACONCAT (("_ZGA", oname+2, NULL));
3501 nid = get_identifier (nname);
3503 alias = make_alias_for (fndecl, nid);
3504 TREE_PUBLIC (alias) = 1;
3505 DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3507 assemble_alias (alias, oid);
3512 /* Return C++ property of T, based on given operation OP. */
3514 static int
3515 cpp_check (tree t, cpp_operation op)
3517 switch (op)
3519 case IS_ABSTRACT:
3520 return DECL_PURE_VIRTUAL_P (t);
3521 case IS_CONSTRUCTOR:
3522 return DECL_CONSTRUCTOR_P (t);
3523 case IS_DESTRUCTOR:
3524 return DECL_DESTRUCTOR_P (t);
3525 case IS_COPY_CONSTRUCTOR:
3526 return DECL_COPY_CONSTRUCTOR_P (t);
3527 case IS_TEMPLATE:
3528 return TREE_CODE (t) == TEMPLATE_DECL;
3529 default:
3530 return 0;
3534 /* Collect source file references recursively, starting from NAMESPC. */
3536 static void
3537 collect_source_refs (tree namespc)
3539 tree t;
3541 if (!namespc)
3542 return;
3544 /* Iterate over names in this name space. */
3545 for (t = NAMESPACE_LEVEL (namespc)->names; t; t = TREE_CHAIN (t))
3546 if (!DECL_IS_BUILTIN (t) )
3547 collect_source_ref (DECL_SOURCE_FILE (t));
3549 /* Dump siblings, if any */
3550 collect_source_refs (TREE_CHAIN (namespc));
3552 /* Dump children, if any */
3553 collect_source_refs (NAMESPACE_LEVEL (namespc)->namespaces);
3556 /* Collect decls relevant to SOURCE_FILE from all namespaces recursively,
3557 starting from NAMESPC. */
3559 static void
3560 collect_ada_namespace (tree namespc, const char *source_file)
3562 if (!namespc)
3563 return;
3565 /* Collect decls from this namespace */
3566 collect_ada_nodes (NAMESPACE_LEVEL (namespc)->names, source_file);
3568 /* Collect siblings, if any */
3569 collect_ada_namespace (TREE_CHAIN (namespc), source_file);
3571 /* Collect children, if any */
3572 collect_ada_namespace (NAMESPACE_LEVEL (namespc)->namespaces, source_file);
3575 /* Returns true iff there is a definition available for variable or
3576 function DECL. */
3578 static bool
3579 decl_defined_p (tree decl)
3581 if (TREE_CODE (decl) == FUNCTION_DECL)
3582 return (DECL_INITIAL (decl) != NULL_TREE);
3583 else
3585 gcc_assert (TREE_CODE (decl) == VAR_DECL);
3586 return !DECL_EXTERNAL (decl);
3590 /* Nonzero for a VAR_DECL whose value can be used in a constant expression.
3592 [expr.const]
3594 An integral constant-expression can only involve ... const
3595 variables of integral or enumeration types initialized with
3596 constant expressions ...
3598 C++0x also allows constexpr variables and temporaries initialized
3599 with constant expressions. We handle the former here, but the latter
3600 are just folded away in cxx_eval_constant_expression.
3602 The standard does not require that the expression be non-volatile.
3603 G++ implements the proposed correction in DR 457. */
3605 bool
3606 decl_constant_var_p (tree decl)
3608 if (!decl_maybe_constant_var_p (decl))
3609 return false;
3611 /* We don't know if a template static data member is initialized with
3612 a constant expression until we instantiate its initializer. Even
3613 in the case of a constexpr variable, we can't treat it as a
3614 constant until its initializer is complete in case it's used in
3615 its own initializer. */
3616 mark_used (decl);
3617 return DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl);
3620 /* Returns true if DECL could be a symbolic constant variable, depending on
3621 its initializer. */
3623 bool
3624 decl_maybe_constant_var_p (tree decl)
3626 tree type = TREE_TYPE (decl);
3627 if (TREE_CODE (decl) != VAR_DECL)
3628 return false;
3629 if (DECL_DECLARED_CONSTEXPR_P (decl))
3630 return true;
3631 return (CP_TYPE_CONST_NON_VOLATILE_P (type)
3632 && INTEGRAL_OR_ENUMERATION_TYPE_P (type));
3635 /* Complain that DECL uses a type with no linkage but is never defined. */
3637 static void
3638 no_linkage_error (tree decl)
3640 tree t = no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false);
3641 if (TYPE_ANONYMOUS_P (t))
3643 permerror (0, "%q+#D, declared using anonymous type, "
3644 "is used but never defined", decl);
3645 if (is_typedef_decl (TYPE_NAME (t)))
3646 permerror (0, "%q+#D does not refer to the unqualified type, "
3647 "so it is not used for linkage", TYPE_NAME (t));
3649 else
3650 permerror (0, "%q+#D, declared using local type %qT, "
3651 "is used but never defined", decl, t);
3654 /* Collect declarations from all namespaces relevant to SOURCE_FILE. */
3656 static void
3657 collect_all_refs (const char *source_file)
3659 collect_ada_namespace (global_namespace, source_file);
3662 /* Clear DECL_EXTERNAL for NODE. */
3664 static bool
3665 clear_decl_external (struct cgraph_node *node, void * /*data*/)
3667 DECL_EXTERNAL (node->symbol.decl) = 0;
3668 return false;
3671 /* This routine is called at the end of compilation.
3672 Its job is to create all the code needed to initialize and
3673 destroy the global aggregates. We do the destruction
3674 first, since that way we only need to reverse the decls once. */
3676 void
3677 cp_write_global_declarations (void)
3679 tree vars;
3680 bool reconsider;
3681 size_t i;
3682 location_t locus;
3683 unsigned ssdf_count = 0;
3684 int retries = 0;
3685 tree decl;
3686 struct pointer_set_t *candidates;
3688 locus = input_location;
3689 at_eof = 1;
3691 /* Bad parse errors. Just forget about it. */
3692 if (! global_bindings_p () || current_class_type
3693 || !VEC_empty (tree,decl_namespace_list))
3694 return;
3696 if (pch_file)
3697 c_common_write_pch ();
3699 cgraph_process_same_body_aliases ();
3701 /* Handle -fdump-ada-spec[-slim] */
3702 if (flag_dump_ada_spec || flag_dump_ada_spec_slim)
3704 if (flag_dump_ada_spec_slim)
3705 collect_source_ref (main_input_filename);
3706 else
3707 collect_source_refs (global_namespace);
3709 dump_ada_specs (collect_all_refs, cpp_check);
3712 /* FIXME - huh? was input_line -= 1;*/
3714 timevar_start (TV_PHASE_DEFERRED);
3716 /* We now have to write out all the stuff we put off writing out.
3717 These include:
3719 o Template specializations that we have not yet instantiated,
3720 but which are needed.
3721 o Initialization and destruction for non-local objects with
3722 static storage duration. (Local objects with static storage
3723 duration are initialized when their scope is first entered,
3724 and are cleaned up via atexit.)
3725 o Virtual function tables.
3727 All of these may cause others to be needed. For example,
3728 instantiating one function may cause another to be needed, and
3729 generating the initializer for an object may cause templates to be
3730 instantiated, etc., etc. */
3732 emit_support_tinfos ();
3736 tree t;
3737 tree decl;
3739 reconsider = false;
3741 /* If there are templates that we've put off instantiating, do
3742 them now. */
3743 instantiate_pending_templates (retries);
3744 ggc_collect ();
3746 /* Write out virtual tables as required. Note that writing out
3747 the virtual table for a template class may cause the
3748 instantiation of members of that class. If we write out
3749 vtables then we remove the class from our list so we don't
3750 have to look at it again. */
3752 while (keyed_classes != NULL_TREE
3753 && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3755 reconsider = true;
3756 keyed_classes = TREE_CHAIN (keyed_classes);
3759 t = keyed_classes;
3760 if (t != NULL_TREE)
3762 tree next = TREE_CHAIN (t);
3764 while (next)
3766 if (maybe_emit_vtables (TREE_VALUE (next)))
3768 reconsider = true;
3769 TREE_CHAIN (t) = TREE_CHAIN (next);
3771 else
3772 t = next;
3774 next = TREE_CHAIN (t);
3778 /* Write out needed type info variables. We have to be careful
3779 looping through unemitted decls, because emit_tinfo_decl may
3780 cause other variables to be needed. New elements will be
3781 appended, and we remove from the vector those that actually
3782 get emitted. */
3783 for (i = VEC_length (tree, unemitted_tinfo_decls);
3784 VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3785 if (emit_tinfo_decl (t))
3787 reconsider = true;
3788 VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3791 /* The list of objects with static storage duration is built up
3792 in reverse order. We clear STATIC_AGGREGATES so that any new
3793 aggregates added during the initialization of these will be
3794 initialized in the correct order when we next come around the
3795 loop. */
3796 vars = prune_vars_needing_no_initialization (&static_aggregates);
3798 if (vars)
3800 /* We need to start a new initialization function each time
3801 through the loop. That's because we need to know which
3802 vtables have been referenced, and TREE_SYMBOL_REFERENCED
3803 isn't computed until a function is finished, and written
3804 out. That's a deficiency in the back end. When this is
3805 fixed, these initialization functions could all become
3806 inline, with resulting performance improvements. */
3807 tree ssdf_body;
3809 /* Set the line and file, so that it is obviously not from
3810 the source file. */
3811 input_location = locus;
3812 ssdf_body = start_static_storage_duration_function (ssdf_count);
3814 /* Make sure the back end knows about all the variables. */
3815 write_out_vars (vars);
3817 /* First generate code to do all the initializations. */
3818 if (vars)
3819 do_static_initialization_or_destruction (vars, /*initp=*/true);
3821 /* Then, generate code to do all the destructions. Do these
3822 in reverse order so that the most recently constructed
3823 variable is the first destroyed. If we're using
3824 __cxa_atexit, then we don't need to do this; functions
3825 were registered at initialization time to destroy the
3826 local statics. */
3827 if (!flag_use_cxa_atexit && vars)
3829 vars = nreverse (vars);
3830 do_static_initialization_or_destruction (vars, /*initp=*/false);
3832 else
3833 vars = NULL_TREE;
3835 /* Finish up the static storage duration function for this
3836 round. */
3837 input_location = locus;
3838 finish_static_storage_duration_function (ssdf_body);
3840 /* All those initializations and finalizations might cause
3841 us to need more inline functions, more template
3842 instantiations, etc. */
3843 reconsider = true;
3844 ssdf_count++;
3845 /* ??? was: locus.line++; */
3848 /* Go through the set of inline functions whose bodies have not
3849 been emitted yet. If out-of-line copies of these functions
3850 are required, emit them. */
3851 FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3853 /* Does it need synthesizing? */
3854 if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
3855 && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
3857 /* Even though we're already at the top-level, we push
3858 there again. That way, when we pop back a few lines
3859 hence, all of our state is restored. Otherwise,
3860 finish_function doesn't clean things up, and we end
3861 up with CURRENT_FUNCTION_DECL set. */
3862 push_to_top_level ();
3863 /* The decl's location will mark where it was first
3864 needed. Save that so synthesize method can indicate
3865 where it was needed from, in case of error */
3866 input_location = DECL_SOURCE_LOCATION (decl);
3867 synthesize_method (decl);
3868 pop_from_top_level ();
3869 reconsider = true;
3872 if (!DECL_SAVED_TREE (decl))
3873 continue;
3875 /* We lie to the back end, pretending that some functions
3876 are not defined when they really are. This keeps these
3877 functions from being put out unnecessarily. But, we must
3878 stop lying when the functions are referenced, or if they
3879 are not comdat since they need to be put out now. If
3880 DECL_INTERFACE_KNOWN, then we have already set
3881 DECL_EXTERNAL appropriately, so there's no need to check
3882 again, and we do not want to clear DECL_EXTERNAL if a
3883 previous call to import_export_decl set it.
3885 This is done in a separate for cycle, because if some
3886 deferred function is contained in another deferred
3887 function later in deferred_fns varray,
3888 rest_of_compilation would skip this function and we
3889 really cannot expand the same function twice. */
3890 import_export_decl (decl);
3891 if (DECL_NOT_REALLY_EXTERN (decl)
3892 && DECL_INITIAL (decl)
3893 && decl_needed_p (decl))
3895 struct cgraph_node *node, *next;
3897 node = cgraph_get_node (decl);
3898 if (node->same_body_alias)
3899 node = cgraph_alias_aliased_node (node);
3901 cgraph_for_node_and_aliases (node, clear_decl_external,
3902 NULL, true);
3903 /* If we mark !DECL_EXTERNAL one of the symbols in some comdat
3904 group, we need to mark all symbols in the same comdat group
3905 that way. */
3906 if (node->symbol.same_comdat_group)
3907 for (next = cgraph (node->symbol.same_comdat_group);
3908 next != node;
3909 next = cgraph (next->symbol.same_comdat_group))
3910 cgraph_for_node_and_aliases (next, clear_decl_external,
3911 NULL, true);
3914 /* If we're going to need to write this function out, and
3915 there's already a body for it, create RTL for it now.
3916 (There might be no body if this is a method we haven't
3917 gotten around to synthesizing yet.) */
3918 if (!DECL_EXTERNAL (decl)
3919 && decl_needed_p (decl)
3920 && !TREE_ASM_WRITTEN (decl)
3921 && !cgraph_get_node (decl)->local.finalized)
3923 /* We will output the function; no longer consider it in this
3924 loop. */
3925 DECL_DEFER_OUTPUT (decl) = 0;
3926 /* Generate RTL for this function now that we know we
3927 need it. */
3928 expand_or_defer_fn (decl);
3929 /* If we're compiling -fsyntax-only pretend that this
3930 function has been written out so that we don't try to
3931 expand it again. */
3932 if (flag_syntax_only)
3933 TREE_ASM_WRITTEN (decl) = 1;
3934 reconsider = true;
3938 if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
3939 reconsider = true;
3941 /* Static data members are just like namespace-scope globals. */
3942 FOR_EACH_VEC_ELT (tree, pending_statics, i, decl)
3944 if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3945 /* Don't write it out if we haven't seen a definition. */
3946 || DECL_IN_AGGR_P (decl))
3947 continue;
3948 import_export_decl (decl);
3949 /* If this static data member is needed, provide it to the
3950 back end. */
3951 if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
3952 DECL_EXTERNAL (decl) = 0;
3954 if (VEC_length (tree, pending_statics) != 0
3955 && wrapup_global_declarations (VEC_address (tree, pending_statics),
3956 VEC_length (tree, pending_statics)))
3957 reconsider = true;
3959 retries++;
3961 while (reconsider);
3963 /* All used inline functions must have a definition at this point. */
3964 FOR_EACH_VEC_ELT (tree, deferred_fns, i, decl)
3966 if (/* Check online inline functions that were actually used. */
3967 DECL_ODR_USED (decl) && DECL_DECLARED_INLINE_P (decl)
3968 /* If the definition actually was available here, then the
3969 fact that the function was not defined merely represents
3970 that for some reason (use of a template repository,
3971 #pragma interface, etc.) we decided not to emit the
3972 definition here. */
3973 && !DECL_INITIAL (decl)
3974 /* Don't complain if the template was defined. */
3975 && !(DECL_TEMPLATE_INSTANTIATION (decl)
3976 && DECL_INITIAL (DECL_TEMPLATE_RESULT
3977 (template_for_substitution (decl)))))
3979 warning (0, "inline function %q+D used but never defined", decl);
3980 /* Avoid a duplicate warning from check_global_declaration_1. */
3981 TREE_NO_WARNING (decl) = 1;
3985 /* So must decls that use a type with no linkage. */
3986 FOR_EACH_VEC_ELT (tree, no_linkage_decls, i, decl)
3987 if (!decl_defined_p (decl))
3988 no_linkage_error (decl);
3990 /* Then, do the Objective-C stuff. This is where all the
3991 Objective-C module stuff gets generated (symtab,
3992 class/protocol/selector lists etc). This must be done after C++
3993 templates, destructors etc. so that selectors used in C++
3994 templates are properly allocated. */
3995 if (c_dialect_objc ())
3996 objc_write_global_declarations ();
3998 /* We give C linkage to static constructors and destructors. */
3999 push_lang_context (lang_name_c);
4001 /* Generate initialization and destruction functions for all
4002 priorities for which they are required. */
4003 if (priority_info_map)
4004 splay_tree_foreach (priority_info_map,
4005 generate_ctor_and_dtor_functions_for_priority,
4006 /*data=*/&locus);
4007 else if (c_dialect_objc () && objc_static_init_needed_p ())
4008 /* If this is obj-c++ and we need a static init, call
4009 generate_ctor_or_dtor_function. */
4010 generate_ctor_or_dtor_function (/*constructor_p=*/true,
4011 DEFAULT_INIT_PRIORITY, &locus);
4013 /* We're done with the splay-tree now. */
4014 if (priority_info_map)
4015 splay_tree_delete (priority_info_map);
4017 /* Generate any missing aliases. */
4018 maybe_apply_pending_pragma_weaks ();
4020 /* We're done with static constructors, so we can go back to "C++"
4021 linkage now. */
4022 pop_lang_context ();
4024 /* Collect candidates for Java hidden aliases. */
4025 candidates = collect_candidates_for_java_method_aliases ();
4027 timevar_stop (TV_PHASE_DEFERRED);
4028 timevar_start (TV_PHASE_OPT_GEN);
4030 finalize_compilation_unit ();
4032 timevar_stop (TV_PHASE_OPT_GEN);
4033 timevar_start (TV_PHASE_CHECK_DBGINFO);
4035 /* Now, issue warnings about static, but not defined, functions,
4036 etc., and emit debugging information. */
4037 walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
4038 if (VEC_length (tree, pending_statics) != 0)
4040 check_global_declarations (VEC_address (tree, pending_statics),
4041 VEC_length (tree, pending_statics));
4042 emit_debug_global_declarations (VEC_address (tree, pending_statics),
4043 VEC_length (tree, pending_statics));
4046 perform_deferred_noexcept_checks ();
4048 /* Generate hidden aliases for Java. */
4049 if (candidates)
4051 build_java_method_aliases (candidates);
4052 pointer_set_destroy (candidates);
4055 finish_repo ();
4057 /* The entire file is now complete. If requested, dump everything
4058 to a file. */
4060 int flags;
4061 FILE *stream = dump_begin (TDI_tu, &flags);
4063 if (stream)
4065 dump_node (global_namespace, flags & ~TDF_SLIM, stream);
4066 dump_end (TDI_tu, stream);
4070 if (flag_detailed_statistics)
4072 dump_tree_statistics ();
4073 dump_time_statistics ();
4075 input_location = locus;
4077 #ifdef ENABLE_CHECKING
4078 validate_conversion_obstack ();
4079 #endif /* ENABLE_CHECKING */
4081 timevar_stop (TV_PHASE_CHECK_DBGINFO);
4084 /* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
4085 function to call in parse-tree form; it has not yet been
4086 semantically analyzed. ARGS are the arguments to the function.
4087 They have already been semantically analyzed. This may change
4088 ARGS. */
4090 tree
4091 build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args,
4092 tsubst_flags_t complain)
4094 tree orig_fn;
4095 VEC(tree,gc) *orig_args = NULL;
4096 tree expr;
4097 tree object;
4099 orig_fn = fn;
4100 object = TREE_OPERAND (fn, 0);
4102 if (processing_template_decl)
4104 gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
4105 || TREE_CODE (fn) == MEMBER_REF);
4106 if (type_dependent_expression_p (fn)
4107 || any_type_dependent_arguments_p (*args))
4108 return build_nt_call_vec (fn, *args);
4110 orig_args = make_tree_vector_copy (*args);
4112 /* Transform the arguments and add the implicit "this"
4113 parameter. That must be done before the FN is transformed
4114 because we depend on the form of FN. */
4115 make_args_non_dependent (*args);
4116 object = build_non_dependent_expr (object);
4117 if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
4119 if (TREE_CODE (fn) == DOTSTAR_EXPR)
4120 object = cp_build_addr_expr (object, complain);
4121 VEC_safe_insert (tree, gc, *args, 0, object);
4123 /* Now that the arguments are done, transform FN. */
4124 fn = build_non_dependent_expr (fn);
4127 /* A qualified name corresponding to a bound pointer-to-member is
4128 represented as an OFFSET_REF:
4130 struct B { void g(); };
4131 void (B::*p)();
4132 void B::g() { (this->*p)(); } */
4133 if (TREE_CODE (fn) == OFFSET_REF)
4135 tree object_addr = cp_build_addr_expr (object, complain);
4136 fn = TREE_OPERAND (fn, 1);
4137 fn = get_member_function_from_ptrfunc (&object_addr, fn,
4138 complain);
4139 VEC_safe_insert (tree, gc, *args, 0, object_addr);
4142 if (CLASS_TYPE_P (TREE_TYPE (fn)))
4143 expr = build_op_call (fn, args, complain);
4144 else
4145 expr = cp_build_function_call_vec (fn, args, complain);
4146 if (processing_template_decl && expr != error_mark_node)
4147 expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
4149 if (orig_args != NULL)
4150 release_tree_vector (orig_args);
4152 return expr;
4156 void
4157 check_default_args (tree x)
4159 tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
4160 bool saw_def = false;
4161 int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
4162 for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
4164 if (TREE_PURPOSE (arg))
4165 saw_def = true;
4166 else if (saw_def)
4168 error ("default argument missing for parameter %P of %q+#D", i, x);
4169 TREE_PURPOSE (arg) = error_mark_node;
4174 /* Return true if function DECL can be inlined. This is used to force
4175 instantiation of methods that might be interesting for inlining. */
4176 bool
4177 possibly_inlined_p (tree decl)
4179 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
4180 if (DECL_UNINLINABLE (decl))
4181 return false;
4182 if (!optimize || pragma_java_exceptions)
4183 return DECL_DECLARED_INLINE_P (decl);
4184 /* When optimizing, we might inline everything when flatten
4185 attribute or heuristics inlining for size or autoinlining
4186 is used. */
4187 return true;
4190 /* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
4191 If DECL is a specialization or implicitly declared class member,
4192 generate the actual definition. Return false if something goes
4193 wrong, true otherwise. */
4195 bool
4196 mark_used (tree decl)
4198 /* If DECL is a BASELINK for a single function, then treat it just
4199 like the DECL for the function. Otherwise, if the BASELINK is
4200 for an overloaded function, we don't know which function was
4201 actually used until after overload resolution. */
4202 if (BASELINK_P (decl))
4204 decl = BASELINK_FUNCTIONS (decl);
4205 if (really_overloaded_fn (decl))
4206 return true;
4207 decl = OVL_CURRENT (decl);
4210 /* Set TREE_USED for the benefit of -Wunused. */
4211 TREE_USED (decl) = 1;
4212 if (DECL_CLONED_FUNCTION_P (decl))
4213 TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4215 /* Mark enumeration types as used. */
4216 if (TREE_CODE (decl) == CONST_DECL)
4217 used_types_insert (DECL_CONTEXT (decl));
4219 if (TREE_CODE (decl) == FUNCTION_DECL
4220 && DECL_DELETED_FN (decl))
4222 if (DECL_ARTIFICIAL (decl))
4224 if (DECL_OVERLOADED_OPERATOR_P (decl) == TYPE_EXPR
4225 && LAMBDA_TYPE_P (DECL_CONTEXT (decl)))
4227 /* We mark a lambda conversion op as deleted if we can't
4228 generate it properly; see maybe_add_lambda_conv_op. */
4229 sorry ("converting lambda which uses %<...%> to "
4230 "function pointer");
4231 return false;
4234 error ("use of deleted function %qD", decl);
4235 if (!maybe_explain_implicit_delete (decl))
4236 error_at (DECL_SOURCE_LOCATION (decl), "declared here");
4237 return false;
4240 /* We can only check DECL_ODR_USED on variables or functions with
4241 DECL_LANG_SPECIFIC set, and these are also the only decls that we
4242 might need special handling for. */
4243 if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
4244 || DECL_LANG_SPECIFIC (decl) == NULL
4245 || DECL_THUNK_P (decl))
4247 if (!processing_template_decl && type_uses_auto (TREE_TYPE (decl)))
4249 error ("use of %qD before deduction of %<auto%>", decl);
4250 return false;
4252 return true;
4255 /* We only want to do this processing once. We don't need to keep trying
4256 to instantiate inline templates, because unit-at-a-time will make sure
4257 we get them compiled before functions that want to inline them. */
4258 if (DECL_ODR_USED (decl))
4259 return true;
4261 /* If within finish_function, defer the rest until that function
4262 finishes, otherwise it might recurse. */
4263 if (defer_mark_used_calls)
4265 VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
4266 return true;
4269 if (TREE_CODE (decl) == FUNCTION_DECL)
4270 maybe_instantiate_noexcept (decl);
4272 /* Normally, we can wait until instantiation-time to synthesize DECL.
4273 However, if DECL is a static data member initialized with a constant
4274 or a constexpr function, we need it right now because a reference to
4275 such a data member or a call to such function is not value-dependent.
4276 For a function that uses auto in the return type, we need to instantiate
4277 it to find out its type. */
4278 if ((decl_maybe_constant_var_p (decl)
4279 || (TREE_CODE (decl) == FUNCTION_DECL
4280 && (DECL_DECLARED_CONSTEXPR_P (decl)
4281 || type_uses_auto (TREE_TYPE (TREE_TYPE (decl))))))
4282 && DECL_LANG_SPECIFIC (decl)
4283 && DECL_TEMPLATE_INFO (decl)
4284 && !uses_template_parms (DECL_TI_ARGS (decl)))
4286 /* Instantiating a function will result in garbage collection. We
4287 must treat this situation as if we were within the body of a
4288 function so as to avoid collecting live data only referenced from
4289 the stack (such as overload resolution candidates). */
4290 ++function_depth;
4291 instantiate_decl (decl, /*defer_ok=*/false,
4292 /*expl_inst_class_mem_p=*/false);
4293 --function_depth;
4296 if (type_uses_auto (TREE_TYPE (decl)))
4298 error ("use of %qD before deduction of %<auto%>", decl);
4299 return false;
4302 /* If we don't need a value, then we don't need to synthesize DECL. */
4303 if (cp_unevaluated_operand != 0)
4304 return true;
4306 if (processing_template_decl)
4307 return true;
4309 /* Check this too in case we're within fold_non_dependent_expr. */
4310 if (DECL_TEMPLATE_INFO (decl)
4311 && uses_template_parms (DECL_TI_ARGS (decl)))
4312 return true;
4314 DECL_ODR_USED (decl) = 1;
4315 if (DECL_CLONED_FUNCTION_P (decl))
4316 DECL_ODR_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4318 /* DR 757: A type without linkage shall not be used as the type of a
4319 variable or function with linkage, unless
4320 o the variable or function has extern "C" linkage (7.5 [dcl.link]), or
4321 o the variable or function is not used (3.2 [basic.def.odr]) or is
4322 defined in the same translation unit. */
4323 if (cxx_dialect > cxx98
4324 && decl_linkage (decl) != lk_none
4325 && !DECL_EXTERN_C_P (decl)
4326 && !DECL_ARTIFICIAL (decl)
4327 && !decl_defined_p (decl)
4328 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
4330 if (is_local_extern (decl))
4331 /* There's no way to define a local extern, and adding it to
4332 the vector interferes with GC, so give an error now. */
4333 no_linkage_error (decl);
4334 else
4335 VEC_safe_push (tree, gc, no_linkage_decls, decl);
4338 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
4339 && !DECL_INITIAL (decl) && !DECL_ARTIFICIAL (decl))
4340 /* Remember it, so we can check it was defined. */
4341 note_vague_linkage_fn (decl);
4343 /* Is it a synthesized method that needs to be synthesized? */
4344 if (TREE_CODE (decl) == FUNCTION_DECL
4345 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
4346 && DECL_DEFAULTED_FN (decl)
4347 /* A function defaulted outside the class is synthesized either by
4348 cp_finish_decl or instantiate_decl. */
4349 && !DECL_DEFAULTED_OUTSIDE_CLASS_P (decl)
4350 && ! DECL_INITIAL (decl))
4352 /* Defer virtual destructors so that thunks get the right
4353 linkage. */
4354 if (DECL_VIRTUAL_P (decl) && !at_eof)
4356 note_vague_linkage_fn (decl);
4357 return true;
4360 /* Remember the current location for a function we will end up
4361 synthesizing. Then we can inform the user where it was
4362 required in the case of error. */
4363 DECL_SOURCE_LOCATION (decl) = input_location;
4365 /* Synthesizing an implicitly defined member function will result in
4366 garbage collection. We must treat this situation as if we were
4367 within the body of a function so as to avoid collecting live data
4368 on the stack (such as overload resolution candidates).
4370 We could just let cp_write_global_declarations handle synthesizing
4371 this function by adding it to deferred_fns, but doing
4372 it at the use site produces better error messages. */
4373 ++function_depth;
4374 synthesize_method (decl);
4375 --function_depth;
4376 /* If this is a synthesized method we don't need to
4377 do the instantiation test below. */
4379 else if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
4380 && DECL_TEMPLATE_INFO (decl)
4381 && (!DECL_EXPLICIT_INSTANTIATION (decl)
4382 || always_instantiate_p (decl)))
4383 /* If this is a function or variable that is an instance of some
4384 template, we now know that we will need to actually do the
4385 instantiation. We check that DECL is not an explicit
4386 instantiation because that is not checked in instantiate_decl.
4388 We put off instantiating functions in order to improve compile
4389 times. Maintaining a stack of active functions is expensive,
4390 and the inliner knows to instantiate any functions it might
4391 need. Therefore, we always try to defer instantiation. */
4393 ++function_depth;
4394 instantiate_decl (decl, /*defer_ok=*/true,
4395 /*expl_inst_class_mem_p=*/false);
4396 --function_depth;
4399 return true;
4402 #include "gt-cp-decl2.h"