]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/decl2.c
re PR target/39175 (ICE while compiling qt-4.5.0-rc1)
[gcc.git] / gcc / cp / decl2.c
CommitLineData
3fd5abcf 1/* Process declarations and variables for C++ compiler.
d6a8bdff 2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
09812622 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009
b2febff9 4 Free Software Foundation, Inc.
8d08fdba
MS
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
6
1c313945 7This file is part of GCC.
8d08fdba 8
1c313945 9GCC is free software; you can redistribute it and/or modify
8d08fdba 10it under the terms of the GNU General Public License as published by
e77f031d 11the Free Software Foundation; either version 3, or (at your option)
8d08fdba
MS
12any later version.
13
1c313945 14GCC is distributed in the hope that it will be useful,
8d08fdba
MS
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17GNU General Public License for more details.
18
19You should have received a copy of the GNU General Public License
e77f031d
NC
20along with GCC; see the file COPYING3. If not see
21<http://www.gnu.org/licenses/>. */
8d08fdba
MS
22
23
1c313945 24/* Process declarations and symbol lookup for C++ front end.
8d08fdba
MS
25 Also constructs types; the standard scalar types at initialization,
26 and structure, union, array and enum types when they are declared. */
27
28/* ??? not all decl nodes are given the most useful possible
29 line numbers. For example, the CONST_DECLs for enum values. */
30
31#include "config.h"
8d052bc7 32#include "system.h"
4977bab6
ZW
33#include "coretypes.h"
34#include "tm.h"
8d08fdba
MS
35#include "tree.h"
36#include "rtl.h"
8f17b5c5 37#include "expr.h"
8d08fdba
MS
38#include "flags.h"
39#include "cp-tree.h"
40#include "decl.h"
e8abc66f 41#include "output.h"
49c249e1 42#include "except.h"
54f92bfb 43#include "toplev.h"
2a9a326b 44#include "timevar.h"
297441fd 45#include "cpplib.h"
672a6f42 46#include "target.h"
a5a49440 47#include "c-common.h"
6de9cd9a 48#include "tree-mudflap.h"
8cd2462c
JH
49#include "cgraph.h"
50#include "tree-inline.h"
86f029aa 51#include "c-pragma.h"
ef330312 52#include "tree-dump.h"
dee15844 53#include "intl.h"
726a989a 54#include "gimple.h"
6de9cd9a 55
cf44ea52 56extern cpp_reader *parse_in;
297441fd 57
0aafb128
MM
58/* This structure contains information about the initializations
59 and/or destructions required for a particular priority level. */
60typedef struct priority_info_s {
838dfd8a 61 /* Nonzero if there have been any initializations at this priority
0352cfc8
MM
62 throughout the translation unit. */
63 int initializations_p;
838dfd8a 64 /* Nonzero if there have been any destructions at this priority
0352cfc8
MM
65 throughout the translation unit. */
66 int destructions_p;
0aafb128
MM
67} *priority_info;
68
848eed92 69static void mark_vtable_entries (tree);
848eed92 70static bool maybe_emit_vtables (tree);
848eed92 71static bool acceptable_java_type (tree);
848eed92
GDR
72static tree start_objects (int, int);
73static void finish_objects (int, int, tree);
299f79b5 74static tree start_static_storage_duration_function (unsigned);
848eed92
GDR
75static void finish_static_storage_duration_function (tree);
76static priority_info get_priority_info (int);
6cec5cb5
RG
77static void do_static_initialization_or_destruction (tree, bool);
78static void one_static_initialization_or_destruction (tree, tree, bool);
299f79b5 79static void generate_ctor_or_dtor_function (bool, int, location_t *);
848eed92 80static int generate_ctor_and_dtor_functions_for_priority (splay_tree_node,
0cbd7506 81 void *);
cec24319 82static tree prune_vars_needing_no_initialization (tree *);
848eed92
GDR
83static void write_out_vars (tree);
84static void import_export_class (tree);
848eed92 85static tree get_guard_bits (tree);
0ed5edac 86static void determine_visibility_from_class (tree, tree);
313bc2c2 87
8d08fdba
MS
88/* A list of static class variables. This is needed, because a
89 static class variable can be declared inside the class without
306ef644 90 an initializer, and then initialized, statically, outside the class. */
2b41c040 91static GTY(()) VEC(tree,gc) *pending_statics;
8d08fdba 92
8926095f 93/* A list of functions which were declared inline, but which we
e92cc029 94 may need to emit outline anyway. */
125121e2 95static GTY(()) VEC(tree,gc) *deferred_fns;
8d08fdba 96
5566b478
MS
97/* Nonzero if we're done parsing and into end-of-file activities. */
98
99int at_eof;
100
8d08fdba 101\f
e2537f2c
MM
102
103/* Return a member function type (a METHOD_TYPE), given FNTYPE (a
104 FUNCTION_TYPE), CTYPE (class type), and QUALS (the cv-qualifiers
105 that apply to the function). */
106
107tree
108build_memfn_type (tree fntype, tree ctype, cp_cv_quals quals)
8d08fdba 109{
e2537f2c
MM
110 tree raises;
111 int type_quals;
8d08fdba 112
15218346
VR
113 if (fntype == error_mark_node || ctype == error_mark_node)
114 return error_mark_node;
115
3c01e5df 116 type_quals = quals & ~TYPE_QUAL_RESTRICT;
91063b51 117 ctype = cp_build_qualified_type (ctype, type_quals);
43dc123f
MM
118 fntype = build_method_type_directly (ctype, TREE_TYPE (fntype),
119 (TREE_CODE (fntype) == METHOD_TYPE
120 ? TREE_CHAIN (TYPE_ARG_TYPES (fntype))
121 : TYPE_ARG_TYPES (fntype)));
e2537f2c 122 raises = TYPE_RAISES_EXCEPTIONS (fntype);
8d08fdba 123 if (raises)
f30432d7 124 fntype = build_exception_variant (fntype, raises);
8d08fdba 125
e2537f2c 126 return fntype;
8d08fdba
MS
127}
128
8e51619a
JM
129/* Build a PARM_DECL with NAME and TYPE, and set DECL_ARG_TYPE
130 appropriately. */
131
132tree
848eed92 133cp_build_parm_decl (tree name, tree type)
8e51619a
JM
134{
135 tree parm = build_decl (PARM_DECL, name, type);
560ad596
MM
136 /* DECL_ARG_TYPE is only used by the back end and the back end never
137 sees templates. */
138 if (!processing_template_decl)
139 DECL_ARG_TYPE (parm) = type_passed_as (type);
5d80a306
DG
140
141 /* If the type is a pack expansion, then we have a function
142 parameter pack. */
143 if (type && TREE_CODE (type) == TYPE_PACK_EXPANSION)
144 FUNCTION_PARAMETER_PACK_P (parm) = 1;
145
8e51619a
JM
146 return parm;
147}
148
3ec6bad3
MM
149/* Returns a PARM_DECL for a parameter of the indicated TYPE, with the
150 indicated NAME. */
151
e2537f2c 152tree
848eed92 153build_artificial_parm (tree name, tree type)
3ec6bad3 154{
8e51619a 155 tree parm = cp_build_parm_decl (name, type);
c727aa5e 156 DECL_ARTIFICIAL (parm) = 1;
a714e5c5
JM
157 /* All our artificial parms are implicitly `const'; they cannot be
158 assigned to. */
159 TREE_READONLY (parm) = 1;
3ec6bad3
MM
160 return parm;
161}
162
711734a9
JM
163/* Constructors for types with virtual baseclasses need an "in-charge" flag
164 saying whether this constructor is responsible for initialization of
165 virtual baseclasses or not. All destructors also need this "in-charge"
166 flag, which additionally determines whether or not the destructor should
167 free the memory for the object.
168
169 This function adds the "in-charge" flag to member function FN if
170 appropriate. It is called from grokclassfn and tsubst.
e0fff4b3
JM
171 FN must be either a constructor or destructor.
172
173 The in-charge flag follows the 'this' parameter, and is followed by the
174 VTT parm (if any), then the user-written parms. */
711734a9
JM
175
176void
848eed92 177maybe_retrofit_in_chrg (tree fn)
711734a9
JM
178{
179 tree basetype, arg_types, parms, parm, fntype;
180
454fa7a7
MM
181 /* If we've already add the in-charge parameter don't do it again. */
182 if (DECL_HAS_IN_CHARGE_PARM_P (fn))
711734a9
JM
183 return;
184
212e7048
MM
185 /* When processing templates we can't know, in general, whether or
186 not we're going to have virtual baseclasses. */
c353b8e3 187 if (processing_template_decl)
212e7048
MM
188 return;
189
454fa7a7
MM
190 /* We don't need an in-charge parameter for constructors that don't
191 have virtual bases. */
192 if (DECL_CONSTRUCTOR_P (fn)
5775a06a 193 && !CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
454fa7a7 194 return;
711734a9 195
711734a9
JM
196 arg_types = TYPE_ARG_TYPES (TREE_TYPE (fn));
197 basetype = TREE_TYPE (TREE_VALUE (arg_types));
e0fff4b3
JM
198 arg_types = TREE_CHAIN (arg_types);
199
200 parms = TREE_CHAIN (DECL_ARGUMENTS (fn));
201
202 /* If this is a subobject constructor or destructor, our caller will
203 pass us a pointer to our VTT. */
5775a06a 204 if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fn)))
e0fff4b3
JM
205 {
206 parm = build_artificial_parm (vtt_parm_identifier, vtt_parm_type);
207
208 /* First add it to DECL_ARGUMENTS between 'this' and the real args... */
209 TREE_CHAIN (parm) = parms;
210 parms = parm;
211
212 /* ...and then to TYPE_ARG_TYPES. */
213 arg_types = hash_tree_chain (vtt_parm_type, arg_types);
214
215 DECL_HAS_VTT_PARM_P (fn) = 1;
216 }
217
218 /* Then add the in-charge parm (before the VTT parm). */
219 parm = build_artificial_parm (in_charge_identifier, integer_type_node);
220 TREE_CHAIN (parm) = parms;
221 parms = parm;
222 arg_types = hash_tree_chain (integer_type_node, arg_types);
223
224 /* Insert our new parameter(s) into the list. */
225 TREE_CHAIN (DECL_ARGUMENTS (fn)) = parms;
226
227 /* And rebuild the function type. */
43dc123f
MM
228 fntype = build_method_type_directly (basetype, TREE_TYPE (TREE_TYPE (fn)),
229 arg_types);
711734a9
JM
230 if (TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)))
231 fntype = build_exception_variant (fntype,
232 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (fn)));
233 TREE_TYPE (fn) = fntype;
454fa7a7
MM
234
235 /* Now we've got the in-charge parameter. */
236 DECL_HAS_IN_CHARGE_PARM_P (fn) = 1;
711734a9
JM
237}
238
8d08fdba
MS
239/* Classes overload their constituent function names automatically.
240 When a function name is declared in a record structure,
241 its name is changed to it overloaded name. Since names for
242 constructors and destructors can conflict, we place a leading
243 '$' for destructors.
244
245 CNAME is the name of the class we are grokking for.
246
247 FUNCTION is a FUNCTION_DECL. It was created by `grokdeclarator'.
248
249 FLAGS contains bits saying what's special about today's
250 arguments. 1 == DESTRUCTOR. 2 == OPERATOR.
251
252 If FUNCTION is a destructor, then we must add the `auto-delete' field
253 as a second parameter. There is some hair associated with the fact
254 that we must "declare" this variable in the manner consistent with the
255 way the rest of the arguments were declared.
256
257 QUALS are the qualifiers for the this pointer. */
258
259void
e2537f2c 260grokclassfn (tree ctype, tree function, enum overload_flags flags)
8d08fdba
MS
261{
262 tree fn_name = DECL_NAME (function);
8d08fdba 263
cab8bde9
MM
264 /* Even within an `extern "C"' block, members get C++ linkage. See
265 [dcl.link] for details. */
5d2ed28c 266 SET_DECL_LANGUAGE (function, lang_cplusplus);
cab8bde9 267
8d08fdba
MS
268 if (fn_name == NULL_TREE)
269 {
8251199e 270 error ("name missing for member function");
8d08fdba
MS
271 fn_name = get_identifier ("<anonymous>");
272 DECL_NAME (function) = fn_name;
273 }
274
711734a9 275 DECL_CONTEXT (function) = ctype;
711734a9 276
92643fea
MM
277 if (flags == DTOR_FLAG)
278 DECL_DESTRUCTOR_P (function) = 1;
279
711734a9 280 if (flags == DTOR_FLAG || DECL_CONSTRUCTOR_P (function))
535233a8 281 maybe_retrofit_in_chrg (function);
8d08fdba
MS
282}
283
8d08fdba
MS
284/* Create an ARRAY_REF, checking for the user doing things backwards
285 along the way. */
e92cc029 286
8d08fdba 287tree
848eed92 288grok_array_decl (tree array_expr, tree index_exp)
8d08fdba 289{
d17811fd
MM
290 tree type;
291 tree expr;
292 tree orig_array_expr = array_expr;
293 tree orig_index_exp = index_exp;
8d08fdba 294
d17811fd 295 if (error_operand_p (array_expr) || error_operand_p (index_exp))
8d08fdba 296 return error_mark_node;
d17811fd 297
5156628f 298 if (processing_template_decl)
d17811fd
MM
299 {
300 if (type_dependent_expression_p (array_expr)
301 || type_dependent_expression_p (index_exp))
44de5aeb
RK
302 return build_min_nt (ARRAY_REF, array_expr, index_exp,
303 NULL_TREE, NULL_TREE);
d17811fd
MM
304 array_expr = build_non_dependent_expr (array_expr);
305 index_exp = build_non_dependent_expr (index_exp);
306 }
5566b478 307
d17811fd 308 type = TREE_TYPE (array_expr);
50bc768d 309 gcc_assert (type);
ee76b931 310 type = non_reference (type);
8d08fdba
MS
311
312 /* If they have an `operator[]', use that. */
9e1e64ec 313 if (MAYBE_CLASS_TYPE_P (type) || MAYBE_CLASS_TYPE_P (TREE_TYPE (index_exp)))
d17811fd 314 expr = build_new_op (ARRAY_REF, LOOKUP_NORMAL,
ec835fb2 315 array_expr, index_exp, NULL_TREE,
5ade1ed2 316 /*overloaded_p=*/NULL, tf_warning_or_error);
b7484fbe 317 else
d17811fd
MM
318 {
319 tree p1, p2, i1, i2;
8d08fdba 320
d17811fd
MM
321 /* Otherwise, create an ARRAY_REF for a pointer or array type.
322 It is a little-known fact that, if `a' is an array and `i' is
323 an int, you can write `i[a]', which means the same thing as
324 `a[i]'. */
325 if (TREE_CODE (type) == ARRAY_TYPE)
326 p1 = array_expr;
327 else
328 p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
329
330 if (TREE_CODE (TREE_TYPE (index_exp)) == ARRAY_TYPE)
331 p2 = index_exp;
332 else
333 p2 = build_expr_type_conversion (WANT_POINTER, index_exp, false);
8d08fdba 334
c8094d83 335 i1 = build_expr_type_conversion (WANT_INT | WANT_ENUM, array_expr,
d17811fd 336 false);
c8094d83 337 i2 = build_expr_type_conversion (WANT_INT | WANT_ENUM, index_exp,
d17811fd 338 false);
8d08fdba 339
d17811fd
MM
340 if ((p1 && i2) && (i1 && p2))
341 error ("ambiguous conversion for array subscript");
8d08fdba 342
d17811fd
MM
343 if (p1 && i2)
344 array_expr = p1, index_exp = i2;
345 else if (i1 && p2)
346 array_expr = p2, index_exp = i1;
347 else
348 {
2d01edd7 349 error ("invalid types %<%T[%T]%> for array subscript",
0cbd7506 350 type, TREE_TYPE (index_exp));
d17811fd
MM
351 return error_mark_node;
352 }
b7484fbe 353
d17811fd
MM
354 if (array_expr == error_mark_node || index_exp == error_mark_node)
355 error ("ambiguous conversion for array subscript");
b7484fbe 356
a63068b6 357 expr = build_array_ref (array_expr, index_exp, input_location);
d17811fd
MM
358 }
359 if (processing_template_decl && expr != error_mark_node)
44de5aeb
RK
360 return build_min_non_dep (ARRAY_REF, expr, orig_array_expr, orig_index_exp,
361 NULL_TREE, NULL_TREE);
d17811fd 362 return expr;
8d08fdba
MS
363}
364
365/* Given the cast expression EXP, checking out its validity. Either return
366 an error_mark_node if there was an unavoidable error, return a cast to
367 void for trying to delete a pointer w/ the value 0, or return the
0e8c9b28
MM
368 call to delete. If DOING_VEC is true, we handle things differently
369 for doing an array delete.
8d08fdba 370 Implements ARM $5.3.4. This is called from the parser. */
e92cc029 371
8d08fdba 372tree
0e8c9b28 373delete_sanity (tree exp, tree size, bool doing_vec, int use_global_delete)
8d08fdba 374{
02020185 375 tree t, type;
5566b478 376
909e536a
MS
377 if (exp == error_mark_node)
378 return exp;
379
5156628f 380 if (processing_template_decl)
5566b478
MS
381 {
382 t = build_min (DELETE_EXPR, void_type_node, exp, size);
383 DELETE_EXPR_USE_GLOBAL (t) = use_global_delete;
384 DELETE_EXPR_USE_VEC (t) = doing_vec;
c1cca8d4 385 TREE_SIDE_EFFECTS (t) = 1;
5566b478
MS
386 return t;
387 }
388
0e8c9b28
MM
389 /* An array can't have been allocated by new, so complain. */
390 if (TREE_CODE (exp) == VAR_DECL
391 && TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
d4ee4d25 392 warning (0, "deleting array %q#D", exp);
0e8c9b28 393
49b7aacb 394 t = build_expr_type_conversion (WANT_POINTER, exp, true);
8d08fdba 395
02020185 396 if (t == NULL_TREE || t == error_mark_node)
8d08fdba 397 {
2d01edd7 398 error ("type %q#T argument given to %<delete%>, expected pointer",
0cbd7506 399 TREE_TYPE (exp));
02020185 400 return error_mark_node;
8d08fdba
MS
401 }
402
02020185
JM
403 type = TREE_TYPE (t);
404
405 /* As of Valley Forge, you can delete a pointer to const. */
406
407 /* You can't delete functions. */
408 if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
8926095f 409 {
2d01edd7 410 error ("cannot delete a function. Only pointer-to-objects are "
0cbd7506 411 "valid arguments to %<delete%>");
02020185 412 return error_mark_node;
8926095f 413 }
02020185 414
838dfd8a 415 /* Deleting ptr to void is undefined behavior [expr.delete/3]. */
7f477e81 416 if (TREE_CODE (TREE_TYPE (type)) == VOID_TYPE)
655dc6ee 417 {
d4ee4d25 418 warning (0, "deleting %qT is undefined", type);
655dc6ee
JM
419 doing_vec = 0;
420 }
421
02020185
JM
422 /* Deleting a pointer with the value zero is valid and has no effect. */
423 if (integer_zerop (t))
424 return build1 (NOP_EXPR, void_type_node, t);
8d08fdba
MS
425
426 if (doing_vec)
c8094d83 427 return build_vec_delete (t, /*maxindex=*/NULL_TREE,
0e8c9b28 428 sfk_deleting_destructor,
86f45d2c 429 use_global_delete);
8d08fdba 430 else
e3fe84e5
JM
431 return build_delete (type, t, sfk_deleting_destructor,
432 LOOKUP_NORMAL, use_global_delete);
8d08fdba
MS
433}
434
98c1c668
JM
435/* Report an error if the indicated template declaration is not the
436 sort of thing that should be a member template. */
437
438void
848eed92 439check_member_template (tree tmpl)
98c1c668
JM
440{
441 tree decl;
442
50bc768d 443 gcc_assert (TREE_CODE (tmpl) == TEMPLATE_DECL);
98c1c668
JM
444 decl = DECL_TEMPLATE_RESULT (tmpl);
445
1701f21e
MM
446 if (TREE_CODE (decl) == FUNCTION_DECL
447 || (TREE_CODE (decl) == TYPE_DECL
9e1e64ec 448 && MAYBE_CLASS_TYPE_P (TREE_TYPE (decl))))
98c1c668 449 {
7f1ba716
MM
450 /* The parser rejects template declarations in local classes. */
451 gcc_assert (!current_function_decl);
ceacde63
MM
452 /* The parser rejects any use of virtual in a function template. */
453 gcc_assert (!(TREE_CODE (decl) == FUNCTION_DECL
454 && DECL_VIRTUAL_P (decl)));
98c1c668
JM
455
456 /* The debug-information generating code doesn't know what to do
c8094d83 457 with member templates. */
98c1c668 458 DECL_IGNORED_P (tmpl) = 1;
c8094d83 459 }
98c1c668 460 else
2d01edd7 461 error ("template declaration of %q#D", decl);
98c1c668
JM
462}
463
a1c65f9f 464/* Return true iff TYPE is a valid Java parameter or return type. */
eff71ab0 465
848eed92
GDR
466static bool
467acceptable_java_type (tree type)
eff71ab0 468{
662c2e83
LM
469 if (type == error_mark_node)
470 return false;
471
eff71ab0 472 if (TREE_CODE (type) == VOID_TYPE || TYPE_FOR_JAVA (type))
662c2e83 473 return true;
23d4e4cc 474 if (TREE_CODE (type) == POINTER_TYPE || TREE_CODE (type) == REFERENCE_TYPE)
eff71ab0
PB
475 {
476 type = TREE_TYPE (type);
477 if (TREE_CODE (type) == RECORD_TYPE)
478 {
824f42ab
PB
479 tree args; int i;
480 if (! TYPE_FOR_JAVA (type))
848eed92 481 return false;
824f42ab 482 if (! CLASSTYPE_TEMPLATE_INFO (type))
848eed92 483 return true;
824f42ab
PB
484 args = CLASSTYPE_TI_ARGS (type);
485 i = TREE_VEC_LENGTH (args);
486 while (--i >= 0)
487 {
488 type = TREE_VEC_ELT (args, i);
489 if (TREE_CODE (type) == POINTER_TYPE)
490 type = TREE_TYPE (type);
491 if (! TYPE_FOR_JAVA (type))
848eed92 492 return false;
824f42ab 493 }
848eed92 494 return true;
eff71ab0
PB
495 }
496 }
848eed92 497 return false;
eff71ab0
PB
498}
499
848eed92 500/* For a METHOD in a Java class CTYPE, return true if
eff71ab0 501 the parameter and return types are valid Java types.
848eed92 502 Otherwise, print appropriate error messages, and return false. */
eff71ab0 503
848eed92
GDR
504bool
505check_java_method (tree method)
eff71ab0 506{
848eed92 507 bool jerr = false;
eff71ab0
PB
508 tree arg_types = TYPE_ARG_TYPES (TREE_TYPE (method));
509 tree ret_type = TREE_TYPE (TREE_TYPE (method));
f5c28a15 510
848eed92 511 if (!acceptable_java_type (ret_type))
eff71ab0 512 {
2d01edd7 513 error ("Java method %qD has non-Java return type %qT",
0cbd7506 514 method, ret_type);
848eed92 515 jerr = true;
eff71ab0 516 }
f5c28a15
NS
517
518 arg_types = TREE_CHAIN (arg_types);
519 if (DECL_HAS_IN_CHARGE_PARM_P (method))
520 arg_types = TREE_CHAIN (arg_types);
521 if (DECL_HAS_VTT_PARM_P (method))
522 arg_types = TREE_CHAIN (arg_types);
c8094d83 523
eff71ab0
PB
524 for (; arg_types != NULL_TREE; arg_types = TREE_CHAIN (arg_types))
525 {
526 tree type = TREE_VALUE (arg_types);
848eed92 527 if (!acceptable_java_type (type))
eff71ab0 528 {
662c2e83
LM
529 if (type != error_mark_node)
530 error ("Java method %qD has non-Java parameter type %qT",
531 method, type);
848eed92 532 jerr = true;
eff71ab0
PB
533 }
534 }
848eed92 535 return !jerr;
eff71ab0
PB
536}
537
8d08fdba
MS
538/* Sanity check: report error if this function FUNCTION is not
539 really a member of the class (CTYPE) it is supposed to belong to.
77880ae4 540 TEMPLATE_PARMS is used to specify the template parameters of a member
c8094d83 541 template passed as FUNCTION_DECL. If the member template is passed as a
44021471
GB
542 TEMPLATE_DECL, it can be NULL since the parameters can be extracted
543 from the declaration. If the function is not a function template, it
544 must be NULL.
f8c3b097
PC
545 It returns the original declaration for the function, NULL_TREE if
546 no declaration was found, error_mark_node if an error was emitted. */
8d08fdba 547
f30432d7 548tree
44021471 549check_classfn (tree ctype, tree function, tree template_parms)
8d08fdba 550{
b9201622 551 int ix;
44021471 552 bool is_template;
7d3bec9d
NS
553 tree pushed_scope;
554
03017874 555 if (DECL_USE_TEMPLATE (function)
74b846e0
MM
556 && !(TREE_CODE (function) == TEMPLATE_DECL
557 && DECL_TEMPLATE_SPECIALIZATION (function))
c7222c02 558 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (function)))
03017874
MM
559 /* Since this is a specialization of a member template,
560 we're not going to find the declaration in the class.
561 For example, in:
c8094d83 562
0cbd7506
MS
563 struct S { template <typename T> void f(T); };
564 template <> void S::f(int);
c8094d83 565
03017874
MM
566 we're not going to find `S::f(int)', but there's no
567 reason we should, either. We let our callers know we didn't
568 find the method, but we don't complain. */
569 return NULL_TREE;
b9201622 570
44021471
GB
571 /* Basic sanity check: for a template function, the template parameters
572 either were not passed, or they are the same of DECL_TEMPLATE_PARMS. */
573 if (TREE_CODE (function) == TEMPLATE_DECL)
574 {
1dbc1ae7
JM
575 if (template_parms
576 && !comp_template_parms (template_parms,
577 DECL_TEMPLATE_PARMS (function)))
578 {
579 error ("template parameter lists provided don't match the "
580 "template parameters of %qD", function);
581 return error_mark_node;
582 }
44021471
GB
583 template_parms = DECL_TEMPLATE_PARMS (function);
584 }
585
5b8e011c 586 /* OK, is this a definition of a member template? */
44021471 587 is_template = (template_parms != NULL_TREE);
5b8e011c 588
7d3bec9d
NS
589 /* We must enter the scope here, because conversion operators are
590 named by target type, and type equivalence relies on typenames
591 resolving within the scope of CTYPE. */
592 pushed_scope = push_scope (ctype);
c7222c02 593 ix = class_method_index_for_fn (complete_type (ctype), function);
b9201622 594 if (ix >= 0)
8d08fdba 595 {
d4e6fecb 596 VEC(tree,gc) *methods = CLASSTYPE_METHOD_VEC (ctype);
dd1b7476 597 tree fndecls, fndecl = 0;
b9201622
NS
598 bool is_conv_op;
599 const char *format = NULL;
c8094d83 600
aaaa46d2 601 for (fndecls = VEC_index (tree, methods, ix);
b9201622
NS
602 fndecls; fndecls = OVL_NEXT (fndecls))
603 {
604 tree p1, p2;
c8094d83 605
b9201622
NS
606 fndecl = OVL_CURRENT (fndecls);
607 p1 = TYPE_ARG_TYPES (TREE_TYPE (function));
608 p2 = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
609
610 /* We cannot simply call decls_match because this doesn't
611 work for static member functions that are pretending to
612 be methods, and because the name may have been changed by
c8094d83
MS
613 asm("new_name"). */
614
b9201622
NS
615 /* Get rid of the this parameter on functions that become
616 static. */
617 if (DECL_STATIC_FUNCTION_P (fndecl)
618 && TREE_CODE (TREE_TYPE (function)) == METHOD_TYPE)
619 p1 = TREE_CHAIN (p1);
5b8e011c
JM
620
621 /* A member template definition only matches a member template
622 declaration. */
623 if (is_template != (TREE_CODE (fndecl) == TEMPLATE_DECL))
624 continue;
c8094d83 625
b9201622
NS
626 if (same_type_p (TREE_TYPE (TREE_TYPE (function)),
627 TREE_TYPE (TREE_TYPE (fndecl)))
628 && compparms (p1, p2)
44021471 629 && (!is_template
c8094d83 630 || comp_template_parms (template_parms,
44021471 631 DECL_TEMPLATE_PARMS (fndecl)))
b9201622
NS
632 && (DECL_TEMPLATE_SPECIALIZATION (function)
633 == DECL_TEMPLATE_SPECIALIZATION (fndecl))
634 && (!DECL_TEMPLATE_SPECIALIZATION (function)
c8094d83 635 || (DECL_TI_TEMPLATE (function)
b9201622 636 == DECL_TI_TEMPLATE (fndecl))))
14d22dd6 637 break;
b9201622 638 }
14d22dd6 639 if (fndecls)
7d3bec9d
NS
640 {
641 if (pushed_scope)
642 pop_scope (pushed_scope);
643 return OVL_CURRENT (fndecls);
644 }
645
402b8cf6
AH
646 error_at (DECL_SOURCE_LOCATION (function),
647 "prototype for %q#D does not match any in class %qT",
648 function, ctype);
b9201622
NS
649 is_conv_op = DECL_CONV_FN_P (fndecl);
650
651 if (is_conv_op)
652 ix = CLASSTYPE_FIRST_CONVERSION_SLOT;
aaaa46d2 653 fndecls = VEC_index (tree, methods, ix);
b9201622 654 while (fndecls)
8d08fdba 655 {
b9201622
NS
656 fndecl = OVL_CURRENT (fndecls);
657 fndecls = OVL_NEXT (fndecls);
658
659 if (!fndecls && is_conv_op)
8d08fdba 660 {
508a1c9c 661 if (VEC_length (tree, methods) > (size_t) ++ix)
8d08fdba 662 {
aaaa46d2 663 fndecls = VEC_index (tree, methods, ix);
b9201622 664 if (!DECL_CONV_FN_P (OVL_CURRENT (fndecls)))
8145f082 665 {
b9201622
NS
666 fndecls = NULL_TREE;
667 is_conv_op = false;
8145f082 668 }
8d08fdba 669 }
b9201622
NS
670 else
671 is_conv_op = false;
8d08fdba 672 }
b9201622 673 if (format)
dee15844 674 format = " %+#D";
b9201622 675 else if (fndecls)
dee15844 676 format = N_("candidates are: %+#D");
b9201622 677 else
dee15844
JM
678 format = N_("candidate is: %+#D");
679 error (format, fndecl);
8d08fdba
MS
680 }
681 }
b9201622
NS
682 else if (!COMPLETE_TYPE_P (ctype))
683 cxx_incomplete_type_error (function, ctype);
8d08fdba 684 else
a82f93ac
SE
685 error ("no %q#D member function declared in class %qT",
686 function, ctype);
8d08fdba 687
7d3bec9d
NS
688 if (pushed_scope)
689 pop_scope (pushed_scope);
f8c3b097 690 return error_mark_node;
8d08fdba
MS
691}
692
4684cd27
MM
693/* DECL is a function with vague linkage. Remember it so that at the
694 end of the translation unit we can decide whether or not to emit
695 it. */
696
697void
698note_vague_linkage_fn (tree decl)
699{
700 if (!DECL_DEFERRED_FN (decl))
701 {
702 DECL_DEFERRED_FN (decl) = 1;
703 DECL_DEFER_OUTPUT (decl) = 1;
125121e2 704 VEC_safe_push (tree, gc, deferred_fns, decl);
4684cd27
MM
705 }
706}
707
fa8d6e85 708/* We have just processed the DECL, which is a static data member.
d174af6c 709 The other parameters are as for cp_finish_decl. */
fa8d6e85
MM
710
711void
3db45ab5 712finish_static_data_member_decl (tree decl,
d174af6c
MM
713 tree init, bool init_const_expr_p,
714 tree asmspec_tree,
0cbd7506 715 int flags)
fa8d6e85 716{
1f6e1acc
AS
717 DECL_CONTEXT (decl) = current_class_type;
718
fa8d6e85 719 /* We cannot call pushdecl here, because that would fill in the
46ccf50a 720 TREE_CHAIN of our decl. Instead, we modify cp_finish_decl to do
fa8d6e85 721 the right thing, namely, to put this decl out straight away. */
92643fea 722
42ccbf3d
JJ
723 if (! processing_template_decl)
724 VEC_safe_push (tree, gc, pending_statics, decl);
0aafb128 725
65f36ac8 726 if (LOCAL_CLASS_P (current_class_type))
cbe5f3b3 727 permerror (input_location, "local class %q#T shall not have static data member %q#D",
37ec60ed 728 current_class_type, decl);
65f36ac8 729
fa8d6e85
MM
730 /* Static consts need not be initialized in the class definition. */
731 if (init != NULL_TREE && TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
732 {
b1ce3eb2 733 static int explained = 0;
c8094d83 734
fa8d6e85 735 error ("initializer invalid for static member with constructor");
b1ce3eb2 736 if (!explained)
0cbd7506 737 {
b1ce3eb2
NS
738 error ("(an out of class initialization is required)");
739 explained = 1;
740 }
741 init = NULL_TREE;
fa8d6e85
MM
742 }
743 /* Force the compiler to know when an uninitialized static const
744 member is being used. */
745 if (CP_TYPE_CONST_P (TREE_TYPE (decl)) && init == 0)
746 TREE_USED (decl) = 1;
747 DECL_INITIAL (decl) = init;
748 DECL_IN_AGGR_P (decl) = 1;
fa8d6e85 749
d174af6c 750 cp_finish_decl (decl, init, init_const_expr_p, asmspec_tree, flags);
fa8d6e85
MM
751}
752
84dc00e8 753/* DECLARATOR and DECLSPECS correspond to a class member. The other
d174af6c 754 parameters are as for cp_finish_decl. Return the DECL for the
3db45ab5 755 class member declared. */
8d08fdba
MS
756
757tree
c8094d83
MS
758grokfield (const cp_declarator *declarator,
759 cp_decl_specifier_seq *declspecs,
d174af6c
MM
760 tree init, bool init_const_expr_p,
761 tree asmspec_tree,
0cbd7506 762 tree attrlist)
8d08fdba 763{
59387d2e 764 tree value;
9c0758dd 765 const char *asmspec = 0;
6060a796 766 int flags = LOOKUP_ONLYCONVERTING;
8d08fdba 767
8d08fdba
MS
768 if (init
769 && TREE_CODE (init) == TREE_LIST
770 && TREE_VALUE (init) == error_mark_node
771 && TREE_CHAIN (init) == NULL_TREE)
cffa8729 772 init = NULL_TREE;
8d08fdba 773
91d231cb 774 value = grokdeclarator (declarator, declspecs, FIELD, init != 0, &attrlist);
89f1a6ec 775 if (! value || error_operand_p (value))
3ddfb0e6 776 /* friend or constructor went bad. */
04d57dd5
ZW
777 return error_mark_node;
778
779 if (TREE_CODE (value) == TYPE_DECL && init)
780 {
2d01edd7 781 error ("typedef %qD is initialized (use __typeof__ instead)", value);
04d57dd5
ZW
782 init = NULL_TREE;
783 }
8d08fdba
MS
784
785 /* Pass friendly classes back. */
8db1028e
NS
786 if (value == void_type_node)
787 return value;
788
9bcb9aae 789 /* Pass friend decls back. */
8db1028e
NS
790 if ((TREE_CODE (value) == FUNCTION_DECL
791 || TREE_CODE (value) == TEMPLATE_DECL)
792 && DECL_CONTEXT (value) != current_class_type)
793 return value;
8d08fdba
MS
794
795 if (DECL_NAME (value) != NULL_TREE
796 && IDENTIFIER_POINTER (DECL_NAME (value))[0] == '_'
797 && ! strcmp (IDENTIFIER_POINTER (DECL_NAME (value)), "_vptr"))
2d01edd7 798 error ("member %qD conflicts with virtual function table field name",
0cbd7506 799 value);
8d08fdba
MS
800
801 /* Stash away type declarations. */
802 if (TREE_CODE (value) == TYPE_DECL)
803 {
804 DECL_NONLOCAL (value) = 1;
700f8a87 805 DECL_CONTEXT (value) = current_class_type;
8145f082 806
9188c363
MM
807 if (processing_template_decl)
808 value = push_template_decl (value);
809
9596e064 810 if (attrlist)
01d685cc
JM
811 {
812 int attrflags = 0;
813
814 /* If this is a typedef that names the class for linkage purposes
815 (7.1.3p8), apply any attributes directly to the type. */
816 if (TAGGED_TYPE_P (TREE_TYPE (value))
817 && value == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (value))))
818 attrflags = ATTR_FLAG_TYPE_IN_PLACE;
819
820 cplus_decl_attributes (&value, attrlist, attrflags);
821 }
9596e064 822
8d08fdba
MS
823 return value;
824 }
825
8d08fdba
MS
826 if (DECL_IN_AGGR_P (value))
827 {
2d01edd7 828 error ("%qD is already defined in %qT", value, DECL_CONTEXT (value));
8d08fdba
MS
829 return void_type_node;
830 }
831
4f543d15 832 if (asmspec_tree && asmspec_tree != error_mark_node)
8d08fdba
MS
833 asmspec = TREE_STRING_POINTER (asmspec_tree);
834
835 if (init)
836 {
6eabb241 837 if (TREE_CODE (value) == FUNCTION_DECL)
8d08fdba 838 {
515e6a84
GB
839 /* Initializers for functions are rejected early in the parser.
840 If we get here, it must be a pure specifier for a method. */
b87d79e6
JM
841 if (init == ridpointers[(int)RID_DELETE])
842 {
843 DECL_DELETED_FN (value) = 1;
844 DECL_DECLARED_INLINE_P (value) = 1;
845 DECL_INITIAL (value) = error_mark_node;
846 }
847 else if (init == ridpointers[(int)RID_DEFAULT])
848 {
849 if (!defaultable_fn_p (value))
850 error ("%qD cannot be defaulted", value);
851 else
852 {
853 DECL_DEFAULTED_FN (value) = 1;
854 DECL_INITIALIZED_IN_CLASS_P (value) = 1;
855 DECL_DECLARED_INLINE_P (value) = 1;
b87d79e6
JM
856 }
857 }
858 else if (TREE_CODE (TREE_TYPE (value)) == METHOD_TYPE)
ea7ce50b
VR
859 {
860 gcc_assert (error_operand_p (init) || integer_zerop (init));
861 DECL_PURE_VIRTUAL_P (value) = 1;
862 }
863 else
864 {
865 gcc_assert (TREE_CODE (TREE_TYPE (value)) == FUNCTION_TYPE);
866 error ("initializer specified for static member function %qD",
867 value);
868 }
8d08fdba 869 }
5b605f68 870 else if (pedantic && TREE_CODE (value) != VAR_DECL)
a0a33927
MS
871 /* Already complained in grokdeclarator. */
872 init = NULL_TREE;
4038c495 873 else if (!processing_template_decl)
8d08fdba 874 {
4038c495
GB
875 if (TREE_CODE (init) == CONSTRUCTOR)
876 init = digest_init (TREE_TYPE (value), init);
877 else
878 init = integral_constant_value (init);
dcba9b0f 879
4038c495 880 if (init != error_mark_node && !TREE_CONSTANT (init))
8d08fdba 881 {
4038c495
GB
882 /* We can allow references to things that are effectively
883 static, since references are initialized with the
884 address. */
885 if (TREE_CODE (TREE_TYPE (value)) != REFERENCE_TYPE
886 || (TREE_STATIC (init) == 0
887 && (!DECL_P (init) || DECL_EXTERNAL (init) == 0)))
8d08fdba 888 {
4038c495
GB
889 error ("field initializer is not constant");
890 init = error_mark_node;
8d08fdba
MS
891 }
892 }
893 }
894 }
895
ddb45080 896 if (processing_template_decl
5566b478 897 && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
89f1a6ec
MM
898 {
899 value = push_template_decl (value);
900 if (error_operand_p (value))
901 return error_mark_node;
902 }
5566b478 903
45537677 904 if (attrlist)
91d231cb 905 cplus_decl_attributes (&value, attrlist, 0);
45537677 906
8dc2b103 907 switch (TREE_CODE (value))
8d08fdba 908 {
8dc2b103 909 case VAR_DECL:
d174af6c
MM
910 finish_static_data_member_decl (value, init, init_const_expr_p,
911 asmspec_tree, flags);
8d08fdba 912 return value;
8dc2b103
NS
913
914 case FIELD_DECL:
8d08fdba 915 if (asmspec)
9e637a26 916 error ("%<asm%> specifiers are not permitted on non-static data members");
8d08fdba
MS
917 if (DECL_INITIAL (value) == error_mark_node)
918 init = error_mark_node;
3db45ab5 919 cp_finish_decl (value, init, /*init_const_expr_p=*/false,
d174af6c 920 NULL_TREE, flags);
8d08fdba
MS
921 DECL_INITIAL (value) = init;
922 DECL_IN_AGGR_P (value) = 1;
923 return value;
8dc2b103
NS
924
925 case FUNCTION_DECL:
6060a796 926 if (asmspec)
0e6df31e 927 set_user_assembler_name (value, asmspec);
c8094d83 928
3db45ab5
MS
929 cp_finish_decl (value,
930 /*init=*/NULL_TREE,
931 /*init_const_expr_p=*/false,
d174af6c 932 asmspec_tree, flags);
8d08fdba
MS
933
934 /* Pass friends back this way. */
935 if (DECL_FRIEND_P (value))
936 return void_type_node;
937
938 DECL_IN_AGGR_P (value) = 1;
939 return value;
c8094d83 940
8dc2b103
NS
941 default:
942 gcc_unreachable ();
8d08fdba 943 }
8d08fdba
MS
944 return NULL_TREE;
945}
946
947/* Like `grokfield', but for bitfields.
948 WIDTH is non-NULL for bit fields only, and is an INTEGER_CST node. */
949
950tree
c8094d83 951grokbitfield (const cp_declarator *declarator,
a6d9bc9d
SM
952 cp_decl_specifier_seq *declspecs, tree width,
953 tree attrlist)
8d08fdba 954{
a6d9bc9d 955 tree value = grokdeclarator (declarator, declspecs, BITFIELD, 0, &attrlist);
8d08fdba 956
344f237b
LM
957 if (value == error_mark_node)
958 return NULL_TREE; /* friends went bad. */
8d08fdba
MS
959
960 /* Pass friendly classes back. */
961 if (TREE_CODE (value) == VOID_TYPE)
962 return void_type_node;
963
4c9fb870
LM
964 if (!INTEGRAL_TYPE_P (TREE_TYPE (value))
965 && (POINTER_TYPE_P (value)
966 || !dependent_type_p (TREE_TYPE (value))))
967 {
968 error ("bit-field %qD with non-integral type", value);
969 return error_mark_node;
970 }
971
8d08fdba
MS
972 if (TREE_CODE (value) == TYPE_DECL)
973 {
2d01edd7 974 error ("cannot declare %qD to be a bit-field type", value);
8d08fdba
MS
975 return NULL_TREE;
976 }
977
33bd39a2 978 /* Usually, finish_struct_1 catches bitfields with invalid types.
ae58fa02
MM
979 But, in the case of bitfields with function type, we confuse
980 ourselves into thinking they are member functions, so we must
981 check here. */
982 if (TREE_CODE (value) == FUNCTION_DECL)
983 {
2d01edd7 984 error ("cannot declare bit-field %qD with function type",
33bd39a2 985 DECL_NAME (value));
ae58fa02
MM
986 return NULL_TREE;
987 }
988
8d08fdba
MS
989 if (DECL_IN_AGGR_P (value))
990 {
2d01edd7 991 error ("%qD is already defined in the class %qT", value,
0cbd7506 992 DECL_CONTEXT (value));
8d08fdba
MS
993 return void_type_node;
994 }
995
8d08fdba
MS
996 if (TREE_STATIC (value))
997 {
2d01edd7 998 error ("static member %qD cannot be a bit-field", value);
8d08fdba
MS
999 return NULL_TREE;
1000 }
d174af6c 1001 finish_decl (value, NULL_TREE, NULL_TREE);
8d08fdba
MS
1002
1003 if (width != error_mark_node)
1004 {
5566b478
MS
1005 constant_expression_warning (width);
1006 DECL_INITIAL (value) = width;
162bc98d 1007 SET_DECL_C_BIT_FIELD (value);
8d08fdba
MS
1008 }
1009
1010 DECL_IN_AGGR_P (value) = 1;
a6d9bc9d
SM
1011
1012 if (attrlist)
1013 cplus_decl_attributes (&value, attrlist, /*flags=*/0);
1014
8d08fdba
MS
1015 return value;
1016}
1017
8d08fdba 1018\f
4f4141ff
JM
1019/* Returns true iff ATTR is an attribute which needs to be applied at
1020 instantiation time rather than template definition time. */
1021
a7f6bc8c
JM
1022static bool
1023is_late_template_attribute (tree attr, tree decl)
4f4141ff
JM
1024{
1025 tree name = TREE_PURPOSE (attr);
5044ab0e 1026 tree args = TREE_VALUE (attr);
a7f6bc8c 1027 const struct attribute_spec *spec = lookup_attribute_spec (name);
160b8b80 1028 tree arg;
a7f6bc8c 1029
533007c1
JM
1030 if (!spec)
1031 /* Unknown attribute. */
1032 return false;
1033
5dc11954
JJ
1034 /* Attribute weak handling wants to write out assembly right away. */
1035 if (is_attribute_p ("weak", name))
8d2eb304
JM
1036 return true;
1037
160b8b80
JM
1038 /* If any of the arguments are dependent expressions, we can't evaluate
1039 the attribute until instantiation time. */
1040 for (arg = args; arg; arg = TREE_CHAIN (arg))
1041 {
1042 tree t = TREE_VALUE (arg);
b2febff9
JJ
1043
1044 /* If the first attribute argument is an identifier, only consider
1045 second and following arguments. Attributes like mode, format,
1046 cleanup and several target specific attributes aren't late
1047 just because they have an IDENTIFIER_NODE as first argument. */
1048 if (arg == args && TREE_CODE (t) == IDENTIFIER_NODE)
1049 continue;
1050
160b8b80
JM
1051 if (value_dependent_expression_p (t)
1052 || type_dependent_expression_p (t))
1053 return true;
1054 }
1055
1056 if (TREE_CODE (decl) == TYPE_DECL
1057 || TYPE_P (decl)
1058 || spec->type_required)
a7f6bc8c
JM
1059 {
1060 tree type = TYPE_P (decl) ? decl : TREE_TYPE (decl);
1061
1062 /* We can't apply any attributes to a completely unknown type until
1063 instantiation time. */
1064 enum tree_code code = TREE_CODE (type);
1065 if (code == TEMPLATE_TYPE_PARM
1066 || code == BOUND_TEMPLATE_TEMPLATE_PARM
1067 || code == TYPENAME_TYPE)
1068 return true;
1d555e26
JM
1069 /* Also defer most attributes on dependent types. This is not
1070 necessary in all cases, but is the better default. */
1071 else if (dependent_type_p (type)
1072 /* But attribute visibility specifically works on
1073 templates. */
1074 && !is_attribute_p ("visibility", name))
160b8b80 1075 return true;
a7f6bc8c
JM
1076 else
1077 return false;
1078 }
4f4141ff
JM
1079 else
1080 return false;
1081}
1082
1083/* ATTR_P is a list of attributes. Remove any attributes which need to be
a7f6bc8c
JM
1084 applied at instantiation time and return them. If IS_DEPENDENT is true,
1085 the declaration itself is dependent, so all attributes should be applied
1086 at instantiation time. */
4f4141ff
JM
1087
1088static tree
a7f6bc8c 1089splice_template_attributes (tree *attr_p, tree decl)
4f4141ff
JM
1090{
1091 tree *p = attr_p;
1092 tree late_attrs = NULL_TREE;
1093 tree *q = &late_attrs;
1094
1095 if (!p)
1096 return NULL_TREE;
1097
1098 for (; *p; )
1099 {
a7f6bc8c 1100 if (is_late_template_attribute (*p, decl))
4f4141ff 1101 {
a7f6bc8c 1102 ATTR_IS_DEPENDENT (*p) = 1;
4f4141ff
JM
1103 *q = *p;
1104 *p = TREE_CHAIN (*p);
1105 q = &TREE_CHAIN (*q);
1106 *q = NULL_TREE;
1107 }
1108 else
1109 p = &TREE_CHAIN (*p);
1110 }
1111
1112 return late_attrs;
1113}
1114
1115/* Remove any late attributes from the list in ATTR_P and attach them to
1116 DECL_P. */
1117
1118static void
1119save_template_attributes (tree *attr_p, tree *decl_p)
1120{
a7f6bc8c 1121 tree late_attrs = splice_template_attributes (attr_p, *decl_p);
4f4141ff 1122 tree *q;
1db54f4e 1123 tree old_attrs = NULL_TREE;
4f4141ff
JM
1124
1125 if (!late_attrs)
1126 return;
1127
03c2a308
DS
1128 /* Give this type a name so we know to look it up again at instantiation
1129 time. */
1130 if (TREE_CODE (*decl_p) == TYPE_DECL
1131 && DECL_ORIGINAL_TYPE (*decl_p) == NULL_TREE)
1132 {
1133 tree oldt = TREE_TYPE (*decl_p);
1134 tree newt = build_variant_type_copy (oldt);
1135 DECL_ORIGINAL_TYPE (*decl_p) = oldt;
1136 TREE_TYPE (*decl_p) = newt;
1137 TYPE_NAME (newt) = *decl_p;
1138 TREE_USED (newt) = TREE_USED (*decl_p);
1139 }
1140
4f4141ff
JM
1141 if (DECL_P (*decl_p))
1142 q = &DECL_ATTRIBUTES (*decl_p);
1143 else
1144 q = &TYPE_ATTRIBUTES (*decl_p);
1145
1db54f4e
DG
1146 old_attrs = *q;
1147
1148 /* Place the late attributes at the beginning of the attribute
1149 list. */
1150 TREE_CHAIN (tree_last (late_attrs)) = *q;
4f4141ff 1151 *q = late_attrs;
1db54f4e
DG
1152
1153 if (!DECL_P (*decl_p) && *decl_p == TYPE_MAIN_VARIANT (*decl_p))
1154 {
1155 /* We've added new attributes directly to the main variant, so
1156 now we need to update all of the other variants to include
1157 these new attributes. */
1158 tree variant;
1159 for (variant = TYPE_NEXT_VARIANT (*decl_p); variant;
1160 variant = TYPE_NEXT_VARIANT (variant))
1161 {
1162 gcc_assert (TYPE_ATTRIBUTES (variant) == old_attrs);
1163 TYPE_ATTRIBUTES (variant) = TYPE_ATTRIBUTES (*decl_p);
1164 }
1165 }
4f4141ff
JM
1166}
1167
5dc11954
JJ
1168/* Like reconstruct_complex_type, but handle also template trees. */
1169
1170tree
1171cp_reconstruct_complex_type (tree type, tree bottom)
1172{
1173 tree inner, outer;
1174
1175 if (TREE_CODE (type) == POINTER_TYPE)
1176 {
1177 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1178 outer = build_pointer_type_for_mode (inner, TYPE_MODE (type),
1179 TYPE_REF_CAN_ALIAS_ALL (type));
1180 }
1181 else if (TREE_CODE (type) == REFERENCE_TYPE)
1182 {
1183 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1184 outer = build_reference_type_for_mode (inner, TYPE_MODE (type),
1185 TYPE_REF_CAN_ALIAS_ALL (type));
1186 }
1187 else if (TREE_CODE (type) == ARRAY_TYPE)
1188 {
1189 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1190 outer = build_cplus_array_type (inner, TYPE_DOMAIN (type));
1191 /* Don't call cp_build_qualified_type on ARRAY_TYPEs, the
1192 element type qualification will be handled by the recursive
1193 cp_reconstruct_complex_type call and cp_build_qualified_type
1194 for ARRAY_TYPEs changes the element type. */
1195 return outer;
1196 }
1197 else if (TREE_CODE (type) == FUNCTION_TYPE)
1198 {
1199 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1200 outer = build_function_type (inner, TYPE_ARG_TYPES (type));
1201 }
1202 else if (TREE_CODE (type) == METHOD_TYPE)
1203 {
1204 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1205 /* The build_method_type_directly() routine prepends 'this' to argument list,
1206 so we must compensate by getting rid of it. */
1207 outer
1208 = build_method_type_directly
1209 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (type))),
1210 inner,
1211 TREE_CHAIN (TYPE_ARG_TYPES (type)));
1212 }
1213 else if (TREE_CODE (type) == OFFSET_TYPE)
1214 {
1215 inner = cp_reconstruct_complex_type (TREE_TYPE (type), bottom);
1216 outer = build_offset_type (TYPE_OFFSET_BASETYPE (type), inner);
1217 }
1218 else
1219 return bottom;
1220
1221 return cp_build_qualified_type (outer, TYPE_QUALS (type));
1222}
1223
4f4141ff
JM
1224/* Like decl_attributes, but handle C++ complexity. */
1225
28cbf42c 1226void
848eed92 1227cplus_decl_attributes (tree *decl, tree attributes, int flags)
8d08fdba 1228{
6ae9b875 1229 if (*decl == NULL_TREE || *decl == void_type_node
4f4141ff
JM
1230 || *decl == error_mark_node
1231 || attributes == NULL_TREE)
e8abc66f
MS
1232 return;
1233
4f4141ff
JM
1234 if (processing_template_decl)
1235 {
7b3e2d46
DG
1236 if (check_for_bare_parameter_packs (attributes))
1237 return;
1238
4f4141ff
JM
1239 save_template_attributes (&attributes, decl);
1240 if (attributes == NULL_TREE)
1241 return;
1242 }
1243
59387d2e
JM
1244 if (TREE_CODE (*decl) == TEMPLATE_DECL)
1245 decl = &DECL_TEMPLATE_RESULT (*decl);
e8abc66f 1246
91d231cb 1247 decl_attributes (decl, attributes, flags);
863adfc0 1248
59387d2e
JM
1249 if (TREE_CODE (*decl) == TYPE_DECL)
1250 SET_IDENTIFIER_TYPE_VALUE (DECL_NAME (*decl), TREE_TYPE (*decl));
8d08fdba 1251}
8d08fdba 1252\f
744b12b6 1253/* Walks through the namespace- or function-scope anonymous union
9bfa80fb 1254 OBJECT, with the indicated TYPE, building appropriate VAR_DECLs.
744b12b6 1255 Returns one of the fields for use in the mangled name. */
f237d906 1256
0ca7178c 1257static tree
744b12b6 1258build_anon_union_vars (tree type, tree object)
ce1b9eb9 1259{
ce1b9eb9 1260 tree main_decl = NULL_TREE;
cb96daa2 1261 tree field;
ce1b9eb9 1262
6bdb8141
JM
1263 /* Rather than write the code to handle the non-union case,
1264 just give an error. */
1265 if (TREE_CODE (type) != UNION_TYPE)
1266 error ("anonymous struct not inside named type");
1267
c8094d83
MS
1268 for (field = TYPE_FIELDS (type);
1269 field != NULL_TREE;
ce1b9eb9
MM
1270 field = TREE_CHAIN (field))
1271 {
cb96daa2 1272 tree decl;
0ca7178c 1273 tree ref;
8ebeee52
JM
1274
1275 if (DECL_ARTIFICIAL (field))
ce1b9eb9 1276 continue;
8ebeee52
JM
1277 if (TREE_CODE (field) != FIELD_DECL)
1278 {
cbe5f3b3 1279 permerror (input_location, "%q+#D invalid; an anonymous union can only "
37ec60ed 1280 "have non-static data members", field);
8ebeee52
JM
1281 continue;
1282 }
ce1b9eb9 1283
cb96daa2 1284 if (TREE_PRIVATE (field))
cbe5f3b3 1285 permerror (input_location, "private member %q+#D in anonymous union", field);
cb96daa2 1286 else if (TREE_PROTECTED (field))
cbe5f3b3 1287 permerror (input_location, "protected member %q+#D in anonymous union", field);
cb96daa2 1288
8fbc5ae7 1289 if (processing_template_decl)
44de5aeb
RK
1290 ref = build_min_nt (COMPONENT_REF, object,
1291 DECL_NAME (field), NULL_TREE);
8fbc5ae7
MM
1292 else
1293 ref = build_class_member_access_expr (object, field, NULL_TREE,
5ade1ed2 1294 false, tf_warning_or_error);
0ca7178c
JM
1295
1296 if (DECL_NAME (field))
cb96daa2 1297 {
56b4ea3d
RH
1298 tree base;
1299
9bfa80fb 1300 decl = build_decl (VAR_DECL, DECL_NAME (field), TREE_TYPE (field));
555551c2 1301 DECL_ANON_UNION_VAR_P (decl) = 1;
56b4ea3d
RH
1302
1303 base = get_base_address (object);
1304 TREE_PUBLIC (decl) = TREE_PUBLIC (base);
1305 TREE_STATIC (decl) = TREE_STATIC (base);
1306 DECL_EXTERNAL (decl) = DECL_EXTERNAL (base);
1307
9bfa80fb
RH
1308 SET_DECL_VALUE_EXPR (decl, ref);
1309 DECL_HAS_VALUE_EXPR_P (decl) = 1;
56b4ea3d 1310
cb96daa2 1311 decl = pushdecl (decl);
cb96daa2 1312 }
0ca7178c 1313 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
744b12b6 1314 decl = build_anon_union_vars (TREE_TYPE (field), ref);
dd1b7476
KG
1315 else
1316 decl = 0;
cb96daa2 1317
0ca7178c
JM
1318 if (main_decl == NULL_TREE)
1319 main_decl = decl;
cb96daa2 1320 }
0ca7178c 1321
ce1b9eb9
MM
1322 return main_decl;
1323}
1324
c050ec51
JM
1325/* Finish off the processing of a UNION_TYPE structure. If the union is an
1326 anonymous union, then all members must be laid out together. PUBLIC_P
1327 is nonzero if this union is not declared static. */
e92cc029 1328
8d08fdba 1329void
848eed92 1330finish_anon_union (tree anon_union_decl)
8d08fdba 1331{
06c00c70 1332 tree type;
cb96daa2 1333 tree main_decl;
06c00c70
MM
1334 bool public_p;
1335
1336 if (anon_union_decl == error_mark_node)
1337 return;
1338
1339 type = TREE_TYPE (anon_union_decl);
1340 public_p = TREE_PUBLIC (anon_union_decl);
8d08fdba 1341
a1c65f9f 1342 /* The VAR_DECL's context is the same as the TYPE's context. */
e5410b32 1343 DECL_CONTEXT (anon_union_decl) = DECL_CONTEXT (TYPE_NAME (type));
c8094d83 1344
cb96daa2 1345 if (TYPE_FIELDS (type) == NULL_TREE)
8d08fdba
MS
1346 return;
1347
1348 if (public_p)
1349 {
ff9f1a5d 1350 error ("namespace-scope anonymous aggregates must be static");
8d08fdba
MS
1351 return;
1352 }
1353
744b12b6 1354 main_decl = build_anon_union_vars (type, anon_union_decl);
8bdb09cb
VR
1355 if (main_decl == error_mark_node)
1356 return;
8fbc5ae7 1357 if (main_decl == NULL_TREE)
01f4137f 1358 {
d4ee4d25 1359 warning (0, "anonymous union with no members");
8fbc5ae7
MM
1360 return;
1361 }
bd9bb3d2 1362
8fbc5ae7
MM
1363 if (!processing_template_decl)
1364 {
0ca7178c
JM
1365 /* Use main_decl to set the mangled name. */
1366 DECL_NAME (anon_union_decl) = DECL_NAME (main_decl);
68017cb4 1367 maybe_commonize_var (anon_union_decl);
0ca7178c
JM
1368 mangle_decl (anon_union_decl);
1369 DECL_NAME (anon_union_decl) = NULL_TREE;
01f4137f 1370 }
edebf865 1371
0ca7178c
JM
1372 pushdecl (anon_union_decl);
1373 if (building_stmt_tree ()
1374 && at_function_scope_p ())
350fae66 1375 add_decl_expr (anon_union_decl);
0ca7178c 1376 else if (!processing_template_decl)
0e6df31e 1377 rest_of_decl_compilation (anon_union_decl,
0ca7178c 1378 toplevel_bindings_p (), at_eof);
8d08fdba 1379}
8d08fdba
MS
1380\f
1381/* Auxiliary functions to make type signatures for
1382 `operator new' and `operator delete' correspond to
1383 what compiler will be expecting. */
1384
8d08fdba 1385tree
848eed92 1386coerce_new_type (tree type)
8d08fdba 1387{
36791f1e
NS
1388 int e = 0;
1389 tree args = TYPE_ARG_TYPES (type);
1390
50bc768d 1391 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
c8094d83 1392
36791f1e 1393 if (!same_type_p (TREE_TYPE (type), ptr_type_node))
2d01edd7
GDR
1394 {
1395 e = 1;
1396 error ("%<operator new%> must return type %qT", ptr_type_node);
1397 }
36791f1e 1398
07021f8c 1399 if (args && args != void_list_node)
36791f1e 1400 {
07021f8c
PC
1401 if (TREE_PURPOSE (args))
1402 {
1403 /* [basic.stc.dynamic.allocation]
1404
1405 The first parameter shall not have an associated default
1406 argument. */
1407 error ("the first parameter of %<operator new%> cannot "
1408 "have a default argument");
1409 /* Throw away the default argument. */
1410 TREE_PURPOSE (args) = NULL_TREE;
1411 }
1412
1413 if (!same_type_p (TREE_VALUE (args), size_type_node))
1414 {
1415 e = 2;
1416 args = TREE_CHAIN (args);
1417 }
36791f1e 1418 }
07021f8c
PC
1419 else
1420 e = 2;
1421
1422 if (e == 2)
cbe5f3b3 1423 permerror (input_location, "%<operator new%> takes type %<size_t%> (%qT) "
37ec60ed 1424 "as first parameter", size_type_node);
07021f8c 1425
36791f1e
NS
1426 switch (e)
1427 {
1428 case 2:
c9f8536c 1429 args = tree_cons (NULL_TREE, size_type_node, args);
f4f206f4 1430 /* Fall through. */
36791f1e
NS
1431 case 1:
1432 type = build_exception_variant
0cbd7506
MS
1433 (build_function_type (ptr_type_node, args),
1434 TYPE_RAISES_EXCEPTIONS (type));
f4f206f4 1435 /* Fall through. */
36791f1e
NS
1436 default:;
1437 }
8d08fdba
MS
1438 return type;
1439}
1440
1441tree
848eed92 1442coerce_delete_type (tree type)
8d08fdba 1443{
36791f1e
NS
1444 int e = 0;
1445 tree args = TYPE_ARG_TYPES (type);
c8094d83 1446
50bc768d 1447 gcc_assert (TREE_CODE (type) == FUNCTION_TYPE);
824b9a4c 1448
36791f1e 1449 if (!same_type_p (TREE_TYPE (type), void_type_node))
2d01edd7
GDR
1450 {
1451 e = 1;
1452 error ("%<operator delete%> must return type %qT", void_type_node);
1453 }
8d08fdba 1454
36791f1e
NS
1455 if (!args || args == void_list_node
1456 || !same_type_p (TREE_VALUE (args), ptr_type_node))
8d08fdba 1457 {
36791f1e
NS
1458 e = 2;
1459 if (args && args != void_list_node)
0cbd7506 1460 args = TREE_CHAIN (args);
2d01edd7 1461 error ("%<operator delete%> takes type %qT as first parameter",
0cbd7506 1462 ptr_type_node);
8d08fdba 1463 }
36791f1e
NS
1464 switch (e)
1465 {
1466 case 2:
1467 args = tree_cons (NULL_TREE, ptr_type_node, args);
f4f206f4 1468 /* Fall through. */
36791f1e
NS
1469 case 1:
1470 type = build_exception_variant
0cbd7506
MS
1471 (build_function_type (void_type_node, args),
1472 TYPE_RAISES_EXCEPTIONS (type));
f4f206f4 1473 /* Fall through. */
36791f1e
NS
1474 default:;
1475 }
8d08fdba
MS
1476
1477 return type;
1478}
1479\f
dc472c59
JM
1480/* DECL is a VAR_DECL for a vtable: walk through the entries in the vtable
1481 and mark them as needed. */
1482
8d08fdba 1483static void
848eed92 1484mark_vtable_entries (tree decl)
8d08fdba 1485{
4038c495
GB
1486 tree fnaddr;
1487 unsigned HOST_WIDE_INT idx;
f30432d7 1488
4038c495
GB
1489 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (DECL_INITIAL (decl)),
1490 idx, fnaddr)
8d08fdba 1491 {
aff08c18 1492 tree fn;
bb4f6e6b
JH
1493
1494 STRIP_NOPS (fnaddr);
1495
67231816
RH
1496 if (TREE_CODE (fnaddr) != ADDR_EXPR
1497 && TREE_CODE (fnaddr) != FDESC_EXPR)
bbd15aac 1498 /* This entry is an offset: a virtual base class offset, a
46ccf50a 1499 virtual call offset, an RTTI offset, etc. */
aff08c18
JM
1500 continue;
1501
aff08c18 1502 fn = TREE_OPERAND (fnaddr, 0);
8926095f 1503 TREE_ADDRESSABLE (fn) = 1;
31f8e4f3
MM
1504 /* When we don't have vcall offsets, we output thunks whenever
1505 we output the vtables that contain them. With vcall offsets,
1506 we know all the thunks we'll need when we emit a virtual
1507 function, so we emit the thunks there instead. */
c8094d83 1508 if (DECL_THUNK_P (fn))
d0cd8b44 1509 use_thunk (fn, /*emit_p=*/0);
5566b478 1510 mark_used (fn);
7177d104
MS
1511 }
1512}
1513
d11ad92e
MS
1514/* Set DECL up to have the closest approximation of "initialized common"
1515 linkage available. */
1516
1517void
848eed92 1518comdat_linkage (tree decl)
d11ad92e 1519{
d11ad92e 1520 if (flag_weak)
7fcdf4c2 1521 make_decl_one_only (decl);
c8094d83 1522 else if (TREE_CODE (decl) == FUNCTION_DECL
97458258
MM
1523 || (TREE_CODE (decl) == VAR_DECL && DECL_ARTIFICIAL (decl)))
1524 /* We can just emit function and compiler-generated variables
1525 statically; having multiple copies is (for the most part) only
c8094d83 1526 a waste of space.
97458258
MM
1527
1528 There are two correctness issues, however: the address of a
1529 template instantiation with external linkage should be the
ad50e811
MM
1530 same, independent of what translation unit asks for the
1531 address, and this will not hold when we emit multiple copies of
c8094d83 1532 the function. However, there's little else we can do.
97458258 1533
3461fba7
NS
1534 Also, by default, the typeinfo implementation assumes that
1535 there will be only one copy of the string used as the name for
1536 each type. Therefore, if weak symbols are unavailable, the
1537 run-time library should perform a more conservative check; it
1538 should perform a string comparison, rather than an address
1539 comparison. */
7fcdf4c2 1540 TREE_PUBLIC (decl) = 0;
ea735e02
JM
1541 else
1542 {
2f435bed
JM
1543 /* Static data member template instantiations, however, cannot
1544 have multiple copies. */
ea735e02
JM
1545 if (DECL_INITIAL (decl) == 0
1546 || DECL_INITIAL (decl) == error_mark_node)
1547 DECL_COMMON (decl) = 1;
1548 else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl)))
1549 {
1550 DECL_COMMON (decl) = 1;
1551 DECL_INITIAL (decl) = error_mark_node;
1552 }
49bf4577 1553 else if (!DECL_EXPLICIT_INSTANTIATION (decl))
ea735e02
JM
1554 {
1555 /* We can't do anything useful; leave vars for explicit
1556 instantiation. */
1557 DECL_EXTERNAL (decl) = 1;
1558 DECL_NOT_REALLY_EXTERN (decl) = 0;
1559 }
1560 }
ab23f787
JM
1561
1562 if (DECL_LANG_SPECIFIC (decl))
1563 DECL_COMDAT (decl) = 1;
d11ad92e
MS
1564}
1565
b385c841
JM
1566/* For win32 we also want to put explicit instantiations in
1567 linkonce sections, so that they will be merged with implicit
c8094d83
MS
1568 instantiations; otherwise we get duplicate symbol errors.
1569 For Darwin we do not want explicit instantiations to be
324f9dfb 1570 linkonce. */
b385c841
JM
1571
1572void
848eed92 1573maybe_make_one_only (tree decl)
b385c841 1574{
b78121f6
JM
1575 /* We used to say that this was not necessary on targets that support weak
1576 symbols, because the implicit instantiations will defer to the explicit
1577 one. However, that's not actually the case in SVR4; a strong definition
1578 after a weak one is an error. Also, not making explicit
1579 instantiations one_only means that we can end up with two copies of
a1c65f9f 1580 some template instantiations. */
90ecce3e 1581 if (! flag_weak)
b385c841
JM
1582 return;
1583
11bb4b27 1584 /* We can't set DECL_COMDAT on functions, or cp_finish_file will think
ea735e02
JM
1585 we can get away with not emitting them if they aren't used. We need
1586 to for variables so that cp_finish_decl will update their linkage,
1587 because their DECL_INITIAL may not have been set properly yet. */
b385c841 1588
0524c91d 1589 if (!TARGET_WEAK_NOT_IN_ARCHIVE_TOC
4746cf84
MA
1590 || (! DECL_EXPLICIT_INSTANTIATION (decl)
1591 && ! DECL_TEMPLATE_SPECIALIZATION (decl)))
5cc90635 1592 {
4746cf84
MA
1593 make_decl_one_only (decl);
1594
1595 if (TREE_CODE (decl) == VAR_DECL)
1596 {
1597 DECL_COMDAT (decl) = 1;
1598 /* Mark it needed so we don't forget to emit it. */
bb9a388d 1599 mark_decl_referenced (decl);
4746cf84 1600 }
5cc90635 1601 }
b385c841
JM
1602}
1603
7e776093
JM
1604/* Determine whether or not we want to specifically import or export CTYPE,
1605 using various heuristics. */
67f7c391 1606
27d26ee7 1607static void
848eed92 1608import_export_class (tree ctype)
8d08fdba 1609{
7e776093
JM
1610 /* -1 for imported, 1 for exported. */
1611 int import_export = 0;
1612
27d26ee7
MM
1613 /* It only makes sense to call this function at EOF. The reason is
1614 that this function looks at whether or not the first non-inline
1615 non-abstract virtual member function has been defined in this
1616 translation unit. But, we can't possibly know that until we've
1617 seen the entire translation unit. */
50bc768d 1618 gcc_assert (at_eof);
27d26ee7 1619
7e776093
JM
1620 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
1621 return;
1622
15072eb1 1623 /* If MULTIPLE_SYMBOL_SPACES is set and we saw a #pragma interface,
e9659ab0
JM
1624 we will have CLASSTYPE_INTERFACE_ONLY set but not
1625 CLASSTYPE_INTERFACE_KNOWN. In that case, we don't want to use this
1626 heuristic because someone will supply a #pragma implementation
1627 elsewhere, and deducing it here would produce a conflict. */
1628 if (CLASSTYPE_INTERFACE_ONLY (ctype))
1629 return;
1630
91d231cb 1631 if (lookup_attribute ("dllimport", TYPE_ATTRIBUTES (ctype)))
501990bb 1632 import_export = -1;
91d231cb 1633 else if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (ctype)))
501990bb 1634 import_export = 1;
4684cd27
MM
1635 else if (CLASSTYPE_IMPLICIT_INSTANTIATION (ctype)
1636 && !flag_implicit_templates)
1637 /* For a template class, without -fimplicit-templates, check the
1638 repository. If the virtual table is assigned to this
1639 translation unit, then export the class; otherwise, import
1640 it. */
1641 import_export = repo_export_class_p (ctype) ? 1 : -1;
1642 else if (TYPE_POLYMORPHIC_P (ctype))
1643 {
1644 /* The ABI specifies that the virtual table and associated
1645 information are emitted with the key method, if any. */
9aad8f83 1646 tree method = CLASSTYPE_KEY_METHOD (ctype);
30bf22a0
MS
1647 /* If weak symbol support is not available, then we must be
1648 careful not to emit the vtable when the key function is
1649 inline. An inline function can be defined in multiple
1650 translation units. If we were to emit the vtable in each
1651 translation unit containing a definition, we would get
1652 multiple definition errors at link-time. */
1653 if (method && (flag_weak || ! DECL_DECLARED_INLINE_P (method)))
6db20143 1654 import_export = (DECL_REALLY_EXTERN (method) ? -1 : 1);
51c184be 1655 }
ad236eab 1656
15072eb1
ZW
1657 /* When MULTIPLE_SYMBOL_SPACES is set, we cannot count on seeing
1658 a definition anywhere else. */
1659 if (MULTIPLE_SYMBOL_SPACES && import_export == -1)
ad236eab 1660 import_export = 0;
7e776093 1661
3b426391 1662 /* Allow back ends the chance to overrule the decision. */
d59c7b4b
NC
1663 if (targetm.cxx.import_export_class)
1664 import_export = targetm.cxx.import_export_class (ctype, import_export);
1665
7e776093
JM
1666 if (import_export)
1667 {
1668 SET_CLASSTYPE_INTERFACE_KNOWN (ctype);
7e776093
JM
1669 CLASSTYPE_INTERFACE_ONLY (ctype) = (import_export < 0);
1670 }
67f7c391 1671}
a1dd0d36 1672
c4d2313d
JH
1673/* Return true if VAR has already been provided to the back end; in that
1674 case VAR should not be modified further by the front end. */
1675static bool
1676var_finalized_p (tree var)
1677{
8a4a83ed 1678 return varpool_node (var)->finalized;
4684cd27
MM
1679}
1680
1681/* DECL is a VAR_DECL or FUNCTION_DECL which, for whatever reason,
1682 must be emitted in this translation unit. Mark it as such. */
1683
1684void
1685mark_needed (tree decl)
1686{
1687 /* It's possible that we no longer need to set
1688 TREE_SYMBOL_REFERENCED here directly, but doing so is
1689 harmless. */
1690 TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)) = 1;
1691 mark_decl_referenced (decl);
1692}
1693
1694/* DECL is either a FUNCTION_DECL or a VAR_DECL. This function
1695 returns true if a definition of this entity should be provided in
1696 this object file. Callers use this function to determine whether
1697 or not to let the back end know that a definition of DECL is
1698 available in this translation unit. */
1699
1700bool
1701decl_needed_p (tree decl)
1702{
50bc768d
NS
1703 gcc_assert (TREE_CODE (decl) == VAR_DECL
1704 || TREE_CODE (decl) == FUNCTION_DECL);
4684cd27
MM
1705 /* This function should only be called at the end of the translation
1706 unit. We cannot be sure of whether or not something will be
1707 COMDAT until that point. */
50bc768d 1708 gcc_assert (at_eof);
4684cd27
MM
1709
1710 /* All entities with external linkage that are not COMDAT should be
1711 emitted; they may be referred to from other object files. */
1712 if (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
1713 return true;
3b426391 1714 /* If this entity was used, let the back end see it; it will decide
4684cd27 1715 whether or not to emit it into the object file. */
c8094d83 1716 if (TREE_USED (decl)
4684cd27
MM
1717 || (DECL_ASSEMBLER_NAME_SET_P (decl)
1718 && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
1719 return true;
1720 /* Otherwise, DECL does not need to be emitted -- yet. A subsequent
1721 reference to DECL might cause it to be emitted later. */
1722 return false;
c4d2313d
JH
1723}
1724
548502d3 1725/* If necessary, write out the vtables for the dynamic class CTYPE.
848eed92 1726 Returns true if any vtables were emitted. */
548502d3 1727
848eed92 1728static bool
548502d3 1729maybe_emit_vtables (tree ctype)
d18c083e 1730{
548502d3
MM
1731 tree vtbl;
1732 tree primary_vtbl;
4684cd27 1733 int needed = 0;
548502d3
MM
1734
1735 /* If the vtables for this class have already been emitted there is
1736 nothing more to do. */
1737 primary_vtbl = CLASSTYPE_VTABLES (ctype);
c4d2313d 1738 if (var_finalized_p (primary_vtbl))
848eed92 1739 return false;
548502d3
MM
1740 /* Ignore dummy vtables made by get_vtable_decl. */
1741 if (TREE_TYPE (primary_vtbl) == void_type_node)
848eed92 1742 return false;
548502d3 1743
af287697
MM
1744 /* On some targets, we cannot determine the key method until the end
1745 of the translation unit -- which is when this function is
1746 called. */
1747 if (!targetm.cxx.key_method_may_be_inline ())
1748 determine_key_method (ctype);
1749
548502d3
MM
1750 /* See if any of the vtables are needed. */
1751 for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
e9e4d4ee 1752 {
4684cd27
MM
1753 import_export_decl (vtbl);
1754 if (DECL_NOT_REALLY_EXTERN (vtbl) && decl_needed_p (vtbl))
1755 needed = 1;
e9e4d4ee 1756 }
4684cd27 1757 if (!needed)
548502d3
MM
1758 {
1759 /* If the references to this class' vtables are optimized away,
1760 still emit the appropriate debugging information. See
1761 dfs_debug_mark. */
c8094d83 1762 if (DECL_COMDAT (primary_vtbl)
548502d3
MM
1763 && CLASSTYPE_DEBUG_REQUESTED (ctype))
1764 note_debug_info_needed (ctype);
848eed92 1765 return false;
548502d3
MM
1766 }
1767
1768 /* The ABI requires that we emit all of the vtables if we emit any
1769 of them. */
1770 for (vtbl = CLASSTYPE_VTABLES (ctype); vtbl; vtbl = TREE_CHAIN (vtbl))
d18c083e 1771 {
4684cd27 1772 /* Mark entities references from the virtual table as used. */
548502d3 1773 mark_vtable_entries (vtbl);
8cd2462c 1774
548502d3 1775 if (TREE_TYPE (DECL_INITIAL (vtbl)) == 0)
25ebb82a 1776 {
8dc2b103 1777 tree expr = store_init_value (vtbl, DECL_INITIAL (vtbl));
c8094d83 1778
25ebb82a 1779 /* It had better be all done at compile-time. */
8dc2b103 1780 gcc_assert (!expr);
25ebb82a 1781 }
8d08fdba 1782
4684cd27
MM
1783 /* Write it out. */
1784 DECL_EXTERNAL (vtbl) = 0;
0e6df31e 1785 rest_of_decl_compilation (vtbl, 1, 1);
a1dd0d36 1786
84df082b
MM
1787 /* Because we're only doing syntax-checking, we'll never end up
1788 actually marking the variable as written. */
1789 if (flag_syntax_only)
548502d3 1790 TREE_ASM_WRITTEN (vtbl) = 1;
8d08fdba 1791 }
6db20143 1792
548502d3
MM
1793 /* Since we're writing out the vtable here, also write the debug
1794 info. */
1795 note_debug_info_needed (ctype);
b7484fbe 1796
848eed92 1797 return true;
b7484fbe
MS
1798}
1799
b9e75696
JM
1800/* A special return value from type_visibility meaning internal
1801 linkage. */
1802
b70f0f48 1803enum { VISIBILITY_ANON = VISIBILITY_INTERNAL+1 };
b9e75696
JM
1804
1805/* walk_tree helper function for type_visibility. */
1806
1807static tree
1808min_vis_r (tree *tp, int *walk_subtrees, void *data)
1809{
1810 int *vis_p = (int *)data;
1811 if (! TYPE_P (*tp))
1812 {
1813 *walk_subtrees = 0;
1814 }
1815 else if (CLASS_TYPE_P (*tp))
1816 {
1817 if (!TREE_PUBLIC (TYPE_MAIN_DECL (*tp)))
1818 {
b70f0f48 1819 *vis_p = VISIBILITY_ANON;
b9e75696
JM
1820 return *tp;
1821 }
1822 else if (CLASSTYPE_VISIBILITY (*tp) > *vis_p)
1823 *vis_p = CLASSTYPE_VISIBILITY (*tp);
1824 }
1825 return NULL;
1826}
1827
1828/* Returns the visibility of TYPE, which is the minimum visibility of its
1829 component types. */
1830
1831static int
1832type_visibility (tree type)
1833{
1834 int vis = VISIBILITY_DEFAULT;
14588106 1835 cp_walk_tree_without_duplicates (&type, min_vis_r, &vis);
b9e75696
JM
1836 return vis;
1837}
1838
b70f0f48
JM
1839/* Limit the visibility of DECL to VISIBILITY, if not explicitly
1840 specified (or if VISIBILITY is static). */
b9e75696
JM
1841
1842static bool
b70f0f48 1843constrain_visibility (tree decl, int visibility)
b9e75696 1844{
b70f0f48 1845 if (visibility == VISIBILITY_ANON)
b9e75696 1846 {
b70f0f48
JM
1847 /* extern "C" declarations aren't affected by the anonymous
1848 namespace. */
1849 if (!DECL_EXTERN_C_P (decl))
1850 {
1851 TREE_PUBLIC (decl) = 0;
565603f8 1852 DECL_ONE_ONLY (decl) = 0;
b70f0f48
JM
1853 DECL_INTERFACE_KNOWN (decl) = 1;
1854 if (DECL_LANG_SPECIFIC (decl))
1855 DECL_NOT_REALLY_EXTERN (decl) = 1;
1856 }
b9e75696 1857 }
b70f0f48
JM
1858 else if (visibility > DECL_VISIBILITY (decl)
1859 && !DECL_VISIBILITY_SPECIFIED (decl))
b9e75696 1860 {
b9e75696 1861 DECL_VISIBILITY (decl) = visibility;
b9e75696
JM
1862 return true;
1863 }
1864 return false;
1865}
1866
e7d35a88 1867/* Constrain the visibility of DECL based on the visibility of its template
b9e75696
JM
1868 arguments. */
1869
1870static void
1871constrain_visibility_for_template (tree decl, tree targs)
1872{
1873 /* If this is a template instantiation, check the innermost
1874 template args for visibility constraints. The outer template
1875 args are covered by the class check. */
1876 tree args = INNERMOST_TEMPLATE_ARGS (targs);
1877 int i;
1878 for (i = TREE_VEC_LENGTH (args); i > 0; --i)
1879 {
1880 int vis = 0;
1881
1882 tree arg = TREE_VEC_ELT (args, i-1);
1883 if (TYPE_P (arg))
1884 vis = type_visibility (arg);
1885 else if (TREE_TYPE (arg) && POINTER_TYPE_P (TREE_TYPE (arg)))
1886 {
1887 STRIP_NOPS (arg);
1888 if (TREE_CODE (arg) == ADDR_EXPR)
1889 arg = TREE_OPERAND (arg, 0);
1890 if (TREE_CODE (arg) == VAR_DECL
1891 || TREE_CODE (arg) == FUNCTION_DECL)
1892 {
1893 if (! TREE_PUBLIC (arg))
b70f0f48 1894 vis = VISIBILITY_ANON;
b9e75696
JM
1895 else
1896 vis = DECL_VISIBILITY (arg);
1897 }
1898 }
1899 if (vis)
b70f0f48 1900 constrain_visibility (decl, vis);
b9e75696
JM
1901 }
1902}
1903
b2ca3702 1904/* Like c_determine_visibility, but with additional C++-specific
0ed5edac
JM
1905 behavior.
1906
1907 Function-scope entities can rely on the function's visibility because
1908 it is set in start_preparsed_function.
1909
1910 Class-scope entities cannot rely on the class's visibility until the end
1911 of the enclosing class definition.
1912
1913 Note that because namespaces have multiple independent definitions,
1914 namespace visibility is handled elsewhere using the #pragma visibility
b9e75696
JM
1915 machinery rather than by decorating the namespace declaration.
1916
1917 The goal is for constraints from the type to give a diagnostic, and
1918 other constraints to be applied silently. */
73a8adb6
MM
1919
1920void
1921determine_visibility (tree decl)
1922{
b9e75696
JM
1923 tree class_type = NULL_TREE;
1924 bool use_template;
09812622
JJ
1925 bool orig_visibility_specified;
1926 enum symbol_visibility orig_visibility;
b9e75696
JM
1927
1928 /* Remember that all decls get VISIBILITY_DEFAULT when built. */
73a8adb6 1929
0ed5edac
JM
1930 /* Only relevant for names with external linkage. */
1931 if (!TREE_PUBLIC (decl))
1932 return;
1933
73a8adb6
MM
1934 /* Cloned constructors and destructors get the same visibility as
1935 the underlying function. That should be set up in
1936 maybe_clone_body. */
50bc768d 1937 gcc_assert (!DECL_CLONED_FUNCTION_P (decl));
b2ca3702 1938
09812622
JJ
1939 orig_visibility_specified = DECL_VISIBILITY_SPECIFIED (decl);
1940 orig_visibility = DECL_VISIBILITY (decl);
1941
b9e75696
JM
1942 if (TREE_CODE (decl) == TYPE_DECL)
1943 {
1944 if (CLASS_TYPE_P (TREE_TYPE (decl)))
1945 use_template = CLASSTYPE_USE_TEMPLATE (TREE_TYPE (decl));
1946 else if (TYPE_TEMPLATE_INFO (TREE_TYPE (decl)))
1947 use_template = 1;
1948 else
1949 use_template = 0;
1950 }
1951 else if (DECL_LANG_SPECIFIC (decl))
1952 use_template = DECL_USE_TEMPLATE (decl);
1953 else
1954 use_template = 0;
1955
b2ca3702
MM
1956 /* If DECL is a member of a class, visibility specifiers on the
1957 class can influence the visibility of the DECL. */
73a8adb6
MM
1958 if (DECL_CLASS_SCOPE_P (decl))
1959 class_type = DECL_CONTEXT (decl);
73a8adb6
MM
1960 else
1961 {
b9e75696
JM
1962 /* Not a class member. */
1963
73a8adb6
MM
1964 /* Virtual tables have DECL_CONTEXT set to their associated class,
1965 so they are automatically handled above. */
50bc768d
NS
1966 gcc_assert (TREE_CODE (decl) != VAR_DECL
1967 || !DECL_VTABLE_OR_VTT_P (decl));
0ed5edac 1968
7c0de6a5 1969 if (DECL_FUNCTION_SCOPE_P (decl) && ! DECL_VISIBILITY_SPECIFIED (decl))
0ed5edac 1970 {
b9e75696 1971 /* Local statics and classes get the visibility of their
7c0de6a5
GK
1972 containing function by default, except that
1973 -fvisibility-inlines-hidden doesn't affect them. */
0ed5edac 1974 tree fn = DECL_CONTEXT (decl);
7c0de6a5
GK
1975 if (DECL_VISIBILITY_SPECIFIED (fn) || ! DECL_CLASS_SCOPE_P (fn))
1976 {
1977 DECL_VISIBILITY (decl) = DECL_VISIBILITY (fn);
1978 DECL_VISIBILITY_SPECIFIED (decl) =
1979 DECL_VISIBILITY_SPECIFIED (fn);
1980 }
1981 else
1982 determine_visibility_from_class (decl, DECL_CONTEXT (fn));
0ed5edac 1983
b9e75696
JM
1984 /* Local classes in templates have CLASSTYPE_USE_TEMPLATE set,
1985 but have no TEMPLATE_INFO, so don't try to check it. */
1986 use_template = 0;
1987 }
ddbfd28d
GK
1988 else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl)
1989 && flag_visibility_ms_compat)
1990 {
1991 /* Under -fvisibility-ms-compat, types are visible by default,
1992 even though their contents aren't. */
1993 tree underlying_type = TREE_TYPE (DECL_NAME (decl));
1994 int underlying_vis = type_visibility (underlying_type);
1995 if (underlying_vis == VISIBILITY_ANON
1996 || CLASSTYPE_VISIBILITY_SPECIFIED (underlying_type))
1997 constrain_visibility (decl, underlying_vis);
1998 else
1999 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
2000 }
b9e75696
JM
2001 else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2002 {
2003 /* tinfo visibility is based on the type it's for. */
2004 constrain_visibility
b70f0f48 2005 (decl, type_visibility (TREE_TYPE (DECL_NAME (decl))));
711b2998
JB
2006
2007 /* Give the target a chance to override the visibility associated
2008 with DECL. */
2009 if (TREE_PUBLIC (decl)
2010 && !DECL_REALLY_EXTERN (decl)
2011 && CLASS_TYPE_P (TREE_TYPE (DECL_NAME (decl)))
2012 && !CLASSTYPE_VISIBILITY_SPECIFIED (TREE_TYPE (DECL_NAME (decl))))
2013 targetm.cxx.determine_class_data_visibility (decl);
b9e75696
JM
2014 }
2015 else if (use_template)
2016 /* Template instantiations and specializations get visibility based
2017 on their template unless they override it with an attribute. */;
2018 else if (! DECL_VISIBILITY_SPECIFIED (decl))
2019 {
2020 /* Set default visibility to whatever the user supplied with
2021 #pragma GCC visibility or a namespace visibility attribute. */
2022 DECL_VISIBILITY (decl) = default_visibility;
2023 DECL_VISIBILITY_SPECIFIED (decl) = visibility_options.inpragma;
2024 }
73a8adb6
MM
2025 }
2026
b9e75696 2027 if (use_template)
73a8adb6 2028 {
b70f0f48
JM
2029 /* If the specialization doesn't specify visibility, use the
2030 visibility from the template. */
b9e75696
JM
2031 tree tinfo = (TREE_CODE (decl) == TYPE_DECL
2032 ? TYPE_TEMPLATE_INFO (TREE_TYPE (decl))
2033 : DECL_TEMPLATE_INFO (decl));
2034 tree args = TI_ARGS (tinfo);
653109bd
LM
2035
2036 if (args != error_mark_node)
b9e75696 2037 {
653109bd
LM
2038 int depth = TMPL_ARGS_DEPTH (args);
2039 tree pattern = DECL_TEMPLATE_RESULT (TI_TEMPLATE (tinfo));
2040
2041 if (!DECL_VISIBILITY_SPECIFIED (decl))
2042 {
2043 DECL_VISIBILITY (decl) = DECL_VISIBILITY (pattern);
2044 DECL_VISIBILITY_SPECIFIED (decl)
2045 = DECL_VISIBILITY_SPECIFIED (pattern);
2046 }
b9e75696 2047
653109bd
LM
2048 /* FIXME should TMPL_ARGS_DEPTH really return 1 for null input? */
2049 if (args && depth > template_class_depth (class_type))
2050 /* Limit visibility based on its template arguments. */
2051 constrain_visibility_for_template (decl, args);
2052 }
3db45ab5 2053 }
b70f0f48 2054
b9e75696
JM
2055 if (class_type)
2056 determine_visibility_from_class (decl, class_type);
2057
b9e75696
JM
2058 if (decl_anon_ns_mem_p (decl))
2059 /* Names in an anonymous namespace get internal linkage.
2060 This might change once we implement export. */
b70f0f48 2061 constrain_visibility (decl, VISIBILITY_ANON);
bd741f34
JM
2062 else if (TREE_CODE (decl) != TYPE_DECL)
2063 {
2064 /* Propagate anonymity from type to decl. */
2065 int tvis = type_visibility (TREE_TYPE (decl));
c96f0001
GK
2066 if (tvis == VISIBILITY_ANON
2067 || ! DECL_VISIBILITY_SPECIFIED (decl))
bd741f34
JM
2068 constrain_visibility (decl, tvis);
2069 }
09812622
JJ
2070
2071 /* If visibility changed and DECL already has DECL_RTL, ensure
2072 symbol flags are updated. */
2073 if ((DECL_VISIBILITY (decl) != orig_visibility
2074 || DECL_VISIBILITY_SPECIFIED (decl) != orig_visibility_specified)
2075 && ((TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
2076 || TREE_CODE (decl) == FUNCTION_DECL)
2077 && DECL_RTL_SET_P (decl))
2078 make_decl_rtl (decl);
0ed5edac
JM
2079}
2080
b9e75696
JM
2081/* By default, static data members and function members receive
2082 the visibility of their containing class. */
2083
0ed5edac
JM
2084static void
2085determine_visibility_from_class (tree decl, tree class_type)
2086{
3a687f8b
MM
2087 if (DECL_VISIBILITY_SPECIFIED (decl))
2088 return;
2089
b9e75696
JM
2090 if (visibility_options.inlines_hidden
2091 /* Don't do this for inline templates; specializations might not be
2092 inline, and we don't want them to inherit the hidden
2093 visibility. We'll set it here for all inline instantiations. */
2094 && !processing_template_decl
b9e75696 2095 && TREE_CODE (decl) == FUNCTION_DECL
dfb84d62
MS
2096 && DECL_DECLARED_INLINE_P (decl)
2097 && (! DECL_LANG_SPECIFIC (decl)
2098 || ! DECL_EXPLICIT_INSTANTIATION (decl)))
b9e75696 2099 DECL_VISIBILITY (decl) = VISIBILITY_HIDDEN;
3a687f8b 2100 else
b70f0f48
JM
2101 {
2102 /* Default to the class visibility. */
2103 DECL_VISIBILITY (decl) = CLASSTYPE_VISIBILITY (class_type);
2104 DECL_VISIBILITY_SPECIFIED (decl)
2105 = CLASSTYPE_VISIBILITY_SPECIFIED (class_type);
2106 }
b9e75696
JM
2107
2108 /* Give the target a chance to override the visibility associated
2109 with DECL. */
2110 if (TREE_CODE (decl) == VAR_DECL
2111 && (DECL_TINFO_P (decl)
2112 || (DECL_VTABLE_OR_VTT_P (decl)
2113 /* Construction virtual tables are not exported because
2114 they cannot be referred to from other object files;
2115 their name is not standardized by the ABI. */
2116 && !DECL_CONSTRUCTION_VTABLE_P (decl)))
2117 && TREE_PUBLIC (decl)
2118 && !DECL_REALLY_EXTERN (decl)
b70f0f48 2119 && !CLASSTYPE_VISIBILITY_SPECIFIED (class_type))
b9e75696
JM
2120 targetm.cxx.determine_class_data_visibility (decl);
2121}
2122
2123/* Constrain the visibility of a class TYPE based on the visibility of its
2124 field types. Warn if any fields require lesser visibility. */
2125
2126void
2127constrain_class_visibility (tree type)
2128{
b70f0f48 2129 tree binfo;
b9e75696
JM
2130 tree t;
2131 int i;
2132
b70f0f48
JM
2133 int vis = type_visibility (type);
2134
bd741f34
JM
2135 if (vis == VISIBILITY_ANON
2136 || DECL_IN_SYSTEM_HEADER (TYPE_MAIN_DECL (type)))
b70f0f48
JM
2137 return;
2138
2139 /* Don't warn about visibility if the class has explicit visibility. */
2140 if (CLASSTYPE_VISIBILITY_SPECIFIED (type))
2141 vis = VISIBILITY_INTERNAL;
2142
b9e75696 2143 for (t = TYPE_FIELDS (type); t; t = TREE_CHAIN (t))
b70f0f48
JM
2144 if (TREE_CODE (t) == FIELD_DECL && TREE_TYPE (t) != error_mark_node)
2145 {
ba992967 2146 tree ftype = strip_pointer_or_array_types (TREE_TYPE (t));
bd741f34 2147 int subvis = type_visibility (ftype);
b70f0f48
JM
2148
2149 if (subvis == VISIBILITY_ANON)
8fff2060 2150 {
61172206 2151 if (!in_main_input_context ())
8fff2060 2152 warning (0, "\
b70f0f48 2153%qT has a field %qD whose type uses the anonymous namespace",
8fff2060
SP
2154 type, t);
2155 }
9e1e64ec 2156 else if (MAYBE_CLASS_TYPE_P (ftype)
bd741f34 2157 && vis < VISIBILITY_HIDDEN
b70f0f48
JM
2158 && subvis >= VISIBILITY_HIDDEN)
2159 warning (OPT_Wattributes, "\
b9e75696 2160%qT declared with greater visibility than the type of its field %qD",
b70f0f48
JM
2161 type, t);
2162 }
b9e75696 2163
b70f0f48 2164 binfo = TYPE_BINFO (type);
b9e75696 2165 for (i = 0; BINFO_BASE_ITERATE (binfo, i, t); ++i)
b70f0f48
JM
2166 {
2167 int subvis = type_visibility (TREE_TYPE (t));
2168
2169 if (subvis == VISIBILITY_ANON)
8fff2060 2170 {
61172206 2171 if (!in_main_input_context())
8fff2060 2172 warning (0, "\
b70f0f48 2173%qT has a base %qT whose type uses the anonymous namespace",
8fff2060
SP
2174 type, TREE_TYPE (t));
2175 }
b70f0f48
JM
2176 else if (vis < VISIBILITY_HIDDEN
2177 && subvis >= VISIBILITY_HIDDEN)
2178 warning (OPT_Wattributes, "\
b9e75696 2179%qT declared with greater visibility than its base %qT",
b70f0f48
JM
2180 type, TREE_TYPE (t));
2181 }
73a8adb6
MM
2182}
2183
4684cd27
MM
2184/* DECL is a FUNCTION_DECL or VAR_DECL. If the object file linkage
2185 for DECL has not already been determined, do so now by setting
2186 DECL_EXTERNAL, DECL_COMDAT and other related flags. Until this
2187 function is called entities with vague linkage whose definitions
2188 are available must have TREE_PUBLIC set.
2189
2190 If this function decides to place DECL in COMDAT, it will set
2191 appropriate flags -- but will not clear DECL_EXTERNAL. It is up to
2192 the caller to decide whether or not to clear DECL_EXTERNAL. Some
2193 callers defer that decision until it is clear that DECL is actually
2194 required. */
00595019
MS
2195
2196void
848eed92 2197import_export_decl (tree decl)
00595019 2198{
4684cd27
MM
2199 int emit_p;
2200 bool comdat_p;
2201 bool import_p;
1e731102 2202 tree class_type = NULL_TREE;
4684cd27 2203
db5ae43f 2204 if (DECL_INTERFACE_KNOWN (decl))
00595019
MS
2205 return;
2206
4684cd27
MM
2207 /* We cannot determine what linkage to give to an entity with vague
2208 linkage until the end of the file. For example, a virtual table
2209 for a class will be defined if and only if the key method is
2210 defined in this translation unit. As a further example, consider
2211 that when compiling a translation unit that uses PCH file with
2212 "-frepo" it would be incorrect to make decisions about what
2213 entities to emit when building the PCH; those decisions must be
2214 delayed until the repository information has been processed. */
50bc768d 2215 gcc_assert (at_eof);
4684cd27
MM
2216 /* Object file linkage for explicit instantiations is handled in
2217 mark_decl_instantiated. For static variables in functions with
2218 vague linkage, maybe_commonize_var is used.
2219
2220 Therefore, the only declarations that should be provided to this
44370687 2221 function are those with external linkage that are:
4684cd27
MM
2222
2223 * implicit instantiations of function templates
2224
2225 * inline function
2226
2227 * implicit instantiations of static data members of class
2228 templates
2229
2230 * virtual tables
2231
2232 * typeinfo objects
2233
2234 Furthermore, all entities that reach this point must have a
2235 definition available in this translation unit.
2236
2237 The following assertions check these conditions. */
50bc768d
NS
2238 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL
2239 || TREE_CODE (decl) == VAR_DECL);
4684cd27
MM
2240 /* Any code that creates entities with TREE_PUBLIC cleared should
2241 also set DECL_INTERFACE_KNOWN. */
50bc768d 2242 gcc_assert (TREE_PUBLIC (decl));
4684cd27 2243 if (TREE_CODE (decl) == FUNCTION_DECL)
50bc768d
NS
2244 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2245 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
2246 || DECL_DECLARED_INLINE_P (decl));
4684cd27 2247 else
50bc768d
NS
2248 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl)
2249 || DECL_VTABLE_OR_VTT_P (decl)
2250 || DECL_TINFO_P (decl));
4684cd27
MM
2251 /* Check that a definition of DECL is available in this translation
2252 unit. */
50bc768d 2253 gcc_assert (!DECL_REALLY_EXTERN (decl));
4684cd27
MM
2254
2255 /* Assume that DECL will not have COMDAT linkage. */
2256 comdat_p = false;
2257 /* Assume that DECL will not be imported into this translation
2258 unit. */
2259 import_p = false;
2260
2261 /* See if the repository tells us whether or not to emit DECL in
2262 this translation unit. */
2263 emit_p = repo_emit_p (decl);
2264 if (emit_p == 0)
2265 import_p = true;
2266 else if (emit_p == 1)
2267 {
2268 /* The repository indicates that this entity should be defined
2269 here. Make sure the back end honors that request. */
2270 if (TREE_CODE (decl) == VAR_DECL)
2271 mark_needed (decl);
2272 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
2273 || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
a9aedbc2 2274 {
4684cd27
MM
2275 tree clone;
2276 FOR_EACH_CLONE (clone, decl)
2277 mark_needed (clone);
a9aedbc2 2278 }
db5ae43f 2279 else
4684cd27
MM
2280 mark_needed (decl);
2281 /* Output the definition as an ordinary strong definition. */
2282 DECL_EXTERNAL (decl) = 0;
2283 DECL_INTERFACE_KNOWN (decl) = 1;
2284 return;
2285 }
2286
2287 if (import_p)
2288 /* We have already decided what to do with this DECL; there is no
2289 need to check anything further. */
2290 ;
2291 else if (TREE_CODE (decl) == VAR_DECL && DECL_VTABLE_OR_VTT_P (decl))
2292 {
1e731102
MM
2293 class_type = DECL_CONTEXT (decl);
2294 import_export_class (class_type);
2295 if (TYPE_FOR_JAVA (class_type))
4684cd27 2296 import_p = true;
1e731102
MM
2297 else if (CLASSTYPE_INTERFACE_KNOWN (class_type)
2298 && CLASSTYPE_INTERFACE_ONLY (class_type))
4684cd27 2299 import_p = true;
e72f3fa1 2300 else if ((!flag_weak || TARGET_WEAK_NOT_IN_ARCHIVE_TOC)
1e731102
MM
2301 && !CLASSTYPE_USE_TEMPLATE (class_type)
2302 && CLASSTYPE_KEY_METHOD (class_type)
2303 && !DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type)))
4684cd27
MM
2304 /* The ABI requires that all virtual tables be emitted with
2305 COMDAT linkage. However, on systems where COMDAT symbols
2306 don't show up in the table of contents for a static
e72f3fa1
MM
2307 archive, or on systems without weak symbols (where we
2308 approximate COMDAT linkage by using internal linkage), the
2309 linker will report errors about undefined symbols because
2310 it will not see the virtual table definition. Therefore,
2311 in the case that we know that the virtual table will be
2312 emitted in only one translation unit, we make the virtual
2313 table an ordinary definition with external linkage. */
4684cd27 2314 DECL_EXTERNAL (decl) = 0;
1e731102 2315 else if (CLASSTYPE_INTERFACE_KNOWN (class_type))
b41d214e 2316 {
1e731102 2317 /* CLASS_TYPE is being exported from this translation unit,
c8094d83 2318 so DECL should be defined here. */
1e731102 2319 if (!flag_weak && CLASSTYPE_EXPLICIT_INSTANTIATION (class_type))
e72f3fa1
MM
2320 /* If a class is declared in a header with the "extern
2321 template" extension, then it will not be instantiated,
2322 even in translation units that would normally require
2323 it. Often such classes are explicitly instantiated in
2324 one translation unit. Therefore, the explicit
2325 instantiation must be made visible to other translation
2326 units. */
2327 DECL_EXTERNAL (decl) = 0;
2328 else
2329 {
1e731102
MM
2330 /* The generic C++ ABI says that class data is always
2331 COMDAT, even if there is a key function. Some
2332 variants (e.g., the ARM EABI) says that class data
1a1d0917
MS
2333 only has COMDAT linkage if the class data might be
2334 emitted in more than one translation unit. When the
2335 key method can be inline and is inline, we still have
2336 to arrange for comdat even though
2337 class_data_always_comdat is false. */
1e731102 2338 if (!CLASSTYPE_KEY_METHOD (class_type)
67a70df6 2339 || DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
1e731102
MM
2340 || targetm.cxx.class_data_always_comdat ())
2341 {
2342 /* The ABI requires COMDAT linkage. Normally, we
2343 only emit COMDAT things when they are needed;
2344 make sure that we realize that this entity is
2345 indeed needed. */
2346 comdat_p = true;
2347 mark_needed (decl);
2348 }
e72f3fa1 2349 }
b41d214e 2350 }
4684cd27 2351 else if (!flag_implicit_templates
1e731102 2352 && CLASSTYPE_IMPLICIT_INSTANTIATION (class_type))
4684cd27
MM
2353 import_p = true;
2354 else
2355 comdat_p = true;
2356 }
2357 else if (TREE_CODE (decl) == VAR_DECL && DECL_TINFO_P (decl))
2358 {
2359 tree type = TREE_TYPE (DECL_NAME (decl));
2360 if (CLASS_TYPE_P (type))
2361 {
1e731102 2362 class_type = type;
4684cd27
MM
2363 import_export_class (type);
2364 if (CLASSTYPE_INTERFACE_KNOWN (type)
2365 && TYPE_POLYMORPHIC_P (type)
2366 && CLASSTYPE_INTERFACE_ONLY (type)
2367 /* If -fno-rtti was specified, then we cannot be sure
2368 that RTTI information will be emitted with the
2369 virtual table of the class, so we must emit it
2370 wherever it is used. */
2371 && flag_rtti)
2372 import_p = true;
c8094d83 2373 else
4684cd27 2374 {
4684cd27
MM
2375 if (CLASSTYPE_INTERFACE_KNOWN (type)
2376 && !CLASSTYPE_INTERFACE_ONLY (type))
e72f3fa1 2377 {
1a1d0917
MS
2378 comdat_p = (targetm.cxx.class_data_always_comdat ()
2379 || (CLASSTYPE_KEY_METHOD (type)
67a70df6 2380 && DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))));
e72f3fa1
MM
2381 mark_needed (decl);
2382 if (!flag_weak)
2383 {
2384 comdat_p = false;
2385 DECL_EXTERNAL (decl) = 0;
2386 }
2387 }
1e731102
MM
2388 else
2389 comdat_p = true;
4684cd27
MM
2390 }
2391 }
2392 else
2393 comdat_p = true;
2394 }
2395 else if (DECL_TEMPLATE_INSTANTIATION (decl)
2396 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl))
2397 {
2398 /* DECL is an implicit instantiation of a function or static
2399 data member. */
23372b3f
JJ
2400 if ((flag_implicit_templates
2401 && !flag_use_repository)
4684cd27 2402 || (flag_implicit_inline_templates
c8094d83 2403 && TREE_CODE (decl) == FUNCTION_DECL
4684cd27
MM
2404 && DECL_DECLARED_INLINE_P (decl)))
2405 comdat_p = true;
2406 else
2407 /* If we are not implicitly generating templates, then mark
2408 this entity as undefined in this translation unit. */
2409 import_p = true;
00595019
MS
2410 }
2411 else if (DECL_FUNCTION_MEMBER_P (decl))
2412 {
79065db2 2413 if (!DECL_DECLARED_INLINE_P (decl))
00595019 2414 {
92788413
MM
2415 tree ctype = DECL_CONTEXT (decl);
2416 import_export_class (ctype);
2417 if (CLASSTYPE_INTERFACE_KNOWN (ctype))
2418 {
2419 DECL_NOT_REALLY_EXTERN (decl)
2420 = ! (CLASSTYPE_INTERFACE_ONLY (ctype)
c8094d83 2421 || (DECL_DECLARED_INLINE_P (decl)
79065db2 2422 && ! flag_implement_inlines
92788413
MM
2423 && !DECL_VINDEX (decl)));
2424
b41d214e
JM
2425 if (!DECL_NOT_REALLY_EXTERN (decl))
2426 DECL_EXTERNAL (decl) = 1;
2427
92788413
MM
2428 /* Always make artificials weak. */
2429 if (DECL_ARTIFICIAL (decl) && flag_weak)
4684cd27 2430 comdat_p = true;
92788413
MM
2431 else
2432 maybe_make_one_only (decl);
2433 }
00595019 2434 }
db5ae43f 2435 else
4684cd27 2436 comdat_p = true;
00595019 2437 }
db5ae43f 2438 else
4684cd27 2439 comdat_p = true;
d689a8f1 2440
4684cd27 2441 if (import_p)
d689a8f1 2442 {
4684cd27
MM
2443 /* If we are importing DECL into this translation unit, mark is
2444 an undefined here. */
2445 DECL_EXTERNAL (decl) = 1;
2446 DECL_NOT_REALLY_EXTERN (decl) = 0;
d689a8f1 2447 }
4684cd27 2448 else if (comdat_p)
d689a8f1 2449 {
4684cd27
MM
2450 /* If we decided to put DECL in COMDAT, mark it accordingly at
2451 this point. */
2452 comdat_linkage (decl);
d689a8f1 2453 }
c6f553d1 2454
d689a8f1
NS
2455 DECL_INTERFACE_KNOWN (decl) = 1;
2456}
2457
c10cdb3d
MM
2458/* Return an expression that performs the destruction of DECL, which
2459 must be a VAR_DECL whose type has a non-trivial destructor, or is
2460 an array whose (innermost) elements have a non-trivial destructor. */
2461
72b7eeff 2462tree
848eed92 2463build_cleanup (tree decl)
72b7eeff
MS
2464{
2465 tree temp;
2466 tree type = TREE_TYPE (decl);
2467
c10cdb3d
MM
2468 /* This function should only be called for declarations that really
2469 require cleanups. */
50bc768d 2470 gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
c10cdb3d
MM
2471
2472 /* Treat all objects with destructors as used; the destructor may do
2473 something substantive. */
2474 mark_used (decl);
2475
72b7eeff
MS
2476 if (TREE_CODE (type) == ARRAY_TYPE)
2477 temp = decl;
2478 else
46a9e521 2479 temp = build_address (decl);
72b7eeff 2480 temp = build_delete (TREE_TYPE (temp), temp,
86f45d2c 2481 sfk_complete_destructor,
72b7eeff
MS
2482 LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0);
2483 return temp;
2484}
2485
c395453c
MM
2486/* Returns the initialization guard variable for the variable DECL,
2487 which has static storage duration. */
1f6e1acc 2488
c395453c 2489tree
848eed92 2490get_guard (tree decl)
67d743fe 2491{
1f6e1acc 2492 tree sname;
c395453c
MM
2493 tree guard;
2494
1f84ec23 2495 sname = mangle_guard_variable (decl);
c395453c
MM
2496 guard = IDENTIFIER_GLOBAL_VALUE (sname);
2497 if (! guard)
2498 {
2499 tree guard_type;
2500
3461fba7
NS
2501 /* We use a type that is big enough to contain a mutex as well
2502 as an integer counter. */
4185ae53 2503 guard_type = targetm.cxx.guard_type ();
c395453c 2504 guard = build_decl (VAR_DECL, sname, guard_type);
c8094d83 2505
a1c65f9f 2506 /* The guard should have the same linkage as what it guards. */
844511c8
NS
2507 TREE_PUBLIC (guard) = TREE_PUBLIC (decl);
2508 TREE_STATIC (guard) = TREE_STATIC (decl);
2509 DECL_COMMON (guard) = DECL_COMMON (decl);
2510 DECL_ONE_ONLY (guard) = DECL_ONE_ONLY (decl);
2511 if (TREE_PUBLIC (decl))
0cbd7506 2512 DECL_WEAK (guard) = DECL_WEAK (decl);
3fd40684
JM
2513 DECL_VISIBILITY (guard) = DECL_VISIBILITY (decl);
2514 DECL_VISIBILITY_SPECIFIED (guard) = DECL_VISIBILITY_SPECIFIED (decl);
c8094d83 2515
c395453c 2516 DECL_ARTIFICIAL (guard) = 1;
78e0d62b 2517 DECL_IGNORED_P (guard) = 1;
c395453c 2518 TREE_USED (guard) = 1;
170b020f 2519 pushdecl_top_level_and_finish (guard, NULL_TREE);
c395453c
MM
2520 }
2521 return guard;
2522}
2523
2524/* Return those bits of the GUARD variable that should be set when the
2525 guarded entity is actually initialized. */
2526
2527static tree
848eed92 2528get_guard_bits (tree guard)
c395453c 2529{
4185ae53
PB
2530 if (!targetm.cxx.guard_mask_bit ())
2531 {
2532 /* We only set the first byte of the guard, in order to leave room
2533 for a mutex in the high-order bits. */
c8094d83 2534 guard = build1 (ADDR_EXPR,
4185ae53
PB
2535 build_pointer_type (TREE_TYPE (guard)),
2536 guard);
c8094d83
MS
2537 guard = build1 (NOP_EXPR,
2538 build_pointer_type (char_type_node),
4185ae53
PB
2539 guard);
2540 guard = build1 (INDIRECT_REF, char_type_node, guard);
2541 }
c395453c
MM
2542
2543 return guard;
2544}
2545
2546/* Return an expression which determines whether or not the GUARD
2547 variable has already been initialized. */
2548
2549tree
848eed92 2550get_guard_cond (tree guard)
c395453c
MM
2551{
2552 tree guard_value;
2553
2554 /* Check to see if the GUARD is zero. */
2555 guard = get_guard_bits (guard);
4185ae53
PB
2556
2557 /* Mask off all but the low bit. */
2558 if (targetm.cxx.guard_mask_bit ())
2559 {
2560 guard_value = integer_one_node;
2561 if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2562 guard_value = convert (TREE_TYPE (guard), guard_value);
ba47d38d
AH
2563 guard = cp_build_binary_op (input_location,
2564 BIT_AND_EXPR, guard, guard_value,
5ade1ed2 2565 tf_warning_or_error);
4185ae53
PB
2566 }
2567
c395453c
MM
2568 guard_value = integer_zero_node;
2569 if (!same_type_p (TREE_TYPE (guard_value), TREE_TYPE (guard)))
2570 guard_value = convert (TREE_TYPE (guard), guard_value);
ba47d38d
AH
2571 return cp_build_binary_op (input_location,
2572 EQ_EXPR, guard, guard_value,
5ade1ed2 2573 tf_warning_or_error);
c395453c
MM
2574}
2575
2576/* Return an expression which sets the GUARD variable, indicating that
2577 the variable being guarded has been initialized. */
2578
2579tree
848eed92 2580set_guard (tree guard)
c395453c
MM
2581{
2582 tree guard_init;
2583
2584 /* Set the GUARD to one. */
2585 guard = get_guard_bits (guard);
2586 guard_init = integer_one_node;
2587 if (!same_type_p (TREE_TYPE (guard_init), TREE_TYPE (guard)))
2588 guard_init = convert (TREE_TYPE (guard), guard_init);
5ade1ed2
DG
2589 return cp_build_modify_expr (guard, NOP_EXPR, guard_init,
2590 tf_warning_or_error);
67d743fe
MS
2591}
2592
961ec1a5
JM
2593/* Start the process of running a particular set of global constructors
2594 or destructors. Subroutine of do_[cd]tors. */
2595
914653a2 2596static tree
848eed92 2597start_objects (int method_type, int initp)
961ec1a5 2598{
914653a2 2599 tree body;
058b15c1 2600 tree fndecl;
2ce3c6c6 2601 char type[10];
961ec1a5
JM
2602
2603 /* Make ctor or dtor function. METHOD_TYPE may be 'I' or 'D'. */
2604
000ab922 2605 if (initp != DEFAULT_INIT_PRIORITY)
2ce3c6c6 2606 {
066d147c
MH
2607 char joiner;
2608
2609#ifdef JOINER
2610 joiner = JOINER;
2611#else
2612 joiner = '_';
2613#endif
2ce3c6c6 2614
066d147c 2615 sprintf (type, "%c%c%.5u", method_type, joiner, initp);
2ce3c6c6
JM
2616 }
2617 else
2618 sprintf (type, "%c", method_type);
2619
c8094d83 2620 fndecl = build_lang_decl (FUNCTION_DECL,
5880f14f 2621 get_file_function_name (type),
058b15c1
MM
2622 build_function_type (void_type_node,
2623 void_list_node));
2624 start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
961ec1a5 2625
7be82279 2626 TREE_PUBLIC (current_function_decl) = 0;
b4bb92e5 2627
32d49134
GK
2628 /* Mark as artificial because it's not explicitly in the user's
2629 source code. */
2630 DECL_ARTIFICIAL (current_function_decl) = 1;
2631
5fdaba89
MM
2632 /* Mark this declaration as used to avoid spurious warnings. */
2633 TREE_USED (current_function_decl) = 1;
2634
2b76013c
MM
2635 /* Mark this function as a global constructor or destructor. */
2636 if (method_type == 'I')
2637 DECL_GLOBAL_CTOR_P (current_function_decl) = 1;
2638 else
2639 DECL_GLOBAL_DTOR_P (current_function_decl) = 1;
e2500fed 2640 DECL_LANG_SPECIFIC (current_function_decl)->decl_flags.u2sel = 1;
2b76013c 2641
325c3691 2642 body = begin_compound_stmt (BCS_FN_BODY);
b3f738da 2643
914653a2 2644 return body;
961ec1a5
JM
2645}
2646
2647/* Finish the process of running a particular set of global constructors
2648 or destructors. Subroutine of do_[cd]tors. */
2649
2650static void
848eed92 2651finish_objects (int method_type, int initp, tree body)
961ec1a5 2652{
914653a2 2653 tree fn;
961ec1a5 2654
c7cb8979 2655 /* Finish up. */
7a3397c7 2656 finish_compound_stmt (body);
0acf7199 2657 fn = finish_function (0);
84df082b 2658
09191b7e 2659 if (method_type == 'I')
2cc07db4 2660 {
09191b7e
JH
2661 DECL_STATIC_CONSTRUCTOR (fn) = 1;
2662 decl_init_priority_insert (fn, initp);
2cc07db4 2663 }
09191b7e
JH
2664 else
2665 {
2666 DECL_STATIC_DESTRUCTOR (fn) = 1;
2667 decl_fini_priority_insert (fn, initp);
2668 }
2669
2670 expand_or_defer_fn (fn);
961ec1a5
JM
2671}
2672
0aafb128
MM
2673/* The names of the parameters to the function created to handle
2674 initializations and destructions for objects with static storage
2675 duration. */
2676#define INITIALIZE_P_IDENTIFIER "__initialize_p"
2677#define PRIORITY_IDENTIFIER "__priority"
2678
2679/* The name of the function we create to handle initializations and
2680 destructions for objects with static storage duration. */
2681#define SSDF_IDENTIFIER "__static_initialization_and_destruction"
2682
2683/* The declaration for the __INITIALIZE_P argument. */
e2500fed 2684static GTY(()) tree initialize_p_decl;
0aafb128
MM
2685
2686/* The declaration for the __PRIORITY argument. */
e2500fed 2687static GTY(()) tree priority_decl;
0aafb128
MM
2688
2689/* The declaration for the static storage duration function. */
e2500fed 2690static GTY(()) tree ssdf_decl;
0aafb128 2691
0352cfc8
MM
2692/* All the static storage duration functions created in this
2693 translation unit. */
1bc5f355 2694static GTY(()) VEC(tree,gc) *ssdf_decls;
0352cfc8 2695
0aafb128
MM
2696/* A map from priority levels to information about that priority
2697 level. There may be many such levels, so efficient lookup is
2698 important. */
2699static splay_tree priority_info_map;
2700
2701/* Begins the generation of the function that will handle all
2702 initialization and destruction of objects with static storage
2703 duration. The function generated takes two parameters of type
2704 `int': __INITIALIZE_P and __PRIORITY. If __INITIALIZE_P is
838dfd8a 2705 nonzero, it performs initializations. Otherwise, it performs
0aafb128
MM
2706 destructions. It only performs those initializations or
2707 destructions with the indicated __PRIORITY. The generated function
c8094d83 2708 returns no value.
0aafb128
MM
2709
2710 It is assumed that this function will only be called once per
2711 translation unit. */
961ec1a5 2712
313bc2c2 2713static tree
299f79b5 2714start_static_storage_duration_function (unsigned count)
961ec1a5 2715{
0aafb128
MM
2716 tree parm_types;
2717 tree type;
313bc2c2 2718 tree body;
0352cfc8
MM
2719 char id[sizeof (SSDF_IDENTIFIER) + 1 /* '\0' */ + 32];
2720
2721 /* Create the identifier for this function. It will be of the form
2722 SSDF_IDENTIFIER_<number>. */
299f79b5 2723 sprintf (id, "%s_%u", SSDF_IDENTIFIER, count);
0aafb128
MM
2724
2725 /* Create the parameters. */
2726 parm_types = void_list_node;
e1b3e07d
MM
2727 parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
2728 parm_types = tree_cons (NULL_TREE, integer_type_node, parm_types);
0aafb128
MM
2729 type = build_function_type (void_type_node, parm_types);
2730
2731 /* Create the FUNCTION_DECL itself. */
c8094d83 2732 ssdf_decl = build_lang_decl (FUNCTION_DECL,
0352cfc8 2733 get_identifier (id),
0aafb128
MM
2734 type);
2735 TREE_PUBLIC (ssdf_decl) = 0;
2736 DECL_ARTIFICIAL (ssdf_decl) = 1;
0352cfc8
MM
2737
2738 /* Put this function in the list of functions to be called from the
2739 static constructors and destructors. */
2740 if (!ssdf_decls)
2741 {
1bc5f355 2742 ssdf_decls = VEC_alloc (tree, gc, 32);
0352cfc8
MM
2743
2744 /* Take this opportunity to initialize the map from priority
a1c65f9f 2745 numbers to information about that priority level. */
0352cfc8
MM
2746 priority_info_map = splay_tree_new (splay_tree_compare_ints,
2747 /*delete_key_fn=*/0,
2748 /*delete_value_fn=*/
2749 (splay_tree_delete_value_fn) &free);
2750
2751 /* We always need to generate functions for the
2752 DEFAULT_INIT_PRIORITY so enter it now. That way when we walk
2753 priorities later, we'll be sure to find the
2754 DEFAULT_INIT_PRIORITY. */
2755 get_priority_info (DEFAULT_INIT_PRIORITY);
2756 }
2757
1bc5f355 2758 VEC_safe_push (tree, gc, ssdf_decls, ssdf_decl);
0aafb128
MM
2759
2760 /* Create the argument list. */
8e51619a
JM
2761 initialize_p_decl = cp_build_parm_decl
2762 (get_identifier (INITIALIZE_P_IDENTIFIER), integer_type_node);
0aafb128 2763 DECL_CONTEXT (initialize_p_decl) = ssdf_decl;
0aafb128 2764 TREE_USED (initialize_p_decl) = 1;
8e51619a
JM
2765 priority_decl = cp_build_parm_decl
2766 (get_identifier (PRIORITY_IDENTIFIER), integer_type_node);
0aafb128 2767 DECL_CONTEXT (priority_decl) = ssdf_decl;
0aafb128
MM
2768 TREE_USED (priority_decl) = 1;
2769
2770 TREE_CHAIN (initialize_p_decl) = priority_decl;
2771 DECL_ARGUMENTS (ssdf_decl) = initialize_p_decl;
2772
13ef1ec5
MM
2773 /* Put the function in the global scope. */
2774 pushdecl (ssdf_decl);
2775
cd0be382 2776 /* Start the function itself. This is equivalent to declaring the
0aafb128
MM
2777 function as:
2778
c472cdfd 2779 static void __ssdf (int __initialize_p, init __priority_p);
c8094d83 2780
0aafb128
MM
2781 It is static because we only need to call this function from the
2782 various constructor and destructor functions for this module. */
058b15c1
MM
2783 start_preparsed_function (ssdf_decl,
2784 /*attrs=*/NULL_TREE,
2785 SF_PRE_PARSED);
0aafb128
MM
2786
2787 /* Set up the scope of the outermost block in the function. */
325c3691 2788 body = begin_compound_stmt (BCS_FN_BODY);
2ce3c6c6 2789
313bc2c2 2790 return body;
961ec1a5
JM
2791}
2792
0aafb128
MM
2793/* Finish the generation of the function which performs initialization
2794 and destruction of objects with static storage duration. After
2795 this point, no more such objects can be created. */
961ec1a5
JM
2796
2797static void
848eed92 2798finish_static_storage_duration_function (tree body)
961ec1a5 2799{
0aafb128 2800 /* Close out the function. */
7a3397c7 2801 finish_compound_stmt (body);
8cd2462c 2802 expand_or_defer_fn (finish_function (0));
0aafb128 2803}
961ec1a5 2804
0aafb128
MM
2805/* Return the information about the indicated PRIORITY level. If no
2806 code to handle this level has yet been generated, generate the
2807 appropriate prologue. */
961ec1a5 2808
0aafb128 2809static priority_info
848eed92 2810get_priority_info (int priority)
0aafb128
MM
2811{
2812 priority_info pi;
2813 splay_tree_node n;
2814
c8094d83 2815 n = splay_tree_lookup (priority_info_map,
0aafb128
MM
2816 (splay_tree_key) priority);
2817 if (!n)
2818 {
2819 /* Create a new priority information structure, and insert it
2820 into the map. */
0ac1b889 2821 pi = XNEW (struct priority_info_s);
0352cfc8
MM
2822 pi->initializations_p = 0;
2823 pi->destructions_p = 0;
0aafb128
MM
2824 splay_tree_insert (priority_info_map,
2825 (splay_tree_key) priority,
2826 (splay_tree_value) pi);
2827 }
2828 else
2829 pi = (priority_info) n->value;
961ec1a5 2830
0aafb128
MM
2831 return pi;
2832}
961ec1a5 2833
6cec5cb5
RG
2834/* The effective initialization priority of a DECL. */
2835
2836#define DECL_EFFECTIVE_INIT_PRIORITY(decl) \
2837 ((!DECL_HAS_INIT_PRIORITY_P (decl) || DECL_INIT_PRIORITY (decl) == 0) \
2838 ? DEFAULT_INIT_PRIORITY : DECL_INIT_PRIORITY (decl))
2839
dd36d4e1 2840/* Whether a DECL needs a guard to protect it against multiple
6cec5cb5
RG
2841 initialization. */
2842
2843#define NEEDS_GUARD_P(decl) (TREE_PUBLIC (decl) && (DECL_COMMON (decl) \
2844 || DECL_ONE_ONLY (decl) \
2845 || DECL_WEAK (decl)))
2846
e44c800e
DS
2847/* Called from one_static_initialization_or_destruction(),
2848 via walk_tree.
2849 Walks the initializer list of a global variable and looks for
2850 temporary variables (DECL_NAME() == NULL and DECL_ARTIFICIAL != 0)
2851 and that have their DECL_CONTEXT() == NULL.
2852 For each such temporary variable, set their DECL_CONTEXT() to
2853 the current function. This is necessary because otherwise
2854 some optimizers (enabled by -O2 -fprofile-arcs) might crash
2855 when trying to refer to a temporary variable that does not have
2856 it's DECL_CONTECT() properly set. */
2857static tree
2858fix_temporary_vars_context_r (tree *node,
2859 int *unused ATTRIBUTE_UNUSED,
2860 void *unused1 ATTRIBUTE_UNUSED)
2861{
2862 gcc_assert (current_function_decl);
2863
2864 if (TREE_CODE (*node) == BIND_EXPR)
2865 {
2866 tree var;
2867
2868 for (var = BIND_EXPR_VARS (*node); var; var = TREE_CHAIN (var))
2869 if (TREE_CODE (var) == VAR_DECL
2870 && !DECL_NAME (var)
2871 && DECL_ARTIFICIAL (var)
2872 && !DECL_CONTEXT (var))
2873 DECL_CONTEXT (var) = current_function_decl;
2874 }
2875
2876 return NULL_TREE;
2877}
2878
313bc2c2 2879/* Set up to handle the initialization or destruction of DECL. If
838dfd8a 2880 INITP is nonzero, we are initializing the variable. Otherwise, we
313bc2c2
MM
2881 are destroying it. */
2882
6cec5cb5
RG
2883static void
2884one_static_initialization_or_destruction (tree decl, tree init, bool initp)
313bc2c2 2885{
c395453c 2886 tree guard_if_stmt = NULL_TREE;
c395453c 2887 tree guard;
313bc2c2 2888
6cec5cb5
RG
2889 /* If we are supposed to destruct and there's a trivial destructor,
2890 nothing has to be done. */
2891 if (!initp
2892 && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
2893 return;
313bc2c2
MM
2894
2895 /* Trick the compiler into thinking we are at the file and line
2896 where DECL was declared so that error-messages make sense, and so
2897 that the debugger will show somewhat sensible file and line
2898 information. */
f31686a3 2899 input_location = DECL_SOURCE_LOCATION (decl);
313bc2c2 2900
e44c800e
DS
2901 /* Make sure temporary variables in the initialiser all have
2902 their DECL_CONTEXT() set to a value different from NULL_TREE.
2903 This can happen when global variables initialisers are built.
2904 In that case, the DECL_CONTEXT() of the global variables _AND_ of all
2905 the temporary variables that might have been generated in the
2906 accompagning initialisers is NULL_TREE, meaning the variables have been
2907 declared in the global namespace.
2908 What we want to do here is to fix that and make sure the DECL_CONTEXT()
2909 of the temporaries are set to the current function decl. */
2910 cp_walk_tree_without_duplicates (&init,
2911 fix_temporary_vars_context_r,
2912 NULL);
2913
313bc2c2
MM
2914 /* Because of:
2915
2916 [class.access.spec]
2917
2918 Access control for implicit calls to the constructors,
2919 the conversion functions, or the destructor called to
2920 create and destroy a static data member is performed as
2921 if these calls appeared in the scope of the member's
c8094d83 2922 class.
313bc2c2
MM
2923
2924 we pretend we are in a static member function of the class of
2925 which the DECL is a member. */
2926 if (member_p (decl))
2927 {
4f1c5b7d 2928 DECL_CONTEXT (current_function_decl) = DECL_CONTEXT (decl);
313bc2c2
MM
2929 DECL_STATIC_FUNCTION_P (current_function_decl) = 1;
2930 }
c8094d83 2931
c395453c
MM
2932 /* Assume we don't need a guard. */
2933 guard = NULL_TREE;
2934 /* We need a guard if this is an object with external linkage that
1f6e1acc
AS
2935 might be initialized in more than one place. (For example, a
2936 static data member of a template, when the data member requires
2937 construction.) */
6cec5cb5 2938 if (NEEDS_GUARD_P (decl))
313bc2c2 2939 {
c395453c 2940 tree guard_cond;
313bc2c2 2941
c395453c 2942 guard = get_guard (decl);
313bc2c2 2943
c395453c
MM
2944 /* When using __cxa_atexit, we just check the GUARD as we would
2945 for a local static. */
2946 if (flag_use_cxa_atexit)
2947 {
2948 /* When using __cxa_atexit, we never try to destroy
2949 anything from a static destructor. */
50bc768d 2950 gcc_assert (initp);
c395453c
MM
2951 guard_cond = get_guard_cond (guard);
2952 }
5fd893d5
MM
2953 /* If we don't have __cxa_atexit, then we will be running
2954 destructors from .fini sections, or their equivalents. So,
2955 we need to know how many times we've tried to initialize this
2956 object. We do initializations only if the GUARD is zero,
2957 i.e., if we are the first to initialize the variable. We do
2958 destructions only if the GUARD is one, i.e., if we are the
2959 last to destroy the variable. */
c395453c 2960 else if (initp)
c8094d83 2961 guard_cond
ba47d38d
AH
2962 = cp_build_binary_op (input_location,
2963 EQ_EXPR,
5ade1ed2 2964 cp_build_unary_op (PREINCREMENT_EXPR,
ba47d38d
AH
2965 guard,
2966 /*noconvert=*/1,
2967 tf_warning_or_error),
5ade1ed2
DG
2968 integer_one_node,
2969 tf_warning_or_error);
313bc2c2 2970 else
c8094d83 2971 guard_cond
ba47d38d
AH
2972 = cp_build_binary_op (input_location,
2973 EQ_EXPR,
5ade1ed2 2974 cp_build_unary_op (PREDECREMENT_EXPR,
ba47d38d
AH
2975 guard,
2976 /*noconvert=*/1,
2977 tf_warning_or_error),
5ade1ed2
DG
2978 integer_zero_node,
2979 tf_warning_or_error);
ab76ca54 2980
6cec5cb5
RG
2981 guard_if_stmt = begin_if_stmt ();
2982 finish_if_stmt_cond (guard_cond, guard_if_stmt);
313bc2c2
MM
2983 }
2984
c395453c 2985
5fd893d5
MM
2986 /* If we're using __cxa_atexit, we have not already set the GUARD,
2987 so we must do so now. */
2988 if (guard && initp && flag_use_cxa_atexit)
c395453c 2989 finish_expr_stmt (set_guard (guard));
313bc2c2 2990
6cec5cb5
RG
2991 /* Perform the initialization or destruction. */
2992 if (initp)
2993 {
2994 if (init)
3db45ab5 2995 finish_expr_stmt (init);
313bc2c2 2996
6cec5cb5 2997 /* If we're using __cxa_atexit, register a function that calls the
3db45ab5 2998 destructor for the object. */
6cec5cb5 2999 if (flag_use_cxa_atexit)
3db45ab5 3000 finish_expr_stmt (register_dtor_fn (decl));
6cec5cb5
RG
3001 }
3002 else
3003 finish_expr_stmt (build_cleanup (decl));
313bc2c2 3004
6cec5cb5
RG
3005 /* Finish the guard if-stmt, if necessary. */
3006 if (guard)
3007 {
3008 finish_then_clause (guard_if_stmt);
3009 finish_if_stmt (guard_if_stmt);
3010 }
313bc2c2
MM
3011
3012 /* Now that we're done with DECL we don't need to pretend to be a
3013 member of its class any longer. */
4f1c5b7d 3014 DECL_CONTEXT (current_function_decl) = NULL_TREE;
313bc2c2
MM
3015 DECL_STATIC_FUNCTION_P (current_function_decl) = 0;
3016}
3017
6cec5cb5
RG
3018/* Generate code to do the initialization or destruction of the decls in VARS,
3019 a TREE_LIST of VAR_DECL with static storage duration.
3020 Whether initialization or destruction is performed is specified by INITP. */
961ec1a5 3021
0aafb128 3022static void
6cec5cb5 3023do_static_initialization_or_destruction (tree vars, bool initp)
0aafb128 3024{
6cec5cb5 3025 tree node, init_if_stmt, cond;
0aafb128 3026
6cec5cb5
RG
3027 /* Build the outer if-stmt to check for initialization or destruction. */
3028 init_if_stmt = begin_if_stmt ();
3029 cond = initp ? integer_one_node : integer_zero_node;
ba47d38d
AH
3030 cond = cp_build_binary_op (input_location,
3031 EQ_EXPR,
5ade1ed2
DG
3032 initialize_p_decl,
3033 cond,
3034 tf_warning_or_error);
6cec5cb5
RG
3035 finish_if_stmt_cond (cond, init_if_stmt);
3036
3037 node = vars;
3038 do {
3039 tree decl = TREE_VALUE (node);
3040 tree priority_if_stmt;
3041 int priority;
3042 priority_info pi;
3043
3044 /* If we don't need a destructor, there's nothing to do. Avoid
3045 creating a possibly empty if-stmt. */
3046 if (!initp && TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
3047 {
3048 node = TREE_CHAIN (node);
3049 continue;
3050 }
3051
3052 /* Remember that we had an initialization or finalization at this
3053 priority. */
3054 priority = DECL_EFFECTIVE_INIT_PRIORITY (decl);
3055 pi = get_priority_info (priority);
3056 if (initp)
3057 pi->initializations_p = 1;
3058 else
3059 pi->destructions_p = 1;
3060
3061 /* Conditionalize this initialization on being in the right priority
3062 and being initializing/finalizing appropriately. */
3063 priority_if_stmt = begin_if_stmt ();
ba47d38d
AH
3064 cond = cp_build_binary_op (input_location,
3065 EQ_EXPR,
6cec5cb5 3066 priority_decl,
5ade1ed2
DG
3067 build_int_cst (NULL_TREE, priority),
3068 tf_warning_or_error);
6cec5cb5
RG
3069 finish_if_stmt_cond (cond, priority_if_stmt);
3070
3071 /* Process initializers with same priority. */
3072 for (; node
3073 && DECL_EFFECTIVE_INIT_PRIORITY (TREE_VALUE (node)) == priority;
3074 node = TREE_CHAIN (node))
3075 /* Do one initialization or destruction. */
3076 one_static_initialization_or_destruction (TREE_VALUE (node),
3db45ab5 3077 TREE_PURPOSE (node), initp);
6cec5cb5
RG
3078
3079 /* Finish up the priority if-stmt body. */
3080 finish_then_clause (priority_if_stmt);
3081 finish_if_stmt (priority_if_stmt);
3082
3083 } while (node);
3084
3085 /* Finish up the init/destruct if-stmt body. */
3086 finish_then_clause (init_if_stmt);
3087 finish_if_stmt (init_if_stmt);
961ec1a5
JM
3088}
3089
313bc2c2
MM
3090/* VARS is a list of variables with static storage duration which may
3091 need initialization and/or finalization. Remove those variables
3092 that don't really need to be initialized or finalized, and return
3093 the resulting list. The order in which the variables appear in
3094 VARS is in reverse order of the order in which they should actually
3095 be initialized. The list we return is in the unreversed order;
3096 i.e., the first variable should be initialized first. */
8d08fdba 3097
313bc2c2 3098static tree
cec24319 3099prune_vars_needing_no_initialization (tree *vars)
8d08fdba 3100{
cec24319
MM
3101 tree *var = vars;
3102 tree result = NULL_TREE;
8d08fdba 3103
cec24319 3104 while (*var)
313bc2c2 3105 {
cec24319
MM
3106 tree t = *var;
3107 tree decl = TREE_VALUE (t);
3108 tree init = TREE_PURPOSE (t);
8d2733ca 3109
313bc2c2
MM
3110 /* Deal gracefully with error. */
3111 if (decl == error_mark_node)
cec24319
MM
3112 {
3113 var = &TREE_CHAIN (t);
3114 continue;
3115 }
5566b478 3116
313bc2c2 3117 /* The only things that can be initialized are variables. */
50bc768d 3118 gcc_assert (TREE_CODE (decl) == VAR_DECL);
8d08fdba 3119
313bc2c2
MM
3120 /* If this object is not defined, we don't need to do anything
3121 here. */
3122 if (DECL_EXTERNAL (decl))
cec24319
MM
3123 {
3124 var = &TREE_CHAIN (t);
3125 continue;
3126 }
8d08fdba 3127
313bc2c2
MM
3128 /* Also, if the initializer already contains errors, we can bail
3129 out now. */
c8094d83 3130 if (init && TREE_CODE (init) == TREE_LIST
313bc2c2 3131 && value_member (error_mark_node, init))
cec24319
MM
3132 {
3133 var = &TREE_CHAIN (t);
3134 continue;
3135 }
d18c083e 3136
313bc2c2
MM
3137 /* This variable is going to need initialization and/or
3138 finalization, so we add it to the list. */
cec24319
MM
3139 *var = TREE_CHAIN (t);
3140 TREE_CHAIN (t) = result;
3141 result = t;
313bc2c2 3142 }
1139b3d8 3143
313bc2c2
MM
3144 return result;
3145}
1139b3d8 3146
313bc2c2
MM
3147/* Make sure we have told the back end about all the variables in
3148 VARS. */
0aafb128 3149
313bc2c2 3150static void
848eed92 3151write_out_vars (tree vars)
313bc2c2
MM
3152{
3153 tree v;
0aafb128 3154
313bc2c2 3155 for (v = vars; v; v = TREE_CHAIN (v))
4684cd27
MM
3156 {
3157 tree var = TREE_VALUE (v);
3158 if (!var_finalized_p (var))
3159 {
3160 import_export_decl (var);
0e6df31e 3161 rest_of_decl_compilation (var, 1, 1);
4684cd27
MM
3162 }
3163 }
0aafb128 3164}
909e536a 3165
0aafb128 3166/* Generate a static constructor (if CONSTRUCTOR_P) or destructor
44cbf6e4 3167 (otherwise) that will initialize all global objects with static
0aafb128 3168 storage duration having the indicated PRIORITY. */
73aad9b9 3169
0aafb128 3170static void
299f79b5
NS
3171generate_ctor_or_dtor_function (bool constructor_p, int priority,
3172 location_t *locus)
0aafb128
MM
3173{
3174 char function_key;
3175 tree arguments;
35b4a576 3176 tree fndecl;
914653a2 3177 tree body;
0352cfc8 3178 size_t i;
73aad9b9 3179
82a98427 3180 input_location = *locus;
93409b8c 3181 /* ??? */
2d593c86 3182 /* Was: locus->line++; */
c8094d83 3183
0aafb128
MM
3184 /* We use `I' to indicate initialization and `D' to indicate
3185 destruction. */
35b4a576 3186 function_key = constructor_p ? 'I' : 'D';
73aad9b9 3187
35b4a576
RS
3188 /* We emit the function lazily, to avoid generating empty
3189 global constructors and destructors. */
3190 body = NULL_TREE;
2c73f9f5 3191
e58a9aa1
ZL
3192 /* For Objective-C++, we may need to initialize metadata found in this module.
3193 This must be done _before_ any other static initializations. */
3194 if (c_dialect_objc () && (priority == DEFAULT_INIT_PRIORITY)
3195 && constructor_p && objc_static_init_needed_p ())
3196 {
3197 body = start_objects (function_key, priority);
fc8600f9 3198 objc_generate_static_init_call (NULL_TREE);
e58a9aa1
ZL
3199 }
3200
0aafb128
MM
3201 /* Call the static storage duration function with appropriate
3202 arguments. */
c8094d83 3203 for (i = 0; VEC_iterate (tree, ssdf_decls, i, fndecl); ++i)
1bc5f355
KH
3204 {
3205 /* Calls to pure or const functions will expand to nothing. */
3206 if (! (flags_from_decl_or_type (fndecl) & (ECF_CONST | ECF_PURE)))
3207 {
3208 if (! body)
3209 body = start_objects (function_key, priority);
3210
3211 arguments = tree_cons (NULL_TREE,
c8094d83 3212 build_int_cst (NULL_TREE, priority),
1bc5f355
KH
3213 NULL_TREE);
3214 arguments = tree_cons (NULL_TREE,
3215 build_int_cst (NULL_TREE, constructor_p),
3216 arguments);
5ade1ed2
DG
3217 finish_expr_stmt (cp_build_function_call (fndecl, arguments,
3218 tf_warning_or_error));
1bc5f355
KH
3219 }
3220 }
909e536a 3221
0aafb128 3222 /* Close out the function. */
35b4a576
RS
3223 if (body)
3224 finish_objects (function_key, priority, body);
0aafb128 3225}
44a8d0b3 3226
0aafb128 3227/* Generate constructor and destructor functions for the priority
0352cfc8 3228 indicated by N. */
44a8d0b3 3229
0aafb128 3230static int
299f79b5 3231generate_ctor_and_dtor_functions_for_priority (splay_tree_node n, void * data)
0aafb128 3232{
67f5655f 3233 location_t *locus = (location_t *) data;
0aafb128
MM
3234 int priority = (int) n->key;
3235 priority_info pi = (priority_info) n->value;
0aafb128
MM
3236
3237 /* Generate the functions themselves, but only if they are really
3238 needed. */
fc8600f9 3239 if (pi->initializations_p)
299f79b5 3240 generate_ctor_or_dtor_function (/*constructor_p=*/true, priority, locus);
fc8600f9 3241 if (pi->destructions_p)
299f79b5 3242 generate_ctor_or_dtor_function (/*constructor_p=*/false, priority, locus);
0aafb128
MM
3243
3244 /* Keep iterating. */
3245 return 0;
3246}
2ce3c6c6 3247
25c84396 3248/* Called via LANGHOOK_CALLGRAPH_ANALYZE_EXPR. It is supposed to mark
3b426391 3249 decls referenced from front-end specific constructs; it will be called
25c84396
RH
3250 only for language-specific tree nodes.
3251
3252 Here we must deal with member pointers. */
3253
3254tree
c4e622b6 3255cxx_callgraph_analyze_expr (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED)
8cd2462c 3256{
dd07abd7
RH
3257 tree t = *tp;
3258
4684cd27
MM
3259 switch (TREE_CODE (t))
3260 {
3261 case PTRMEM_CST:
3262 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (t)))
3263 cgraph_mark_needed_node (cgraph_node (PTRMEM_CST_MEMBER (t)));
3264 break;
3265 case BASELINK:
3266 if (TREE_CODE (BASELINK_FUNCTIONS (t)) == FUNCTION_DECL)
3267 cgraph_mark_needed_node (cgraph_node (BASELINK_FUNCTIONS (t)));
3268 break;
3269 case VAR_DECL:
3270 if (DECL_VTABLE_OR_VTT_P (t))
3271 {
3272 /* The ABI requires that all virtual tables be emitted
3273 whenever one of them is. */
3274 tree vtbl;
3275 for (vtbl = CLASSTYPE_VTABLES (DECL_CONTEXT (t));
3276 vtbl;
3277 vtbl = TREE_CHAIN (vtbl))
3278 mark_decl_referenced (vtbl);
3279 }
c8094d83 3280 else if (DECL_CONTEXT (t)
4684cd27
MM
3281 && TREE_CODE (DECL_CONTEXT (t)) == FUNCTION_DECL)
3282 /* If we need a static variable in a function, then we
3283 need the containing function. */
3284 mark_decl_referenced (DECL_CONTEXT (t));
3285 break;
3286 default:
3287 break;
3288 }
dd07abd7 3289
25c84396 3290 return NULL;
8cd2462c
JH
3291}
3292
6de33afa
RH
3293/* Java requires that we be able to reference a local address for a
3294 method, and not be confused by PLT entries. If hidden aliases are
3295 supported, emit one for each java function that we've emitted. */
3296
3297static void
3298build_java_method_aliases (void)
3299{
3300 struct cgraph_node *node;
3301
3302#ifndef HAVE_GAS_HIDDEN
3303 return;
3304#endif
3305
3306 for (node = cgraph_nodes; node ; node = node->next)
3307 {
3308 tree fndecl = node->decl;
3309
3310 if (TREE_ASM_WRITTEN (fndecl)
3311 && DECL_CONTEXT (fndecl)
3312 && TYPE_P (DECL_CONTEXT (fndecl))
3313 && TYPE_FOR_JAVA (DECL_CONTEXT (fndecl))
3314 && TARGET_USE_LOCAL_THUNK_ALIAS_P (fndecl))
3315 {
3316 /* Mangle the name in a predictable way; we need to reference
3317 this from a java compiled object file. */
3318 tree oid, nid, alias;
3319 const char *oname;
3320 char *nname;
3321
3322 oid = DECL_ASSEMBLER_NAME (fndecl);
3323 oname = IDENTIFIER_POINTER (oid);
3324 gcc_assert (oname[0] == '_' && oname[1] == 'Z');
3325 nname = ACONCAT (("_ZGA", oname+2, NULL));
3326 nid = get_identifier (nname);
3327
3328 alias = make_alias_for (fndecl, nid);
3329 TREE_PUBLIC (alias) = 1;
3330 DECL_VISIBILITY (alias) = VISIBILITY_HIDDEN;
3331
3332 assemble_alias (alias, oid);
3333 }
3334 }
3335}
3336
e4305460 3337/* This routine is called at the end of compilation.
0aafb128
MM
3338 Its job is to create all the code needed to initialize and
3339 destroy the global aggregates. We do the destruction
3340 first, since that way we only need to reverse the decls once. */
44a8d0b3 3341
0aafb128 3342void
e4305460 3343cp_write_global_declarations (void)
0aafb128 3344{
0aafb128 3345 tree vars;
848eed92 3346 bool reconsider;
0aafb128 3347 size_t i;
299f79b5
NS
3348 location_t locus;
3349 unsigned ssdf_count = 0;
35046a54 3350 int retries = 0;
125121e2 3351 tree decl;
8d08fdba 3352
82a98427 3353 locus = input_location;
0aafb128 3354 at_eof = 1;
faae18ab 3355
0aafb128
MM
3356 /* Bad parse errors. Just forget about it. */
3357 if (! global_bindings_p () || current_class_type || decl_namespace_list)
3358 return;
8d08fdba 3359
17211ab5
GK
3360 if (pch_file)
3361 c_common_write_pch ();
3362
2d593c86 3363 /* FIXME - huh? was input_line -= 1;*/
5566b478 3364
0aafb128
MM
3365 /* We now have to write out all the stuff we put off writing out.
3366 These include:
d2e5ee5c 3367
0aafb128 3368 o Template specializations that we have not yet instantiated,
0cbd7506 3369 but which are needed.
0aafb128 3370 o Initialization and destruction for non-local objects with
0cbd7506 3371 static storage duration. (Local objects with static storage
0aafb128
MM
3372 duration are initialized when their scope is first entered,
3373 and are cleaned up via atexit.)
c8094d83 3374 o Virtual function tables.
ea735e02 3375
0aafb128
MM
3376 All of these may cause others to be needed. For example,
3377 instantiating one function may cause another to be needed, and
0a288b9a 3378 generating the initializer for an object may cause templates to be
0aafb128 3379 instantiated, etc., etc. */
8d08fdba 3380
2a9a326b 3381 timevar_push (TV_VARCONST);
8d08fdba 3382
8fa33dfa 3383 emit_support_tinfos ();
6de9cd9a 3384
c8094d83 3385 do
0aafb128 3386 {
548502d3 3387 tree t;
2b41c040 3388 tree decl;
548502d3 3389
848eed92 3390 reconsider = false;
0aafb128 3391
1a6580ec
MM
3392 /* If there are templates that we've put off instantiating, do
3393 them now. */
35046a54 3394 instantiate_pending_templates (retries);
d34cb6a1 3395 ggc_collect ();
0aafb128 3396
6eabb241 3397 /* Write out virtual tables as required. Note that writing out
0cbd7506
MS
3398 the virtual table for a template class may cause the
3399 instantiation of members of that class. If we write out
3400 vtables then we remove the class from our list so we don't
3401 have to look at it again. */
35046a54 3402
9aad8f83 3403 while (keyed_classes != NULL_TREE
0cbd7506
MS
3404 && maybe_emit_vtables (TREE_VALUE (keyed_classes)))
3405 {
3406 reconsider = true;
3407 keyed_classes = TREE_CHAIN (keyed_classes);
3408 }
c8094d83 3409
9aad8f83
MA
3410 t = keyed_classes;
3411 if (t != NULL_TREE)
0cbd7506
MS
3412 {
3413 tree next = TREE_CHAIN (t);
3414
3415 while (next)
3416 {
3417 if (maybe_emit_vtables (TREE_VALUE (next)))
3418 {
3419 reconsider = true;
3420 TREE_CHAIN (t) = TREE_CHAIN (next);
3421 }
3422 else
3423 t = next;
3424
3425 next = TREE_CHAIN (t);
3426 }
3427 }
35046a54 3428
a260bce6 3429 /* Write out needed type info variables. We have to be careful
0cbd7506
MS
3430 looping through unemitted decls, because emit_tinfo_decl may
3431 cause other variables to be needed. New elements will be
3432 appended, and we remove from the vector those that actually
3433 get emitted. */
94214953
NS
3434 for (i = VEC_length (tree, unemitted_tinfo_decls);
3435 VEC_iterate (tree, unemitted_tinfo_decls, --i, t);)
3436 if (emit_tinfo_decl (t))
3437 {
3438 reconsider = true;
3439 VEC_unordered_remove (tree, unemitted_tinfo_decls, i);
3440 }
7267d692 3441
0aafb128 3442 /* The list of objects with static storage duration is built up
313bc2c2
MM
3443 in reverse order. We clear STATIC_AGGREGATES so that any new
3444 aggregates added during the initialization of these will be
3445 initialized in the correct order when we next come around the
3446 loop. */
cec24319 3447 vars = prune_vars_needing_no_initialization (&static_aggregates);
c472cdfd 3448
313bc2c2
MM
3449 if (vars)
3450 {
313bc2c2
MM
3451 /* We need to start a new initialization function each time
3452 through the loop. That's because we need to know which
3453 vtables have been referenced, and TREE_SYMBOL_REFERENCED
3454 isn't computed until a function is finished, and written
3b426391 3455 out. That's a deficiency in the back end. When this is
313bc2c2
MM
3456 fixed, these initialization functions could all become
3457 inline, with resulting performance improvements. */
299f79b5
NS
3458 tree ssdf_body;
3459
3460 /* Set the line and file, so that it is obviously not from
3461 the source file. */
82a98427 3462 input_location = locus;
299f79b5 3463 ssdf_body = start_static_storage_duration_function (ssdf_count);
313bc2c2
MM
3464
3465 /* Make sure the back end knows about all the variables. */
3466 write_out_vars (vars);
3467
3468 /* First generate code to do all the initializations. */
6cec5cb5
RG
3469 if (vars)
3470 do_static_initialization_or_destruction (vars, /*initp=*/true);
313bc2c2
MM
3471
3472 /* Then, generate code to do all the destructions. Do these
3473 in reverse order so that the most recently constructed
bf419747
MM
3474 variable is the first destroyed. If we're using
3475 __cxa_atexit, then we don't need to do this; functions
4c0aad2c 3476 were registered at initialization time to destroy the
bf419747 3477 local statics. */
6cec5cb5 3478 if (!flag_use_cxa_atexit && vars)
bf419747
MM
3479 {
3480 vars = nreverse (vars);
6cec5cb5 3481 do_static_initialization_or_destruction (vars, /*initp=*/false);
bf419747
MM
3482 }
3483 else
3484 vars = NULL_TREE;
313bc2c2
MM
3485
3486 /* Finish up the static storage duration function for this
3487 round. */
82a98427 3488 input_location = locus;
313bc2c2
MM
3489 finish_static_storage_duration_function (ssdf_body);
3490
3491 /* All those initializations and finalizations might cause
3492 us to need more inline functions, more template
3493 instantiations, etc. */
848eed92 3494 reconsider = true;
299f79b5 3495 ssdf_count++;
2d593c86 3496 /* ??? was: locus.line++; */
0aafb128 3497 }
c8094d83 3498
4684cd27
MM
3499 /* Go through the set of inline functions whose bodies have not
3500 been emitted yet. If out-of-line copies of these functions
3501 are required, emit them. */
125121e2 3502 for (i = 0; VEC_iterate (tree, deferred_fns, i, decl); ++i)
0aafb128 3503 {
eab5474f 3504 /* Does it need synthesizing? */
bff54b19 3505 if (DECL_DEFAULTED_FN (decl) && ! DECL_INITIAL (decl)
4847609e 3506 && (! DECL_REALLY_EXTERN (decl) || possibly_inlined_p (decl)))
0aafb128
MM
3507 {
3508 /* Even though we're already at the top-level, we push
3509 there again. That way, when we pop back a few lines
3510 hence, all of our state is restored. Otherwise,
3511 finish_function doesn't clean things up, and we end
3512 up with CURRENT_FUNCTION_DECL set. */
3513 push_to_top_level ();
3e3935a9 3514 /* The decl's location will mark where it was first
0cbd7506
MS
3515 needed. Save that so synthesize method can indicate
3516 where it was needed from, in case of error */
3e3935a9 3517 input_location = DECL_SOURCE_LOCATION (decl);
1f84ec23 3518 synthesize_method (decl);
0aafb128 3519 pop_from_top_level ();
848eed92 3520 reconsider = true;
0aafb128 3521 }
0aafb128 3522
726a989a 3523 if (!gimple_body (decl))
2f0c006e 3524 continue;
ea56c40c 3525
3b426391 3526 /* We lie to the back end, pretending that some functions
eab5474f
NS
3527 are not defined when they really are. This keeps these
3528 functions from being put out unnecessarily. But, we must
3529 stop lying when the functions are referenced, or if they
1ef0df47
MM
3530 are not comdat since they need to be put out now. If
3531 DECL_INTERFACE_KNOWN, then we have already set
3532 DECL_EXTERNAL appropriately, so there's no need to check
3533 again, and we do not want to clear DECL_EXTERNAL if a
3534 previous call to import_export_decl set it.
3db45ab5 3535
1ef0df47
MM
3536 This is done in a separate for cycle, because if some
3537 deferred function is contained in another deferred
3538 function later in deferred_fns varray,
3539 rest_of_compilation would skip this function and we
3540 really cannot expand the same function twice. */
3541 import_export_decl (decl);
4cb02ea1
MM
3542 if (DECL_NOT_REALLY_EXTERN (decl)
3543 && DECL_INITIAL (decl)
4684cd27 3544 && decl_needed_p (decl))
4cb02ea1 3545 DECL_EXTERNAL (decl) = 0;
21b0c6dc
MM
3546
3547 /* If we're going to need to write this function out, and
3548 there's already a body for it, create RTL for it now.
3549 (There might be no body if this is a method we haven't
3550 gotten around to synthesizing yet.) */
3551 if (!DECL_EXTERNAL (decl)
4684cd27 3552 && decl_needed_p (decl)
8cd2462c 3553 && !TREE_ASM_WRITTEN (decl)
4684cd27 3554 && !cgraph_node (decl)->local.finalized)
21b0c6dc 3555 {
8cd2462c
JH
3556 /* We will output the function; no longer consider it in this
3557 loop. */
3558 DECL_DEFER_OUTPUT (decl) = 0;
21b0c6dc
MM
3559 /* Generate RTL for this function now that we know we
3560 need it. */
8cd2462c 3561 expand_or_defer_fn (decl);
21b0c6dc
MM
3562 /* If we're compiling -fsyntax-only pretend that this
3563 function has been written out so that we don't try to
3564 expand it again. */
3565 if (flag_syntax_only)
3566 TREE_ASM_WRITTEN (decl) = 1;
848eed92 3567 reconsider = true;
21b0c6dc 3568 }
4cb02ea1
MM
3569 }
3570
4cb02ea1 3571 if (walk_namespaces (wrapup_globals_for_namespace, /*data=*/0))
848eed92 3572 reconsider = true;
0aafb128
MM
3573
3574 /* Static data members are just like namespace-scope globals. */
c8094d83 3575 for (i = 0; VEC_iterate (tree, pending_statics, i, decl); ++i)
0aafb128 3576 {
6c5613b0
JM
3577 if (var_finalized_p (decl) || DECL_REALLY_EXTERN (decl)
3578 /* Don't write it out if we haven't seen a definition. */
3579 || DECL_IN_AGGR_P (decl))
0aafb128
MM
3580 continue;
3581 import_export_decl (decl);
4684cd27
MM
3582 /* If this static data member is needed, provide it to the
3583 back end. */
3584 if (DECL_NOT_REALLY_EXTERN (decl) && decl_needed_p (decl))
5b767b9d 3585 DECL_EXTERNAL (decl) = 0;
0aafb128 3586 }
2b41c040
KH
3587 if (VEC_length (tree, pending_statics) != 0
3588 && wrapup_global_declarations (VEC_address (tree, pending_statics),
3589 VEC_length (tree, pending_statics)))
848eed92 3590 reconsider = true;
f6d1b84a 3591
35046a54 3592 retries++;
c8094d83 3593 }
0aafb128 3594 while (reconsider);
28cbf42c 3595
9bcb9aae 3596 /* All used inline functions must have a definition at this point. */
125121e2 3597 for (i = 0; VEC_iterate (tree, deferred_fns, i, decl); ++i)
eab5474f 3598 {
4684cd27
MM
3599 if (/* Check online inline functions that were actually used. */
3600 TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
1ef0df47
MM
3601 /* If the definition actually was available here, then the
3602 fact that the function was not defined merely represents
3603 that for some reason (use of a template repository,
3604 #pragma interface, etc.) we decided not to emit the
3605 definition here. */
3606 && !DECL_INITIAL (decl)
2f0c006e
GK
3607 /* An explicit instantiation can be used to specify
3608 that the body is in another unit. It will have
3609 already verified there was a definition. */
3610 && !DECL_EXPLICIT_INSTANTIATION (decl))
3cfabe60 3611 {
dee15844 3612 warning (0, "inline function %q+D used but never defined", decl);
96c993a8
JM
3613 /* Avoid a duplicate warning from check_global_declaration_1. */
3614 TREE_NO_WARNING (decl) = 1;
3cfabe60 3615 }
eab5474f 3616 }
c8094d83 3617
0352cfc8
MM
3618 /* We give C linkage to static constructors and destructors. */
3619 push_lang_context (lang_name_c);
3620
3621 /* Generate initialization and destruction functions for all
3622 priorities for which they are required. */
3623 if (priority_info_map)
c8094d83 3624 splay_tree_foreach (priority_info_map,
0352cfc8 3625 generate_ctor_and_dtor_functions_for_priority,
299f79b5 3626 /*data=*/&locus);
fc8600f9
MM
3627 else if (c_dialect_objc () && objc_static_init_needed_p ())
3628 /* If this is obj-c++ and we need a static init, call
3629 generate_ctor_or_dtor_function. */
3630 generate_ctor_or_dtor_function (/*constructor_p=*/true,
3631 DEFAULT_INIT_PRIORITY, &locus);
0352cfc8
MM
3632
3633 /* We're done with the splay-tree now. */
3634 if (priority_info_map)
3635 splay_tree_delete (priority_info_map);
3636
86f029aa
JM
3637 /* Generate any missing aliases. */
3638 maybe_apply_pending_pragma_weaks ();
3639
0352cfc8
MM
3640 /* We're done with static constructors, so we can go back to "C++"
3641 linkage now. */
3642 pop_lang_context ();
3643
4684cd27
MM
3644 cgraph_finalize_compilation_unit ();
3645 cgraph_optimize ();
8cd2462c 3646
0aafb128 3647 /* Now, issue warnings about static, but not defined, functions,
033ed340 3648 etc., and emit debugging information. */
0aafb128 3649 walk_namespaces (wrapup_globals_for_namespace, /*data=*/&reconsider);
2b41c040 3650 if (VEC_length (tree, pending_statics) != 0)
db5f8b93
RH
3651 {
3652 check_global_declarations (VEC_address (tree, pending_statics),
3db45ab5 3653 VEC_length (tree, pending_statics));
db5f8b93
RH
3654 emit_debug_global_declarations (VEC_address (tree, pending_statics),
3655 VEC_length (tree, pending_statics));
3656 }
b7484fbe 3657
6de33afa
RH
3658 /* Generate hidden aliases for Java. */
3659 build_java_method_aliases ();
3660
faae18ab
MS
3661 finish_repo ();
3662
f71f87f9 3663 /* The entire file is now complete. If requested, dump everything
a1c65f9f 3664 to a file. */
b7442fb5
NS
3665 {
3666 int flags;
6de9cd9a 3667 FILE *stream = dump_begin (TDI_tu, &flags);
b7442fb5
NS
3668
3669 if (stream)
3670 {
3671 dump_node (global_namespace, flags & ~TDF_SLIM, stream);
6de9cd9a 3672 dump_end (TDI_tu, stream);
b7442fb5
NS
3673 }
3674 }
c8094d83 3675
2a9a326b 3676 timevar_pop (TV_VARCONST);
8d08fdba
MS
3677
3678 if (flag_detailed_statistics)
27bb8339
JM
3679 {
3680 dump_tree_statistics ();
3681 dump_time_statistics ();
3682 }
82a98427 3683 input_location = locus;
5bd61841
MM
3684
3685#ifdef ENABLE_CHECKING
3686 validate_conversion_obstack ();
3687#endif /* ENABLE_CHECKING */
8d08fdba 3688}
51c184be 3689
018a5803
NS
3690/* FN is an OFFSET_REF, DOTSTAR_EXPR or MEMBER_REF indicating the
3691 function to call in parse-tree form; it has not yet been
3692 semantically analyzed. ARGS are the arguments to the function.
3693 They have already been semantically analyzed. */
4ba126e4
MM
3694
3695tree
3696build_offset_ref_call_from_tree (tree fn, tree args)
3697{
d17811fd
MM
3698 tree orig_fn;
3699 tree orig_args;
3700 tree expr;
018a5803 3701 tree object;
4ba126e4 3702
d17811fd
MM
3703 orig_fn = fn;
3704 orig_args = args;
018a5803 3705 object = TREE_OPERAND (fn, 0);
d17811fd
MM
3706
3707 if (processing_template_decl)
3708 {
50bc768d
NS
3709 gcc_assert (TREE_CODE (fn) == DOTSTAR_EXPR
3710 || TREE_CODE (fn) == MEMBER_REF);
d17811fd
MM
3711 if (type_dependent_expression_p (fn)
3712 || any_type_dependent_arguments_p (args))
5039610b 3713 return build_nt_call_list (fn, args);
d17811fd
MM
3714
3715 /* Transform the arguments and add the implicit "this"
3716 parameter. That must be done before the FN is transformed
3717 because we depend on the form of FN. */
3718 args = build_non_dependent_args (args);
4c38e99e 3719 object = build_non_dependent_expr (object);
d17811fd 3720 if (TREE_CODE (fn) == DOTSTAR_EXPR)
5ade1ed2 3721 object = cp_build_unary_op (ADDR_EXPR, object, 0, tf_warning_or_error);
d17811fd
MM
3722 args = tree_cons (NULL_TREE, object, args);
3723 /* Now that the arguments are done, transform FN. */
3724 fn = build_non_dependent_expr (fn);
3725 }
4ba126e4 3726
ee76b931
MM
3727 /* A qualified name corresponding to a bound pointer-to-member is
3728 represented as an OFFSET_REF:
4ba126e4
MM
3729
3730 struct B { void g(); };
3731 void (B::*p)();
3732 void B::g() { (this->*p)(); } */
d17811fd 3733 if (TREE_CODE (fn) == OFFSET_REF)
4ba126e4 3734 {
5ade1ed2
DG
3735 tree object_addr = cp_build_unary_op (ADDR_EXPR, object, 0,
3736 tf_warning_or_error);
4ba126e4
MM
3737 fn = TREE_OPERAND (fn, 1);
3738 fn = get_member_function_from_ptrfunc (&object_addr, fn);
6e9554e1 3739 args = tree_cons (NULL_TREE, object_addr, args);
4ba126e4 3740 }
4ba126e4 3741
5ade1ed2 3742 expr = cp_build_function_call (fn, args, tf_warning_or_error);
d17811fd 3743 if (processing_template_decl && expr != error_mark_node)
5039610b 3744 return build_min_non_dep_call_list (expr, orig_fn, orig_args);
d17811fd 3745 return expr;
4ba126e4 3746}
c8094d83 3747
f30432d7
MS
3748
3749void
848eed92 3750check_default_args (tree x)
f30432d7
MS
3751{
3752 tree arg = TYPE_ARG_TYPES (TREE_TYPE (x));
848eed92
GDR
3753 bool saw_def = false;
3754 int i = 0 - (TREE_CODE (TREE_TYPE (x)) == METHOD_TYPE);
f30432d7
MS
3755 for (; arg && arg != void_list_node; arg = TREE_CHAIN (arg), ++i)
3756 {
3757 if (TREE_PURPOSE (arg))
848eed92 3758 saw_def = true;
f30432d7
MS
3759 else if (saw_def)
3760 {
dee15844 3761 error ("default argument missing for parameter %P of %q+#D", i, x);
607c855e 3762 TREE_PURPOSE (arg) = error_mark_node;
f30432d7
MS
3763 }
3764 }
3765}
72b7eeff 3766
4847609e
JH
3767/* Return true if function DECL can be inlined. This is used to force
3768 instantiation of methods that might be interesting for inlining. */
3769bool
3770possibly_inlined_p (tree decl)
3771{
3772 gcc_assert (TREE_CODE (decl) == FUNCTION_DECL);
3773 if (DECL_UNINLINABLE (decl))
3774 return false;
3775 if (!optimize)
3776 return DECL_DECLARED_INLINE_P (decl);
3777 /* When optimizing, we might inline everything when flatten
3778 attribute or heuristics inlining for size or autoinlining
3779 is used. */
3780 return true;
3781}
3782
520c3081 3783/* Mark DECL (either a _DECL or a BASELINK) as "used" in the program.
7eab6e7b
MM
3784 If DECL is a specialization or implicitly declared class member,
3785 generate the actual definition. */
024f1251 3786
72b7eeff 3787void
848eed92 3788mark_used (tree decl)
72b7eeff 3789{
024f1251
MM
3790 HOST_WIDE_INT saved_processing_template_decl = 0;
3791
7eab6e7b
MM
3792 /* If DECL is a BASELINK for a single function, then treat it just
3793 like the DECL for the function. Otherwise, if the BASELINK is
3794 for an overloaded function, we don't know which function was
3795 actually used until after overload resolution. */
3796 if (TREE_CODE (decl) == BASELINK)
3797 {
3798 decl = BASELINK_FUNCTIONS (decl);
3799 if (really_overloaded_fn (decl))
3800 return;
3801 decl = OVL_CURRENT (decl);
3802 }
3803
72b7eeff 3804 TREE_USED (decl) = 1;
99f4234a
MM
3805 if (DECL_CLONED_FUNCTION_P (decl))
3806 TREE_USED (DECL_CLONED_FUNCTION (decl)) = 1;
4ad610c9
JM
3807 if (TREE_CODE (decl) == FUNCTION_DECL
3808 && DECL_DELETED_FN (decl))
3809 {
3810 error ("deleted function %q+D", decl);
3811 error ("used here");
3812 }
3db45ab5 3813 /* If we don't need a value, then we don't need to synthesize DECL. */
024f1251 3814 if (skip_evaluation)
5566b478 3815 return;
3368cdd3
JJ
3816
3817 /* If within finish_function, defer the rest until that function
3818 finishes, otherwise it might recurse. */
3819 if (defer_mark_used_calls)
3820 {
3821 VEC_safe_push (tree, gc, deferred_mark_used_calls, decl);
3822 return;
3823 }
3824
024f1251
MM
3825 /* Normally, we can wait until instantiation-time to synthesize
3826 DECL. However, if DECL is a static data member initialized with
3827 a constant, we need the value right now because a reference to
3828 such a data member is not value-dependent. */
2d22db1f
MM
3829 if (TREE_CODE (decl) == VAR_DECL
3830 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
3831 && DECL_CLASS_SCOPE_P (decl))
3832 {
3833 /* Don't try to instantiate members of dependent types. We
3834 cannot just use dependent_type_p here because this function
3835 may be called from fold_non_dependent_expr, and then we may
3836 see dependent types, even though processing_template_decl
3837 will not be set. */
3838 if (CLASSTYPE_TEMPLATE_INFO ((DECL_CONTEXT (decl)))
3839 && uses_template_parms (CLASSTYPE_TI_ARGS (DECL_CONTEXT (decl))))
3840 return;
3841 /* Pretend that we are not in a template, even if we are, so
3842 that the static data member initializer will be processed. */
3843 saved_processing_template_decl = processing_template_decl;
3844 processing_template_decl = 0;
024f1251 3845 }
3db45ab5 3846
2d22db1f 3847 if (processing_template_decl)
3db45ab5 3848 return;
eab5474f
NS
3849
3850 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
3851 && !TREE_ASM_WRITTEN (decl))
3852 /* Remember it, so we can check it was defined. */
2f0c006e
GK
3853 {
3854 if (DECL_DEFERRED_FN (decl))
3855 return;
c8094d83 3856
3e3935a9 3857 /* Remember the current location for a function we will end up
0cbd7506
MS
3858 synthesizing. Then we can inform the user where it was
3859 required in the case of error. */
3e3935a9
NS
3860 if (DECL_ARTIFICIAL (decl) && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
3861 && !DECL_THUNK_P (decl))
3862 DECL_SOURCE_LOCATION (decl) = input_location;
c8094d83 3863
4684cd27 3864 note_vague_linkage_fn (decl);
2f0c006e 3865 }
c8094d83 3866
73aad9b9 3867 /* Is it a synthesized method that needs to be synthesized? */
4f1c5b7d
MM
3868 if (TREE_CODE (decl) == FUNCTION_DECL
3869 && DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
b87d79e6 3870 && DECL_DEFAULTED_FN (decl)
4c4646b5 3871 && !DECL_THUNK_P (decl)
4f1c5b7d 3872 && ! DECL_INITIAL (decl)
39a87435
AO
3873 /* Kludge: don't synthesize for default args. Unfortunately this
3874 rules out initializers of namespace-scoped objects too, but
3875 it's sort-of ok if the implicit ctor or dtor decl keeps
3876 pointing to the class location. */
73aad9b9 3877 && current_function_decl)
db9b2174
MM
3878 {
3879 synthesize_method (decl);
3880 /* If we've already synthesized the method we don't need to
5a8613b2
MM
3881 do the instantiation test below. */
3882 }
3883 else if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
3884 && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
3885 && (!DECL_EXPLICIT_INSTANTIATION (decl)
3886 || (TREE_CODE (decl) == FUNCTION_DECL
4847609e
JH
3887 && possibly_inlined_p
3888 (DECL_TEMPLATE_RESULT (
3889 template_for_substitution (decl))))
5a8613b2
MM
3890 /* We need to instantiate static data members so that there
3891 initializers are available in integral constant
3892 expressions. */
3893 || (TREE_CODE (decl) == VAR_DECL
3894 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))))
3895 /* If this is a function or variable that is an instance of some
3896 template, we now know that we will need to actually do the
3897 instantiation. We check that DECL is not an explicit
3898 instantiation because that is not checked in instantiate_decl.
3db45ab5 3899
5a8613b2 3900 We put off instantiating functions in order to improve compile
4684cd27
MM
3901 times. Maintaining a stack of active functions is expensive,
3902 and the inliner knows to instantiate any functions it might
5a8613b2 3903 need. Therefore, we always try to defer instantiation. */
3db45ab5 3904 instantiate_decl (decl, /*defer_ok=*/true,
eba839f9 3905 /*expl_inst_class_mem_p=*/false);
024f1251
MM
3906
3907 processing_template_decl = saved_processing_template_decl;
72b7eeff 3908}
f62dbf03 3909
e2500fed 3910#include "gt-cp-decl2.h"
This page took 4.218091 seconds and 5 git commands to generate.