1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "coretypes.h"
36 #include "tree-inline.h"
53 #include "langhooks.h"
54 #include "tree-mudflap.h"
56 #include "tree-iterator.h"
57 #include "diagnostic.h"
58 #include "tree-dump.h"
63 #include "langhooks-def.h"
64 #include "pointer-set.h"
68 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
70 { NORMAL
, /* Ordinary declaration */
71 FUNCDEF
, /* Function definition */
72 PARM
, /* Declaration of parm before function body */
73 FIELD
, /* Declaration inside struct or union */
74 TYPENAME
}; /* Typename (inside cast or sizeof) */
76 /* States indicating how grokdeclarator() should handle declspecs marked
77 with __attribute__((deprecated)). An object declared as
78 __attribute__((deprecated)) suppresses warnings of uses of other
81 enum deprecated_states
{
87 /* Nonzero if we have seen an invalid cross reference
88 to a struct, union, or enum, but not yet printed the message. */
89 tree pending_invalid_xref
;
91 /* File and line to appear in the eventual error message. */
92 location_t pending_invalid_xref_location
;
94 /* True means we've initialized exception handling. */
95 bool c_eh_initialized_p
;
97 /* The file and line that the prototype came from if this is an
98 old-style definition; used for diagnostics in
99 store_parm_decls_oldstyle. */
101 static location_t current_function_prototype_locus
;
103 /* Whether this prototype was built-in. */
105 static bool current_function_prototype_built_in
;
107 /* The argument type information of this prototype. */
109 static tree current_function_prototype_arg_types
;
111 /* The argument information structure for the function currently being
114 static struct c_arg_info
*current_function_arg_info
;
116 /* The obstack on which parser and related data structures, which are
117 not live beyond their top-level declaration or definition, are
119 struct obstack parser_obstack
;
121 /* The current statement tree. */
123 static GTY(()) struct stmt_tree_s c_stmt_tree
;
125 /* State saving variables. */
129 /* True if we are currently parsing the fields of a struct or
132 static bool in_struct
;
134 /* A list of types defined in the current struct or union. */
136 static VEC(tree
,heap
) *struct_types
;
138 /* Linked list of TRANSLATION_UNIT_DECLS for the translation units
139 included in this invocation. Note that the current translation
140 unit is not included in this list. */
142 static GTY(()) tree all_translation_units
;
144 /* A list of decls to be made automatically visible in each file scope. */
145 static GTY(()) tree visible_builtins
;
147 /* Set to 0 at beginning of a function definition, set to 1 if
148 a return statement that specifies a return value is seen. */
150 int current_function_returns_value
;
152 /* Set to 0 at beginning of a function definition, set to 1 if
153 a return statement with no argument is seen. */
155 int current_function_returns_null
;
157 /* Set to 0 at beginning of a function definition, set to 1 if
158 a call to a noreturn function is seen. */
160 int current_function_returns_abnormally
;
162 /* Set to nonzero by `grokdeclarator' for a function
163 whose return type is defaulted, if warnings for this are desired. */
165 static int warn_about_return_type
;
167 /* Nonzero when the current toplevel function contains a declaration
168 of a nested function which is never defined. */
170 static bool undef_nested_function
;
172 /* True means global_bindings_p should return false even if the scope stack
173 says we are in file scope. */
174 bool c_override_global_bindings_to_false
;
177 /* Each c_binding structure describes one binding of an identifier to
178 a decl. All the decls in a scope - irrespective of namespace - are
179 chained together by the ->prev field, which (as the name implies)
180 runs in reverse order. All the decls in a given namespace bound to
181 a given identifier are chained by the ->shadowed field, which runs
182 from inner to outer scopes.
184 The ->decl field usually points to a DECL node, but there are two
185 exceptions. In the namespace of type tags, the bound entity is a
186 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
187 identifier is encountered, it is bound to error_mark_node to
188 suppress further errors about that identifier in the current
191 The ->u.type field stores the type of the declaration in this scope;
192 if NULL, the type is the type of the ->decl field. This is only of
193 relevance for objects with external or internal linkage which may
194 be redeclared in inner scopes, forming composite types that only
195 persist for the duration of those scopes. In the external scope,
196 this stores the composite of all the types declared for this
197 object, visible or not. The ->inner_comp field (used only at file
198 scope) stores whether an incomplete array type at file scope was
199 completed at an inner scope to an array size other than 1.
201 The ->u.label field is used for labels. It points to a structure
202 which stores additional information used for warnings.
204 The depth field is copied from the scope structure that holds this
205 decl. It is used to preserve the proper ordering of the ->shadowed
206 field (see bind()) and also for a handful of special-case checks.
207 Finally, the invisible bit is true for a decl which should be
208 ignored for purposes of normal name lookup, and the nested bit is
209 true for a decl that's been bound a second time in an inner scope;
210 in all such cases, the binding in the outer scope will have its
211 invisible bit true. */
213 struct GTY((chain_next ("%h.prev"))) c_binding
{
214 union GTY(()) { /* first so GTY desc can use decl */
215 tree
GTY((tag ("0"))) type
; /* the type in this scope */
216 struct c_label_vars
* GTY((tag ("1"))) label
; /* for warnings */
217 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u
;
218 tree decl
; /* the decl bound */
219 tree id
; /* the identifier it's bound to */
220 struct c_binding
*prev
; /* the previous decl in this scope */
221 struct c_binding
*shadowed
; /* the innermost decl shadowed by this one */
222 unsigned int depth
: 28; /* depth of this scope */
223 BOOL_BITFIELD invisible
: 1; /* normal lookup should ignore this binding */
224 BOOL_BITFIELD nested
: 1; /* do not set DECL_CONTEXT when popping */
225 BOOL_BITFIELD inner_comp
: 1; /* incomplete array completed in inner scope */
227 location_t locus
; /* location for nested bindings */
229 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
230 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
231 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
232 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
234 #define I_SYMBOL_BINDING(node) \
235 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
236 #define I_SYMBOL_DECL(node) \
237 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
239 #define I_TAG_BINDING(node) \
240 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
241 #define I_TAG_DECL(node) \
242 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
244 #define I_LABEL_BINDING(node) \
245 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
246 #define I_LABEL_DECL(node) \
247 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
249 /* Each C symbol points to three linked lists of c_binding structures.
250 These describe the values of the identifier in the three different
251 namespaces defined by the language. */
253 struct GTY(()) lang_identifier
{
254 struct c_common_identifier common_id
;
255 struct c_binding
*symbol_binding
; /* vars, funcs, constants, typedefs */
256 struct c_binding
*tag_binding
; /* struct/union/enum tags */
257 struct c_binding
*label_binding
; /* labels */
260 /* Validate c-lang.c's assumptions. */
261 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
262 [(sizeof(struct lang_identifier
) == C_SIZEOF_STRUCT_LANG_IDENTIFIER
) ? 1 : -1];
264 /* The resulting tree type. */
266 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
267 chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : ((union lang_tree_node *) TREE_CHAIN (&%h.generic))"))) lang_tree_node
269 union tree_node
GTY ((tag ("0"),
270 desc ("tree_node_structure (&%h)")))
272 struct lang_identifier
GTY ((tag ("1"))) identifier
;
275 /* Track bindings and other things that matter for goto warnings. For
276 efficiency, we do not gather all the decls at the point of
277 definition. Instead, we point into the bindings structure. As
278 scopes are popped, we update these structures and gather the decls
279 that matter at that time. */
281 struct GTY(()) c_spot_bindings
{
282 /* The currently open scope which holds bindings defined when the
283 label was defined or the goto statement was found. */
284 struct c_scope
*scope
;
285 /* The bindings in the scope field which were defined at the point
286 of the label or goto. This lets us look at older or newer
287 bindings in the scope, as appropriate. */
288 struct c_binding
*bindings_in_scope
;
289 /* The number of statement expressions that have started since this
290 label or goto statement was defined. This is zero if we are at
291 the same statement expression level. It is positive if we are in
292 a statement expression started since this spot. It is negative
293 if this spot was in a statement expression and we have left
296 /* Whether we started in a statement expression but are no longer in
297 it. This is set to true if stmt_exprs ever goes negative. */
301 /* This structure is used to keep track of bindings seen when a goto
302 statement is defined. This is only used if we see the goto
303 statement before we see the label. */
305 struct GTY(()) c_goto_bindings
{
306 /* The location of the goto statement. */
308 /* The bindings of the goto statement. */
309 struct c_spot_bindings goto_bindings
;
312 typedef struct c_goto_bindings
*c_goto_bindings_p
;
313 DEF_VEC_P(c_goto_bindings_p
);
314 DEF_VEC_ALLOC_P(c_goto_bindings_p
,gc
);
316 /* The additional information we keep track of for a label binding.
317 These fields are updated as scopes are popped. */
319 struct GTY(()) c_label_vars
{
320 /* The shadowed c_label_vars, when one label shadows another (which
321 can only happen using a __label__ declaration). */
322 struct c_label_vars
*shadowed
;
323 /* The bindings when the label was defined. */
324 struct c_spot_bindings label_bindings
;
325 /* A list of decls that we care about: decls about which we should
326 warn if a goto branches to this label from later in the function.
327 Decls are added to this list as scopes are popped. We only add
328 the decls that matter. */
329 VEC(tree
,gc
) *decls_in_scope
;
330 /* A list of goto statements to this label. This is only used for
331 goto statements seen before the label was defined, so that we can
332 issue appropriate warnings for them. */
333 VEC(c_goto_bindings_p
,gc
) *gotos
;
336 /* Each c_scope structure describes the complete contents of one
337 scope. Four scopes are distinguished specially: the innermost or
338 current scope, the innermost function scope, the file scope (always
339 the second to outermost) and the outermost or external scope.
341 Most declarations are recorded in the current scope.
343 All normal label declarations are recorded in the innermost
344 function scope, as are bindings of undeclared identifiers to
345 error_mark_node. (GCC permits nested functions as an extension,
346 hence the 'innermost' qualifier.) Explicitly declared labels
347 (using the __label__ extension) appear in the current scope.
349 Being in the file scope (current_scope == file_scope) causes
350 special behavior in several places below. Also, under some
351 conditions the Objective-C front end records declarations in the
352 file scope even though that isn't the current scope.
354 All declarations with external linkage are recorded in the external
355 scope, even if they aren't visible there; this models the fact that
356 such declarations are visible to the entire program, and (with a
357 bit of cleverness, see pushdecl) allows diagnosis of some violations
358 of C99 6.2.2p7 and 6.2.7p2:
360 If, within the same translation unit, the same identifier appears
361 with both internal and external linkage, the behavior is
364 All declarations that refer to the same object or function shall
365 have compatible type; otherwise, the behavior is undefined.
367 Initially only the built-in declarations, which describe compiler
368 intrinsic functions plus a subset of the standard library, are in
371 The order of the blocks list matters, and it is frequently appended
372 to. To avoid having to walk all the way to the end of the list on
373 each insertion, or reverse the list later, we maintain a pointer to
374 the last list entry. (FIXME: It should be feasible to use a reversed
377 The bindings list is strictly in reverse order of declarations;
378 pop_scope relies on this. */
381 struct GTY((chain_next ("%h.outer"))) c_scope
{
382 /* The scope containing this one. */
383 struct c_scope
*outer
;
385 /* The next outermost function scope. */
386 struct c_scope
*outer_function
;
388 /* All bindings in this scope. */
389 struct c_binding
*bindings
;
391 /* For each scope (except the global one), a chain of BLOCK nodes
392 for all the scopes that were entered and exited one level down. */
396 /* The depth of this scope. Used to keep the ->shadowed chain of
397 bindings sorted innermost to outermost. */
398 unsigned int depth
: 28;
400 /* True if we are currently filling this scope with parameter
402 BOOL_BITFIELD parm_flag
: 1;
404 /* True if we saw [*] in this scope. Used to give an error messages
405 if these appears in a function definition. */
406 BOOL_BITFIELD had_vla_unspec
: 1;
408 /* True if we already complained about forward parameter decls
409 in this scope. This prevents double warnings on
410 foo (int a; int b; ...) */
411 BOOL_BITFIELD warned_forward_parm_decls
: 1;
413 /* True if this is the outermost block scope of a function body.
414 This scope contains the parameters, the local variables declared
415 in the outermost block, and all the labels (except those in
416 nested functions, or declared at block scope with __label__). */
417 BOOL_BITFIELD function_body
: 1;
419 /* True means make a BLOCK for this scope no matter what. */
420 BOOL_BITFIELD keep
: 1;
422 /* True means that an unsuffixed float constant is _Decimal64. */
423 BOOL_BITFIELD float_const_decimal64
: 1;
425 /* True if this scope has any label bindings. This is used to speed
426 up searching for labels when popping scopes, particularly since
427 labels are normally only found at function scope. */
428 BOOL_BITFIELD has_label_bindings
: 1;
431 /* The scope currently in effect. */
433 static GTY(()) struct c_scope
*current_scope
;
435 /* The innermost function scope. Ordinary (not explicitly declared)
436 labels, bindings to error_mark_node, and the lazily-created
437 bindings of __func__ and its friends get this scope. */
439 static GTY(()) struct c_scope
*current_function_scope
;
441 /* The C file scope. This is reset for each input translation unit. */
443 static GTY(()) struct c_scope
*file_scope
;
445 /* The outermost scope. This is used for all declarations with
446 external linkage, and only these, hence the name. */
448 static GTY(()) struct c_scope
*external_scope
;
450 /* A chain of c_scope structures awaiting reuse. */
452 static GTY((deletable
)) struct c_scope
*scope_freelist
;
454 /* A chain of c_binding structures awaiting reuse. */
456 static GTY((deletable
)) struct c_binding
*binding_freelist
;
458 /* Append VAR to LIST in scope SCOPE. */
459 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
460 struct c_scope *s_ = (scope); \
462 if (s_->list##_last) \
463 BLOCK_CHAIN (s_->list##_last) = d_; \
466 s_->list##_last = d_; \
469 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
470 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
471 struct c_scope *t_ = (tscope); \
472 struct c_scope *f_ = (fscope); \
474 BLOCK_CHAIN (t_->to##_last) = f_->from; \
477 t_->to##_last = f_->from##_last; \
480 /* A c_inline_static structure stores details of a static identifier
481 referenced in a definition of a function that may be an inline
482 definition if no subsequent declaration of that function uses
483 "extern" or does not use "inline". */
485 struct GTY((chain_next ("%h.next"))) c_inline_static
{
486 /* The location for a diagnostic. */
489 /* The function that may be an inline definition. */
492 /* The object or function referenced. */
495 /* What sort of reference this is. */
496 enum c_inline_static_type type
;
498 /* The next such structure or NULL. */
499 struct c_inline_static
*next
;
502 /* List of static identifiers used or referenced in functions that may
503 be inline definitions. */
504 static GTY(()) struct c_inline_static
*c_inline_statics
;
506 /* True means unconditionally make a BLOCK for the next scope pushed. */
508 static bool keep_next_level_flag
;
510 /* True means the next call to push_scope will be the outermost scope
511 of a function body, so do not push a new scope, merely cease
512 expecting parameter decls. */
514 static bool next_is_function_body
;
516 /* Forward declarations. */
517 static tree
lookup_name_in_scope (tree
, struct c_scope
*);
518 static tree
c_make_fname_decl (location_t
, tree
, int);
519 static tree
grokdeclarator (const struct c_declarator
*,
520 struct c_declspecs
*,
521 enum decl_context
, bool, tree
*, tree
*, tree
*,
522 bool *, enum deprecated_states
);
523 static tree
grokparms (struct c_arg_info
*, bool);
524 static void layout_array_type (tree
);
526 /* T is a statement. Add it to the statement-tree. This is the
527 C/ObjC version--C++ has a slightly different version of this
533 enum tree_code code
= TREE_CODE (t
);
535 if (CAN_HAVE_LOCATION_P (t
) && code
!= LABEL_EXPR
)
537 if (!EXPR_HAS_LOCATION (t
))
538 SET_EXPR_LOCATION (t
, input_location
);
541 if (code
== LABEL_EXPR
|| code
== CASE_LABEL_EXPR
)
542 STATEMENT_LIST_HAS_LABEL (cur_stmt_list
) = 1;
544 /* Add T to the statement-tree. Non-side-effect statements need to be
545 recorded during statement expressions. */
546 append_to_statement_list_force (t
, &cur_stmt_list
);
553 c_print_identifier (FILE *file
, tree node
, int indent
)
555 print_node (file
, "symbol", I_SYMBOL_DECL (node
), indent
+ 4);
556 print_node (file
, "tag", I_TAG_DECL (node
), indent
+ 4);
557 print_node (file
, "label", I_LABEL_DECL (node
), indent
+ 4);
558 if (C_IS_RESERVED_WORD (node
) && C_RID_CODE (node
) != RID_CXX_COMPAT_WARN
)
560 tree rid
= ridpointers
[C_RID_CODE (node
)];
561 indent_to (file
, indent
+ 4);
562 fprintf (file
, "rid %p \"%s\"",
563 (void *) rid
, IDENTIFIER_POINTER (rid
));
567 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
568 which may be any of several kinds of DECL or TYPE or error_mark_node,
569 in the scope SCOPE. */
571 bind (tree name
, tree decl
, struct c_scope
*scope
, bool invisible
,
572 bool nested
, location_t locus
)
574 struct c_binding
*b
, **here
;
576 if (binding_freelist
)
578 b
= binding_freelist
;
579 binding_freelist
= b
->prev
;
582 b
= GGC_NEW (struct c_binding
);
587 b
->depth
= scope
->depth
;
588 b
->invisible
= invisible
;
595 b
->prev
= scope
->bindings
;
601 switch (TREE_CODE (decl
))
603 case LABEL_DECL
: here
= &I_LABEL_BINDING (name
); break;
606 case RECORD_TYPE
: here
= &I_TAG_BINDING (name
); break;
612 case ERROR_MARK
: here
= &I_SYMBOL_BINDING (name
); break;
618 /* Locate the appropriate place in the chain of shadowed decls
619 to insert this binding. Normally, scope == current_scope and
620 this does nothing. */
621 while (*here
&& (*here
)->depth
> scope
->depth
)
622 here
= &(*here
)->shadowed
;
628 /* Clear the binding structure B, stick it on the binding_freelist,
629 and return the former value of b->prev. This is used by pop_scope
630 and get_parm_info to iterate destructively over all the bindings
631 from a given scope. */
632 static struct c_binding
*
633 free_binding_and_advance (struct c_binding
*b
)
635 struct c_binding
*prev
= b
->prev
;
637 memset (b
, 0, sizeof (struct c_binding
));
638 b
->prev
= binding_freelist
;
639 binding_freelist
= b
;
644 /* Bind a label. Like bind, but skip fields which aren't used for
645 labels, and add the LABEL_VARS value. */
647 bind_label (tree name
, tree label
, struct c_scope
*scope
,
648 struct c_label_vars
*label_vars
)
652 bind (name
, label
, scope
, /*invisible=*/false, /*nested=*/false,
655 scope
->has_label_bindings
= true;
658 gcc_assert (b
->decl
== label
);
659 label_vars
->shadowed
= b
->u
.label
;
660 b
->u
.label
= label_vars
;
663 /* Hook called at end of compilation to assume 1 elt
664 for a file-scope tentative array defn that wasn't complete before. */
667 c_finish_incomplete_decl (tree decl
)
669 if (TREE_CODE (decl
) == VAR_DECL
)
671 tree type
= TREE_TYPE (decl
);
672 if (type
!= error_mark_node
673 && TREE_CODE (type
) == ARRAY_TYPE
674 && !DECL_EXTERNAL (decl
)
675 && TYPE_DOMAIN (type
) == 0)
677 warning_at (DECL_SOURCE_LOCATION (decl
),
678 0, "array %q+D assumed to have one element", decl
);
680 complete_array_type (&TREE_TYPE (decl
), NULL_TREE
, true);
682 layout_decl (decl
, 0);
687 /* Record that inline function FUNC contains a reference (location
688 LOC) to static DECL (file-scope or function-local according to
692 record_inline_static (location_t loc
, tree func
, tree decl
,
693 enum c_inline_static_type type
)
695 struct c_inline_static
*csi
= GGC_NEW (struct c_inline_static
);
697 csi
->function
= func
;
698 csi
->static_decl
= decl
;
700 csi
->next
= c_inline_statics
;
701 c_inline_statics
= csi
;
704 /* Check for references to static declarations in inline functions at
705 the end of the translation unit and diagnose them if the functions
706 are still inline definitions. */
709 check_inline_statics (void)
711 struct c_inline_static
*csi
;
712 for (csi
= c_inline_statics
; csi
; csi
= csi
->next
)
714 if (DECL_EXTERNAL (csi
->function
))
718 pedwarn (csi
->location
, 0,
719 "%qD is static but used in inline function %qD "
720 "which is not static", csi
->static_decl
, csi
->function
);
723 pedwarn (csi
->location
, 0,
724 "%q+D is static but declared in inline function %qD "
725 "which is not static", csi
->static_decl
, csi
->function
);
731 c_inline_statics
= NULL
;
734 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
735 for the current state, otherwise set it to uninitialized. */
738 set_spot_bindings (struct c_spot_bindings
*p
, bool defining
)
742 p
->scope
= current_scope
;
743 p
->bindings_in_scope
= current_scope
->bindings
;
748 p
->bindings_in_scope
= NULL
;
751 p
->left_stmt_expr
= false;
754 /* Return true if we will want to say something if a goto statement
758 decl_jump_unsafe (tree decl
)
760 if (decl
== error_mark_node
|| TREE_TYPE (decl
) == error_mark_node
)
763 /* Always warn about crossing variably modified types. */
764 if ((TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == TYPE_DECL
)
765 && variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
768 /* Otherwise, only warn if -Wgoto-misses-init and this is an
769 initialized automatic decl. */
770 if (warn_jump_misses_init
771 && TREE_CODE (decl
) == VAR_DECL
772 && !TREE_STATIC (decl
)
773 && DECL_INITIAL (decl
) != NULL_TREE
)
779 /* Update spot bindings P as we pop out of SCOPE. Return true if we
780 should push decls for a label. */
783 update_spot_bindings (struct c_scope
*scope
, struct c_spot_bindings
*p
)
785 if (p
->scope
!= scope
)
787 /* This label or goto is defined in some other scope, or it is a
788 label which is not yet defined. There is nothing to
793 /* Adjust the spot bindings to refer to the bindings already defined
794 in the enclosing scope. */
795 p
->scope
= scope
->outer
;
796 p
->bindings_in_scope
= p
->scope
->bindings
;
801 /* The Objective-C front-end often needs to determine the current scope. */
804 objc_get_current_scope (void)
806 return current_scope
;
809 /* The following function is used only by Objective-C. It needs to live here
810 because it accesses the innards of c_scope. */
813 objc_mark_locals_volatile (void *enclosing_blk
)
815 struct c_scope
*scope
;
818 for (scope
= current_scope
;
819 scope
&& scope
!= enclosing_blk
;
820 scope
= scope
->outer
)
822 for (b
= scope
->bindings
; b
; b
= b
->prev
)
823 objc_volatilize_decl (b
->decl
);
825 /* Do not climb up past the current function. */
826 if (scope
->function_body
)
831 /* Nonzero if we are currently in file scope. */
834 global_bindings_p (void)
836 return (current_scope
== file_scope
&& !c_override_global_bindings_to_false
842 keep_next_level (void)
844 keep_next_level_flag
= true;
847 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
850 set_float_const_decimal64 (void)
852 current_scope
->float_const_decimal64
= true;
855 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
858 clear_float_const_decimal64 (void)
860 current_scope
->float_const_decimal64
= false;
863 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
866 float_const_decimal64_p (void)
868 return current_scope
->float_const_decimal64
;
871 /* Identify this scope as currently being filled with parameters. */
874 declare_parm_level (void)
876 current_scope
->parm_flag
= true;
882 if (next_is_function_body
)
884 /* This is the transition from the parameters to the top level
885 of the function body. These are the same scope
886 (C99 6.2.1p4,6) so we do not push another scope structure.
887 next_is_function_body is set only by store_parm_decls, which
888 in turn is called when and only when we are about to
889 encounter the opening curly brace for the function body.
891 The outermost block of a function always gets a BLOCK node,
892 because the debugging output routines expect that each
893 function has at least one BLOCK. */
894 current_scope
->parm_flag
= false;
895 current_scope
->function_body
= true;
896 current_scope
->keep
= true;
897 current_scope
->outer_function
= current_function_scope
;
898 current_function_scope
= current_scope
;
900 keep_next_level_flag
= false;
901 next_is_function_body
= false;
903 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
904 if (current_scope
->outer
)
905 current_scope
->float_const_decimal64
906 = current_scope
->outer
->float_const_decimal64
;
908 current_scope
->float_const_decimal64
= false;
912 struct c_scope
*scope
;
915 scope
= scope_freelist
;
916 scope_freelist
= scope
->outer
;
919 scope
= GGC_CNEW (struct c_scope
);
921 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
923 scope
->float_const_decimal64
= current_scope
->float_const_decimal64
;
925 scope
->float_const_decimal64
= false;
927 scope
->keep
= keep_next_level_flag
;
928 scope
->outer
= current_scope
;
929 scope
->depth
= current_scope
? (current_scope
->depth
+ 1) : 0;
931 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
933 if (current_scope
&& scope
->depth
== 0)
936 sorry ("GCC supports only %u nested scopes", scope
->depth
);
939 current_scope
= scope
;
940 keep_next_level_flag
= false;
944 /* This is called when we are leaving SCOPE. For each label defined
945 in SCOPE, add any appropriate decls to its decls_in_scope fields.
946 These are the decls whose initialization will be skipped by a goto
947 later in the function. */
950 update_label_decls (struct c_scope
*scope
)
957 if (s
->has_label_bindings
)
961 for (b
= s
->bindings
; b
!= NULL
; b
= b
->prev
)
963 struct c_label_vars
*label_vars
;
964 struct c_binding
*b1
;
966 struct c_goto_bindings
*g
;
968 if (TREE_CODE (b
->decl
) != LABEL_DECL
)
970 label_vars
= b
->u
.label
;
972 b1
= label_vars
->label_bindings
.bindings_in_scope
;
973 if (update_spot_bindings (scope
, &label_vars
->label_bindings
))
975 /* This label is defined in this scope. */
976 for (; b1
!= NULL
; b1
= b1
->prev
)
978 /* A goto from later in the function to this
979 label will never see the initialization of
980 B1, if any. Save it to issue a warning if
982 if (decl_jump_unsafe (b1
->decl
))
983 VEC_safe_push (tree
, gc
, label_vars
->decls_in_scope
,
988 /* Update the bindings of any goto statements associated
991 VEC_iterate (c_goto_bindings_p
, label_vars
->gotos
, ix
, g
);
993 update_spot_bindings (scope
, &g
->goto_bindings
);
997 /* Don't search beyond the current function. */
998 if (s
== current_function_scope
)
1005 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1008 set_type_context (tree type
, tree context
)
1010 for (type
= TYPE_MAIN_VARIANT (type
); type
;
1011 type
= TYPE_NEXT_VARIANT (type
))
1012 TYPE_CONTEXT (type
) = context
;
1015 /* Exit a scope. Restore the state of the identifier-decl mappings
1016 that were in effect when this scope was entered. Return a BLOCK
1017 node containing all the DECLs in this scope that are of interest
1018 to debug info generation. */
1023 struct c_scope
*scope
= current_scope
;
1024 tree block
, context
, p
;
1025 struct c_binding
*b
;
1027 bool functionbody
= scope
->function_body
;
1028 bool keep
= functionbody
|| scope
->keep
|| scope
->bindings
;
1030 update_label_decls (scope
);
1032 /* If appropriate, create a BLOCK to record the decls for the life
1033 of this function. */
1037 block
= make_node (BLOCK
);
1038 BLOCK_SUBBLOCKS (block
) = scope
->blocks
;
1039 TREE_USED (block
) = 1;
1041 /* In each subblock, record that this is its superior. */
1042 for (p
= scope
->blocks
; p
; p
= BLOCK_CHAIN (p
))
1043 BLOCK_SUPERCONTEXT (p
) = block
;
1045 BLOCK_VARS (block
) = 0;
1048 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1049 scope must be set so that they point to the appropriate
1050 construct, i.e. either to the current FUNCTION_DECL node, or
1051 else to the BLOCK node we just constructed.
1053 Note that for tagged types whose scope is just the formal
1054 parameter list for some function type specification, we can't
1055 properly set their TYPE_CONTEXTs here, because we don't have a
1056 pointer to the appropriate FUNCTION_TYPE node readily available
1057 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1058 type nodes get set in `grokdeclarator' as soon as we have created
1059 the FUNCTION_TYPE node which will represent the "scope" for these
1060 "parameter list local" tagged types. */
1061 if (scope
->function_body
)
1062 context
= current_function_decl
;
1063 else if (scope
== file_scope
)
1065 tree file_decl
= build_decl (UNKNOWN_LOCATION
,
1066 TRANSLATION_UNIT_DECL
, 0, 0);
1067 TREE_CHAIN (file_decl
) = all_translation_units
;
1068 all_translation_units
= file_decl
;
1069 context
= file_decl
;
1074 /* Clear all bindings in this scope. */
1075 for (b
= scope
->bindings
; b
; b
= free_binding_and_advance (b
))
1078 switch (TREE_CODE (p
))
1081 /* Warnings for unused labels, errors for undefined labels. */
1082 if (TREE_USED (p
) && !DECL_INITIAL (p
))
1084 error ("label %q+D used but not defined", p
);
1085 DECL_INITIAL (p
) = error_mark_node
;
1088 warn_for_unused_label (p
);
1090 /* Labels go in BLOCK_VARS. */
1091 TREE_CHAIN (p
) = BLOCK_VARS (block
);
1092 BLOCK_VARS (block
) = p
;
1093 gcc_assert (I_LABEL_BINDING (b
->id
) == b
);
1094 I_LABEL_BINDING (b
->id
) = b
->shadowed
;
1096 /* Also pop back to the shadowed label_vars. */
1097 release_tree_vector (b
->u
.label
->decls_in_scope
);
1098 b
->u
.label
= b
->u
.label
->shadowed
;
1104 set_type_context (p
, context
);
1106 /* Types may not have tag-names, in which case the type
1107 appears in the bindings list with b->id NULL. */
1110 gcc_assert (I_TAG_BINDING (b
->id
) == b
);
1111 I_TAG_BINDING (b
->id
) = b
->shadowed
;
1116 /* Propagate TREE_ADDRESSABLE from nested functions to their
1117 containing functions. */
1118 if (!TREE_ASM_WRITTEN (p
)
1119 && DECL_INITIAL (p
) != 0
1120 && TREE_ADDRESSABLE (p
)
1121 && DECL_ABSTRACT_ORIGIN (p
) != 0
1122 && DECL_ABSTRACT_ORIGIN (p
) != p
)
1123 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p
)) = 1;
1124 if (!DECL_EXTERNAL (p
)
1125 && !DECL_INITIAL (p
)
1126 && scope
!= file_scope
1127 && scope
!= external_scope
)
1129 error ("nested function %q+D declared but never defined", p
);
1130 undef_nested_function
= true;
1132 else if (DECL_DECLARED_INLINE_P (p
)
1134 && !DECL_INITIAL (p
))
1136 /* C99 6.7.4p6: "a function with external linkage... declared
1137 with an inline function specifier ... shall also be defined
1138 in the same translation unit." */
1139 if (!flag_gnu89_inline
)
1140 pedwarn (input_location
, 0,
1141 "inline function %q+D declared but never defined", p
);
1142 DECL_EXTERNAL (p
) = 1;
1148 /* Warnings for unused variables. */
1150 && !TREE_NO_WARNING (p
)
1151 && !DECL_IN_SYSTEM_HEADER (p
)
1153 && !DECL_ARTIFICIAL (p
)
1154 && scope
!= file_scope
1155 && scope
!= external_scope
)
1156 warning (OPT_Wunused_variable
, "unused variable %q+D", p
);
1160 error ("type of array %q+D completed incompatibly with"
1161 " implicit initialization", p
);
1168 /* All of these go in BLOCK_VARS, but only if this is the
1169 binding in the home scope. */
1172 TREE_CHAIN (p
) = BLOCK_VARS (block
);
1173 BLOCK_VARS (block
) = p
;
1175 else if (VAR_OR_FUNCTION_DECL_P (p
))
1177 /* For block local externs add a special
1178 DECL_EXTERNAL decl for debug info generation. */
1179 tree extp
= copy_node (p
);
1181 DECL_EXTERNAL (extp
) = 1;
1182 TREE_STATIC (extp
) = 0;
1183 TREE_PUBLIC (extp
) = 1;
1184 DECL_INITIAL (extp
) = NULL_TREE
;
1185 DECL_LANG_SPECIFIC (extp
) = NULL
;
1186 DECL_CONTEXT (extp
) = current_function_decl
;
1187 if (TREE_CODE (p
) == FUNCTION_DECL
)
1189 DECL_RESULT (extp
) = NULL_TREE
;
1190 DECL_SAVED_TREE (extp
) = NULL_TREE
;
1191 DECL_STRUCT_FUNCTION (extp
) = NULL
;
1193 if (b
->locus
!= UNKNOWN_LOCATION
)
1194 DECL_SOURCE_LOCATION (extp
) = b
->locus
;
1195 TREE_CHAIN (extp
) = BLOCK_VARS (block
);
1196 BLOCK_VARS (block
) = extp
;
1198 /* If this is the file scope, and we are processing more
1199 than one translation unit in this compilation, set
1200 DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
1201 This makes same_translation_unit_p work, and causes
1202 static declarations to be given disambiguating suffixes. */
1203 if (scope
== file_scope
&& num_in_fnames
> 1)
1205 DECL_CONTEXT (p
) = context
;
1206 if (TREE_CODE (p
) == TYPE_DECL
)
1207 set_type_context (TREE_TYPE (p
), context
);
1211 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1212 already been put there by store_parm_decls. Unused-
1213 parameter warnings are handled by function.c.
1214 error_mark_node obviously does not go in BLOCK_VARS and
1215 does not get unused-variable warnings. */
1218 /* It is possible for a decl not to have a name. We get
1219 here with b->id NULL in this case. */
1222 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
1223 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
1224 if (b
->shadowed
&& b
->shadowed
->u
.type
)
1225 TREE_TYPE (b
->shadowed
->decl
) = b
->shadowed
->u
.type
;
1235 /* Dispose of the block that we just made inside some higher level. */
1236 if ((scope
->function_body
|| scope
== file_scope
) && context
)
1238 DECL_INITIAL (context
) = block
;
1239 BLOCK_SUPERCONTEXT (block
) = context
;
1241 else if (scope
->outer
)
1244 SCOPE_LIST_APPEND (scope
->outer
, blocks
, block
);
1245 /* If we did not make a block for the scope just exited, any
1246 blocks made for inner scopes must be carried forward so they
1247 will later become subblocks of something else. */
1248 else if (scope
->blocks
)
1249 SCOPE_LIST_CONCAT (scope
->outer
, blocks
, scope
, blocks
);
1252 /* Pop the current scope, and free the structure for reuse. */
1253 current_scope
= scope
->outer
;
1254 if (scope
->function_body
)
1255 current_function_scope
= scope
->outer_function
;
1257 memset (scope
, 0, sizeof (struct c_scope
));
1258 scope
->outer
= scope_freelist
;
1259 scope_freelist
= scope
;
1265 push_file_scope (void)
1273 file_scope
= current_scope
;
1275 start_fname_decls ();
1277 for (decl
= visible_builtins
; decl
; decl
= TREE_CHAIN (decl
))
1278 bind (DECL_NAME (decl
), decl
, file_scope
,
1279 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl
));
1283 pop_file_scope (void)
1285 /* In case there were missing closebraces, get us back to the global
1287 while (current_scope
!= file_scope
)
1290 /* __FUNCTION__ is defined at file scope (""). This
1291 call may not be necessary as my tests indicate it
1292 still works without it. */
1293 finish_fname_decls ();
1295 check_inline_statics ();
1297 /* This is the point to write out a PCH if we're doing that.
1298 In that case we do not want to do anything else. */
1301 c_common_write_pch ();
1305 /* Pop off the file scope and close this translation unit. */
1309 maybe_apply_pending_pragma_weaks ();
1310 cgraph_finalize_compilation_unit ();
1313 /* Adjust the bindings for the start of a statement expression. */
1316 c_bindings_start_stmt_expr (struct c_spot_bindings
* switch_bindings
)
1318 struct c_scope
*scope
;
1320 for (scope
= current_scope
; scope
!= NULL
; scope
= scope
->outer
)
1322 struct c_binding
*b
;
1324 if (!scope
->has_label_bindings
)
1327 for (b
= scope
->bindings
; b
!= NULL
; b
= b
->prev
)
1329 struct c_label_vars
*label_vars
;
1331 struct c_goto_bindings
*g
;
1333 if (TREE_CODE (b
->decl
) != LABEL_DECL
)
1335 label_vars
= b
->u
.label
;
1336 ++label_vars
->label_bindings
.stmt_exprs
;
1338 VEC_iterate (c_goto_bindings_p
, label_vars
->gotos
, ix
, g
);
1340 ++g
->goto_bindings
.stmt_exprs
;
1344 if (switch_bindings
!= NULL
)
1345 ++switch_bindings
->stmt_exprs
;
1348 /* Adjust the bindings for the end of a statement expression. */
1351 c_bindings_end_stmt_expr (struct c_spot_bindings
*switch_bindings
)
1353 struct c_scope
*scope
;
1355 for (scope
= current_scope
; scope
!= NULL
; scope
= scope
->outer
)
1357 struct c_binding
*b
;
1359 if (!scope
->has_label_bindings
)
1362 for (b
= scope
->bindings
; b
!= NULL
; b
= b
->prev
)
1364 struct c_label_vars
*label_vars
;
1366 struct c_goto_bindings
*g
;
1368 if (TREE_CODE (b
->decl
) != LABEL_DECL
)
1370 label_vars
= b
->u
.label
;
1371 --label_vars
->label_bindings
.stmt_exprs
;
1372 if (label_vars
->label_bindings
.stmt_exprs
< 0)
1374 label_vars
->label_bindings
.left_stmt_expr
= true;
1375 label_vars
->label_bindings
.stmt_exprs
= 0;
1378 VEC_iterate (c_goto_bindings_p
, label_vars
->gotos
, ix
, g
);
1381 --g
->goto_bindings
.stmt_exprs
;
1382 if (g
->goto_bindings
.stmt_exprs
< 0)
1384 g
->goto_bindings
.left_stmt_expr
= true;
1385 g
->goto_bindings
.stmt_exprs
= 0;
1391 if (switch_bindings
!= NULL
)
1393 --switch_bindings
->stmt_exprs
;
1394 gcc_assert (switch_bindings
->stmt_exprs
>= 0);
1398 /* Push a definition or a declaration of struct, union or enum tag "name".
1399 "type" should be the type node.
1400 We assume that the tag "name" is not already defined, and has a location
1403 Note that the definition may really be just a forward reference.
1404 In that case, the TYPE_SIZE will be zero. */
1407 pushtag (location_t loc
, tree name
, tree type
)
1409 /* Record the identifier as the type's name if it has none. */
1410 if (name
&& !TYPE_NAME (type
))
1411 TYPE_NAME (type
) = name
;
1412 bind (name
, type
, current_scope
, /*invisible=*/false, /*nested=*/false, loc
);
1414 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1415 tagged type we just added to the current scope. This fake
1416 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1417 to output a representation of a tagged type, and it also gives
1418 us a convenient place to record the "scope start" address for the
1421 TYPE_STUB_DECL (type
) = pushdecl (build_decl (loc
,
1422 TYPE_DECL
, NULL_TREE
, type
));
1424 /* An approximation for now, so we can tell this is a function-scope tag.
1425 This will be updated in pop_scope. */
1426 TYPE_CONTEXT (type
) = DECL_CONTEXT (TYPE_STUB_DECL (type
));
1428 if (warn_cxx_compat
&& name
!= NULL_TREE
)
1430 struct c_binding
*b
= I_SYMBOL_BINDING (name
);
1433 && b
->decl
!= NULL_TREE
1434 && TREE_CODE (b
->decl
) == TYPE_DECL
1435 && (B_IN_CURRENT_SCOPE (b
)
1436 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
1437 && (TYPE_MAIN_VARIANT (TREE_TYPE (b
->decl
))
1438 != TYPE_MAIN_VARIANT (type
)))
1440 warning_at (loc
, OPT_Wc___compat
,
1441 ("using %qD as both a typedef and a tag is "
1444 if (b
->locus
!= UNKNOWN_LOCATION
)
1445 inform (b
->locus
, "originally defined here");
1450 /* Subroutine of compare_decls. Allow harmless mismatches in return
1451 and argument types provided that the type modes match. This function
1452 return a unified type given a suitable match, and 0 otherwise. */
1455 match_builtin_function_types (tree newtype
, tree oldtype
)
1457 tree newrettype
, oldrettype
;
1458 tree newargs
, oldargs
;
1459 tree trytype
, tryargs
;
1461 /* Accept the return type of the new declaration if same modes. */
1462 oldrettype
= TREE_TYPE (oldtype
);
1463 newrettype
= TREE_TYPE (newtype
);
1465 if (TYPE_MODE (oldrettype
) != TYPE_MODE (newrettype
))
1468 oldargs
= TYPE_ARG_TYPES (oldtype
);
1469 newargs
= TYPE_ARG_TYPES (newtype
);
1472 while (oldargs
|| newargs
)
1476 || !TREE_VALUE (oldargs
)
1477 || !TREE_VALUE (newargs
)
1478 || TYPE_MODE (TREE_VALUE (oldargs
))
1479 != TYPE_MODE (TREE_VALUE (newargs
)))
1482 oldargs
= TREE_CHAIN (oldargs
);
1483 newargs
= TREE_CHAIN (newargs
);
1486 trytype
= build_function_type (newrettype
, tryargs
);
1487 return build_type_attribute_variant (trytype
, TYPE_ATTRIBUTES (oldtype
));
1490 /* Subroutine of diagnose_mismatched_decls. Check for function type
1491 mismatch involving an empty arglist vs a nonempty one and give clearer
1494 diagnose_arglist_conflict (tree newdecl
, tree olddecl
,
1495 tree newtype
, tree oldtype
)
1499 if (TREE_CODE (olddecl
) != FUNCTION_DECL
1500 || !comptypes (TREE_TYPE (oldtype
), TREE_TYPE (newtype
))
1501 || !((TYPE_ARG_TYPES (oldtype
) == 0 && DECL_INITIAL (olddecl
) == 0)
1503 (TYPE_ARG_TYPES (newtype
) == 0 && DECL_INITIAL (newdecl
) == 0)))
1506 t
= TYPE_ARG_TYPES (oldtype
);
1508 t
= TYPE_ARG_TYPES (newtype
);
1509 for (; t
; t
= TREE_CHAIN (t
))
1511 tree type
= TREE_VALUE (t
);
1513 if (TREE_CHAIN (t
) == 0
1514 && TYPE_MAIN_VARIANT (type
) != void_type_node
)
1516 inform (input_location
, "a parameter list with an ellipsis can%'t match "
1517 "an empty parameter name list declaration");
1521 if (c_type_promotes_to (type
) != type
)
1523 inform (input_location
, "an argument type that has a default promotion can%'t match "
1524 "an empty parameter name list declaration");
1530 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1531 old-style function definition, NEWDECL is a prototype declaration.
1532 Diagnose inconsistencies in the argument list. Returns TRUE if
1533 the prototype is compatible, FALSE if not. */
1535 validate_proto_after_old_defn (tree newdecl
, tree newtype
, tree oldtype
)
1537 tree newargs
, oldargs
;
1540 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1542 oldargs
= TYPE_ACTUAL_ARG_TYPES (oldtype
);
1543 newargs
= TYPE_ARG_TYPES (newtype
);
1548 tree oldargtype
= TREE_VALUE (oldargs
);
1549 tree newargtype
= TREE_VALUE (newargs
);
1551 if (oldargtype
== error_mark_node
|| newargtype
== error_mark_node
)
1554 oldargtype
= TYPE_MAIN_VARIANT (oldargtype
);
1555 newargtype
= TYPE_MAIN_VARIANT (newargtype
);
1557 if (END_OF_ARGLIST (oldargtype
) && END_OF_ARGLIST (newargtype
))
1560 /* Reaching the end of just one list means the two decls don't
1561 agree on the number of arguments. */
1562 if (END_OF_ARGLIST (oldargtype
))
1564 error ("prototype for %q+D declares more arguments "
1565 "than previous old-style definition", newdecl
);
1568 else if (END_OF_ARGLIST (newargtype
))
1570 error ("prototype for %q+D declares fewer arguments "
1571 "than previous old-style definition", newdecl
);
1575 /* Type for passing arg must be consistent with that declared
1577 else if (!comptypes (oldargtype
, newargtype
))
1579 error ("prototype for %q+D declares argument %d"
1580 " with incompatible type",
1585 oldargs
= TREE_CHAIN (oldargs
);
1586 newargs
= TREE_CHAIN (newargs
);
1590 /* If we get here, no errors were found, but do issue a warning
1591 for this poor-style construct. */
1592 warning (0, "prototype for %q+D follows non-prototype definition",
1595 #undef END_OF_ARGLIST
1598 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1599 first in a pair of mismatched declarations, using the diagnostic
1602 locate_old_decl (tree decl
)
1604 if (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (decl
))
1606 else if (DECL_INITIAL (decl
))
1607 inform (input_location
, "previous definition of %q+D was here", decl
);
1608 else if (C_DECL_IMPLICIT (decl
))
1609 inform (input_location
, "previous implicit declaration of %q+D was here", decl
);
1611 inform (input_location
, "previous declaration of %q+D was here", decl
);
1614 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1615 Returns true if the caller should proceed to merge the two, false
1616 if OLDDECL should simply be discarded. As a side effect, issues
1617 all necessary diagnostics for invalid or poor-style combinations.
1618 If it returns true, writes the types of NEWDECL and OLDDECL to
1619 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1620 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1623 diagnose_mismatched_decls (tree newdecl
, tree olddecl
,
1624 tree
*newtypep
, tree
*oldtypep
)
1626 tree newtype
, oldtype
;
1627 bool pedwarned
= false;
1628 bool warned
= false;
1631 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1632 && DECL_EXTERNAL (DECL))
1634 /* If we have error_mark_node for either decl or type, just discard
1635 the previous decl - we're in an error cascade already. */
1636 if (olddecl
== error_mark_node
|| newdecl
== error_mark_node
)
1638 *oldtypep
= oldtype
= TREE_TYPE (olddecl
);
1639 *newtypep
= newtype
= TREE_TYPE (newdecl
);
1640 if (oldtype
== error_mark_node
|| newtype
== error_mark_node
)
1643 /* Two different categories of symbol altogether. This is an error
1644 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1645 if (TREE_CODE (olddecl
) != TREE_CODE (newdecl
))
1647 if (!(TREE_CODE (olddecl
) == FUNCTION_DECL
1648 && DECL_BUILT_IN (olddecl
)
1649 && !C_DECL_DECLARED_BUILTIN (olddecl
)))
1651 error ("%q+D redeclared as different kind of symbol", newdecl
);
1652 locate_old_decl (olddecl
);
1654 else if (TREE_PUBLIC (newdecl
))
1655 warning (0, "built-in function %q+D declared as non-function",
1658 warning (OPT_Wshadow
, "declaration of %q+D shadows "
1659 "a built-in function", newdecl
);
1663 /* Enumerators have no linkage, so may only be declared once in a
1665 if (TREE_CODE (olddecl
) == CONST_DECL
)
1667 error ("redeclaration of enumerator %q+D", newdecl
);
1668 locate_old_decl (olddecl
);
1672 if (!comptypes (oldtype
, newtype
))
1674 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1675 && DECL_BUILT_IN (olddecl
) && !C_DECL_DECLARED_BUILTIN (olddecl
))
1677 /* Accept harmless mismatch in function types.
1678 This is for the ffs and fprintf builtins. */
1679 tree trytype
= match_builtin_function_types (newtype
, oldtype
);
1681 if (trytype
&& comptypes (newtype
, trytype
))
1682 *oldtypep
= oldtype
= trytype
;
1685 /* If types don't match for a built-in, throw away the
1686 built-in. No point in calling locate_old_decl here, it
1687 won't print anything. */
1688 warning (0, "conflicting types for built-in function %q+D",
1693 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
1694 && DECL_IS_BUILTIN (olddecl
))
1696 /* A conflicting function declaration for a predeclared
1697 function that isn't actually built in. Objective C uses
1698 these. The new declaration silently overrides everything
1699 but the volatility (i.e. noreturn) indication. See also
1700 below. FIXME: Make Objective C use normal builtins. */
1701 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
1704 /* Permit void foo (...) to match int foo (...) if the latter is
1705 the definition and implicit int was used. See
1706 c-torture/compile/920625-2.c. */
1707 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
&& DECL_INITIAL (newdecl
)
1708 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype
)) == void_type_node
1709 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype
)) == integer_type_node
1710 && C_FUNCTION_IMPLICIT_INT (newdecl
) && !DECL_INITIAL (olddecl
))
1712 pedwarned
= pedwarn (input_location
, 0,
1713 "conflicting types for %q+D", newdecl
);
1714 /* Make sure we keep void as the return type. */
1715 TREE_TYPE (newdecl
) = *newtypep
= newtype
= oldtype
;
1716 C_FUNCTION_IMPLICIT_INT (newdecl
) = 0;
1718 /* Permit void foo (...) to match an earlier call to foo (...) with
1719 no declared type (thus, implicitly int). */
1720 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1721 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype
)) == void_type_node
1722 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype
)) == integer_type_node
1723 && C_DECL_IMPLICIT (olddecl
) && !DECL_INITIAL (olddecl
))
1725 pedwarned
= pedwarn (input_location
, 0,
1726 "conflicting types for %q+D", newdecl
);
1727 /* Make sure we keep void as the return type. */
1728 TREE_TYPE (olddecl
) = *oldtypep
= oldtype
= newtype
;
1732 if (TYPE_QUALS (newtype
) != TYPE_QUALS (oldtype
))
1733 error ("conflicting type qualifiers for %q+D", newdecl
);
1735 error ("conflicting types for %q+D", newdecl
);
1736 diagnose_arglist_conflict (newdecl
, olddecl
, newtype
, oldtype
);
1737 locate_old_decl (olddecl
);
1742 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1743 but silently ignore the redeclaration if either is in a system
1744 header. (Conflicting redeclarations were handled above.) */
1745 if (TREE_CODE (newdecl
) == TYPE_DECL
)
1747 if (DECL_IN_SYSTEM_HEADER (newdecl
)
1748 || DECL_IN_SYSTEM_HEADER (olddecl
)
1749 || TREE_NO_WARNING (newdecl
)
1750 || TREE_NO_WARNING (olddecl
))
1751 return true; /* Allow OLDDECL to continue in use. */
1753 error ("redefinition of typedef %q+D", newdecl
);
1754 locate_old_decl (olddecl
);
1758 /* Function declarations can either be 'static' or 'extern' (no
1759 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1760 can never conflict with each other on account of linkage
1761 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1762 gnu89 mode permits two definitions if one is 'extern inline' and
1763 one is not. The non- extern-inline definition supersedes the
1764 extern-inline definition. */
1766 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1768 /* If you declare a built-in function name as static, or
1769 define the built-in with an old-style definition (so we
1770 can't validate the argument list) the built-in definition is
1771 overridden, but optionally warn this was a bad choice of name. */
1772 if (DECL_BUILT_IN (olddecl
)
1773 && !C_DECL_DECLARED_BUILTIN (olddecl
)
1774 && (!TREE_PUBLIC (newdecl
)
1775 || (DECL_INITIAL (newdecl
)
1776 && !TYPE_ARG_TYPES (TREE_TYPE (newdecl
)))))
1778 warning (OPT_Wshadow
, "declaration of %q+D shadows "
1779 "a built-in function", newdecl
);
1780 /* Discard the old built-in function. */
1784 if (DECL_INITIAL (newdecl
))
1786 if (DECL_INITIAL (olddecl
))
1788 /* If both decls are in the same TU and the new declaration
1789 isn't overriding an extern inline reject the new decl.
1790 In c99, no overriding is allowed in the same translation
1792 if ((!DECL_EXTERN_INLINE (olddecl
)
1793 || DECL_EXTERN_INLINE (newdecl
)
1794 || (!flag_gnu89_inline
1795 && (!DECL_DECLARED_INLINE_P (olddecl
)
1796 || !lookup_attribute ("gnu_inline",
1797 DECL_ATTRIBUTES (olddecl
)))
1798 && (!DECL_DECLARED_INLINE_P (newdecl
)
1799 || !lookup_attribute ("gnu_inline",
1800 DECL_ATTRIBUTES (newdecl
))))
1802 && same_translation_unit_p (newdecl
, olddecl
))
1804 error ("redefinition of %q+D", newdecl
);
1805 locate_old_decl (olddecl
);
1810 /* If we have a prototype after an old-style function definition,
1811 the argument types must be checked specially. */
1812 else if (DECL_INITIAL (olddecl
)
1813 && !TYPE_ARG_TYPES (oldtype
) && TYPE_ARG_TYPES (newtype
)
1814 && TYPE_ACTUAL_ARG_TYPES (oldtype
)
1815 && !validate_proto_after_old_defn (newdecl
, newtype
, oldtype
))
1817 locate_old_decl (olddecl
);
1820 /* A non-static declaration (even an "extern") followed by a
1821 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1822 The same is true for a static forward declaration at block
1823 scope followed by a non-static declaration/definition at file
1824 scope. Static followed by non-static at the same scope is
1825 not undefined behavior, and is the most convenient way to get
1826 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1827 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1828 we do diagnose it if -Wtraditional. */
1829 if (TREE_PUBLIC (olddecl
) && !TREE_PUBLIC (newdecl
))
1831 /* Two exceptions to the rule. If olddecl is an extern
1832 inline, or a predeclared function that isn't actually
1833 built in, newdecl silently overrides olddecl. The latter
1834 occur only in Objective C; see also above. (FIXME: Make
1835 Objective C use normal builtins.) */
1836 if (!DECL_IS_BUILTIN (olddecl
)
1837 && !DECL_EXTERN_INLINE (olddecl
))
1839 error ("static declaration of %q+D follows "
1840 "non-static declaration", newdecl
);
1841 locate_old_decl (olddecl
);
1845 else if (TREE_PUBLIC (newdecl
) && !TREE_PUBLIC (olddecl
))
1847 if (DECL_CONTEXT (olddecl
))
1849 error ("non-static declaration of %q+D follows "
1850 "static declaration", newdecl
);
1851 locate_old_decl (olddecl
);
1854 else if (warn_traditional
)
1856 warned
|= warning (OPT_Wtraditional
,
1857 "non-static declaration of %q+D "
1858 "follows static declaration", newdecl
);
1862 /* Make sure gnu_inline attribute is either not present, or
1863 present on all inline decls. */
1864 if (DECL_DECLARED_INLINE_P (olddecl
)
1865 && DECL_DECLARED_INLINE_P (newdecl
))
1867 bool newa
= lookup_attribute ("gnu_inline",
1868 DECL_ATTRIBUTES (newdecl
)) != NULL
;
1869 bool olda
= lookup_attribute ("gnu_inline",
1870 DECL_ATTRIBUTES (olddecl
)) != NULL
;
1873 error ("%<gnu_inline%> attribute present on %q+D",
1874 newa
? newdecl
: olddecl
);
1875 error ("%Jbut not here", newa
? olddecl
: newdecl
);
1879 else if (TREE_CODE (newdecl
) == VAR_DECL
)
1881 /* Only variables can be thread-local, and all declarations must
1882 agree on this property. */
1883 if (C_DECL_THREADPRIVATE_P (olddecl
) && !DECL_THREAD_LOCAL_P (newdecl
))
1885 /* Nothing to check. Since OLDDECL is marked threadprivate
1886 and NEWDECL does not have a thread-local attribute, we
1887 will merge the threadprivate attribute into NEWDECL. */
1890 else if (DECL_THREAD_LOCAL_P (newdecl
) != DECL_THREAD_LOCAL_P (olddecl
))
1892 if (DECL_THREAD_LOCAL_P (newdecl
))
1893 error ("thread-local declaration of %q+D follows "
1894 "non-thread-local declaration", newdecl
);
1896 error ("non-thread-local declaration of %q+D follows "
1897 "thread-local declaration", newdecl
);
1899 locate_old_decl (olddecl
);
1903 /* Multiple initialized definitions are not allowed (6.9p3,5). */
1904 if (DECL_INITIAL (newdecl
) && DECL_INITIAL (olddecl
))
1906 error ("redefinition of %q+D", newdecl
);
1907 locate_old_decl (olddecl
);
1911 /* Objects declared at file scope: if the first declaration had
1912 external linkage (even if it was an external reference) the
1913 second must have external linkage as well, or the behavior is
1914 undefined. If the first declaration had internal linkage, then
1915 the second must too, or else be an external reference (in which
1916 case the composite declaration still has internal linkage).
1917 As for function declarations, we warn about the static-then-
1918 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
1919 if (DECL_FILE_SCOPE_P (newdecl
)
1920 && TREE_PUBLIC (newdecl
) != TREE_PUBLIC (olddecl
))
1922 if (DECL_EXTERNAL (newdecl
))
1924 if (!DECL_FILE_SCOPE_P (olddecl
))
1926 error ("extern declaration of %q+D follows "
1927 "declaration with no linkage", newdecl
);
1928 locate_old_decl (olddecl
);
1931 else if (warn_traditional
)
1933 warned
|= warning (OPT_Wtraditional
,
1934 "non-static declaration of %q+D "
1935 "follows static declaration", newdecl
);
1940 if (TREE_PUBLIC (newdecl
))
1941 error ("non-static declaration of %q+D follows "
1942 "static declaration", newdecl
);
1944 error ("static declaration of %q+D follows "
1945 "non-static declaration", newdecl
);
1947 locate_old_decl (olddecl
);
1951 /* Two objects with the same name declared at the same block
1952 scope must both be external references (6.7p3). */
1953 else if (!DECL_FILE_SCOPE_P (newdecl
))
1955 if (DECL_EXTERNAL (newdecl
))
1957 /* Extern with initializer at block scope, which will
1958 already have received an error. */
1960 else if (DECL_EXTERNAL (olddecl
))
1962 error ("declaration of %q+D with no linkage follows "
1963 "extern declaration", newdecl
);
1964 locate_old_decl (olddecl
);
1968 error ("redeclaration of %q+D with no linkage", newdecl
);
1969 locate_old_decl (olddecl
);
1977 /* All decls must agree on a visibility. */
1978 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl
), TS_DECL_WITH_VIS
)
1979 && DECL_VISIBILITY_SPECIFIED (newdecl
) && DECL_VISIBILITY_SPECIFIED (olddecl
)
1980 && DECL_VISIBILITY (newdecl
) != DECL_VISIBILITY (olddecl
))
1982 warned
|= warning (0, "redeclaration of %q+D with different visibility "
1983 "(old visibility preserved)", newdecl
);
1986 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1988 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
1989 if (DECL_DECLARED_INLINE_P (newdecl
)
1990 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl
)))
1992 warned
|= warning (OPT_Wattributes
,
1993 "inline declaration of %qD follows "
1994 "declaration with attribute noinline", newdecl
);
1996 else if (DECL_DECLARED_INLINE_P (olddecl
)
1997 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl
)))
1999 warned
|= warning (OPT_Wattributes
,
2000 "declaration of %q+D with attribute "
2001 "noinline follows inline declaration ", newdecl
);
2004 else /* PARM_DECL, VAR_DECL */
2006 /* Redeclaration of a parameter is a constraint violation (this is
2007 not explicitly stated, but follows from C99 6.7p3 [no more than
2008 one declaration of the same identifier with no linkage in the
2009 same scope, except type tags] and 6.2.2p6 [parameters have no
2010 linkage]). We must check for a forward parameter declaration,
2011 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2012 an extension, the mandatory diagnostic for which is handled by
2013 mark_forward_parm_decls. */
2015 if (TREE_CODE (newdecl
) == PARM_DECL
2016 && (!TREE_ASM_WRITTEN (olddecl
) || TREE_ASM_WRITTEN (newdecl
)))
2018 error ("redefinition of parameter %q+D", newdecl
);
2019 locate_old_decl (olddecl
);
2024 /* Optional warning for completely redundant decls. */
2025 if (!warned
&& !pedwarned
2026 && warn_redundant_decls
2027 /* Don't warn about a function declaration followed by a
2029 && !(TREE_CODE (newdecl
) == FUNCTION_DECL
2030 && DECL_INITIAL (newdecl
) && !DECL_INITIAL (olddecl
))
2031 /* Don't warn about redundant redeclarations of builtins. */
2032 && !(TREE_CODE (newdecl
) == FUNCTION_DECL
2033 && !DECL_BUILT_IN (newdecl
)
2034 && DECL_BUILT_IN (olddecl
)
2035 && !C_DECL_DECLARED_BUILTIN (olddecl
))
2036 /* Don't warn about an extern followed by a definition. */
2037 && !(DECL_EXTERNAL (olddecl
) && !DECL_EXTERNAL (newdecl
))
2038 /* Don't warn about forward parameter decls. */
2039 && !(TREE_CODE (newdecl
) == PARM_DECL
2040 && TREE_ASM_WRITTEN (olddecl
) && !TREE_ASM_WRITTEN (newdecl
))
2041 /* Don't warn about a variable definition following a declaration. */
2042 && !(TREE_CODE (newdecl
) == VAR_DECL
2043 && DECL_INITIAL (newdecl
) && !DECL_INITIAL (olddecl
)))
2045 warned
= warning (OPT_Wredundant_decls
, "redundant redeclaration of %q+D",
2049 /* Report location of previous decl/defn. */
2050 if (warned
|| pedwarned
)
2051 locate_old_decl (olddecl
);
2053 #undef DECL_EXTERN_INLINE
2058 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2059 consistent with OLDDECL, but carries new information. Merge the
2060 new information into OLDDECL. This function issues no
2064 merge_decls (tree newdecl
, tree olddecl
, tree newtype
, tree oldtype
)
2066 bool new_is_definition
= (TREE_CODE (newdecl
) == FUNCTION_DECL
2067 && DECL_INITIAL (newdecl
) != 0);
2068 bool new_is_prototype
= (TREE_CODE (newdecl
) == FUNCTION_DECL
2069 && TYPE_ARG_TYPES (TREE_TYPE (newdecl
)) != 0);
2070 bool old_is_prototype
= (TREE_CODE (olddecl
) == FUNCTION_DECL
2071 && TYPE_ARG_TYPES (TREE_TYPE (olddecl
)) != 0);
2072 bool extern_changed
= false;
2074 /* For real parm decl following a forward decl, rechain the old decl
2075 in its new location and clear TREE_ASM_WRITTEN (it's not a
2076 forward decl anymore). */
2077 if (TREE_CODE (newdecl
) == PARM_DECL
2078 && TREE_ASM_WRITTEN (olddecl
) && !TREE_ASM_WRITTEN (newdecl
))
2080 struct c_binding
*b
, **here
;
2082 for (here
= ¤t_scope
->bindings
; *here
; here
= &(*here
)->prev
)
2083 if ((*here
)->decl
== olddecl
)
2090 b
->prev
= current_scope
->bindings
;
2091 current_scope
->bindings
= b
;
2093 TREE_ASM_WRITTEN (olddecl
) = 0;
2096 DECL_ATTRIBUTES (newdecl
)
2097 = targetm
.merge_decl_attributes (olddecl
, newdecl
);
2099 /* Merge the data types specified in the two decls. */
2101 = TREE_TYPE (olddecl
)
2102 = composite_type (newtype
, oldtype
);
2104 /* Lay the type out, unless already done. */
2105 if (!comptypes (oldtype
, TREE_TYPE (newdecl
)))
2107 if (TREE_TYPE (newdecl
) != error_mark_node
)
2108 layout_type (TREE_TYPE (newdecl
));
2109 if (TREE_CODE (newdecl
) != FUNCTION_DECL
2110 && TREE_CODE (newdecl
) != TYPE_DECL
2111 && TREE_CODE (newdecl
) != CONST_DECL
)
2112 layout_decl (newdecl
, 0);
2116 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2117 DECL_SIZE (newdecl
) = DECL_SIZE (olddecl
);
2118 DECL_SIZE_UNIT (newdecl
) = DECL_SIZE_UNIT (olddecl
);
2119 DECL_MODE (newdecl
) = DECL_MODE (olddecl
);
2120 if (DECL_ALIGN (olddecl
) > DECL_ALIGN (newdecl
))
2122 DECL_ALIGN (newdecl
) = DECL_ALIGN (olddecl
);
2123 DECL_USER_ALIGN (newdecl
) |= DECL_USER_ALIGN (olddecl
);
2127 /* Keep the old rtl since we can safely use it. */
2128 if (HAS_RTL_P (olddecl
))
2129 COPY_DECL_RTL (olddecl
, newdecl
);
2131 /* Merge the type qualifiers. */
2132 if (TREE_READONLY (newdecl
))
2133 TREE_READONLY (olddecl
) = 1;
2135 if (TREE_THIS_VOLATILE (newdecl
))
2136 TREE_THIS_VOLATILE (olddecl
) = 1;
2138 /* Merge deprecatedness. */
2139 if (TREE_DEPRECATED (newdecl
))
2140 TREE_DEPRECATED (olddecl
) = 1;
2142 /* If a decl is in a system header and the other isn't, keep the one on the
2143 system header. Otherwise, keep source location of definition rather than
2144 declaration and of prototype rather than non-prototype unless that
2145 prototype is built-in. */
2146 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
)
2147 && DECL_IN_SYSTEM_HEADER (olddecl
)
2148 && !DECL_IN_SYSTEM_HEADER (newdecl
) )
2149 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
2150 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
)
2151 && DECL_IN_SYSTEM_HEADER (newdecl
)
2152 && !DECL_IN_SYSTEM_HEADER (olddecl
))
2153 DECL_SOURCE_LOCATION (olddecl
) = DECL_SOURCE_LOCATION (newdecl
);
2154 else if ((DECL_INITIAL (newdecl
) == 0 && DECL_INITIAL (olddecl
) != 0)
2155 || (old_is_prototype
&& !new_is_prototype
2156 && !C_DECL_BUILTIN_PROTOTYPE (olddecl
)))
2157 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
2159 /* Merge the initialization information. */
2160 if (DECL_INITIAL (newdecl
) == 0)
2161 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
2163 /* Merge the threadprivate attribute. */
2164 if (TREE_CODE (olddecl
) == VAR_DECL
&& C_DECL_THREADPRIVATE_P (olddecl
))
2166 DECL_TLS_MODEL (newdecl
) = DECL_TLS_MODEL (olddecl
);
2167 C_DECL_THREADPRIVATE_P (newdecl
) = 1;
2170 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
))
2172 /* Merge the section attribute.
2173 We want to issue an error if the sections conflict but that
2174 must be done later in decl_attributes since we are called
2175 before attributes are assigned. */
2176 if (DECL_SECTION_NAME (newdecl
) == NULL_TREE
)
2177 DECL_SECTION_NAME (newdecl
) = DECL_SECTION_NAME (olddecl
);
2179 /* Copy the assembler name.
2180 Currently, it can only be defined in the prototype. */
2181 COPY_DECL_ASSEMBLER_NAME (olddecl
, newdecl
);
2183 /* Use visibility of whichever declaration had it specified */
2184 if (DECL_VISIBILITY_SPECIFIED (olddecl
))
2186 DECL_VISIBILITY (newdecl
) = DECL_VISIBILITY (olddecl
);
2187 DECL_VISIBILITY_SPECIFIED (newdecl
) = 1;
2190 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2192 DECL_STATIC_CONSTRUCTOR(newdecl
) |= DECL_STATIC_CONSTRUCTOR(olddecl
);
2193 DECL_STATIC_DESTRUCTOR (newdecl
) |= DECL_STATIC_DESTRUCTOR (olddecl
);
2194 DECL_NO_LIMIT_STACK (newdecl
) |= DECL_NO_LIMIT_STACK (olddecl
);
2195 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl
)
2196 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl
);
2197 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
2198 DECL_IS_MALLOC (newdecl
) |= DECL_IS_MALLOC (olddecl
);
2199 DECL_IS_OPERATOR_NEW (newdecl
) |= DECL_IS_OPERATOR_NEW (olddecl
);
2200 TREE_READONLY (newdecl
) |= TREE_READONLY (olddecl
);
2201 DECL_PURE_P (newdecl
) |= DECL_PURE_P (olddecl
);
2202 DECL_IS_NOVOPS (newdecl
) |= DECL_IS_NOVOPS (olddecl
);
2205 /* Merge the storage class information. */
2206 merge_weak (newdecl
, olddecl
);
2208 /* For functions, static overrides non-static. */
2209 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2211 TREE_PUBLIC (newdecl
) &= TREE_PUBLIC (olddecl
);
2212 /* This is since we don't automatically
2213 copy the attributes of NEWDECL into OLDDECL. */
2214 TREE_PUBLIC (olddecl
) = TREE_PUBLIC (newdecl
);
2215 /* If this clears `static', clear it in the identifier too. */
2216 if (!TREE_PUBLIC (olddecl
))
2217 TREE_PUBLIC (DECL_NAME (olddecl
)) = 0;
2221 /* In c99, 'extern' declaration before (or after) 'inline' means this
2222 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2224 if (TREE_CODE (newdecl
) == FUNCTION_DECL
2225 && !flag_gnu89_inline
2226 && (DECL_DECLARED_INLINE_P (newdecl
)
2227 || DECL_DECLARED_INLINE_P (olddecl
))
2228 && (!DECL_DECLARED_INLINE_P (newdecl
)
2229 || !DECL_DECLARED_INLINE_P (olddecl
)
2230 || !DECL_EXTERNAL (olddecl
))
2231 && DECL_EXTERNAL (newdecl
)
2232 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl
))
2233 && !current_function_decl
)
2234 DECL_EXTERNAL (newdecl
) = 0;
2236 if (DECL_EXTERNAL (newdecl
))
2238 TREE_STATIC (newdecl
) = TREE_STATIC (olddecl
);
2239 DECL_EXTERNAL (newdecl
) = DECL_EXTERNAL (olddecl
);
2241 /* An extern decl does not override previous storage class. */
2242 TREE_PUBLIC (newdecl
) = TREE_PUBLIC (olddecl
);
2243 if (!DECL_EXTERNAL (newdecl
))
2245 DECL_CONTEXT (newdecl
) = DECL_CONTEXT (olddecl
);
2246 DECL_COMMON (newdecl
) = DECL_COMMON (olddecl
);
2251 TREE_STATIC (olddecl
) = TREE_STATIC (newdecl
);
2252 TREE_PUBLIC (olddecl
) = TREE_PUBLIC (newdecl
);
2255 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2257 /* If we're redefining a function previously defined as extern
2258 inline, make sure we emit debug info for the inline before we
2259 throw it away, in case it was inlined into a function that
2260 hasn't been written out yet. */
2261 if (new_is_definition
&& DECL_INITIAL (olddecl
))
2262 /* The new defn must not be inline. */
2263 DECL_UNINLINABLE (newdecl
) = 1;
2266 /* If either decl says `inline', this fn is inline, unless
2267 its definition was passed already. */
2268 if (DECL_DECLARED_INLINE_P (newdecl
)
2269 || DECL_DECLARED_INLINE_P (olddecl
))
2270 DECL_DECLARED_INLINE_P (newdecl
) = 1;
2272 DECL_UNINLINABLE (newdecl
) = DECL_UNINLINABLE (olddecl
)
2273 = (DECL_UNINLINABLE (newdecl
) || DECL_UNINLINABLE (olddecl
));
2275 DECL_DISREGARD_INLINE_LIMITS (newdecl
)
2276 = DECL_DISREGARD_INLINE_LIMITS (olddecl
)
2277 = (DECL_DISREGARD_INLINE_LIMITS (newdecl
)
2278 || DECL_DISREGARD_INLINE_LIMITS (olddecl
));
2281 if (DECL_BUILT_IN (olddecl
))
2283 /* If redeclaring a builtin function, it stays built in.
2284 But it gets tagged as having been declared. */
2285 DECL_BUILT_IN_CLASS (newdecl
) = DECL_BUILT_IN_CLASS (olddecl
);
2286 DECL_FUNCTION_CODE (newdecl
) = DECL_FUNCTION_CODE (olddecl
);
2287 C_DECL_DECLARED_BUILTIN (newdecl
) = 1;
2288 if (new_is_prototype
)
2289 C_DECL_BUILTIN_PROTOTYPE (newdecl
) = 0;
2291 C_DECL_BUILTIN_PROTOTYPE (newdecl
)
2292 = C_DECL_BUILTIN_PROTOTYPE (olddecl
);
2295 /* Preserve function specific target and optimization options */
2296 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl
)
2297 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl
))
2298 DECL_FUNCTION_SPECIFIC_TARGET (newdecl
)
2299 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl
);
2301 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
)
2302 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
))
2303 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
)
2304 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
);
2306 /* Also preserve various other info from the definition. */
2307 if (!new_is_definition
)
2310 DECL_RESULT (newdecl
) = DECL_RESULT (olddecl
);
2311 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
2312 DECL_STRUCT_FUNCTION (newdecl
) = DECL_STRUCT_FUNCTION (olddecl
);
2313 DECL_SAVED_TREE (newdecl
) = DECL_SAVED_TREE (olddecl
);
2314 gimple_set_body (newdecl
, gimple_body (olddecl
));
2315 DECL_ARGUMENTS (newdecl
) = copy_list (DECL_ARGUMENTS (olddecl
));
2316 for (t
= DECL_ARGUMENTS (newdecl
); t
; t
= TREE_CHAIN (t
))
2317 DECL_CONTEXT (t
) = newdecl
;
2319 /* See if we've got a function to instantiate from. */
2320 if (DECL_SAVED_TREE (olddecl
))
2321 DECL_ABSTRACT_ORIGIN (newdecl
)
2322 = DECL_ABSTRACT_ORIGIN (olddecl
);
2326 extern_changed
= DECL_EXTERNAL (olddecl
) && !DECL_EXTERNAL (newdecl
);
2328 /* Merge the USED information. */
2329 if (TREE_USED (olddecl
))
2330 TREE_USED (newdecl
) = 1;
2331 else if (TREE_USED (newdecl
))
2332 TREE_USED (olddecl
) = 1;
2334 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2335 But preserve OLDDECL's DECL_UID and DECL_CONTEXT. */
2337 unsigned olddecl_uid
= DECL_UID (olddecl
);
2338 tree olddecl_context
= DECL_CONTEXT (olddecl
);
2339 tree olddecl_arguments
= NULL
;
2340 if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
2341 olddecl_arguments
= DECL_ARGUMENTS (olddecl
);
2343 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
2344 (char *) newdecl
+ sizeof (struct tree_common
),
2345 sizeof (struct tree_decl_common
) - sizeof (struct tree_common
));
2346 switch (TREE_CODE (olddecl
))
2349 gimple_set_body (olddecl
, gimple_body (newdecl
));
2359 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2360 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2361 tree_code_size (TREE_CODE (olddecl
)) - sizeof (struct tree_decl_common
));
2366 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2367 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2368 sizeof (struct tree_decl_non_common
) - sizeof (struct tree_decl_common
));
2370 DECL_UID (olddecl
) = olddecl_uid
;
2371 DECL_CONTEXT (olddecl
) = olddecl_context
;
2372 if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
2373 DECL_ARGUMENTS (olddecl
) = olddecl_arguments
;
2376 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2377 so that encode_section_info has a chance to look at the new decl
2378 flags and attributes. */
2379 if (DECL_RTL_SET_P (olddecl
)
2380 && (TREE_CODE (olddecl
) == FUNCTION_DECL
2381 || (TREE_CODE (olddecl
) == VAR_DECL
2382 && TREE_STATIC (olddecl
))))
2383 make_decl_rtl (olddecl
);
2385 /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
2386 and the definition is coming from the old version, cgraph needs
2387 to be called again. */
2388 if (extern_changed
&& !new_is_definition
2389 && TREE_CODE (olddecl
) == FUNCTION_DECL
&& DECL_INITIAL (olddecl
))
2390 cgraph_mark_if_needed (olddecl
);
2393 /* Handle when a new declaration NEWDECL has the same name as an old
2394 one OLDDECL in the same binding contour. Prints an error message
2397 If safely possible, alter OLDDECL to look like NEWDECL, and return
2398 true. Otherwise, return false. */
2401 duplicate_decls (tree newdecl
, tree olddecl
)
2403 tree newtype
= NULL
, oldtype
= NULL
;
2405 if (!diagnose_mismatched_decls (newdecl
, olddecl
, &newtype
, &oldtype
))
2407 /* Avoid `unused variable' and other warnings for OLDDECL. */
2408 TREE_NO_WARNING (olddecl
) = 1;
2412 merge_decls (newdecl
, olddecl
, newtype
, oldtype
);
2417 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2419 warn_if_shadowing (tree new_decl
)
2421 struct c_binding
*b
;
2423 /* Shadow warnings wanted? */
2425 /* No shadow warnings for internally generated vars. */
2426 || DECL_IS_BUILTIN (new_decl
)
2427 /* No shadow warnings for vars made for inlining. */
2428 || DECL_FROM_INLINE (new_decl
))
2431 /* Is anything being shadowed? Invisible decls do not count. */
2432 for (b
= I_SYMBOL_BINDING (DECL_NAME (new_decl
)); b
; b
= b
->shadowed
)
2433 if (b
->decl
&& b
->decl
!= new_decl
&& !b
->invisible
)
2435 tree old_decl
= b
->decl
;
2437 if (old_decl
== error_mark_node
)
2439 warning (OPT_Wshadow
, "declaration of %q+D shadows previous "
2440 "non-variable", new_decl
);
2443 else if (TREE_CODE (old_decl
) == PARM_DECL
)
2444 warning (OPT_Wshadow
, "declaration of %q+D shadows a parameter",
2446 else if (DECL_FILE_SCOPE_P (old_decl
))
2447 warning (OPT_Wshadow
, "declaration of %q+D shadows a global "
2448 "declaration", new_decl
);
2449 else if (TREE_CODE (old_decl
) == FUNCTION_DECL
2450 && DECL_BUILT_IN (old_decl
))
2452 warning (OPT_Wshadow
, "declaration of %q+D shadows "
2453 "a built-in function", new_decl
);
2457 warning (OPT_Wshadow
, "declaration of %q+D shadows a previous local",
2460 warning (OPT_Wshadow
, "%Jshadowed declaration is here", old_decl
);
2466 /* Record a decl-node X as belonging to the current lexical scope.
2467 Check for errors (such as an incompatible declaration for the same
2468 name already seen in the same scope).
2470 Returns either X or an old decl for the same name.
2471 If an old decl is returned, it may have been smashed
2472 to agree with what X says. */
2477 tree name
= DECL_NAME (x
);
2478 struct c_scope
*scope
= current_scope
;
2479 struct c_binding
*b
;
2480 bool nested
= false;
2481 location_t locus
= DECL_SOURCE_LOCATION (x
);
2483 /* Must set DECL_CONTEXT for everything not at file scope or
2484 DECL_FILE_SCOPE_P won't work. Local externs don't count
2485 unless they have initializers (which generate code). */
2486 if (current_function_decl
2487 && ((TREE_CODE (x
) != FUNCTION_DECL
&& TREE_CODE (x
) != VAR_DECL
)
2488 || DECL_INITIAL (x
) || !DECL_EXTERNAL (x
)))
2489 DECL_CONTEXT (x
) = current_function_decl
;
2491 /* Anonymous decls are just inserted in the scope. */
2494 bind (name
, x
, scope
, /*invisible=*/false, /*nested=*/false,
2499 /* First, see if there is another declaration with the same name in
2500 the current scope. If there is, duplicate_decls may do all the
2501 work for us. If duplicate_decls returns false, that indicates
2502 two incompatible decls in the same scope; we are to silently
2503 replace the old one (duplicate_decls has issued all appropriate
2504 diagnostics). In particular, we should not consider possible
2505 duplicates in the external scope, or shadowing. */
2506 b
= I_SYMBOL_BINDING (name
);
2507 if (b
&& B_IN_SCOPE (b
, scope
))
2509 struct c_binding
*b_ext
, *b_use
;
2510 tree type
= TREE_TYPE (x
);
2511 tree visdecl
= b
->decl
;
2512 tree vistype
= TREE_TYPE (visdecl
);
2513 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
2514 && COMPLETE_TYPE_P (TREE_TYPE (x
)))
2515 b
->inner_comp
= false;
2518 /* If this is an external linkage declaration, we should check
2519 for compatibility with the type in the external scope before
2520 setting the type at this scope based on the visible
2521 information only. */
2522 if (TREE_PUBLIC (x
) && TREE_PUBLIC (visdecl
))
2524 while (b_ext
&& !B_IN_EXTERNAL_SCOPE (b_ext
))
2525 b_ext
= b_ext
->shadowed
;
2530 TREE_TYPE (b_use
->decl
) = b_use
->u
.type
;
2533 if (duplicate_decls (x
, b_use
->decl
))
2537 /* Save the updated type in the external scope and
2538 restore the proper type for this scope. */
2540 if (comptypes (vistype
, type
))
2541 thistype
= composite_type (vistype
, type
);
2543 thistype
= TREE_TYPE (b_use
->decl
);
2544 b_use
->u
.type
= TREE_TYPE (b_use
->decl
);
2545 if (TREE_CODE (b_use
->decl
) == FUNCTION_DECL
2546 && DECL_BUILT_IN (b_use
->decl
))
2548 = build_type_attribute_variant (thistype
,
2551 TREE_TYPE (b_use
->decl
) = thistype
;
2556 goto skip_external_and_shadow_checks
;
2559 /* All declarations with external linkage, and all external
2560 references, go in the external scope, no matter what scope is
2561 current. However, the binding in that scope is ignored for
2562 purposes of normal name lookup. A separate binding structure is
2563 created in the requested scope; this governs the normal
2564 visibility of the symbol.
2566 The binding in the externals scope is used exclusively for
2567 detecting duplicate declarations of the same object, no matter
2568 what scope they are in; this is what we do here. (C99 6.2.7p2:
2569 All declarations that refer to the same object or function shall
2570 have compatible type; otherwise, the behavior is undefined.) */
2571 if (DECL_EXTERNAL (x
) || scope
== file_scope
)
2573 tree type
= TREE_TYPE (x
);
2576 bool type_saved
= false;
2577 if (b
&& !B_IN_EXTERNAL_SCOPE (b
)
2578 && (TREE_CODE (b
->decl
) == FUNCTION_DECL
2579 || TREE_CODE (b
->decl
) == VAR_DECL
)
2580 && DECL_FILE_SCOPE_P (b
->decl
))
2583 vistype
= TREE_TYPE (visdecl
);
2585 if (scope
!= file_scope
2586 && !DECL_IN_SYSTEM_HEADER (x
))
2587 warning (OPT_Wnested_externs
, "nested extern declaration of %qD", x
);
2589 while (b
&& !B_IN_EXTERNAL_SCOPE (b
))
2591 /* If this decl might be modified, save its type. This is
2592 done here rather than when the decl is first bound
2593 because the type may change after first binding, through
2594 being completed or through attributes being added. If we
2595 encounter multiple such decls, only the first should have
2596 its type saved; the others will already have had their
2597 proper types saved and the types will not have changed as
2598 their scopes will not have been re-entered. */
2599 if (DECL_P (b
->decl
) && DECL_FILE_SCOPE_P (b
->decl
) && !type_saved
)
2601 b
->u
.type
= TREE_TYPE (b
->decl
);
2604 if (B_IN_FILE_SCOPE (b
)
2605 && TREE_CODE (b
->decl
) == VAR_DECL
2606 && TREE_STATIC (b
->decl
)
2607 && TREE_CODE (TREE_TYPE (b
->decl
)) == ARRAY_TYPE
2608 && !TYPE_DOMAIN (TREE_TYPE (b
->decl
))
2609 && TREE_CODE (type
) == ARRAY_TYPE
2610 && TYPE_DOMAIN (type
)
2611 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
))
2612 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))
2614 /* Array type completed in inner scope, which should be
2615 diagnosed if the completion does not have size 1 and
2616 it does not get completed in the file scope. */
2617 b
->inner_comp
= true;
2622 /* If a matching external declaration has been found, set its
2623 type to the composite of all the types of that declaration.
2624 After the consistency checks, it will be reset to the
2625 composite of the visible types only. */
2626 if (b
&& (TREE_PUBLIC (x
) || same_translation_unit_p (x
, b
->decl
))
2628 TREE_TYPE (b
->decl
) = b
->u
.type
;
2630 /* The point of the same_translation_unit_p check here is,
2631 we want to detect a duplicate decl for a construct like
2632 foo() { extern bar(); } ... static bar(); but not if
2633 they are in different translation units. In any case,
2634 the static does not go in the externals scope. */
2636 && (TREE_PUBLIC (x
) || same_translation_unit_p (x
, b
->decl
))
2637 && duplicate_decls (x
, b
->decl
))
2642 if (comptypes (vistype
, type
))
2643 thistype
= composite_type (vistype
, type
);
2645 thistype
= TREE_TYPE (b
->decl
);
2649 b
->u
.type
= TREE_TYPE (b
->decl
);
2650 if (TREE_CODE (b
->decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (b
->decl
))
2652 = build_type_attribute_variant (thistype
,
2653 TYPE_ATTRIBUTES (b
->u
.type
));
2654 TREE_TYPE (b
->decl
) = thistype
;
2655 bind (name
, b
->decl
, scope
, /*invisible=*/false, /*nested=*/true,
2659 else if (TREE_PUBLIC (x
))
2661 if (visdecl
&& !b
&& duplicate_decls (x
, visdecl
))
2663 /* An external declaration at block scope referring to a
2664 visible entity with internal linkage. The composite
2665 type will already be correct for this scope, so we
2666 just need to fall through to make the declaration in
2673 bind (name
, x
, external_scope
, /*invisible=*/true,
2674 /*nested=*/false, locus
);
2680 if (TREE_CODE (x
) != PARM_DECL
)
2681 warn_if_shadowing (x
);
2683 skip_external_and_shadow_checks
:
2684 if (TREE_CODE (x
) == TYPE_DECL
)
2685 set_underlying_type (x
);
2687 bind (name
, x
, scope
, /*invisible=*/false, nested
, locus
);
2689 /* If x's type is incomplete because it's based on a
2690 structure or union which has not yet been fully declared,
2691 attach it to that structure or union type, so we can go
2692 back and complete the variable declaration later, if the
2693 structure or union gets fully declared.
2695 If the input is erroneous, we can have error_mark in the type
2696 slot (e.g. "f(void a, ...)") - that doesn't count as an
2698 if (TREE_TYPE (x
) != error_mark_node
2699 && !COMPLETE_TYPE_P (TREE_TYPE (x
)))
2701 tree element
= TREE_TYPE (x
);
2703 while (TREE_CODE (element
) == ARRAY_TYPE
)
2704 element
= TREE_TYPE (element
);
2705 element
= TYPE_MAIN_VARIANT (element
);
2707 if ((TREE_CODE (element
) == RECORD_TYPE
2708 || TREE_CODE (element
) == UNION_TYPE
)
2709 && (TREE_CODE (x
) != TYPE_DECL
2710 || TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
)
2711 && !COMPLETE_TYPE_P (element
))
2712 C_TYPE_INCOMPLETE_VARS (element
)
2713 = tree_cons (NULL_TREE
, x
, C_TYPE_INCOMPLETE_VARS (element
));
2718 /* Record X as belonging to file scope.
2719 This is used only internally by the Objective-C front end,
2720 and is limited to its needs. duplicate_decls is not called;
2721 if there is any preexisting decl for this identifier, it is an ICE. */
2724 pushdecl_top_level (tree x
)
2727 bool nested
= false;
2728 gcc_assert (TREE_CODE (x
) == VAR_DECL
|| TREE_CODE (x
) == CONST_DECL
);
2730 name
= DECL_NAME (x
);
2732 gcc_assert (TREE_CODE (x
) == CONST_DECL
|| !I_SYMBOL_BINDING (name
));
2734 if (TREE_PUBLIC (x
))
2736 bind (name
, x
, external_scope
, /*invisible=*/true, /*nested=*/false,
2741 bind (name
, x
, file_scope
, /*invisible=*/false, nested
, UNKNOWN_LOCATION
);
2747 implicit_decl_warning (tree id
, tree olddecl
)
2749 if (warn_implicit_function_declaration
)
2754 warned
= pedwarn (input_location
, OPT_Wimplicit_function_declaration
,
2755 "implicit declaration of function %qE", id
);
2757 warned
= warning (OPT_Wimplicit_function_declaration
,
2758 G_("implicit declaration of function %qE"), id
);
2759 if (olddecl
&& warned
)
2760 locate_old_decl (olddecl
);
2764 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
2765 function of type int (). */
2768 implicitly_declare (location_t loc
, tree functionid
)
2770 struct c_binding
*b
;
2774 for (b
= I_SYMBOL_BINDING (functionid
); b
; b
= b
->shadowed
)
2776 if (B_IN_SCOPE (b
, external_scope
))
2785 if (decl
== error_mark_node
)
2788 /* FIXME: Objective-C has weird not-really-builtin functions
2789 which are supposed to be visible automatically. They wind up
2790 in the external scope because they're pushed before the file
2791 scope gets created. Catch this here and rebind them into the
2793 if (!DECL_BUILT_IN (decl
) && DECL_IS_BUILTIN (decl
))
2795 bind (functionid
, decl
, file_scope
,
2796 /*invisible=*/false, /*nested=*/true,
2797 DECL_SOURCE_LOCATION (decl
));
2802 tree newtype
= default_function_type
;
2804 TREE_TYPE (decl
) = b
->u
.type
;
2805 /* Implicit declaration of a function already declared
2806 (somehow) in a different scope, or as a built-in.
2807 If this is the first time this has happened, warn;
2808 then recycle the old declaration but with the new type. */
2809 if (!C_DECL_IMPLICIT (decl
))
2811 implicit_decl_warning (functionid
, decl
);
2812 C_DECL_IMPLICIT (decl
) = 1;
2814 if (DECL_BUILT_IN (decl
))
2816 newtype
= build_type_attribute_variant (newtype
,
2818 (TREE_TYPE (decl
)));
2819 if (!comptypes (newtype
, TREE_TYPE (decl
)))
2821 warning_at (loc
, 0, "incompatible implicit declaration of "
2822 "built-in function %qD", decl
);
2823 newtype
= TREE_TYPE (decl
);
2828 if (!comptypes (newtype
, TREE_TYPE (decl
)))
2830 error_at (loc
, "incompatible implicit declaration of function %qD", decl
);
2831 locate_old_decl (decl
);
2834 b
->u
.type
= TREE_TYPE (decl
);
2835 TREE_TYPE (decl
) = newtype
;
2836 bind (functionid
, decl
, current_scope
,
2837 /*invisible=*/false, /*nested=*/true,
2838 DECL_SOURCE_LOCATION (decl
));
2843 /* Not seen before. */
2844 decl
= build_decl (loc
, FUNCTION_DECL
, functionid
, default_function_type
);
2845 DECL_EXTERNAL (decl
) = 1;
2846 TREE_PUBLIC (decl
) = 1;
2847 C_DECL_IMPLICIT (decl
) = 1;
2848 implicit_decl_warning (functionid
, 0);
2849 asmspec_tree
= maybe_apply_renaming_pragma (decl
, /*asmname=*/NULL
);
2851 set_user_assembler_name (decl
, TREE_STRING_POINTER (asmspec_tree
));
2853 /* C89 says implicit declarations are in the innermost block.
2854 So we record the decl in the standard fashion. */
2855 decl
= pushdecl (decl
);
2857 /* No need to call objc_check_decl here - it's a function type. */
2858 rest_of_decl_compilation (decl
, 0, 0);
2860 /* Write a record describing this implicit function declaration
2861 to the prototypes file (if requested). */
2862 gen_aux_info_record (decl
, 0, 1, 0);
2864 /* Possibly apply some default attributes to this implicit declaration. */
2865 decl_attributes (&decl
, NULL_TREE
, 0);
2870 /* Issue an error message for a reference to an undeclared variable
2871 ID, including a reference to a builtin outside of function-call
2872 context. Establish a binding of the identifier to error_mark_node
2873 in an appropriate scope, which will suppress further errors for the
2874 same identifier. The error message should be given location LOC. */
2876 undeclared_variable (location_t loc
, tree id
)
2878 static bool already
= false;
2879 struct c_scope
*scope
;
2881 if (current_function_decl
== 0)
2883 error ("%H%qE undeclared here (not in a function)", &loc
, id
);
2884 scope
= current_scope
;
2888 error ("%H%qE undeclared (first use in this function)", &loc
, id
);
2892 error ("%H(Each undeclared identifier is reported only once", &loc
);
2893 error ("%Hfor each function it appears in.)", &loc
);
2897 /* If we are parsing old-style parameter decls, current_function_decl
2898 will be nonnull but current_function_scope will be null. */
2899 scope
= current_function_scope
? current_function_scope
: current_scope
;
2901 bind (id
, error_mark_node
, scope
, /*invisible=*/false, /*nested=*/false,
2905 /* Subroutine of lookup_label, declare_label, define_label: construct a
2906 LABEL_DECL with all the proper frills. Also create a struct
2907 c_label_vars initialized for the current scope. */
2910 make_label (location_t location
, tree name
, bool defining
,
2911 struct c_label_vars
**p_label_vars
)
2913 tree label
= build_decl (location
, LABEL_DECL
, name
, void_type_node
);
2914 struct c_label_vars
*label_vars
;
2916 DECL_CONTEXT (label
) = current_function_decl
;
2917 DECL_MODE (label
) = VOIDmode
;
2919 label_vars
= GGC_NEW (struct c_label_vars
);
2920 label_vars
->shadowed
= NULL
;
2921 set_spot_bindings (&label_vars
->label_bindings
, defining
);
2922 label_vars
->decls_in_scope
= make_tree_vector ();
2923 label_vars
->gotos
= VEC_alloc (c_goto_bindings_p
, gc
, 0);
2924 *p_label_vars
= label_vars
;
2929 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
2930 Create one if none exists so far for the current function.
2931 This is called when a label is used in a goto expression or
2932 has its address taken. */
2935 lookup_label (tree name
)
2938 struct c_label_vars
*label_vars
;
2940 if (current_function_decl
== 0)
2942 error ("label %qE referenced outside of any function", name
);
2946 /* Use a label already defined or ref'd with this name, but not if
2947 it is inherited from a containing function and wasn't declared
2949 label
= I_LABEL_DECL (name
);
2950 if (label
&& (DECL_CONTEXT (label
) == current_function_decl
2951 || C_DECLARED_LABEL_FLAG (label
)))
2953 /* If the label has only been declared, update its apparent
2954 location to point here, for better diagnostics if it
2955 turns out not to have been defined. */
2956 if (DECL_INITIAL (label
) == NULL_TREE
)
2957 DECL_SOURCE_LOCATION (label
) = input_location
;
2961 /* No label binding for that identifier; make one. */
2962 label
= make_label (input_location
, name
, false, &label_vars
);
2964 /* Ordinary labels go in the current function scope. */
2965 bind_label (name
, label
, current_function_scope
, label_vars
);
2970 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
2974 warn_about_goto (location_t goto_loc
, tree label
, tree decl
)
2976 if (variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
2978 "jump into scope of identifier with variably modified type");
2980 warning_at (goto_loc
, OPT_Wjump_misses_init
,
2981 "jump skips variable initialization");
2982 inform (DECL_SOURCE_LOCATION (label
), "label %qD defined here", label
);
2983 inform (DECL_SOURCE_LOCATION (decl
), "%qD declared here", decl
);
2986 /* Look up a label because of a goto statement. This is like
2987 lookup_label, but also issues any appropriate warnings. */
2990 lookup_label_for_goto (location_t loc
, tree name
)
2993 struct c_label_vars
*label_vars
;
2997 label
= lookup_label (name
);
2998 if (label
== NULL_TREE
)
3001 /* If we are jumping to a different function, we can't issue any
3003 if (DECL_CONTEXT (label
) != current_function_decl
)
3005 gcc_assert (C_DECLARED_LABEL_FLAG (label
));
3009 label_vars
= I_LABEL_BINDING (name
)->u
.label
;
3011 /* If the label has not yet been defined, then push this goto on a
3012 list for possible later warnings. */
3013 if (label_vars
->label_bindings
.scope
== NULL
)
3015 struct c_goto_bindings
*g
;
3017 g
= GGC_NEW (struct c_goto_bindings
);
3019 set_spot_bindings (&g
->goto_bindings
, true);
3020 VEC_safe_push (c_goto_bindings_p
, gc
, label_vars
->gotos
, g
);
3024 /* If there are any decls in label_vars->decls_in_scope, then this
3025 goto has missed the declaration of the decl. This happens for a
3031 Issue a warning or error. */
3032 for (ix
= 0; VEC_iterate (tree
, label_vars
->decls_in_scope
, ix
, decl
); ++ix
)
3033 warn_about_goto (loc
, label
, decl
);
3035 if (label_vars
->label_bindings
.left_stmt_expr
)
3037 error_at (loc
, "jump into statement expression");
3038 inform (DECL_SOURCE_LOCATION (label
), "label %qD defined here", label
);
3044 /* Make a label named NAME in the current function, shadowing silently
3045 any that may be inherited from containing functions or containing
3046 scopes. This is called for __label__ declarations. */
3049 declare_label (tree name
)
3051 struct c_binding
*b
= I_LABEL_BINDING (name
);
3053 struct c_label_vars
*label_vars
;
3055 /* Check to make sure that the label hasn't already been declared
3057 if (b
&& B_IN_CURRENT_SCOPE (b
))
3059 error ("duplicate label declaration %qE", name
);
3060 locate_old_decl (b
->decl
);
3062 /* Just use the previous declaration. */
3066 label
= make_label (input_location
, name
, false, &label_vars
);
3067 C_DECLARED_LABEL_FLAG (label
) = 1;
3069 /* Declared labels go in the current scope. */
3070 bind_label (name
, label
, current_scope
, label_vars
);
3075 /* When we define a label, issue any appropriate warnings if there are
3076 any gotos earlier in the function which jump to this label. */
3079 check_earlier_gotos (tree label
, struct c_label_vars
* label_vars
)
3082 struct c_goto_bindings
*g
;
3085 VEC_iterate (c_goto_bindings_p
, label_vars
->gotos
, ix
, g
);
3088 struct c_binding
*b
;
3089 struct c_scope
*scope
;
3091 /* We have a goto to this label. The goto is going forward. In
3092 g->scope, the goto is going to skip any binding which was
3093 defined after g->bindings_in_scope. */
3094 for (b
= g
->goto_bindings
.scope
->bindings
;
3095 b
!= g
->goto_bindings
.bindings_in_scope
;
3098 if (decl_jump_unsafe (b
->decl
))
3099 warn_about_goto (g
->loc
, label
, b
->decl
);
3102 /* We also need to warn about decls defined in any scopes
3103 between the scope of the label and the scope of the goto. */
3104 for (scope
= label_vars
->label_bindings
.scope
;
3105 scope
!= g
->goto_bindings
.scope
;
3106 scope
= scope
->outer
)
3108 gcc_assert (scope
!= NULL
);
3109 if (scope
== label_vars
->label_bindings
.scope
)
3110 b
= label_vars
->label_bindings
.bindings_in_scope
;
3112 b
= scope
->bindings
;
3113 for (; b
!= NULL
; b
= b
->prev
)
3115 if (decl_jump_unsafe (b
->decl
))
3116 warn_about_goto (g
->loc
, label
, b
->decl
);
3120 if (g
->goto_bindings
.stmt_exprs
> 0)
3122 error_at (g
->loc
, "jump into statement expression");
3123 inform (DECL_SOURCE_LOCATION (label
), "label %qD defined here",
3128 /* Now that the label is defined, we will issue warnings about
3129 subsequent gotos to this label when we see them. */
3130 VEC_truncate (c_goto_bindings_p
, label_vars
->gotos
, 0);
3131 label_vars
->gotos
= NULL
;
3134 /* Define a label, specifying the location in the source file.
3135 Return the LABEL_DECL node for the label, if the definition is valid.
3136 Otherwise return 0. */
3139 define_label (location_t location
, tree name
)
3141 /* Find any preexisting label with this name. It is an error
3142 if that label has already been defined in this function, or
3143 if there is a containing function with a declared label with
3145 tree label
= I_LABEL_DECL (name
);
3148 && ((DECL_CONTEXT (label
) == current_function_decl
3149 && DECL_INITIAL (label
) != 0)
3150 || (DECL_CONTEXT (label
) != current_function_decl
3151 && C_DECLARED_LABEL_FLAG (label
))))
3153 error_at (location
, "duplicate label %qD", label
);
3154 locate_old_decl (label
);
3157 else if (label
&& DECL_CONTEXT (label
) == current_function_decl
)
3159 struct c_label_vars
*label_vars
= I_LABEL_BINDING (name
)->u
.label
;
3161 /* The label has been used or declared already in this function,
3162 but not defined. Update its location to point to this
3164 DECL_SOURCE_LOCATION (label
) = location
;
3165 set_spot_bindings (&label_vars
->label_bindings
, true);
3167 /* Issue warnings as required about any goto statements from
3168 earlier in the function. */
3169 check_earlier_gotos (label
, label_vars
);
3173 struct c_label_vars
*label_vars
;
3175 /* No label binding for that identifier; make one. */
3176 label
= make_label (location
, name
, true, &label_vars
);
3178 /* Ordinary labels go in the current function scope. */
3179 bind_label (name
, label
, current_function_scope
, label_vars
);
3182 if (!in_system_header
&& lookup_name (name
))
3183 warning_at (location
, OPT_Wtraditional
,
3184 "traditional C lacks a separate namespace "
3185 "for labels, identifier %qE conflicts", name
);
3187 /* Mark label as having been defined. */
3188 DECL_INITIAL (label
) = error_mark_node
;
3192 /* Get the bindings for a new switch statement. This is used to issue
3193 warnings as appropriate for jumps from the switch to case or
3196 struct c_spot_bindings
*
3197 c_get_switch_bindings (void)
3199 struct c_spot_bindings
*switch_bindings
;
3201 switch_bindings
= XNEW (struct c_spot_bindings
);
3202 set_spot_bindings (switch_bindings
, true);
3203 return switch_bindings
;
3207 c_release_switch_bindings (struct c_spot_bindings
*bindings
)
3209 gcc_assert (bindings
->stmt_exprs
== 0 && !bindings
->left_stmt_expr
);
3213 /* This is called at the point of a case or default label to issue
3214 warnings about decls as needed. It returns true if it found an
3215 error, not just a warning. */
3218 c_check_switch_jump_warnings (struct c_spot_bindings
*switch_bindings
,
3219 location_t switch_loc
, location_t case_loc
)
3222 struct c_scope
*scope
;
3225 for (scope
= current_scope
;
3226 scope
!= switch_bindings
->scope
;
3227 scope
= scope
->outer
)
3229 struct c_binding
*b
;
3231 gcc_assert (scope
!= NULL
);
3232 for (b
= scope
->bindings
; b
!= NULL
; b
= b
->prev
)
3234 if (decl_jump_unsafe (b
->decl
))
3236 if (variably_modified_type_p (TREE_TYPE (b
->decl
), NULL_TREE
))
3240 ("switch jumps into scope of identifier with "
3241 "variably modified type"));
3244 warning_at (case_loc
, OPT_Wjump_misses_init
,
3245 "switch jumps over variable initialization");
3246 inform (switch_loc
, "switch starts here");
3247 inform (DECL_SOURCE_LOCATION (b
->decl
), "%qD declared here",
3253 if (switch_bindings
->stmt_exprs
> 0)
3256 error_at (case_loc
, "switch jumps into statement expression");
3257 inform (switch_loc
, "switch starts here");
3263 /* Given NAME, an IDENTIFIER_NODE,
3264 return the structure (or union or enum) definition for that name.
3265 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3266 CODE says which kind of type the caller wants;
3267 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3268 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3269 location where the tag was defined.
3270 If the wrong kind of type is found, an error is reported. */
3273 lookup_tag (enum tree_code code
, tree name
, int thislevel_only
,
3276 struct c_binding
*b
= I_TAG_BINDING (name
);
3282 /* We only care about whether it's in this level if
3283 thislevel_only was set or it might be a type clash. */
3284 if (thislevel_only
|| TREE_CODE (b
->decl
) != code
)
3286 /* For our purposes, a tag in the external scope is the same as
3287 a tag in the file scope. (Primarily relevant to Objective-C
3288 and its builtin structure tags, which get pushed before the
3289 file scope is created.) */
3290 if (B_IN_CURRENT_SCOPE (b
)
3291 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
3295 if (thislevel_only
&& !thislevel
)
3298 if (TREE_CODE (b
->decl
) != code
)
3300 /* Definition isn't the kind we were looking for. */
3301 pending_invalid_xref
= name
;
3302 pending_invalid_xref_location
= input_location
;
3304 /* If in the same binding level as a declaration as a tag
3305 of a different type, this must not be allowed to
3306 shadow that tag, so give the error immediately.
3307 (For example, "struct foo; union foo;" is invalid.) */
3309 pending_xref_error ();
3318 /* Print an error message now
3319 for a recent invalid struct, union or enum cross reference.
3320 We don't print them immediately because they are not invalid
3321 when used in the `struct foo;' construct for shadowing. */
3324 pending_xref_error (void)
3326 if (pending_invalid_xref
!= 0)
3327 error ("%H%qE defined as wrong kind of tag",
3328 &pending_invalid_xref_location
, pending_invalid_xref
);
3329 pending_invalid_xref
= 0;
3333 /* Look up NAME in the current scope and its superiors
3334 in the namespace of variables, functions and typedefs.
3335 Return a ..._DECL node of some kind representing its definition,
3336 or return 0 if it is undefined. */
3339 lookup_name (tree name
)
3341 struct c_binding
*b
= I_SYMBOL_BINDING (name
);
3342 if (b
&& !b
->invisible
)
3347 /* Similar to `lookup_name' but look only at the indicated scope. */
3350 lookup_name_in_scope (tree name
, struct c_scope
*scope
)
3352 struct c_binding
*b
;
3354 for (b
= I_SYMBOL_BINDING (name
); b
; b
= b
->shadowed
)
3355 if (B_IN_SCOPE (b
, scope
))
3360 /* Create the predefined scalar types of C,
3361 and some nodes representing standard constants (0, 1, (void *) 0).
3362 Initialize the global scope.
3363 Make definitions for built-in primitive functions. */
3366 c_init_decl_processing (void)
3368 location_t save_loc
= input_location
;
3370 /* Initialize reserved words for parser. */
3373 current_function_decl
= 0;
3375 gcc_obstack_init (&parser_obstack
);
3377 /* Make the externals scope. */
3379 external_scope
= current_scope
;
3381 /* Declarations from c_common_nodes_and_builtins must not be associated
3382 with this input file, lest we get differences between using and not
3383 using preprocessed headers. */
3384 input_location
= BUILTINS_LOCATION
;
3386 build_common_tree_nodes (flag_signed_char
, false);
3388 c_common_nodes_and_builtins ();
3390 /* In C, comparisons and TRUTH_* expressions have type int. */
3391 truthvalue_type_node
= integer_type_node
;
3392 truthvalue_true_node
= integer_one_node
;
3393 truthvalue_false_node
= integer_zero_node
;
3395 /* Even in C99, which has a real boolean type. */
3396 pushdecl (build_decl (UNKNOWN_LOCATION
, TYPE_DECL
, get_identifier ("_Bool"),
3397 boolean_type_node
));
3399 input_location
= save_loc
;
3401 pedantic_lvalues
= true;
3403 make_fname_decl
= c_make_fname_decl
;
3404 start_fname_decls ();
3407 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
3408 give the decl, NAME is the initialization string and TYPE_DEP
3409 indicates whether NAME depended on the type of the function. As we
3410 don't yet implement delayed emission of static data, we mark the
3411 decl as emitted so it is not placed in the output. Anything using
3412 it must therefore pull out the STRING_CST initializer directly.
3416 c_make_fname_decl (location_t loc
, tree id
, int type_dep
)
3418 const char *name
= fname_as_string (type_dep
);
3419 tree decl
, type
, init
;
3420 size_t length
= strlen (name
);
3422 type
= build_array_type (char_type_node
,
3423 build_index_type (size_int (length
)));
3424 type
= c_build_qualified_type (type
, TYPE_QUAL_CONST
);
3426 decl
= build_decl (loc
, VAR_DECL
, id
, type
);
3428 TREE_STATIC (decl
) = 1;
3429 TREE_READONLY (decl
) = 1;
3430 DECL_ARTIFICIAL (decl
) = 1;
3432 init
= build_string (length
+ 1, name
);
3433 free (CONST_CAST (char *, name
));
3434 TREE_TYPE (init
) = type
;
3435 DECL_INITIAL (decl
) = init
;
3437 TREE_USED (decl
) = 1;
3439 if (current_function_decl
3440 /* For invalid programs like this:
3443 const char* p = __FUNCTION__;
3445 the __FUNCTION__ is believed to appear in K&R style function
3446 parameter declarator. In that case we still don't have
3448 && (!errorcount
|| current_function_scope
))
3450 DECL_CONTEXT (decl
) = current_function_decl
;
3451 bind (id
, decl
, current_function_scope
,
3452 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION
);
3455 finish_decl (decl
, loc
, init
, NULL_TREE
, NULL_TREE
);
3461 c_builtin_function (tree decl
)
3463 tree type
= TREE_TYPE (decl
);
3464 tree id
= DECL_NAME (decl
);
3466 const char *name
= IDENTIFIER_POINTER (id
);
3467 C_DECL_BUILTIN_PROTOTYPE (decl
) = (TYPE_ARG_TYPES (type
) != 0);
3469 /* Should never be called on a symbol with a preexisting meaning. */
3470 gcc_assert (!I_SYMBOL_BINDING (id
));
3472 bind (id
, decl
, external_scope
, /*invisible=*/true, /*nested=*/false,
3475 /* Builtins in the implementation namespace are made visible without
3476 needing to be explicitly declared. See push_file_scope. */
3477 if (name
[0] == '_' && (name
[1] == '_' || ISUPPER (name
[1])))
3479 TREE_CHAIN (decl
) = visible_builtins
;
3480 visible_builtins
= decl
;
3487 c_builtin_function_ext_scope (tree decl
)
3489 tree type
= TREE_TYPE (decl
);
3490 tree id
= DECL_NAME (decl
);
3492 const char *name
= IDENTIFIER_POINTER (id
);
3493 C_DECL_BUILTIN_PROTOTYPE (decl
) = (TYPE_ARG_TYPES (type
) != 0);
3495 /* Should never be called on a symbol with a preexisting meaning. */
3496 gcc_assert (!I_SYMBOL_BINDING (id
));
3498 bind (id
, decl
, external_scope
, /*invisible=*/false, /*nested=*/false,
3501 /* Builtins in the implementation namespace are made visible without
3502 needing to be explicitly declared. See push_file_scope. */
3503 if (name
[0] == '_' && (name
[1] == '_' || ISUPPER (name
[1])))
3505 TREE_CHAIN (decl
) = visible_builtins
;
3506 visible_builtins
= decl
;
3512 /* Called when a declaration is seen that contains no names to declare.
3513 If its type is a reference to a structure, union or enum inherited
3514 from a containing scope, shadow that tag name for the current scope
3515 with a forward reference.
3516 If its type defines a new named structure or union
3517 or defines an enum, it is valid but we need not do anything here.
3518 Otherwise, it is an error. */
3521 shadow_tag (const struct c_declspecs
*declspecs
)
3523 shadow_tag_warned (declspecs
, 0);
3526 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
3529 shadow_tag_warned (const struct c_declspecs
*declspecs
, int warned
)
3531 bool found_tag
= false;
3533 if (declspecs
->type
&& !declspecs
->default_int_p
&& !declspecs
->typedef_p
)
3535 tree value
= declspecs
->type
;
3536 enum tree_code code
= TREE_CODE (value
);
3538 if (code
== RECORD_TYPE
|| code
== UNION_TYPE
|| code
== ENUMERAL_TYPE
)
3539 /* Used to test also that TYPE_SIZE (value) != 0.
3540 That caused warning for `struct foo;' at top level in the file. */
3542 tree name
= TYPE_NAME (value
);
3547 if (declspecs
->restrict_p
)
3549 error ("invalid use of %<restrict%>");
3555 if (warned
!= 1 && code
!= ENUMERAL_TYPE
)
3556 /* Empty unnamed enum OK */
3558 pedwarn (input_location
, 0,
3559 "unnamed struct/union that defines no instances");
3563 else if (!declspecs
->tag_defined_p
3564 && declspecs
->storage_class
!= csc_none
)
3567 pedwarn (input_location
, 0,
3568 "empty declaration with storage class specifier "
3569 "does not redeclare tag");
3571 pending_xref_error ();
3573 else if (!declspecs
->tag_defined_p
3574 && (declspecs
->const_p
3575 || declspecs
->volatile_p
3576 || declspecs
->restrict_p
))
3579 pedwarn (input_location
, 0,
3580 "empty declaration with type qualifier "
3581 "does not redeclare tag");
3583 pending_xref_error ();
3587 pending_invalid_xref
= 0;
3588 t
= lookup_tag (code
, name
, 1, NULL
);
3592 t
= make_node (code
);
3593 pushtag (input_location
, name
, t
);
3599 if (warned
!= 1 && !in_system_header
)
3601 pedwarn (input_location
, 0,
3602 "useless type name in empty declaration");
3607 else if (warned
!= 1 && !in_system_header
&& declspecs
->typedef_p
)
3609 pedwarn (input_location
, 0, "useless type name in empty declaration");
3613 pending_invalid_xref
= 0;
3615 if (declspecs
->inline_p
)
3617 error ("%<inline%> in empty declaration");
3621 if (current_scope
== file_scope
&& declspecs
->storage_class
== csc_auto
)
3623 error ("%<auto%> in file-scope empty declaration");
3627 if (current_scope
== file_scope
&& declspecs
->storage_class
== csc_register
)
3629 error ("%<register%> in file-scope empty declaration");
3633 if (!warned
&& !in_system_header
&& declspecs
->storage_class
!= csc_none
)
3635 warning (0, "useless storage class specifier in empty declaration");
3639 if (!warned
&& !in_system_header
&& declspecs
->thread_p
)
3641 warning (0, "useless %<__thread%> in empty declaration");
3645 if (!warned
&& !in_system_header
&& (declspecs
->const_p
3646 || declspecs
->volatile_p
3647 || declspecs
->restrict_p
))
3649 warning (0, "useless type qualifier in empty declaration");
3656 pedwarn (input_location
, 0, "empty declaration");
3661 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
3662 bits. SPECS represents declaration specifiers that the grammar
3663 only permits to contain type qualifiers and attributes. */
3666 quals_from_declspecs (const struct c_declspecs
*specs
)
3668 int quals
= ((specs
->const_p
? TYPE_QUAL_CONST
: 0)
3669 | (specs
->volatile_p
? TYPE_QUAL_VOLATILE
: 0)
3670 | (specs
->restrict_p
? TYPE_QUAL_RESTRICT
: 0));
3671 gcc_assert (!specs
->type
3672 && !specs
->decl_attr
3673 && specs
->typespec_word
== cts_none
3674 && specs
->storage_class
== csc_none
3675 && !specs
->typedef_p
3676 && !specs
->explicit_signed_p
3677 && !specs
->deprecated_p
3679 && !specs
->long_long_p
3682 && !specs
->unsigned_p
3683 && !specs
->complex_p
3685 && !specs
->thread_p
);
3689 /* Construct an array declarator. LOC is the location of the
3690 beginning of the array (usually the opening brace). EXPR is the
3691 expression inside [], or NULL_TREE. QUALS are the type qualifiers
3692 inside the [] (to be applied to the pointer to which a parameter
3693 array is converted). STATIC_P is true if "static" is inside the
3694 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
3695 VLA of unspecified length which is nevertheless a complete type,
3696 false otherwise. The field for the contained declarator is left to
3697 be filled in by set_array_declarator_inner. */
3699 struct c_declarator
*
3700 build_array_declarator (location_t loc
,
3701 tree expr
, struct c_declspecs
*quals
, bool static_p
,
3704 struct c_declarator
*declarator
= XOBNEW (&parser_obstack
,
3705 struct c_declarator
);
3706 declarator
->id_loc
= loc
;
3707 declarator
->kind
= cdk_array
;
3708 declarator
->declarator
= 0;
3709 declarator
->u
.array
.dimen
= expr
;
3712 declarator
->u
.array
.attrs
= quals
->attrs
;
3713 declarator
->u
.array
.quals
= quals_from_declspecs (quals
);
3717 declarator
->u
.array
.attrs
= NULL_TREE
;
3718 declarator
->u
.array
.quals
= 0;
3720 declarator
->u
.array
.static_p
= static_p
;
3721 declarator
->u
.array
.vla_unspec_p
= vla_unspec_p
;
3724 if (static_p
|| quals
!= NULL
)
3725 pedwarn (loc
, OPT_pedantic
,
3726 "ISO C90 does not support %<static%> or type "
3727 "qualifiers in parameter array declarators");
3729 pedwarn (loc
, OPT_pedantic
,
3730 "ISO C90 does not support %<[*]%> array declarators");
3734 if (!current_scope
->parm_flag
)
3737 error_at (loc
, "%<[*]%> not allowed in other than "
3738 "function prototype scope");
3739 declarator
->u
.array
.vla_unspec_p
= false;
3742 current_scope
->had_vla_unspec
= true;
3747 /* Set the contained declarator of an array declarator. DECL is the
3748 declarator, as constructed by build_array_declarator; INNER is what
3749 appears on the left of the []. */
3751 struct c_declarator
*
3752 set_array_declarator_inner (struct c_declarator
*decl
,
3753 struct c_declarator
*inner
)
3755 decl
->declarator
= inner
;
3759 /* INIT is a constructor that forms DECL's initializer. If the final
3760 element initializes a flexible array field, add the size of that
3761 initializer to DECL's size. */
3764 add_flexible_array_elts_to_size (tree decl
, tree init
)
3768 if (VEC_empty (constructor_elt
, CONSTRUCTOR_ELTS (init
)))
3771 elt
= VEC_last (constructor_elt
, CONSTRUCTOR_ELTS (init
))->value
;
3772 type
= TREE_TYPE (elt
);
3773 if (TREE_CODE (type
) == ARRAY_TYPE
3774 && TYPE_SIZE (type
) == NULL_TREE
3775 && TYPE_DOMAIN (type
) != NULL_TREE
3776 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) == NULL_TREE
)
3778 complete_array_type (&type
, elt
, false);
3780 = size_binop (PLUS_EXPR
, DECL_SIZE (decl
), TYPE_SIZE (type
));
3781 DECL_SIZE_UNIT (decl
)
3782 = size_binop (PLUS_EXPR
, DECL_SIZE_UNIT (decl
), TYPE_SIZE_UNIT (type
));
3786 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
3787 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
3788 before the type name, and set *EXPR_CONST_OPERANDS, if
3789 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
3790 appear in a constant expression. */
3793 groktypename (struct c_type_name
*type_name
, tree
*expr
,
3794 bool *expr_const_operands
)
3797 tree attrs
= type_name
->specs
->attrs
;
3799 type_name
->specs
->attrs
= NULL_TREE
;
3801 type
= grokdeclarator (type_name
->declarator
, type_name
->specs
, TYPENAME
,
3802 false, NULL
, &attrs
, expr
, expr_const_operands
,
3805 /* Apply attributes. */
3806 decl_attributes (&type
, attrs
, 0);
3811 /* Decode a declarator in an ordinary declaration or data definition.
3812 This is called as soon as the type information and variable name
3813 have been parsed, before parsing the initializer if any.
3814 Here we create the ..._DECL node, fill in its type,
3815 and put it on the list of decls for the current context.
3816 The ..._DECL node is returned as the value.
3818 Exception: for arrays where the length is not specified,
3819 the type is left null, to be filled in by `finish_decl'.
3821 Function definitions do not come here; they go to start_function
3822 instead. However, external and forward declarations of functions
3823 do go through here. Structure field declarations are done by
3824 grokfield and not through here. */
3827 start_decl (struct c_declarator
*declarator
, struct c_declspecs
*declspecs
,
3828 bool initialized
, tree attributes
)
3832 tree expr
= NULL_TREE
;
3833 enum deprecated_states deprecated_state
= DEPRECATED_NORMAL
;
3835 /* An object declared as __attribute__((deprecated)) suppresses
3836 warnings of uses of other deprecated items. */
3837 if (lookup_attribute ("deprecated", attributes
))
3838 deprecated_state
= DEPRECATED_SUPPRESS
;
3840 decl
= grokdeclarator (declarator
, declspecs
,
3841 NORMAL
, initialized
, NULL
, &attributes
, &expr
, NULL
,
3849 if (TREE_CODE (decl
) != FUNCTION_DECL
&& MAIN_NAME_P (DECL_NAME (decl
)))
3850 warning (OPT_Wmain
, "%q+D is usually a function", decl
);
3853 /* Is it valid for this decl to have an initializer at all?
3854 If not, set INITIALIZED to zero, which will indirectly
3855 tell 'finish_decl' to ignore the initializer once it is parsed. */
3856 switch (TREE_CODE (decl
))
3859 error ("typedef %qD is initialized (use __typeof__ instead)", decl
);
3864 error ("function %qD is initialized like a variable", decl
);
3869 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3870 error ("parameter %qD is initialized", decl
);
3875 /* Don't allow initializations for incomplete types except for
3876 arrays which might be completed by the initialization. */
3878 /* This can happen if the array size is an undefined macro.
3879 We already gave a warning, so we don't need another one. */
3880 if (TREE_TYPE (decl
) == error_mark_node
)
3882 else if (COMPLETE_TYPE_P (TREE_TYPE (decl
)))
3884 /* A complete type is ok if size is fixed. */
3886 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl
))) != INTEGER_CST
3887 || C_DECL_VARIABLE_SIZE (decl
))
3889 error ("variable-sized object may not be initialized");
3893 else if (TREE_CODE (TREE_TYPE (decl
)) != ARRAY_TYPE
)
3895 error ("variable %qD has initializer but incomplete type", decl
);
3898 else if (C_DECL_VARIABLE_SIZE (decl
))
3900 /* Although C99 is unclear about whether incomplete arrays
3901 of VLAs themselves count as VLAs, it does not make
3902 sense to permit them to be initialized given that
3903 ordinary VLAs may not be initialized. */
3904 error ("variable-sized object may not be initialized");
3911 if (current_scope
== file_scope
)
3912 TREE_STATIC (decl
) = 1;
3914 /* Tell 'pushdecl' this is an initialized decl
3915 even though we don't yet have the initializer expression.
3916 Also tell 'finish_decl' it may store the real initializer. */
3917 DECL_INITIAL (decl
) = error_mark_node
;
3920 /* If this is a function declaration, write a record describing it to the
3921 prototypes file (if requested). */
3923 if (TREE_CODE (decl
) == FUNCTION_DECL
)
3924 gen_aux_info_record (decl
, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl
)) != 0);
3926 /* ANSI specifies that a tentative definition which is not merged with
3927 a non-tentative definition behaves exactly like a definition with an
3928 initializer equal to zero. (Section 3.7.2)
3930 -fno-common gives strict ANSI behavior, though this tends to break
3931 a large body of code that grew up without this rule.
3933 Thread-local variables are never common, since there's no entrenched
3934 body of code to break, and it allows more efficient variable references
3935 in the presence of dynamic linking. */
3937 if (TREE_CODE (decl
) == VAR_DECL
3939 && TREE_PUBLIC (decl
)
3940 && !DECL_THREAD_LOCAL_P (decl
)
3942 DECL_COMMON (decl
) = 1;
3944 /* Set attributes here so if duplicate decl, will have proper attributes. */
3945 decl_attributes (&decl
, attributes
, 0);
3947 /* Handle gnu_inline attribute. */
3948 if (declspecs
->inline_p
3949 && !flag_gnu89_inline
3950 && TREE_CODE (decl
) == FUNCTION_DECL
3951 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl
))
3952 || current_function_decl
))
3954 if (declspecs
->storage_class
== csc_auto
&& current_scope
!= file_scope
)
3956 else if (declspecs
->storage_class
!= csc_static
)
3957 DECL_EXTERNAL (decl
) = !DECL_EXTERNAL (decl
);
3960 if (TREE_CODE (decl
) == FUNCTION_DECL
3961 && targetm
.calls
.promote_prototypes (TREE_TYPE (decl
)))
3963 struct c_declarator
*ce
= declarator
;
3965 if (ce
->kind
== cdk_pointer
)
3966 ce
= declarator
->declarator
;
3967 if (ce
->kind
== cdk_function
)
3969 tree args
= ce
->u
.arg_info
->parms
;
3970 for (; args
; args
= TREE_CHAIN (args
))
3972 tree type
= TREE_TYPE (args
);
3973 if (type
&& INTEGRAL_TYPE_P (type
)
3974 && TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
))
3975 DECL_ARG_TYPE (args
) = integer_type_node
;
3980 if (TREE_CODE (decl
) == FUNCTION_DECL
3981 && DECL_DECLARED_INLINE_P (decl
)
3982 && DECL_UNINLINABLE (decl
)
3983 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl
)))
3984 warning (OPT_Wattributes
, "inline function %q+D given attribute noinline",
3987 /* C99 6.7.4p3: An inline definition of a function with external
3988 linkage shall not contain a definition of a modifiable object
3989 with static storage duration... */
3990 if (TREE_CODE (decl
) == VAR_DECL
3991 && current_scope
!= file_scope
3992 && TREE_STATIC (decl
)
3993 && !TREE_READONLY (decl
)
3994 && DECL_DECLARED_INLINE_P (current_function_decl
)
3995 && DECL_EXTERNAL (current_function_decl
))
3996 record_inline_static (input_location
, current_function_decl
,
3997 decl
, csi_modifiable
);
3999 /* Add this decl to the current scope.
4000 TEM may equal DECL or it may be a previous decl of the same name. */
4001 tem
= pushdecl (decl
);
4003 if (initialized
&& DECL_EXTERNAL (tem
))
4005 DECL_EXTERNAL (tem
) = 0;
4006 TREE_STATIC (tem
) = 1;
4012 /* Initialize EH if not initialized yet and exceptions are enabled. */
4015 c_maybe_initialize_eh (void)
4017 if (!flag_exceptions
|| c_eh_initialized_p
)
4020 c_eh_initialized_p
= true;
4021 eh_personality_libfunc
4022 = init_one_libfunc (USING_SJLJ_EXCEPTIONS
4023 ? "__gcc_personality_sj0"
4024 : "__gcc_personality_v0");
4025 default_init_unwind_resume_libfunc ();
4026 using_eh_for_cleanups ();
4029 /* Finish processing of a declaration;
4030 install its initial value.
4031 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4032 If the length of an array type is not known before,
4033 it must be determined now, from the initial value, or it is an error.
4035 INIT_LOC is the location of the initial value. */
4038 finish_decl (tree decl
, location_t init_loc
, tree init
,
4039 tree origtype
, tree asmspec_tree
)
4042 bool was_incomplete
= (DECL_SIZE (decl
) == 0);
4043 const char *asmspec
= 0;
4045 /* If a name was specified, get the string. */
4046 if ((TREE_CODE (decl
) == FUNCTION_DECL
|| TREE_CODE (decl
) == VAR_DECL
)
4047 && DECL_FILE_SCOPE_P (decl
))
4048 asmspec_tree
= maybe_apply_renaming_pragma (decl
, asmspec_tree
);
4050 asmspec
= TREE_STRING_POINTER (asmspec_tree
);
4052 /* If `start_decl' didn't like having an initialization, ignore it now. */
4053 if (init
!= 0 && DECL_INITIAL (decl
) == 0)
4056 /* Don't crash if parm is initialized. */
4057 if (TREE_CODE (decl
) == PARM_DECL
)
4061 store_init_value (init_loc
, decl
, init
, origtype
);
4063 if (c_dialect_objc () && (TREE_CODE (decl
) == VAR_DECL
4064 || TREE_CODE (decl
) == FUNCTION_DECL
4065 || TREE_CODE (decl
) == FIELD_DECL
))
4066 objc_check_decl (decl
);
4068 type
= TREE_TYPE (decl
);
4070 /* Deduce size of array from initialization, if not already known. */
4071 if (TREE_CODE (type
) == ARRAY_TYPE
4072 && TYPE_DOMAIN (type
) == 0
4073 && TREE_CODE (decl
) != TYPE_DECL
)
4076 = (TREE_STATIC (decl
)
4077 /* Even if pedantic, an external linkage array
4078 may have incomplete type at first. */
4079 ? pedantic
&& !TREE_PUBLIC (decl
)
4080 : !DECL_EXTERNAL (decl
));
4082 = complete_array_type (&TREE_TYPE (decl
), DECL_INITIAL (decl
),
4085 /* Get the completed type made by complete_array_type. */
4086 type
= TREE_TYPE (decl
);
4091 error ("initializer fails to determine size of %q+D", decl
);
4096 error ("array size missing in %q+D", decl
);
4097 /* If a `static' var's size isn't known,
4098 make it extern as well as static, so it does not get
4100 If it is not `static', then do not mark extern;
4101 finish_incomplete_decl will give it a default size
4102 and it will get allocated. */
4103 else if (!pedantic
&& TREE_STATIC (decl
) && !TREE_PUBLIC (decl
))
4104 DECL_EXTERNAL (decl
) = 1;
4108 error ("zero or negative size array %q+D", decl
);
4112 /* For global variables, update the copy of the type that
4113 exists in the binding. */
4114 if (TREE_PUBLIC (decl
))
4116 struct c_binding
*b_ext
= I_SYMBOL_BINDING (DECL_NAME (decl
));
4117 while (b_ext
&& !B_IN_EXTERNAL_SCOPE (b_ext
))
4118 b_ext
= b_ext
->shadowed
;
4122 b_ext
->u
.type
= composite_type (b_ext
->u
.type
, type
);
4124 b_ext
->u
.type
= type
;
4133 if (DECL_INITIAL (decl
))
4134 TREE_TYPE (DECL_INITIAL (decl
)) = type
;
4136 layout_decl (decl
, 0);
4139 if (TREE_CODE (decl
) == VAR_DECL
)
4141 if (init
&& TREE_CODE (init
) == CONSTRUCTOR
)
4142 add_flexible_array_elts_to_size (decl
, init
);
4144 if (DECL_SIZE (decl
) == 0 && TREE_TYPE (decl
) != error_mark_node
4145 && COMPLETE_TYPE_P (TREE_TYPE (decl
)))
4146 layout_decl (decl
, 0);
4148 if (DECL_SIZE (decl
) == 0
4149 /* Don't give an error if we already gave one earlier. */
4150 && TREE_TYPE (decl
) != error_mark_node
4151 && (TREE_STATIC (decl
)
4152 /* A static variable with an incomplete type
4153 is an error if it is initialized.
4154 Also if it is not file scope.
4155 Otherwise, let it through, but if it is not `extern'
4156 then it may cause an error message later. */
4157 ? (DECL_INITIAL (decl
) != 0
4158 || !DECL_FILE_SCOPE_P (decl
))
4159 /* An automatic variable with an incomplete type
4161 : !DECL_EXTERNAL (decl
)))
4163 error ("storage size of %q+D isn%'t known", decl
);
4164 TREE_TYPE (decl
) = error_mark_node
;
4167 if ((DECL_EXTERNAL (decl
) || TREE_STATIC (decl
))
4168 && DECL_SIZE (decl
) != 0)
4170 if (TREE_CODE (DECL_SIZE (decl
)) == INTEGER_CST
)
4171 constant_expression_warning (DECL_SIZE (decl
));
4174 error ("storage size of %q+D isn%'t constant", decl
);
4175 TREE_TYPE (decl
) = error_mark_node
;
4179 if (TREE_USED (type
))
4180 TREE_USED (decl
) = 1;
4183 /* If this is a function and an assembler name is specified, reset DECL_RTL
4184 so we can give it its new name. Also, update built_in_decls if it
4185 was a normal built-in. */
4186 if (TREE_CODE (decl
) == FUNCTION_DECL
&& asmspec
)
4188 if (DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
)
4189 set_builtin_user_assembler_name (decl
, asmspec
);
4190 set_user_assembler_name (decl
, asmspec
);
4193 /* If #pragma weak was used, mark the decl weak now. */
4194 maybe_apply_pragma_weak (decl
);
4196 /* Output the assembler code and/or RTL code for variables and functions,
4197 unless the type is an undefined structure or union.
4198 If not, it will get done when the type is completed. */
4200 if (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == FUNCTION_DECL
)
4202 /* Determine the ELF visibility. */
4203 if (TREE_PUBLIC (decl
))
4204 c_determine_visibility (decl
);
4206 /* This is a no-op in c-lang.c or something real in objc-act.c. */
4207 if (c_dialect_objc ())
4208 objc_check_decl (decl
);
4212 /* If this is not a static variable, issue a warning.
4213 It doesn't make any sense to give an ASMSPEC for an
4214 ordinary, non-register local variable. Historically,
4215 GCC has accepted -- but ignored -- the ASMSPEC in
4217 if (!DECL_FILE_SCOPE_P (decl
)
4218 && TREE_CODE (decl
) == VAR_DECL
4219 && !C_DECL_REGISTER (decl
)
4220 && !TREE_STATIC (decl
))
4221 warning (0, "ignoring asm-specifier for non-static local "
4222 "variable %q+D", decl
);
4224 set_user_assembler_name (decl
, asmspec
);
4227 if (DECL_FILE_SCOPE_P (decl
))
4229 if (DECL_INITIAL (decl
) == NULL_TREE
4230 || DECL_INITIAL (decl
) == error_mark_node
)
4231 /* Don't output anything
4232 when a tentative file-scope definition is seen.
4233 But at end of compilation, do output code for them. */
4234 DECL_DEFER_OUTPUT (decl
) = 1;
4235 rest_of_decl_compilation (decl
, true, 0);
4239 /* In conjunction with an ASMSPEC, the `register'
4240 keyword indicates that we should place the variable
4241 in a particular register. */
4242 if (asmspec
&& C_DECL_REGISTER (decl
))
4244 DECL_HARD_REGISTER (decl
) = 1;
4245 /* This cannot be done for a structure with volatile
4246 fields, on which DECL_REGISTER will have been
4248 if (!DECL_REGISTER (decl
))
4249 error ("cannot put object with volatile field into register");
4252 if (TREE_CODE (decl
) != FUNCTION_DECL
)
4254 /* If we're building a variable sized type, and we might be
4255 reachable other than via the top of the current binding
4256 level, then create a new BIND_EXPR so that we deallocate
4257 the object at the right time. */
4258 /* Note that DECL_SIZE can be null due to errors. */
4259 if (DECL_SIZE (decl
)
4260 && !TREE_CONSTANT (DECL_SIZE (decl
))
4261 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list
))
4264 bind
= build3 (BIND_EXPR
, void_type_node
, NULL
, NULL
, NULL
);
4265 TREE_SIDE_EFFECTS (bind
) = 1;
4267 BIND_EXPR_BODY (bind
) = push_stmt_list ();
4269 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl
),
4275 if (!DECL_FILE_SCOPE_P (decl
))
4277 /* Recompute the RTL of a local array now
4278 if it used to be an incomplete type. */
4280 && !TREE_STATIC (decl
) && !DECL_EXTERNAL (decl
))
4282 /* If we used it already as memory, it must stay in memory. */
4283 TREE_ADDRESSABLE (decl
) = TREE_USED (decl
);
4284 /* If it's still incomplete now, no init will save it. */
4285 if (DECL_SIZE (decl
) == 0)
4286 DECL_INITIAL (decl
) = 0;
4291 if (TREE_CODE (decl
) == TYPE_DECL
)
4293 if (!DECL_FILE_SCOPE_P (decl
)
4294 && variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
4295 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl
), DECL_EXPR
, decl
));
4297 rest_of_decl_compilation (decl
, DECL_FILE_SCOPE_P (decl
), 0);
4300 /* At the end of a declaration, throw away any variable type sizes
4301 of types defined inside that declaration. There is no use
4302 computing them in the following function definition. */
4303 if (current_scope
== file_scope
)
4304 get_pending_sizes ();
4306 /* Install a cleanup (aka destructor) if one was given. */
4307 if (TREE_CODE (decl
) == VAR_DECL
&& !TREE_STATIC (decl
))
4309 tree attr
= lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl
));
4312 tree cleanup_id
= TREE_VALUE (TREE_VALUE (attr
));
4313 tree cleanup_decl
= lookup_name (cleanup_id
);
4317 /* Build "cleanup(&decl)" for the destructor. */
4318 cleanup
= build_unary_op (input_location
, ADDR_EXPR
, decl
, 0);
4319 vec
= VEC_alloc (tree
, gc
, 1);
4320 VEC_quick_push (tree
, vec
, cleanup
);
4321 cleanup
= build_function_call_vec (DECL_SOURCE_LOCATION (decl
),
4322 cleanup_decl
, vec
, NULL
);
4323 VEC_free (tree
, gc
, vec
);
4325 /* Don't warn about decl unused; the cleanup uses it. */
4326 TREE_USED (decl
) = 1;
4327 TREE_USED (cleanup_decl
) = 1;
4329 /* Initialize EH, if we've been told to do so. */
4330 c_maybe_initialize_eh ();
4332 push_cleanup (decl
, cleanup
, false);
4337 /* Given a parsed parameter declaration, decode it into a PARM_DECL. */
4340 grokparm (const struct c_parm
*parm
)
4342 tree attrs
= parm
->attrs
;
4343 tree decl
= grokdeclarator (parm
->declarator
, parm
->specs
, PARM
, false,
4344 NULL
, &attrs
, NULL
, NULL
, DEPRECATED_NORMAL
);
4346 decl_attributes (&decl
, attrs
, 0);
4351 /* Given a parsed parameter declaration, decode it into a PARM_DECL
4352 and push that on the current scope. */
4355 push_parm_decl (const struct c_parm
*parm
)
4357 tree attrs
= parm
->attrs
;
4360 decl
= grokdeclarator (parm
->declarator
, parm
->specs
, PARM
, false, NULL
,
4361 &attrs
, NULL
, NULL
, DEPRECATED_NORMAL
);
4362 decl_attributes (&decl
, attrs
, 0);
4364 decl
= pushdecl (decl
);
4366 finish_decl (decl
, input_location
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
4369 /* Mark all the parameter declarations to date as forward decls.
4370 Also diagnose use of this extension. */
4373 mark_forward_parm_decls (void)
4375 struct c_binding
*b
;
4377 if (pedantic
&& !current_scope
->warned_forward_parm_decls
)
4379 pedwarn (input_location
, OPT_pedantic
,
4380 "ISO C forbids forward parameter declarations");
4381 current_scope
->warned_forward_parm_decls
= true;
4384 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
4385 if (TREE_CODE (b
->decl
) == PARM_DECL
)
4386 TREE_ASM_WRITTEN (b
->decl
) = 1;
4389 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
4390 literal, which may be an incomplete array type completed by the
4391 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
4392 literal. NON_CONST is true if the initializers contain something
4393 that cannot occur in a constant expression. */
4396 build_compound_literal (location_t loc
, tree type
, tree init
, bool non_const
)
4398 /* We do not use start_decl here because we have a type, not a declarator;
4399 and do not use finish_decl because the decl should be stored inside
4400 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
4405 if (type
== error_mark_node
)
4406 return error_mark_node
;
4408 decl
= build_decl (loc
, VAR_DECL
, NULL_TREE
, type
);
4409 DECL_EXTERNAL (decl
) = 0;
4410 TREE_PUBLIC (decl
) = 0;
4411 TREE_STATIC (decl
) = (current_scope
== file_scope
);
4412 DECL_CONTEXT (decl
) = current_function_decl
;
4413 TREE_USED (decl
) = 1;
4414 TREE_TYPE (decl
) = type
;
4415 TREE_READONLY (decl
) = TYPE_READONLY (type
);
4416 store_init_value (loc
, decl
, init
, NULL_TREE
);
4418 if (TREE_CODE (type
) == ARRAY_TYPE
&& !COMPLETE_TYPE_P (type
))
4420 int failure
= complete_array_type (&TREE_TYPE (decl
),
4421 DECL_INITIAL (decl
), true);
4422 gcc_assert (!failure
);
4424 type
= TREE_TYPE (decl
);
4425 TREE_TYPE (DECL_INITIAL (decl
)) = type
;
4428 if (type
== error_mark_node
|| !COMPLETE_TYPE_P (type
))
4429 return error_mark_node
;
4431 stmt
= build_stmt (DECL_SOURCE_LOCATION (decl
), DECL_EXPR
, decl
);
4432 complit
= build1 (COMPOUND_LITERAL_EXPR
, type
, stmt
);
4433 TREE_SIDE_EFFECTS (complit
) = 1;
4435 layout_decl (decl
, 0);
4437 if (TREE_STATIC (decl
))
4439 /* This decl needs a name for the assembler output. */
4440 set_compound_literal_name (decl
);
4441 DECL_DEFER_OUTPUT (decl
) = 1;
4442 DECL_COMDAT (decl
) = 1;
4443 DECL_ARTIFICIAL (decl
) = 1;
4444 DECL_IGNORED_P (decl
) = 1;
4446 rest_of_decl_compilation (decl
, 1, 0);
4451 complit
= build2 (C_MAYBE_CONST_EXPR
, type
, NULL
, complit
);
4452 C_MAYBE_CONST_EXPR_NON_CONST (complit
) = 1;
4458 /* Check the type of a compound literal. Here we just check that it
4459 is valid for C++. */
4462 check_compound_literal_type (location_t loc
, struct c_type_name
*type_name
)
4464 if (warn_cxx_compat
&& type_name
->specs
->tag_defined_p
)
4465 warning_at (loc
, OPT_Wc___compat
,
4466 "defining a type in a compound literal is invalid in C++");
4469 /* Determine whether TYPE is a structure with a flexible array member,
4470 or a union containing such a structure (possibly recursively). */
4473 flexible_array_type_p (tree type
)
4476 switch (TREE_CODE (type
))
4479 x
= TYPE_FIELDS (type
);
4482 while (TREE_CHAIN (x
) != NULL_TREE
)
4484 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
4485 && TYPE_SIZE (TREE_TYPE (x
)) == NULL_TREE
4486 && TYPE_DOMAIN (TREE_TYPE (x
)) != NULL_TREE
4487 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x
))) == NULL_TREE
)
4491 for (x
= TYPE_FIELDS (type
); x
!= NULL_TREE
; x
= TREE_CHAIN (x
))
4493 if (flexible_array_type_p (TREE_TYPE (x
)))
4502 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
4503 replacing with appropriate values if they are invalid. */
4505 check_bitfield_type_and_width (tree
*type
, tree
*width
, tree orig_name
)
4508 unsigned int max_width
;
4509 unsigned HOST_WIDE_INT w
;
4510 const char *name
= (orig_name
4511 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name
))
4512 : _("<anonymous>"));
4514 /* Detect and ignore out of range field width and process valid
4516 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width
))
4517 || TREE_CODE (*width
) != INTEGER_CST
)
4519 error ("bit-field %qs width not an integer constant", name
);
4520 *width
= integer_one_node
;
4524 constant_expression_warning (*width
);
4525 if (tree_int_cst_sgn (*width
) < 0)
4527 error ("negative width in bit-field %qs", name
);
4528 *width
= integer_one_node
;
4530 else if (integer_zerop (*width
) && orig_name
)
4532 error ("zero width for bit-field %qs", name
);
4533 *width
= integer_one_node
;
4537 /* Detect invalid bit-field type. */
4538 if (TREE_CODE (*type
) != INTEGER_TYPE
4539 && TREE_CODE (*type
) != BOOLEAN_TYPE
4540 && TREE_CODE (*type
) != ENUMERAL_TYPE
)
4542 error ("bit-field %qs has invalid type", name
);
4543 *type
= unsigned_type_node
;
4546 type_mv
= TYPE_MAIN_VARIANT (*type
);
4547 if (!in_system_header
4548 && type_mv
!= integer_type_node
4549 && type_mv
!= unsigned_type_node
4550 && type_mv
!= boolean_type_node
)
4551 pedwarn (input_location
, OPT_pedantic
,
4552 "type of bit-field %qs is a GCC extension", name
);
4554 max_width
= TYPE_PRECISION (*type
);
4556 if (0 < compare_tree_int (*width
, max_width
))
4558 error ("width of %qs exceeds its type", name
);
4560 *width
= build_int_cst (NULL_TREE
, w
);
4563 w
= tree_low_cst (*width
, 1);
4565 if (TREE_CODE (*type
) == ENUMERAL_TYPE
)
4567 struct lang_type
*lt
= TYPE_LANG_SPECIFIC (*type
);
4569 || w
< tree_int_cst_min_precision (lt
->enum_min
, TYPE_UNSIGNED (*type
))
4570 || w
< tree_int_cst_min_precision (lt
->enum_max
, TYPE_UNSIGNED (*type
)))
4571 warning (0, "%qs is narrower than values of its type", name
);
4577 /* Print warning about variable length array if necessary. */
4580 warn_variable_length_array (tree name
, tree size
)
4582 int const_size
= TREE_CONSTANT (size
);
4584 if (!flag_isoc99
&& pedantic
&& warn_vla
!= 0)
4589 pedwarn (input_location
, OPT_Wvla
,
4590 "ISO C90 forbids array %qE whose size "
4591 "can%'t be evaluated",
4594 pedwarn (input_location
, OPT_Wvla
, "ISO C90 forbids array whose size "
4595 "can%'t be evaluated");
4600 pedwarn (input_location
, OPT_Wvla
,
4601 "ISO C90 forbids variable length array %qE",
4604 pedwarn (input_location
, OPT_Wvla
, "ISO C90 forbids variable length array");
4607 else if (warn_vla
> 0)
4613 "the size of array %qE can"
4614 "%'t be evaluated", name
);
4617 "the size of array can %'t be evaluated");
4623 "variable length array %qE is used",
4627 "variable length array is used");
4632 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR to
4633 serve as the actual size-expression for a type or decl. This is
4634 like variable_size in stor-layout.c, but we make global_bindings_p
4635 return negative to avoid calls to that function from outside the
4636 front end resulting in errors at file scope, then call this version
4637 instead from front-end code. */
4640 c_variable_size (tree size
)
4644 if (TREE_CONSTANT (size
))
4647 size
= save_expr (size
);
4649 save
= skip_simple_arithmetic (size
);
4651 if (cfun
&& cfun
->dont_save_pending_sizes_p
)
4654 if (!global_bindings_p ())
4655 put_pending_size (save
);
4660 /* Given declspecs and a declarator,
4661 determine the name and type of the object declared
4662 and construct a ..._DECL node for it.
4663 (In one case we can return a ..._TYPE node instead.
4664 For invalid input we sometimes return 0.)
4666 DECLSPECS is a c_declspecs structure for the declaration specifiers.
4668 DECL_CONTEXT says which syntactic context this declaration is in:
4669 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
4670 FUNCDEF for a function definition. Like NORMAL but a few different
4671 error messages in each case. Return value may be zero meaning
4672 this definition is too screwy to try to parse.
4673 PARM for a parameter declaration (either within a function prototype
4674 or before a function body). Make a PARM_DECL, or return void_type_node.
4675 TYPENAME if for a typename (in a cast or sizeof).
4676 Don't make a DECL node; just return the ..._TYPE node.
4677 FIELD for a struct or union field; make a FIELD_DECL.
4678 INITIALIZED is true if the decl has an initializer.
4679 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
4680 representing the width of the bit-field.
4681 DECL_ATTRS points to the list of attributes that should be added to this
4682 decl. Any nested attributes that belong on the decl itself will be
4684 If EXPR is not NULL, any expressions that need to be evaluated as
4685 part of evaluating variably modified types will be stored in *EXPR.
4686 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
4687 set to indicate whether operands in *EXPR can be used in constant
4689 DEPRECATED_STATE is a deprecated_states value indicating whether
4690 deprecation warnings should be suppressed.
4692 In the TYPENAME case, DECLARATOR is really an absolute declarator.
4693 It may also be so in the PARM case, for a prototype where the
4694 argument type is specified but not the name.
4696 This function is where the complicated C meanings of `static'
4697 and `extern' are interpreted. */
4700 grokdeclarator (const struct c_declarator
*declarator
,
4701 struct c_declspecs
*declspecs
,
4702 enum decl_context decl_context
, bool initialized
, tree
*width
,
4703 tree
*decl_attrs
, tree
*expr
, bool *expr_const_operands
,
4704 enum deprecated_states deprecated_state
)
4706 tree type
= declspecs
->type
;
4707 bool threadp
= declspecs
->thread_p
;
4708 enum c_storage_class storage_class
= declspecs
->storage_class
;
4712 int type_quals
= TYPE_UNQUALIFIED
;
4713 tree name
= NULL_TREE
;
4714 bool funcdef_flag
= false;
4715 bool funcdef_syntax
= false;
4716 bool size_varies
= false;
4717 tree decl_attr
= declspecs
->decl_attr
;
4718 int array_ptr_quals
= TYPE_UNQUALIFIED
;
4719 tree array_ptr_attrs
= NULL_TREE
;
4720 int array_parm_static
= 0;
4721 bool array_parm_vla_unspec_p
= false;
4722 tree returned_attrs
= NULL_TREE
;
4723 bool bitfield
= width
!= NULL
;
4725 struct c_arg_info
*arg_info
= 0;
4726 location_t loc
= UNKNOWN_LOCATION
;
4729 bool expr_const_operands_dummy
;
4733 if (expr_const_operands
== NULL
)
4734 expr_const_operands
= &expr_const_operands_dummy
;
4736 *expr
= declspecs
->expr
;
4737 *expr_const_operands
= declspecs
->expr_const_operands
;
4739 if (decl_context
== FUNCDEF
)
4740 funcdef_flag
= true, decl_context
= NORMAL
;
4742 /* Look inside a declarator for the name being declared
4743 and get it as an IDENTIFIER_NODE, for an error message. */
4745 const struct c_declarator
*decl
= declarator
;
4756 funcdef_syntax
= (decl
->kind
== cdk_function
);
4757 decl
= decl
->declarator
;
4761 decl
= decl
->declarator
;
4776 gcc_assert (decl_context
== PARM
4777 || decl_context
== TYPENAME
4778 || (decl_context
== FIELD
4779 && declarator
->kind
== cdk_id
));
4780 gcc_assert (!initialized
);
4784 /* A function definition's declarator must have the form of
4785 a function declarator. */
4787 if (funcdef_flag
&& !funcdef_syntax
)
4790 /* If this looks like a function definition, make it one,
4791 even if it occurs where parms are expected.
4792 Then store_parm_decls will reject it and not use it as a parm. */
4793 if (decl_context
== NORMAL
&& !funcdef_flag
&& current_scope
->parm_flag
)
4794 decl_context
= PARM
;
4796 if (declspecs
->deprecated_p
&& deprecated_state
!= DEPRECATED_SUPPRESS
)
4797 warn_deprecated_use (declspecs
->type
, declspecs
->decl_attr
);
4799 if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
4800 && current_scope
== file_scope
4801 && variably_modified_type_p (type
, NULL_TREE
))
4804 error_at (loc
, "variably modified %qE at file scope", name
);
4806 error_at (loc
, "variably modified field at file scope");
4807 type
= integer_type_node
;
4810 size_varies
= C_TYPE_VARIABLE_SIZE (type
) != 0;
4812 /* Diagnose defaulting to "int". */
4814 if (declspecs
->default_int_p
&& !in_system_header
)
4816 /* Issue a warning if this is an ISO C 99 program or if
4817 -Wreturn-type and this is a function, or if -Wimplicit;
4818 prefer the former warning since it is more explicit. */
4819 if ((warn_implicit_int
|| warn_return_type
|| flag_isoc99
)
4821 warn_about_return_type
= 1;
4825 pedwarn_c99 (loc
, flag_isoc99
? 0 : OPT_Wimplicit_int
,
4826 "type defaults to %<int%> in declaration of %qE",
4829 pedwarn_c99 (input_location
, flag_isoc99
? 0 : OPT_Wimplicit_int
,
4830 "type defaults to %<int%> in type name");
4834 /* Adjust the type if a bit-field is being declared,
4835 -funsigned-bitfields applied and the type is not explicitly
4837 if (bitfield
&& !flag_signed_bitfields
&& !declspecs
->explicit_signed_p
4838 && TREE_CODE (type
) == INTEGER_TYPE
)
4839 type
= unsigned_type_for (type
);
4841 /* Figure out the type qualifiers for the declaration. There are
4842 two ways a declaration can become qualified. One is something
4843 like `const int i' where the `const' is explicit. Another is
4844 something like `typedef const int CI; CI i' where the type of the
4845 declaration contains the `const'. A third possibility is that
4846 there is a type qualifier on the element type of a typedefed
4847 array type, in which case we should extract that qualifier so
4848 that c_apply_type_quals_to_decl receives the full list of
4849 qualifiers to work with (C90 is not entirely clear about whether
4850 duplicate qualifiers should be diagnosed in this case, but it
4851 seems most appropriate to do so). */
4852 element_type
= strip_array_types (type
);
4853 constp
= declspecs
->const_p
+ TYPE_READONLY (element_type
);
4854 restrictp
= declspecs
->restrict_p
+ TYPE_RESTRICT (element_type
);
4855 volatilep
= declspecs
->volatile_p
+ TYPE_VOLATILE (element_type
);
4856 if (pedantic
&& !flag_isoc99
)
4859 pedwarn (loc
, OPT_pedantic
, "duplicate %<const%>");
4861 pedwarn (loc
, OPT_pedantic
, "duplicate %<restrict%>");
4863 pedwarn (loc
, OPT_pedantic
, "duplicate %<volatile%>");
4865 if (!flag_gen_aux_info
&& (TYPE_QUALS (element_type
)))
4866 type
= TYPE_MAIN_VARIANT (type
);
4867 type_quals
= ((constp
? TYPE_QUAL_CONST
: 0)
4868 | (restrictp
? TYPE_QUAL_RESTRICT
: 0)
4869 | (volatilep
? TYPE_QUAL_VOLATILE
: 0));
4871 /* Warn about storage classes that are invalid for certain
4872 kinds of declarations (parameters, typenames, etc.). */
4876 || storage_class
== csc_auto
4877 || storage_class
== csc_register
4878 || storage_class
== csc_typedef
))
4880 if (storage_class
== csc_auto
)
4882 (current_scope
== file_scope
) ? 0 : OPT_pedantic
,
4883 "function definition declared %<auto%>");
4884 if (storage_class
== csc_register
)
4885 error_at (loc
, "function definition declared %<register%>");
4886 if (storage_class
== csc_typedef
)
4887 error_at (loc
, "function definition declared %<typedef%>");
4889 error_at (loc
, "function definition declared %<__thread%>");
4891 if (storage_class
== csc_auto
4892 || storage_class
== csc_register
4893 || storage_class
== csc_typedef
)
4894 storage_class
= csc_none
;
4896 else if (decl_context
!= NORMAL
&& (storage_class
!= csc_none
|| threadp
))
4898 if (decl_context
== PARM
&& storage_class
== csc_register
)
4902 switch (decl_context
)
4906 error_at (loc
, "storage class specified for structure "
4909 error_at (loc
, "storage class specified for structure field");
4913 error_at (loc
, "storage class specified for parameter %qE",
4916 error_at (loc
, "storage class specified for unnamed parameter");
4919 error_at (loc
, "storage class specified for typename");
4922 storage_class
= csc_none
;
4926 else if (storage_class
== csc_extern
4930 /* 'extern' with initialization is invalid if not at file scope. */
4931 if (current_scope
== file_scope
)
4933 /* It is fine to have 'extern const' when compiling at C
4934 and C++ intersection. */
4935 if (!(warn_cxx_compat
&& constp
))
4936 warning_at (loc
, 0, "%qE initialized and declared %<extern%>",
4940 error_at (loc
, "%qE has both %<extern%> and initializer", name
);
4942 else if (current_scope
== file_scope
)
4944 if (storage_class
== csc_auto
)
4945 error_at (loc
, "file-scope declaration of %qE specifies %<auto%>",
4947 if (pedantic
&& storage_class
== csc_register
)
4948 pedwarn (input_location
, OPT_pedantic
,
4949 "file-scope declaration of %qE specifies %<register%>", name
);
4953 if (storage_class
== csc_extern
&& funcdef_flag
)
4954 error_at (loc
, "nested function %qE declared %<extern%>", name
);
4955 else if (threadp
&& storage_class
== csc_none
)
4957 error_at (loc
, "function-scope %qE implicitly auto and declared "
4964 /* Now figure out the structure of the declarator proper.
4965 Descend through it, creating more complex types, until we reach
4966 the declared identifier (or NULL_TREE, in an absolute declarator).
4967 At each stage we maintain an unqualified version of the type
4968 together with any qualifiers that should be applied to it with
4969 c_build_qualified_type; this way, array types including
4970 multidimensional array types are first built up in unqualified
4971 form and then the qualified form is created with
4972 TYPE_MAIN_VARIANT pointing to the unqualified form. */
4974 while (declarator
&& declarator
->kind
!= cdk_id
)
4976 if (type
== error_mark_node
)
4978 declarator
= declarator
->declarator
;
4982 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
4983 a cdk_pointer (for *...),
4984 a cdk_function (for ...(...)),
4985 a cdk_attrs (for nested attributes),
4986 or a cdk_id (for the name being declared
4987 or the place in an absolute declarator
4988 where the name was omitted).
4989 For the last case, we have just exited the loop.
4991 At this point, TYPE is the type of elements of an array,
4992 or for a function to return, or for a pointer to point to.
4993 After this sequence of ifs, TYPE is the type of the
4994 array or function or pointer, and DECLARATOR has had its
4995 outermost layer removed. */
4997 if (array_ptr_quals
!= TYPE_UNQUALIFIED
4998 || array_ptr_attrs
!= NULL_TREE
4999 || array_parm_static
)
5001 /* Only the innermost declarator (making a parameter be of
5002 array type which is converted to pointer type)
5003 may have static or type qualifiers. */
5004 error_at (loc
, "static or type qualifiers in non-parameter array declarator");
5005 array_ptr_quals
= TYPE_UNQUALIFIED
;
5006 array_ptr_attrs
= NULL_TREE
;
5007 array_parm_static
= 0;
5010 switch (declarator
->kind
)
5014 /* A declarator with embedded attributes. */
5015 tree attrs
= declarator
->u
.attrs
;
5016 const struct c_declarator
*inner_decl
;
5018 declarator
= declarator
->declarator
;
5019 inner_decl
= declarator
;
5020 while (inner_decl
->kind
== cdk_attrs
)
5021 inner_decl
= inner_decl
->declarator
;
5022 if (inner_decl
->kind
== cdk_id
)
5023 attr_flags
|= (int) ATTR_FLAG_DECL_NEXT
;
5024 else if (inner_decl
->kind
== cdk_function
)
5025 attr_flags
|= (int) ATTR_FLAG_FUNCTION_NEXT
;
5026 else if (inner_decl
->kind
== cdk_array
)
5027 attr_flags
|= (int) ATTR_FLAG_ARRAY_NEXT
;
5028 returned_attrs
= decl_attributes (&type
,
5029 chainon (returned_attrs
, attrs
),
5035 tree itype
= NULL_TREE
;
5036 tree size
= declarator
->u
.array
.dimen
;
5037 /* The index is a signed object `sizetype' bits wide. */
5038 tree index_type
= c_common_signed_type (sizetype
);
5040 array_ptr_quals
= declarator
->u
.array
.quals
;
5041 array_ptr_attrs
= declarator
->u
.array
.attrs
;
5042 array_parm_static
= declarator
->u
.array
.static_p
;
5043 array_parm_vla_unspec_p
= declarator
->u
.array
.vla_unspec_p
;
5045 declarator
= declarator
->declarator
;
5047 /* Check for some types that there cannot be arrays of. */
5049 if (VOID_TYPE_P (type
))
5052 error_at (loc
, "declaration of %qE as array of voids", name
);
5054 error_at (loc
, "declaration of type name as array of voids");
5055 type
= error_mark_node
;
5058 if (TREE_CODE (type
) == FUNCTION_TYPE
)
5061 error_at (loc
, "declaration of %qE as array of functions",
5064 error_at (loc
, "declaration of type name as array of "
5066 type
= error_mark_node
;
5069 if (pedantic
&& !in_system_header
&& flexible_array_type_p (type
))
5070 pedwarn (loc
, OPT_pedantic
,
5071 "invalid use of structure with flexible array member");
5073 if (size
== error_mark_node
)
5074 type
= error_mark_node
;
5076 if (type
== error_mark_node
)
5079 /* If size was specified, set ITYPE to a range-type for
5080 that size. Otherwise, ITYPE remains null. finish_decl
5081 may figure it out from an initial value. */
5085 bool size_maybe_const
= true;
5086 bool size_int_const
= (TREE_CODE (size
) == INTEGER_CST
5087 && !TREE_OVERFLOW (size
));
5088 bool this_size_varies
= false;
5090 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5092 STRIP_TYPE_NOPS (size
);
5094 if (!INTEGRAL_TYPE_P (TREE_TYPE (size
)))
5097 error_at (loc
, "size of array %qE has non-integer type",
5101 "size of unnamed array has non-integer type");
5102 size
= integer_one_node
;
5105 size
= c_fully_fold (size
, false, &size_maybe_const
);
5107 if (pedantic
&& size_maybe_const
&& integer_zerop (size
))
5110 pedwarn (loc
, OPT_pedantic
,
5111 "ISO C forbids zero-size array %qE", name
);
5113 pedwarn (loc
, OPT_pedantic
,
5114 "ISO C forbids zero-size array");
5117 if (TREE_CODE (size
) == INTEGER_CST
&& size_maybe_const
)
5119 constant_expression_warning (size
);
5120 if (tree_int_cst_sgn (size
) < 0)
5123 error_at (loc
, "size of array %qE is negative", name
);
5125 error_at (loc
, "size of unnamed array is negative");
5126 size
= integer_one_node
;
5128 /* Handle a size folded to an integer constant but
5129 not an integer constant expression. */
5130 if (!size_int_const
)
5132 /* If this is a file scope declaration of an
5133 ordinary identifier, this is invalid code;
5134 diagnosing it here and not subsequently
5135 treating the type as variable-length avoids
5136 more confusing diagnostics later. */
5137 if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
5138 && current_scope
== file_scope
)
5139 pedwarn (input_location
, 0,
5140 "variably modified %qE at file scope",
5143 this_size_varies
= size_varies
= true;
5144 warn_variable_length_array (name
, size
);
5147 else if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
5148 && current_scope
== file_scope
)
5150 error_at (loc
, "variably modified %qE at file scope", name
);
5151 size
= integer_one_node
;
5155 /* Make sure the array size remains visibly
5156 nonconstant even if it is (eg) a const variable
5157 with known value. */
5158 this_size_varies
= size_varies
= true;
5159 warn_variable_length_array (name
, size
);
5162 if (integer_zerop (size
) && !this_size_varies
)
5164 /* A zero-length array cannot be represented with
5165 an unsigned index type, which is what we'll
5166 get with build_index_type. Create an
5167 open-ended range instead. */
5168 itype
= build_range_type (sizetype
, size
, NULL_TREE
);
5172 /* Arrange for the SAVE_EXPR on the inside of the
5173 MINUS_EXPR, which allows the -1 to get folded
5174 with the +1 that happens when building TYPE_SIZE. */
5176 size
= c_variable_size (size
);
5177 if (this_size_varies
&& TREE_CODE (size
) == INTEGER_CST
)
5178 size
= build2 (COMPOUND_EXPR
, TREE_TYPE (size
),
5179 integer_zero_node
, size
);
5181 /* Compute the maximum valid index, that is, size
5182 - 1. Do the calculation in index_type, so that
5183 if it is a variable the computations will be
5184 done in the proper mode. */
5185 itype
= fold_build2 (MINUS_EXPR
, index_type
,
5186 convert (index_type
, size
),
5187 convert (index_type
,
5190 /* If that overflowed, the array is too big. ???
5191 While a size of INT_MAX+1 technically shouldn't
5192 cause an overflow (because we subtract 1), the
5193 overflow is recorded during the conversion to
5194 index_type, before the subtraction. Handling
5195 this case seems like an unnecessary
5197 if (TREE_CODE (itype
) == INTEGER_CST
5198 && TREE_OVERFLOW (itype
))
5201 error_at (loc
, "size of array %qE is too large",
5204 error_at (loc
, "size of unnamed array is too large");
5205 type
= error_mark_node
;
5209 itype
= build_index_type (itype
);
5211 if (this_size_varies
)
5214 *expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (size
),
5218 *expr_const_operands
&= size_maybe_const
;
5221 else if (decl_context
== FIELD
)
5223 bool flexible_array_member
= false;
5224 if (array_parm_vla_unspec_p
)
5225 /* Field names can in fact have function prototype
5226 scope so [*] is disallowed here through making
5227 the field variably modified, not through being
5228 something other than a declaration with function
5233 const struct c_declarator
*t
= declarator
;
5234 while (t
->kind
== cdk_attrs
)
5236 flexible_array_member
= (t
->kind
== cdk_id
);
5238 if (flexible_array_member
5239 && pedantic
&& !flag_isoc99
&& !in_system_header
)
5240 pedwarn (loc
, OPT_pedantic
,
5241 "ISO C90 does not support flexible array members");
5243 /* ISO C99 Flexible array members are effectively
5244 identical to GCC's zero-length array extension. */
5245 if (flexible_array_member
|| array_parm_vla_unspec_p
)
5246 itype
= build_range_type (sizetype
, size_zero_node
,
5249 else if (decl_context
== PARM
)
5251 if (array_parm_vla_unspec_p
)
5253 itype
= build_range_type (sizetype
, size_zero_node
, NULL_TREE
);
5257 else if (decl_context
== TYPENAME
)
5259 if (array_parm_vla_unspec_p
)
5262 warning (0, "%<[*]%> not in a declaration");
5263 /* We use this to avoid messing up with incomplete
5264 array types of the same type, that would
5265 otherwise be modified below. */
5266 itype
= build_range_type (sizetype
, size_zero_node
,
5272 /* Complain about arrays of incomplete types. */
5273 if (!COMPLETE_TYPE_P (type
))
5275 error_at (loc
, "array type has incomplete element type");
5276 type
= error_mark_node
;
5279 /* When itype is NULL, a shared incomplete array type is
5280 returned for all array of a given type. Elsewhere we
5281 make sure we don't complete that type before copying
5282 it, but here we want to make sure we don't ever
5283 modify the shared type, so we gcc_assert (itype)
5285 type
= build_array_type (type
, itype
);
5287 if (type
!= error_mark_node
)
5291 /* It is ok to modify type here even if itype is
5292 NULL: if size_varies, we're in a
5293 multi-dimensional array and the inner type has
5294 variable size, so the enclosing shared array type
5296 if (size
&& TREE_CODE (size
) == INTEGER_CST
)
5298 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
5299 C_TYPE_VARIABLE_SIZE (type
) = 1;
5302 /* The GCC extension for zero-length arrays differs from
5303 ISO flexible array members in that sizeof yields
5305 if (size
&& integer_zerop (size
))
5308 TYPE_SIZE (type
) = bitsize_zero_node
;
5309 TYPE_SIZE_UNIT (type
) = size_zero_node
;
5311 if (array_parm_vla_unspec_p
)
5314 /* The type is complete. C99 6.7.5.2p4 */
5315 TYPE_SIZE (type
) = bitsize_zero_node
;
5316 TYPE_SIZE_UNIT (type
) = size_zero_node
;
5320 if (decl_context
!= PARM
5321 && (array_ptr_quals
!= TYPE_UNQUALIFIED
5322 || array_ptr_attrs
!= NULL_TREE
5323 || array_parm_static
))
5325 error_at (loc
, "static or type qualifiers in non-parameter array declarator");
5326 array_ptr_quals
= TYPE_UNQUALIFIED
;
5327 array_ptr_attrs
= NULL_TREE
;
5328 array_parm_static
= 0;
5334 /* Say it's a definition only for the declarator closest
5335 to the identifier, apart possibly from some
5337 bool really_funcdef
= false;
5341 const struct c_declarator
*t
= declarator
->declarator
;
5342 while (t
->kind
== cdk_attrs
)
5344 really_funcdef
= (t
->kind
== cdk_id
);
5347 /* Declaring a function type. Make sure we have a valid
5348 type for the function to return. */
5349 if (type
== error_mark_node
)
5352 size_varies
= false;
5354 /* Warn about some types functions can't return. */
5355 if (TREE_CODE (type
) == FUNCTION_TYPE
)
5358 error_at (loc
, "%qE declared as function returning a "
5361 error_at (loc
, "type name declared as function "
5362 "returning a function");
5363 type
= integer_type_node
;
5365 if (TREE_CODE (type
) == ARRAY_TYPE
)
5368 error_at (loc
, "%qE declared as function returning an array",
5371 error_at (loc
, "type name declared as function returning "
5373 type
= integer_type_node
;
5375 errmsg
= targetm
.invalid_return_type (type
);
5379 type
= integer_type_node
;
5382 /* Construct the function type and go to the next
5383 inner layer of declarator. */
5384 arg_info
= declarator
->u
.arg_info
;
5385 arg_types
= grokparms (arg_info
, really_funcdef
);
5387 put_pending_sizes (arg_info
->pending_sizes
);
5389 /* Type qualifiers before the return type of the function
5390 qualify the return type, not the function type. */
5393 /* Type qualifiers on a function return type are
5394 normally permitted by the standard but have no
5395 effect, so give a warning at -Wreturn-type.
5396 Qualifiers on a void return type are banned on
5397 function definitions in ISO C; GCC used to used
5398 them for noreturn functions. */
5399 if (VOID_TYPE_P (type
) && really_funcdef
)
5401 "function definition has qualified void return type");
5403 warning_at (loc
, OPT_Wignored_qualifiers
,
5404 "type qualifiers ignored on function return type");
5406 type
= c_build_qualified_type (type
, type_quals
);
5408 type_quals
= TYPE_UNQUALIFIED
;
5410 type
= build_function_type (type
, arg_types
);
5411 declarator
= declarator
->declarator
;
5413 /* Set the TYPE_CONTEXTs for each tagged type which is local to
5414 the formal parameter list of this FUNCTION_TYPE to point to
5415 the FUNCTION_TYPE node itself. */
5419 for (link
= arg_info
->tags
;
5421 link
= TREE_CHAIN (link
))
5422 TYPE_CONTEXT (TREE_VALUE (link
)) = type
;
5428 /* Merge any constancy or volatility into the target type
5431 if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
5433 pedwarn (loc
, OPT_pedantic
,
5434 "ISO C forbids qualified function types");
5436 type
= c_build_qualified_type (type
, type_quals
);
5437 size_varies
= false;
5439 /* When the pointed-to type involves components of variable size,
5440 care must be taken to ensure that the size evaluation code is
5441 emitted early enough to dominate all the possible later uses
5442 and late enough for the variables on which it depends to have
5445 This is expected to happen automatically when the pointed-to
5446 type has a name/declaration of it's own, but special attention
5447 is required if the type is anonymous.
5449 We handle the NORMAL and FIELD contexts here by attaching an
5450 artificial TYPE_DECL to such pointed-to type. This forces the
5451 sizes evaluation at a safe point and ensures it is not deferred
5452 until e.g. within a deeper conditional context.
5454 We expect nothing to be needed here for PARM or TYPENAME.
5455 Pushing a TYPE_DECL at this point for TYPENAME would actually
5456 be incorrect, as we might be in the middle of an expression
5457 with side effects on the pointed-to type size "arguments" prior
5458 to the pointer declaration point and the fake TYPE_DECL in the
5459 enclosing context would force the size evaluation prior to the
5462 if (!TYPE_NAME (type
)
5463 && (decl_context
== NORMAL
|| decl_context
== FIELD
)
5464 && variably_modified_type_p (type
, NULL_TREE
))
5466 tree decl
= build_decl (loc
, TYPE_DECL
, NULL_TREE
, type
);
5467 DECL_ARTIFICIAL (decl
) = 1;
5469 finish_decl (decl
, loc
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
5470 TYPE_NAME (type
) = decl
;
5473 type
= build_pointer_type (type
);
5475 /* Process type qualifiers (such as const or volatile)
5476 that were given inside the `*'. */
5477 type_quals
= declarator
->u
.pointer_quals
;
5479 declarator
= declarator
->declarator
;
5486 *decl_attrs
= chainon (returned_attrs
, *decl_attrs
);
5488 /* Now TYPE has the actual type, apart from any qualifiers in
5491 /* Check the type and width of a bit-field. */
5493 check_bitfield_type_and_width (&type
, width
, name
);
5495 /* Did array size calculations overflow? */
5497 if (TREE_CODE (type
) == ARRAY_TYPE
5498 && COMPLETE_TYPE_P (type
)
5499 && TREE_CODE (TYPE_SIZE_UNIT (type
)) == INTEGER_CST
5500 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type
)))
5503 error_at (loc
, "size of array %qE is too large", name
);
5505 error_at (loc
, "size of unnamed array is too large");
5506 /* If we proceed with the array type as it is, we'll eventually
5507 crash in tree_low_cst(). */
5508 type
= error_mark_node
;
5511 /* If this is declaring a typedef name, return a TYPE_DECL. */
5513 if (storage_class
== csc_typedef
)
5516 if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
5518 pedwarn (loc
, OPT_pedantic
,
5519 "ISO C forbids qualified function types");
5521 type
= c_build_qualified_type (type
, type_quals
);
5522 decl
= build_decl (declarator
->id_loc
,
5523 TYPE_DECL
, declarator
->u
.id
, type
);
5524 if (declspecs
->explicit_signed_p
)
5525 C_TYPEDEF_EXPLICITLY_SIGNED (decl
) = 1;
5526 if (declspecs
->inline_p
)
5527 pedwarn (loc
, 0,"typedef %q+D declared %<inline%>", decl
);
5529 if (warn_cxx_compat
&& declarator
->u
.id
!= NULL_TREE
)
5531 struct c_binding
*b
= I_TAG_BINDING (declarator
->u
.id
);
5534 && b
->decl
!= NULL_TREE
5535 && (B_IN_CURRENT_SCOPE (b
)
5536 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
5537 && TYPE_MAIN_VARIANT (b
->decl
) != TYPE_MAIN_VARIANT (type
))
5539 warning_at (declarator
->id_loc
, OPT_Wc___compat
,
5540 ("using %qD as both a typedef and a tag is "
5543 if (b
->locus
!= UNKNOWN_LOCATION
)
5544 inform (b
->locus
, "originally defined here");
5551 /* If this is a type name (such as, in a cast or sizeof),
5552 compute the type and return it now. */
5554 if (decl_context
== TYPENAME
)
5556 /* Note that the grammar rejects storage classes in typenames
5558 gcc_assert (storage_class
== csc_none
&& !threadp
5559 && !declspecs
->inline_p
);
5560 if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
5562 pedwarn (loc
, OPT_pedantic
,
5563 "ISO C forbids const or volatile function types");
5565 type
= c_build_qualified_type (type
, type_quals
);
5569 if (pedantic
&& decl_context
== FIELD
5570 && variably_modified_type_p (type
, NULL_TREE
))
5573 pedwarn (loc
, OPT_pedantic
, "a member of a structure or union cannot "
5574 "have a variably modified type");
5577 /* Aside from typedefs and type names (handle above),
5578 `void' at top level (not within pointer)
5579 is allowed only in public variables.
5580 We don't complain about parms either, but that is because
5581 a better error message can be made later. */
5583 if (VOID_TYPE_P (type
) && decl_context
!= PARM
5584 && !((decl_context
!= FIELD
&& TREE_CODE (type
) != FUNCTION_TYPE
)
5585 && (storage_class
== csc_extern
5586 || (current_scope
== file_scope
5587 && !(storage_class
== csc_static
5588 || storage_class
== csc_register
)))))
5590 error_at (loc
, "variable or field %qE declared void", name
);
5591 type
= integer_type_node
;
5594 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
5595 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
5600 if (decl_context
== PARM
)
5604 /* A parameter declared as an array of T is really a pointer to T.
5605 One declared as a function is really a pointer to a function. */
5607 if (TREE_CODE (type
) == ARRAY_TYPE
)
5609 /* Transfer const-ness of array into that of type pointed to. */
5610 type
= TREE_TYPE (type
);
5612 type
= c_build_qualified_type (type
, type_quals
);
5613 type
= build_pointer_type (type
);
5614 type_quals
= array_ptr_quals
;
5616 type
= c_build_qualified_type (type
, type_quals
);
5618 /* We don't yet implement attributes in this context. */
5619 if (array_ptr_attrs
!= NULL_TREE
)
5620 warning_at (loc
, OPT_Wattributes
,
5621 "attributes in parameter array declarator ignored");
5623 size_varies
= false;
5625 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
5628 pedwarn (loc
, OPT_pedantic
,
5629 "ISO C forbids qualified function types");
5631 type
= c_build_qualified_type (type
, type_quals
);
5632 type
= build_pointer_type (type
);
5633 type_quals
= TYPE_UNQUALIFIED
;
5635 else if (type_quals
)
5636 type
= c_build_qualified_type (type
, type_quals
);
5638 decl
= build_decl (declarator
->id_loc
,
5639 PARM_DECL
, declarator
->u
.id
, type
);
5641 C_DECL_VARIABLE_SIZE (decl
) = 1;
5643 /* Compute the type actually passed in the parmlist,
5644 for the case where there is no prototype.
5645 (For example, shorts and chars are passed as ints.)
5646 When there is a prototype, this is overridden later. */
5648 if (type
== error_mark_node
)
5649 promoted_type
= type
;
5651 promoted_type
= c_type_promotes_to (type
);
5653 DECL_ARG_TYPE (decl
) = promoted_type
;
5654 if (declspecs
->inline_p
)
5655 pedwarn (loc
, 0, "parameter %q+D declared %<inline%>", decl
);
5657 else if (decl_context
== FIELD
)
5659 /* Note that the grammar rejects storage classes in typenames
5661 gcc_assert (storage_class
== csc_none
&& !threadp
5662 && !declspecs
->inline_p
);
5664 /* Structure field. It may not be a function. */
5666 if (TREE_CODE (type
) == FUNCTION_TYPE
)
5668 error_at (loc
, "field %qE declared as a function", name
);
5669 type
= build_pointer_type (type
);
5671 else if (TREE_CODE (type
) != ERROR_MARK
5672 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type
))
5675 error_at (loc
, "field %qE has incomplete type", name
);
5677 error_at (loc
, "unnamed field has incomplete type");
5678 type
= error_mark_node
;
5680 type
= c_build_qualified_type (type
, type_quals
);
5681 decl
= build_decl (declarator
->id_loc
,
5682 FIELD_DECL
, declarator
->u
.id
, type
);
5683 DECL_NONADDRESSABLE_P (decl
) = bitfield
;
5684 if (bitfield
&& !declarator
->u
.id
)
5685 TREE_NO_WARNING (decl
) = 1;
5688 C_DECL_VARIABLE_SIZE (decl
) = 1;
5690 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
5692 if (storage_class
== csc_register
|| threadp
)
5694 error_at (loc
, "invalid storage class for function %qE", name
);
5696 else if (current_scope
!= file_scope
)
5698 /* Function declaration not at file scope. Storage
5699 classes other than `extern' are not allowed, C99
5700 6.7.1p5, and `extern' makes no difference. However,
5701 GCC allows 'auto', perhaps with 'inline', to support
5702 nested functions. */
5703 if (storage_class
== csc_auto
)
5704 pedwarn (loc
, OPT_pedantic
,
5705 "invalid storage class for function %qE", name
);
5706 else if (storage_class
== csc_static
)
5708 error_at (loc
, "invalid storage class for function %qE", name
);
5710 storage_class
= declspecs
->storage_class
= csc_none
;
5716 decl
= build_decl (declarator
->id_loc
,
5717 FUNCTION_DECL
, declarator
->u
.id
, type
);
5718 decl
= build_decl_attribute_variant (decl
, decl_attr
);
5720 if (pedantic
&& type_quals
&& !DECL_IN_SYSTEM_HEADER (decl
))
5721 pedwarn (loc
, OPT_pedantic
,
5722 "ISO C forbids qualified function types");
5724 /* GNU C interprets a volatile-qualified function type to indicate
5725 that the function does not return. */
5726 if ((type_quals
& TYPE_QUAL_VOLATILE
)
5727 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl
))))
5728 warning_at (loc
, 0, "%<noreturn%> function returns non-void value");
5730 /* Every function declaration is an external reference
5731 (DECL_EXTERNAL) except for those which are not at file
5732 scope and are explicitly declared "auto". This is
5733 forbidden by standard C (C99 6.7.1p5) and is interpreted by
5734 GCC to signify a forward declaration of a nested function. */
5735 if (storage_class
== csc_auto
&& current_scope
!= file_scope
)
5736 DECL_EXTERNAL (decl
) = 0;
5737 /* In C99, a function which is declared 'inline' with 'extern'
5738 is not an external reference (which is confusing). It
5739 means that the later definition of the function must be output
5740 in this file, C99 6.7.4p6. In GNU C89, a function declared
5741 'extern inline' is an external reference. */
5742 else if (declspecs
->inline_p
&& storage_class
!= csc_static
)
5743 DECL_EXTERNAL (decl
) = ((storage_class
== csc_extern
)
5744 == flag_gnu89_inline
);
5746 DECL_EXTERNAL (decl
) = !initialized
;
5748 /* Record absence of global scope for `static' or `auto'. */
5750 = !(storage_class
== csc_static
|| storage_class
== csc_auto
);
5752 /* For a function definition, record the argument information
5753 block where store_parm_decls will look for it. */
5755 current_function_arg_info
= arg_info
;
5757 if (declspecs
->default_int_p
)
5758 C_FUNCTION_IMPLICIT_INT (decl
) = 1;
5760 /* Record presence of `inline', if it is reasonable. */
5761 if (flag_hosted
&& MAIN_NAME_P (declarator
->u
.id
))
5763 if (declspecs
->inline_p
)
5764 pedwarn (loc
, 0, "cannot inline function %<main%>");
5766 else if (declspecs
->inline_p
)
5767 /* Record that the function is declared `inline'. */
5768 DECL_DECLARED_INLINE_P (decl
) = 1;
5772 /* It's a variable. */
5773 /* An uninitialized decl with `extern' is a reference. */
5774 int extern_ref
= !initialized
&& storage_class
== csc_extern
;
5776 type
= c_build_qualified_type (type
, type_quals
);
5778 /* C99 6.2.2p7: It is invalid (compile-time undefined
5779 behavior) to create an 'extern' declaration for a
5780 variable if there is a global declaration that is
5781 'static' and the global declaration is not visible.
5782 (If the static declaration _is_ currently visible,
5783 the 'extern' declaration is taken to refer to that decl.) */
5784 if (extern_ref
&& current_scope
!= file_scope
)
5786 tree global_decl
= identifier_global_value (declarator
->u
.id
);
5787 tree visible_decl
= lookup_name (declarator
->u
.id
);
5790 && global_decl
!= visible_decl
5791 && TREE_CODE (global_decl
) == VAR_DECL
5792 && !TREE_PUBLIC (global_decl
))
5793 error_at (loc
, "variable previously declared %<static%> "
5794 "redeclared %<extern%>");
5797 decl
= build_decl (declarator
->id_loc
,
5798 VAR_DECL
, declarator
->u
.id
, type
);
5800 C_DECL_VARIABLE_SIZE (decl
) = 1;
5802 if (declspecs
->inline_p
)
5803 pedwarn (loc
, 0, "variable %q+D declared %<inline%>", decl
);
5805 /* At file scope, an initialized extern declaration may follow
5806 a static declaration. In that case, DECL_EXTERNAL will be
5807 reset later in start_decl. */
5808 DECL_EXTERNAL (decl
) = (storage_class
== csc_extern
);
5810 /* At file scope, the presence of a `static' or `register' storage
5811 class specifier, or the absence of all storage class specifiers
5812 makes this declaration a definition (perhaps tentative). Also,
5813 the absence of `static' makes it public. */
5814 if (current_scope
== file_scope
)
5816 TREE_PUBLIC (decl
) = storage_class
!= csc_static
;
5817 TREE_STATIC (decl
) = !extern_ref
;
5819 /* Not at file scope, only `static' makes a static definition. */
5822 TREE_STATIC (decl
) = (storage_class
== csc_static
);
5823 TREE_PUBLIC (decl
) = extern_ref
;
5827 DECL_TLS_MODEL (decl
) = decl_default_tls_model (decl
);
5830 if ((storage_class
== csc_extern
5831 || (storage_class
== csc_none
5832 && TREE_CODE (type
) == FUNCTION_TYPE
5834 && variably_modified_type_p (type
, NULL_TREE
))
5837 if (TREE_CODE (type
) == FUNCTION_TYPE
)
5838 error_at (loc
, "non-nested function with variably modified type");
5840 error_at (loc
, "object with variably modified type must have "
5844 /* Record `register' declaration for warnings on &
5845 and in case doing stupid register allocation. */
5847 if (storage_class
== csc_register
)
5849 C_DECL_REGISTER (decl
) = 1;
5850 DECL_REGISTER (decl
) = 1;
5853 /* Record constancy and volatility. */
5854 c_apply_type_quals_to_decl (type_quals
, decl
);
5856 /* If a type has volatile components, it should be stored in memory.
5857 Otherwise, the fact that those components are volatile
5858 will be ignored, and would even crash the compiler.
5859 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
5860 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl
))
5861 && (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == PARM_DECL
5862 || TREE_CODE (decl
) == RESULT_DECL
))
5864 /* It is not an error for a structure with volatile fields to
5865 be declared register, but reset DECL_REGISTER since it
5866 cannot actually go in a register. */
5867 int was_reg
= C_DECL_REGISTER (decl
);
5868 C_DECL_REGISTER (decl
) = 0;
5869 DECL_REGISTER (decl
) = 0;
5870 c_mark_addressable (decl
);
5871 C_DECL_REGISTER (decl
) = was_reg
;
5874 /* This is the earliest point at which we might know the assembler
5875 name of a variable. Thus, if it's known before this, die horribly. */
5876 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl
));
5879 && TREE_CODE (decl
) == VAR_DECL
5880 && TREE_PUBLIC (decl
)
5881 && TREE_STATIC (decl
)
5882 && (TREE_CODE (TREE_TYPE (decl
)) == RECORD_TYPE
5883 || TREE_CODE (TREE_TYPE (decl
)) == UNION_TYPE
5884 || TREE_CODE (TREE_TYPE (decl
)) == ENUMERAL_TYPE
)
5885 && TYPE_NAME (TREE_TYPE (decl
)) == NULL_TREE
)
5886 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wc___compat
,
5887 ("non-local variable %qD with anonymous type is "
5888 "questionable in C++"),
5895 /* Decode the parameter-list info for a function type or function definition.
5896 The argument is the value returned by `get_parm_info' (or made in c-parse.c
5897 if there is an identifier list instead of a parameter decl list).
5898 These two functions are separate because when a function returns
5899 or receives functions then each is called multiple times but the order
5900 of calls is different. The last call to `grokparms' is always the one
5901 that contains the formal parameter names of a function definition.
5903 Return a list of arg types to use in the FUNCTION_TYPE for this function.
5905 FUNCDEF_FLAG is true for a function definition, false for
5906 a mere declaration. A nonempty identifier-list gets an error message
5907 when FUNCDEF_FLAG is false. */
5910 grokparms (struct c_arg_info
*arg_info
, bool funcdef_flag
)
5912 tree arg_types
= arg_info
->types
;
5914 if (funcdef_flag
&& arg_info
->had_vla_unspec
)
5916 /* A function definition isn't function prototype scope C99 6.2.1p4. */
5918 error ("%<[*]%> not allowed in other than function prototype scope");
5921 if (arg_types
== 0 && !funcdef_flag
&& !in_system_header
)
5922 warning (OPT_Wstrict_prototypes
,
5923 "function declaration isn%'t a prototype");
5925 if (arg_types
== error_mark_node
)
5926 return 0; /* don't set TYPE_ARG_TYPES in this case */
5928 else if (arg_types
&& TREE_CODE (TREE_VALUE (arg_types
)) == IDENTIFIER_NODE
)
5931 pedwarn (input_location
, 0, "parameter names (without types) in function declaration");
5933 arg_info
->parms
= arg_info
->types
;
5934 arg_info
->types
= 0;
5939 tree parm
, type
, typelt
;
5940 unsigned int parmno
;
5943 /* If there is a parameter of incomplete type in a definition,
5944 this is an error. In a declaration this is valid, and a
5945 struct or union type may be completed later, before any calls
5946 or definition of the function. In the case where the tag was
5947 first declared within the parameter list, a warning has
5948 already been given. If a parameter has void type, then
5949 however the function cannot be defined or called, so
5952 for (parm
= arg_info
->parms
, typelt
= arg_types
, parmno
= 1;
5954 parm
= TREE_CHAIN (parm
), typelt
= TREE_CHAIN (typelt
), parmno
++)
5956 type
= TREE_VALUE (typelt
);
5957 if (type
== error_mark_node
)
5960 if (!COMPLETE_TYPE_P (type
))
5964 if (DECL_NAME (parm
))
5965 error ("parameter %u (%q+D) has incomplete type",
5968 error ("%Jparameter %u has incomplete type",
5971 TREE_VALUE (typelt
) = error_mark_node
;
5972 TREE_TYPE (parm
) = error_mark_node
;
5974 else if (VOID_TYPE_P (type
))
5976 if (DECL_NAME (parm
))
5977 warning (0, "parameter %u (%q+D) has void type",
5980 warning (0, "%Jparameter %u has void type",
5985 errmsg
= targetm
.invalid_parameter_type (type
);
5989 TREE_VALUE (typelt
) = error_mark_node
;
5990 TREE_TYPE (parm
) = error_mark_node
;
5993 if (DECL_NAME (parm
) && TREE_USED (parm
))
5994 warn_if_shadowing (parm
);
6000 /* Take apart the current scope and return a c_arg_info structure with
6001 info on a parameter list just parsed.
6003 This structure is later fed to 'grokparms' and 'store_parm_decls'.
6005 ELLIPSIS being true means the argument list ended in '...' so don't
6006 append a sentinel (void_list_node) to the end of the type-list. */
6009 get_parm_info (bool ellipsis
)
6011 struct c_binding
*b
= current_scope
->bindings
;
6012 struct c_arg_info
*arg_info
= XOBNEW (&parser_obstack
,
6019 static bool explained_incomplete_types
= false;
6020 bool gave_void_only_once_err
= false;
6022 arg_info
->parms
= 0;
6024 arg_info
->types
= 0;
6025 arg_info
->others
= 0;
6026 arg_info
->pending_sizes
= 0;
6027 arg_info
->had_vla_unspec
= current_scope
->had_vla_unspec
;
6029 /* The bindings in this scope must not get put into a block.
6030 We will take care of deleting the binding nodes. */
6031 current_scope
->bindings
= 0;
6033 /* This function is only called if there was *something* on the
6037 /* A parameter list consisting solely of 'void' indicates that the
6038 function takes no arguments. But if the 'void' is qualified
6039 (by 'const' or 'volatile'), or has a storage class specifier
6040 ('register'), then the behavior is undefined; issue an error.
6041 Typedefs for 'void' are OK (see DR#157). */
6042 if (b
->prev
== 0 /* one binding */
6043 && TREE_CODE (b
->decl
) == PARM_DECL
/* which is a parameter */
6044 && !DECL_NAME (b
->decl
) /* anonymous */
6045 && VOID_TYPE_P (TREE_TYPE (b
->decl
))) /* of void type */
6047 if (TREE_THIS_VOLATILE (b
->decl
)
6048 || TREE_READONLY (b
->decl
)
6049 || C_DECL_REGISTER (b
->decl
))
6050 error ("%<void%> as only parameter may not be qualified");
6052 /* There cannot be an ellipsis. */
6054 error ("%<void%> must be the only parameter");
6056 arg_info
->types
= void_list_node
;
6061 types
= void_list_node
;
6063 /* Break up the bindings list into parms, tags, types, and others;
6064 apply sanity checks; purge the name-to-decl bindings. */
6067 tree decl
= b
->decl
;
6068 tree type
= TREE_TYPE (decl
);
6069 const char *keyword
;
6071 switch (TREE_CODE (decl
))
6076 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
6077 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
6080 /* Check for forward decls that never got their actual decl. */
6081 if (TREE_ASM_WRITTEN (decl
))
6082 error ("parameter %q+D has just a forward declaration", decl
);
6083 /* Check for (..., void, ...) and issue an error. */
6084 else if (VOID_TYPE_P (type
) && !DECL_NAME (decl
))
6086 if (!gave_void_only_once_err
)
6088 error ("%<void%> must be the only parameter");
6089 gave_void_only_once_err
= true;
6094 /* Valid parameter, add it to the list. */
6095 TREE_CHAIN (decl
) = parms
;
6098 /* Since there is a prototype, args are passed in their
6099 declared types. The back end may override this later. */
6100 DECL_ARG_TYPE (decl
) = type
;
6101 types
= tree_cons (0, type
, types
);
6105 case ENUMERAL_TYPE
: keyword
= "enum"; goto tag
;
6106 case UNION_TYPE
: keyword
= "union"; goto tag
;
6107 case RECORD_TYPE
: keyword
= "struct"; goto tag
;
6109 /* Types may not have tag-names, in which case the type
6110 appears in the bindings list with b->id NULL. */
6113 gcc_assert (I_TAG_BINDING (b
->id
) == b
);
6114 I_TAG_BINDING (b
->id
) = b
->shadowed
;
6117 /* Warn about any struct, union or enum tags defined in a
6118 parameter list. The scope of such types is limited to
6119 the parameter list, which is rarely if ever desirable
6120 (it's impossible to call such a function with type-
6121 correct arguments). An anonymous union parm type is
6122 meaningful as a GNU extension, so don't warn for that. */
6123 if (TREE_CODE (decl
) != UNION_TYPE
|| b
->id
!= 0)
6126 /* The %s will be one of 'struct', 'union', or 'enum'. */
6127 warning (0, "%<%s %E%> declared inside parameter list",
6130 /* The %s will be one of 'struct', 'union', or 'enum'. */
6131 warning (0, "anonymous %s declared inside parameter list",
6134 if (!explained_incomplete_types
)
6136 warning (0, "its scope is only this definition or declaration,"
6137 " which is probably not what you want");
6138 explained_incomplete_types
= true;
6142 tags
= tree_cons (b
->id
, decl
, tags
);
6148 /* CONST_DECLs appear here when we have an embedded enum,
6149 and TYPE_DECLs appear here when we have an embedded struct
6150 or union. No warnings for this - we already warned about the
6151 type itself. FUNCTION_DECLs appear when there is an implicit
6152 function declaration in the parameter list. */
6154 TREE_CHAIN (decl
) = others
;
6159 /* error_mark_node appears here when we have an undeclared
6160 variable. Just throw it away. */
6163 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
6164 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
6168 /* Other things that might be encountered. */
6175 b
= free_binding_and_advance (b
);
6178 arg_info
->parms
= parms
;
6179 arg_info
->tags
= tags
;
6180 arg_info
->types
= types
;
6181 arg_info
->others
= others
;
6182 arg_info
->pending_sizes
= get_pending_sizes ();
6186 /* Get the struct, enum or union (CODE says which) with tag NAME.
6187 Define the tag as a forward-reference with location LOC if it is
6188 not defined. Return a c_typespec structure for the type
6192 parser_xref_tag (location_t loc
, enum tree_code code
, tree name
)
6194 struct c_typespec ret
;
6198 ret
.expr
= NULL_TREE
;
6199 ret
.expr_const_operands
= true;
6201 /* If a cross reference is requested, look up the type
6202 already defined for this tag and return it. */
6204 ref
= lookup_tag (code
, name
, 0, &refloc
);
6205 /* If this is the right type of tag, return what we found.
6206 (This reference will be shadowed by shadow_tag later if appropriate.)
6207 If this is the wrong type of tag, do not return it. If it was the
6208 wrong type in the same scope, we will have had an error
6209 message already; if in a different scope and declaring
6210 a name, pending_xref_error will give an error message; but if in a
6211 different scope and not declaring a name, this tag should
6212 shadow the previous declaration of a different type of tag, and
6213 this would not work properly if we return the reference found.
6214 (For example, with "struct foo" in an outer scope, "union foo;"
6215 must shadow that tag with a new one of union type.) */
6216 ret
.kind
= (ref
? ctsk_tagref
: ctsk_tagfirstref
);
6217 if (ref
&& TREE_CODE (ref
) == code
)
6219 if (C_TYPE_DEFINED_IN_STRUCT (ref
)
6220 && loc
!= UNKNOWN_LOCATION
6226 warning_at (loc
, OPT_Wc___compat
,
6227 ("enum type defined in struct or union "
6228 "is not visible in C++"));
6229 inform (refloc
, "enum type defined here");
6232 warning_at (loc
, OPT_Wc___compat
,
6233 ("struct defined in struct or union "
6234 "is not visible in C++"));
6235 inform (refloc
, "struct defined here");
6238 warning_at (loc
, OPT_Wc___compat
,
6239 ("union defined in struct or union "
6240 "is not visible in C++"));
6241 inform (refloc
, "union defined here");
6252 /* If no such tag is yet defined, create a forward-reference node
6253 and record it as the "definition".
6254 When a real declaration of this type is found,
6255 the forward-reference will be altered into a real type. */
6257 ref
= make_node (code
);
6258 if (code
== ENUMERAL_TYPE
)
6260 /* Give the type a default layout like unsigned int
6261 to avoid crashing if it does not get defined. */
6262 SET_TYPE_MODE (ref
, TYPE_MODE (unsigned_type_node
));
6263 TYPE_ALIGN (ref
) = TYPE_ALIGN (unsigned_type_node
);
6264 TYPE_USER_ALIGN (ref
) = 0;
6265 TYPE_UNSIGNED (ref
) = 1;
6266 TYPE_PRECISION (ref
) = TYPE_PRECISION (unsigned_type_node
);
6267 TYPE_MIN_VALUE (ref
) = TYPE_MIN_VALUE (unsigned_type_node
);
6268 TYPE_MAX_VALUE (ref
) = TYPE_MAX_VALUE (unsigned_type_node
);
6271 pushtag (loc
, name
, ref
);
6277 /* Get the struct, enum or union (CODE says which) with tag NAME.
6278 Define the tag as a forward-reference if it is not defined.
6279 Return a tree for the type. */
6282 xref_tag (enum tree_code code
, tree name
)
6284 return parser_xref_tag (input_location
, code
, name
).spec
;
6287 /* Make sure that the tag NAME is defined *in the current scope*
6288 at least as a forward reference.
6289 LOC is the location of the struct's definition.
6290 CODE says which kind of tag NAME ought to be.
6292 This stores the current value of the file static IN_STRUCT in
6293 *ENCLOSING_IN_STRUCT, and sets IN_STRUCT to true. Similarly, this
6294 sets STRUCT_TYPES in *ENCLOSING_STRUCT_TYPES, and sets STRUCT_TYPES
6295 to an empty vector. The old values are restored in
6299 start_struct (location_t loc
, enum tree_code code
, tree name
,
6300 bool *enclosing_in_struct
,
6301 VEC(tree
,heap
) **enclosing_struct_types
)
6303 /* If there is already a tag defined at this scope
6304 (as a forward reference), just return it. */
6306 tree ref
= NULL_TREE
;
6307 location_t refloc
= UNKNOWN_LOCATION
;
6309 if (name
!= NULL_TREE
)
6310 ref
= lookup_tag (code
, name
, 1, &refloc
);
6311 if (ref
&& TREE_CODE (ref
) == code
)
6313 if (TYPE_SIZE (ref
))
6315 if (code
== UNION_TYPE
)
6316 error_at (loc
, "redefinition of %<union %E%>", name
);
6318 error_at (loc
, "redefinition of %<struct %E%>", name
);
6319 if (refloc
!= UNKNOWN_LOCATION
)
6320 inform (refloc
, "originally defined here");
6321 /* Don't create structures using a name already in use. */
6324 else if (C_TYPE_BEING_DEFINED (ref
))
6326 if (code
== UNION_TYPE
)
6327 error_at (loc
, "nested redefinition of %<union %E%>", name
);
6329 error_at (loc
, "nested redefinition of %<struct %E%>", name
);
6330 /* Don't bother to report "originally defined here" for a
6331 nested redefinition; the original definition should be
6333 /* Don't create structures that contain themselves. */
6338 /* Otherwise create a forward-reference just so the tag is in scope. */
6340 if (ref
== NULL_TREE
|| TREE_CODE (ref
) != code
)
6342 ref
= make_node (code
);
6343 pushtag (loc
, name
, ref
);
6346 C_TYPE_BEING_DEFINED (ref
) = 1;
6347 TYPE_PACKED (ref
) = flag_pack_struct
;
6349 *enclosing_in_struct
= in_struct
;
6350 *enclosing_struct_types
= struct_types
;
6352 struct_types
= VEC_alloc(tree
, heap
, 0);
6354 /* FIXME: This will issue a warning for a use of a type defined
6355 within a statement expr used within sizeof, et. al. This is not
6356 terribly serious as C++ doesn't permit statement exprs within
6358 if (warn_cxx_compat
&& (in_sizeof
|| in_typeof
|| in_alignof
))
6359 warning_at (loc
, OPT_Wc___compat
,
6360 "defining type in %qs expression is invalid in C++",
6363 : (in_typeof
? "typeof" : "alignof")));
6368 /* Process the specs, declarator and width (NULL if omitted)
6369 of a structure component, returning a FIELD_DECL node.
6370 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
6371 DECL_ATTRS is as for grokdeclarator.
6373 LOC is the location of the structure component.
6375 This is done during the parsing of the struct declaration.
6376 The FIELD_DECL nodes are chained together and the lot of them
6377 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
6380 grokfield (location_t loc
,
6381 struct c_declarator
*declarator
, struct c_declspecs
*declspecs
,
6382 tree width
, tree
*decl_attrs
)
6386 if (declarator
->kind
== cdk_id
&& declarator
->u
.id
== NULL_TREE
6387 && width
== NULL_TREE
)
6389 /* This is an unnamed decl.
6391 If we have something of the form "union { list } ;" then this
6392 is the anonymous union extension. Similarly for struct.
6394 If this is something of the form "struct foo;", then
6395 If MS extensions are enabled, this is handled as an
6397 Otherwise this is a forward declaration of a structure tag.
6399 If this is something of the form "foo;" and foo is a TYPE_DECL, then
6400 If MS extensions are enabled and foo names a structure, then
6401 again this is an anonymous struct.
6402 Otherwise this is an error.
6404 Oh what a horrid tangled web we weave. I wonder if MS consciously
6405 took this from Plan 9 or if it was an accident of implementation
6406 that took root before someone noticed the bug... */
6408 tree type
= declspecs
->type
;
6409 bool type_ok
= (TREE_CODE (type
) == RECORD_TYPE
6410 || TREE_CODE (type
) == UNION_TYPE
);
6414 && (flag_ms_extensions
|| !declspecs
->typedef_p
))
6416 if (flag_ms_extensions
)
6420 else if (TYPE_NAME (type
) == NULL
)
6427 pedwarn (loc
, 0, "declaration does not declare anything");
6430 pedwarn (loc
, OPT_pedantic
, "ISO C doesn%'t support unnamed structs/unions");
6433 value
= grokdeclarator (declarator
, declspecs
, FIELD
, false,
6434 width
? &width
: NULL
, decl_attrs
, NULL
, NULL
,
6437 finish_decl (value
, loc
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
6438 DECL_INITIAL (value
) = width
;
6443 /* Generate an error for any duplicate field names in FIELDLIST. Munge
6444 the list such that this does not present a problem later. */
6447 detect_field_duplicates (tree fieldlist
)
6452 /* First, see if there are more than "a few" fields.
6453 This is trivially true if there are zero or one fields. */
6456 x
= TREE_CHAIN (fieldlist
);
6462 } while (timeout
> 0 && x
);
6464 /* If there were "few" fields, avoid the overhead of allocating
6465 a hash table. Instead just do the nested traversal thing. */
6468 for (x
= TREE_CHAIN (fieldlist
); x
; x
= TREE_CHAIN (x
))
6471 for (y
= fieldlist
; y
!= x
; y
= TREE_CHAIN (y
))
6472 if (DECL_NAME (y
) == DECL_NAME (x
))
6474 error ("duplicate member %q+D", x
);
6475 DECL_NAME (x
) = NULL_TREE
;
6481 htab_t htab
= htab_create (37, htab_hash_pointer
, htab_eq_pointer
, NULL
);
6484 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
6485 if ((y
= DECL_NAME (x
)) != 0)
6487 slot
= htab_find_slot (htab
, y
, INSERT
);
6490 error ("duplicate member %q+D", x
);
6491 DECL_NAME (x
) = NULL_TREE
;
6500 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
6501 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
6502 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
6503 ATTRIBUTES are attributes to be applied to the structure.
6505 ENCLOSING_IN_STRUCT is the value of IN_STRUCT, and
6506 ENCLOSING_STRUCT_TYPES is the value of STRUCT_TYPES, when the
6507 struct was started. This sets the C_TYPE_DEFINED_IN_STRUCT flag
6508 for any type defined in the current struct. */
6511 finish_struct (location_t loc
, tree t
, tree fieldlist
, tree attributes
,
6512 bool enclosing_in_struct
,
6513 VEC(tree
,heap
) *enclosing_struct_types
)
6516 bool toplevel
= file_scope
== current_scope
;
6517 int saw_named_field
;
6520 /* If this type was previously laid out as a forward reference,
6521 make sure we lay it out again. */
6525 decl_attributes (&t
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
6529 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
6530 if (DECL_NAME (x
) != 0)
6535 if (TREE_CODE (t
) == UNION_TYPE
)
6538 pedwarn (loc
, OPT_pedantic
, "union has no named members");
6540 pedwarn (loc
, OPT_pedantic
, "union has no members");
6545 pedwarn (loc
, OPT_pedantic
, "struct has no named members");
6547 pedwarn (loc
, OPT_pedantic
, "struct has no members");
6552 /* Install struct as DECL_CONTEXT of each field decl.
6553 Also process specified field sizes, found in the DECL_INITIAL,
6554 storing 0 there after the type has been changed to precision equal
6555 to its width, rather than the precision of the specified standard
6556 type. (Correct layout requires the original type to have been preserved
6559 saw_named_field
= 0;
6560 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
6562 if (TREE_TYPE (x
) == error_mark_node
)
6565 DECL_CONTEXT (x
) = t
;
6567 /* If any field is const, the structure type is pseudo-const. */
6568 if (TREE_READONLY (x
))
6569 C_TYPE_FIELDS_READONLY (t
) = 1;
6572 /* A field that is pseudo-const makes the structure likewise. */
6573 tree t1
= TREE_TYPE (x
);
6574 while (TREE_CODE (t1
) == ARRAY_TYPE
)
6575 t1
= TREE_TYPE (t1
);
6576 if ((TREE_CODE (t1
) == RECORD_TYPE
|| TREE_CODE (t1
) == UNION_TYPE
)
6577 && C_TYPE_FIELDS_READONLY (t1
))
6578 C_TYPE_FIELDS_READONLY (t
) = 1;
6581 /* Any field that is volatile means variables of this type must be
6582 treated in some ways as volatile. */
6583 if (TREE_THIS_VOLATILE (x
))
6584 C_TYPE_FIELDS_VOLATILE (t
) = 1;
6586 /* Any field of nominal variable size implies structure is too. */
6587 if (C_DECL_VARIABLE_SIZE (x
))
6588 C_TYPE_VARIABLE_SIZE (t
) = 1;
6590 if (DECL_INITIAL (x
))
6592 unsigned HOST_WIDE_INT width
= tree_low_cst (DECL_INITIAL (x
), 1);
6593 DECL_SIZE (x
) = bitsize_int (width
);
6594 DECL_BIT_FIELD (x
) = 1;
6595 SET_DECL_C_BIT_FIELD (x
);
6599 && (DECL_BIT_FIELD (x
)
6600 || TYPE_ALIGN (TREE_TYPE (x
)) > BITS_PER_UNIT
))
6601 DECL_PACKED (x
) = 1;
6603 /* Detect flexible array member in an invalid context. */
6604 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
6605 && TYPE_SIZE (TREE_TYPE (x
)) == NULL_TREE
6606 && TYPE_DOMAIN (TREE_TYPE (x
)) != NULL_TREE
6607 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x
))) == NULL_TREE
)
6609 if (TREE_CODE (t
) == UNION_TYPE
)
6611 error_at (DECL_SOURCE_LOCATION (x
),
6612 "%Jflexible array member in union", x
);
6613 TREE_TYPE (x
) = error_mark_node
;
6615 else if (TREE_CHAIN (x
) != NULL_TREE
)
6617 error_at (DECL_SOURCE_LOCATION (x
),
6618 "%Jflexible array member not at end of struct", x
);
6619 TREE_TYPE (x
) = error_mark_node
;
6621 else if (!saw_named_field
)
6623 error_at (DECL_SOURCE_LOCATION (x
),
6624 "%Jflexible array member in otherwise empty struct",
6626 TREE_TYPE (x
) = error_mark_node
;
6630 if (pedantic
&& !in_system_header
&& TREE_CODE (t
) == RECORD_TYPE
6631 && flexible_array_type_p (TREE_TYPE (x
)))
6632 pedwarn (loc
, OPT_pedantic
,
6633 "%Jinvalid use of structure with flexible array member", x
);
6636 saw_named_field
= 1;
6639 detect_field_duplicates (fieldlist
);
6641 /* Now we have the nearly final fieldlist. Record it,
6642 then lay out the structure or union (including the fields). */
6644 TYPE_FIELDS (t
) = fieldlist
;
6648 /* Give bit-fields their proper types. */
6650 tree
*fieldlistp
= &fieldlist
;
6652 if (TREE_CODE (*fieldlistp
) == FIELD_DECL
&& DECL_INITIAL (*fieldlistp
)
6653 && TREE_TYPE (*fieldlistp
) != error_mark_node
)
6655 unsigned HOST_WIDE_INT width
6656 = tree_low_cst (DECL_INITIAL (*fieldlistp
), 1);
6657 tree type
= TREE_TYPE (*fieldlistp
);
6658 if (width
!= TYPE_PRECISION (type
))
6660 TREE_TYPE (*fieldlistp
)
6661 = c_build_bitfield_integer_type (width
, TYPE_UNSIGNED (type
));
6662 DECL_MODE (*fieldlistp
) = TYPE_MODE (TREE_TYPE (*fieldlistp
));
6664 DECL_INITIAL (*fieldlistp
) = 0;
6667 fieldlistp
= &TREE_CHAIN (*fieldlistp
);
6670 /* Now we have the truly final field list.
6671 Store it in this type and in the variants. */
6673 TYPE_FIELDS (t
) = fieldlist
;
6675 /* If there are lots of fields, sort so we can look through them fast.
6676 We arbitrarily consider 16 or more elts to be "a lot". */
6681 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
6683 if (len
> 15 || DECL_NAME (x
) == NULL
)
6691 struct lang_type
*space
;
6692 struct sorted_fields_type
*space2
;
6694 len
+= list_length (x
);
6696 /* Use the same allocation policy here that make_node uses, to
6697 ensure that this lives as long as the rest of the struct decl.
6698 All decls in an inline function need to be saved. */
6700 space
= GGC_CNEW (struct lang_type
);
6701 space2
= GGC_NEWVAR (struct sorted_fields_type
,
6702 sizeof (struct sorted_fields_type
) + len
* sizeof (tree
));
6706 field_array
= &space2
->elts
[0];
6707 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
6709 field_array
[len
++] = x
;
6711 /* If there is anonymous struct or union, break out of the loop. */
6712 if (DECL_NAME (x
) == NULL
)
6715 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
6718 TYPE_LANG_SPECIFIC (t
) = space
;
6719 TYPE_LANG_SPECIFIC (t
)->s
->len
= len
;
6720 field_array
= TYPE_LANG_SPECIFIC (t
)->s
->elts
;
6721 qsort (field_array
, len
, sizeof (tree
), field_decl_cmp
);
6726 for (x
= TYPE_MAIN_VARIANT (t
); x
; x
= TYPE_NEXT_VARIANT (x
))
6728 TYPE_FIELDS (x
) = TYPE_FIELDS (t
);
6729 TYPE_LANG_SPECIFIC (x
) = TYPE_LANG_SPECIFIC (t
);
6730 C_TYPE_FIELDS_READONLY (x
) = C_TYPE_FIELDS_READONLY (t
);
6731 C_TYPE_FIELDS_VOLATILE (x
) = C_TYPE_FIELDS_VOLATILE (t
);
6732 C_TYPE_VARIABLE_SIZE (x
) = C_TYPE_VARIABLE_SIZE (t
);
6735 /* If this was supposed to be a transparent union, but we can't
6736 make it one, warn and turn off the flag. */
6737 if (TREE_CODE (t
) == UNION_TYPE
6738 && TYPE_TRANSPARENT_UNION (t
)
6739 && (!TYPE_FIELDS (t
) || TYPE_MODE (t
) != DECL_MODE (TYPE_FIELDS (t
))))
6741 TYPE_TRANSPARENT_UNION (t
) = 0;
6742 warning_at (loc
, 0, "union cannot be made transparent");
6745 /* If this structure or union completes the type of any previous
6746 variable declaration, lay it out and output its rtl. */
6747 for (x
= C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t
));
6751 tree decl
= TREE_VALUE (x
);
6752 if (TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
)
6753 layout_array_type (TREE_TYPE (decl
));
6754 if (TREE_CODE (decl
) != TYPE_DECL
)
6756 layout_decl (decl
, 0);
6757 if (c_dialect_objc ())
6758 objc_check_decl (decl
);
6759 rest_of_decl_compilation (decl
, toplevel
, 0);
6764 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t
)) = 0;
6766 /* Finish debugging output for this type. */
6767 rest_of_type_compilation (t
, toplevel
);
6769 /* If we're inside a function proper, i.e. not file-scope and not still
6770 parsing parameters, then arrange for the size of a variable sized type
6772 if (cur_stmt_list
&& variably_modified_type_p (t
, NULL_TREE
))
6773 add_stmt (build_stmt (loc
,
6774 DECL_EXPR
, build_decl (loc
, TYPE_DECL
, NULL
, t
)));
6776 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
6777 the current struct. We do this now at the end of the struct
6778 because the flag is used to issue visibility warnings when using
6779 -Wc++-compat, and we only want to issue those warnings if the
6780 type is referenced outside of the struct declaration. */
6781 for (ix
= 0; VEC_iterate (tree
, struct_types
, ix
, x
); ++ix
)
6782 C_TYPE_DEFINED_IN_STRUCT (x
) = 1;
6784 VEC_free (tree
, heap
, struct_types
);
6786 in_struct
= enclosing_in_struct
;
6787 struct_types
= enclosing_struct_types
;
6789 /* If this struct is defined inside a struct, add it to
6791 if (in_struct
&& !in_sizeof
&& !in_typeof
&& !in_alignof
)
6792 VEC_safe_push (tree
, heap
, struct_types
, t
);
6797 /* Lay out the type T, and its element type, and so on. */
6800 layout_array_type (tree t
)
6802 if (TREE_CODE (TREE_TYPE (t
)) == ARRAY_TYPE
)
6803 layout_array_type (TREE_TYPE (t
));
6807 /* Begin compiling the definition of an enumeration type.
6808 NAME is its name (or null if anonymous).
6809 LOC is the enum's location.
6810 Returns the type object, as yet incomplete.
6811 Also records info about it so that build_enumerator
6812 may be used to declare the individual values as they are read. */
6815 start_enum (location_t loc
, struct c_enum_contents
*the_enum
, tree name
)
6817 tree enumtype
= NULL_TREE
;
6818 location_t enumloc
= UNKNOWN_LOCATION
;
6820 /* If this is the real definition for a previous forward reference,
6821 fill in the contents in the same object that used to be the
6822 forward reference. */
6824 if (name
!= NULL_TREE
)
6825 enumtype
= lookup_tag (ENUMERAL_TYPE
, name
, 1, &enumloc
);
6827 if (enumtype
== 0 || TREE_CODE (enumtype
) != ENUMERAL_TYPE
)
6829 enumtype
= make_node (ENUMERAL_TYPE
);
6830 pushtag (loc
, name
, enumtype
);
6833 if (C_TYPE_BEING_DEFINED (enumtype
))
6834 error_at (loc
, "nested redefinition of %<enum %E%>", name
);
6836 C_TYPE_BEING_DEFINED (enumtype
) = 1;
6838 if (TYPE_VALUES (enumtype
) != 0)
6840 /* This enum is a named one that has been declared already. */
6841 error_at (loc
, "redeclaration of %<enum %E%>", name
);
6842 if (enumloc
!= UNKNOWN_LOCATION
)
6843 inform (enumloc
, "originally defined here");
6845 /* Completely replace its old definition.
6846 The old enumerators remain defined, however. */
6847 TYPE_VALUES (enumtype
) = 0;
6850 the_enum
->enum_next_value
= integer_zero_node
;
6851 the_enum
->enum_overflow
= 0;
6853 if (flag_short_enums
)
6854 TYPE_PACKED (enumtype
) = 1;
6856 /* FIXME: This will issue a warning for a use of a type defined
6857 within sizeof in a statement expr. This is not terribly serious
6858 as C++ doesn't permit statement exprs within sizeof anyhow. */
6859 if (warn_cxx_compat
&& (in_sizeof
|| in_typeof
|| in_alignof
))
6860 warning_at (loc
, OPT_Wc___compat
,
6861 "defining type in %qs expression is invalid in C++",
6864 : (in_typeof
? "typeof" : "alignof")));
6869 /* After processing and defining all the values of an enumeration type,
6870 install their decls in the enumeration type and finish it off.
6871 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
6872 and ATTRIBUTES are the specified attributes.
6873 Returns ENUMTYPE. */
6876 finish_enum (tree enumtype
, tree values
, tree attributes
)
6879 tree minnode
= 0, maxnode
= 0;
6880 int precision
, unsign
;
6881 bool toplevel
= (file_scope
== current_scope
);
6882 struct lang_type
*lt
;
6884 decl_attributes (&enumtype
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
6886 /* Calculate the maximum value of any enumerator in this type. */
6888 if (values
== error_mark_node
)
6889 minnode
= maxnode
= integer_zero_node
;
6892 minnode
= maxnode
= TREE_VALUE (values
);
6893 for (pair
= TREE_CHAIN (values
); pair
; pair
= TREE_CHAIN (pair
))
6895 tree value
= TREE_VALUE (pair
);
6896 if (tree_int_cst_lt (maxnode
, value
))
6898 if (tree_int_cst_lt (value
, minnode
))
6903 /* Construct the final type of this enumeration. It is the same
6904 as one of the integral types - the narrowest one that fits, except
6905 that normally we only go as narrow as int - and signed iff any of
6906 the values are negative. */
6907 unsign
= (tree_int_cst_sgn (minnode
) >= 0);
6908 precision
= MAX (tree_int_cst_min_precision (minnode
, unsign
),
6909 tree_int_cst_min_precision (maxnode
, unsign
));
6911 if (TYPE_PACKED (enumtype
) || precision
> TYPE_PRECISION (integer_type_node
))
6913 tem
= c_common_type_for_size (precision
, unsign
);
6916 warning (0, "enumeration values exceed range of largest integer");
6917 tem
= long_long_integer_type_node
;
6921 tem
= unsign
? unsigned_type_node
: integer_type_node
;
6923 TYPE_MIN_VALUE (enumtype
) = TYPE_MIN_VALUE (tem
);
6924 TYPE_MAX_VALUE (enumtype
) = TYPE_MAX_VALUE (tem
);
6925 TYPE_UNSIGNED (enumtype
) = TYPE_UNSIGNED (tem
);
6926 TYPE_SIZE (enumtype
) = 0;
6928 /* If the precision of the type was specific with an attribute and it
6929 was too small, give an error. Otherwise, use it. */
6930 if (TYPE_PRECISION (enumtype
))
6932 if (precision
> TYPE_PRECISION (enumtype
))
6933 error ("specified mode too small for enumeral values");
6936 TYPE_PRECISION (enumtype
) = TYPE_PRECISION (tem
);
6938 layout_type (enumtype
);
6940 if (values
!= error_mark_node
)
6942 /* Change the type of the enumerators to be the enum type. We
6943 need to do this irrespective of the size of the enum, for
6944 proper type checking. Replace the DECL_INITIALs of the
6945 enumerators, and the value slots of the list, with copies
6946 that have the enum type; they cannot be modified in place
6947 because they may be shared (e.g. integer_zero_node) Finally,
6948 change the purpose slots to point to the names of the decls. */
6949 for (pair
= values
; pair
; pair
= TREE_CHAIN (pair
))
6951 tree enu
= TREE_PURPOSE (pair
);
6952 tree ini
= DECL_INITIAL (enu
);
6954 TREE_TYPE (enu
) = enumtype
;
6956 /* The ISO C Standard mandates enumerators to have type int,
6957 even though the underlying type of an enum type is
6958 unspecified. However, GCC allows enumerators of any
6959 integer type as an extensions. build_enumerator()
6960 converts any enumerators that fit in an int to type int,
6961 to avoid promotions to unsigned types when comparing
6962 integers with enumerators that fit in the int range.
6963 When -pedantic is given, build_enumerator() would have
6964 already warned about those that don't fit. Here we
6965 convert the rest to the enumerator type. */
6966 if (TREE_TYPE (ini
) != integer_type_node
)
6967 ini
= convert (enumtype
, ini
);
6969 DECL_INITIAL (enu
) = ini
;
6970 TREE_PURPOSE (pair
) = DECL_NAME (enu
);
6971 TREE_VALUE (pair
) = ini
;
6974 TYPE_VALUES (enumtype
) = values
;
6977 /* Record the min/max values so that we can warn about bit-field
6978 enumerations that are too small for the values. */
6979 lt
= GGC_CNEW (struct lang_type
);
6980 lt
->enum_min
= minnode
;
6981 lt
->enum_max
= maxnode
;
6982 TYPE_LANG_SPECIFIC (enumtype
) = lt
;
6984 /* Fix up all variant types of this enum type. */
6985 for (tem
= TYPE_MAIN_VARIANT (enumtype
); tem
; tem
= TYPE_NEXT_VARIANT (tem
))
6987 if (tem
== enumtype
)
6989 TYPE_VALUES (tem
) = TYPE_VALUES (enumtype
);
6990 TYPE_MIN_VALUE (tem
) = TYPE_MIN_VALUE (enumtype
);
6991 TYPE_MAX_VALUE (tem
) = TYPE_MAX_VALUE (enumtype
);
6992 TYPE_SIZE (tem
) = TYPE_SIZE (enumtype
);
6993 TYPE_SIZE_UNIT (tem
) = TYPE_SIZE_UNIT (enumtype
);
6994 SET_TYPE_MODE (tem
, TYPE_MODE (enumtype
));
6995 TYPE_PRECISION (tem
) = TYPE_PRECISION (enumtype
);
6996 TYPE_ALIGN (tem
) = TYPE_ALIGN (enumtype
);
6997 TYPE_USER_ALIGN (tem
) = TYPE_USER_ALIGN (enumtype
);
6998 TYPE_UNSIGNED (tem
) = TYPE_UNSIGNED (enumtype
);
6999 TYPE_LANG_SPECIFIC (tem
) = TYPE_LANG_SPECIFIC (enumtype
);
7002 /* Finish debugging output for this type. */
7003 rest_of_type_compilation (enumtype
, toplevel
);
7005 /* If this enum is defined inside a struct, add it to
7007 if (in_struct
&& !in_sizeof
&& !in_typeof
&& !in_alignof
)
7008 VEC_safe_push (tree
, heap
, struct_types
, enumtype
);
7013 /* Build and install a CONST_DECL for one value of the
7014 current enumeration type (one that was begun with start_enum).
7015 LOC is the location of the enumerator.
7016 Return a tree-list containing the CONST_DECL and its value.
7017 Assignment of sequential values by default is handled here. */
7020 build_enumerator (location_t loc
,
7021 struct c_enum_contents
*the_enum
, tree name
, tree value
)
7025 /* Validate and default VALUE. */
7029 /* Don't issue more errors for error_mark_node (i.e. an
7030 undeclared identifier) - just ignore the value expression. */
7031 if (value
== error_mark_node
)
7033 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value
)))
7035 error_at (loc
, "enumerator value for %qE is not an integer constant",
7041 if (TREE_CODE (value
) != INTEGER_CST
)
7043 value
= c_fully_fold (value
, false, NULL
);
7044 if (TREE_CODE (value
) == INTEGER_CST
)
7045 pedwarn (loc
, OPT_pedantic
,
7046 "enumerator value for %qE is not an integer "
7047 "constant expression", name
);
7049 if (TREE_CODE (value
) != INTEGER_CST
)
7051 error ("enumerator value for %qE is not an integer constant",
7057 value
= default_conversion (value
);
7058 constant_expression_warning (value
);
7063 /* Default based on previous value. */
7064 /* It should no longer be possible to have NON_LVALUE_EXPR
7068 value
= the_enum
->enum_next_value
;
7069 if (the_enum
->enum_overflow
)
7070 error_at (loc
, "overflow in enumeration values");
7072 /* Even though the underlying type of an enum is unspecified, the
7073 type of enumeration constants is explicitly defined as int
7074 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
7076 else if (!int_fits_type_p (value
, integer_type_node
))
7077 pedwarn (loc
, OPT_pedantic
,
7078 "ISO C restricts enumerator values to range of %<int%>");
7080 /* The ISO C Standard mandates enumerators to have type int, even
7081 though the underlying type of an enum type is unspecified.
7082 However, GCC allows enumerators of any integer type as an
7083 extensions. Here we convert any enumerators that fit in an int
7084 to type int, to avoid promotions to unsigned types when comparing
7085 integers with enumerators that fit in the int range. When
7086 -pedantic is given, we would have already warned about those that
7087 don't fit. We have to do this here rather than in finish_enum
7088 because this value may be used to define more enumerators. */
7089 if (int_fits_type_p (value
, integer_type_node
))
7090 value
= convert (integer_type_node
, value
);
7092 /* Set basis for default for next value. */
7093 the_enum
->enum_next_value
7095 (EXPR_HAS_LOCATION (value
) ? EXPR_LOCATION (value
) : input_location
,
7096 PLUS_EXPR
, value
, integer_one_node
, 0);
7097 the_enum
->enum_overflow
= tree_int_cst_lt (the_enum
->enum_next_value
, value
);
7099 /* Now create a declaration for the enum value name. */
7101 type
= TREE_TYPE (value
);
7102 type
= c_common_type_for_size (MAX (TYPE_PRECISION (type
),
7103 TYPE_PRECISION (integer_type_node
)),
7104 (TYPE_PRECISION (type
)
7105 >= TYPE_PRECISION (integer_type_node
)
7106 && TYPE_UNSIGNED (type
)));
7108 decl
= build_decl (loc
, CONST_DECL
, name
, type
);
7109 DECL_INITIAL (decl
) = convert (type
, value
);
7112 return tree_cons (decl
, value
, NULL_TREE
);
7116 /* Create the FUNCTION_DECL for a function definition.
7117 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
7118 the declaration; they describe the function's name and the type it returns,
7119 but twisted together in a fashion that parallels the syntax of C.
7121 This function creates a binding context for the function body
7122 as well as setting up the FUNCTION_DECL in current_function_decl.
7124 Returns 1 on success. If the DECLARATOR is not suitable for a function
7125 (it defines a datum instead), we return 0, which tells
7126 yyparse to report a parse error. */
7129 start_function (struct c_declspecs
*declspecs
, struct c_declarator
*declarator
,
7132 tree decl1
, old_decl
;
7133 tree restype
, resdecl
;
7136 current_function_returns_value
= 0; /* Assume, until we see it does. */
7137 current_function_returns_null
= 0;
7138 current_function_returns_abnormally
= 0;
7139 warn_about_return_type
= 0;
7140 c_switch_stack
= NULL
;
7142 /* Indicate no valid break/continue context by setting these variables
7143 to some non-null, non-label value. We'll notice and emit the proper
7144 error message in c_finish_bc_stmt. */
7145 c_break_label
= c_cont_label
= size_zero_node
;
7147 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, true, NULL
,
7148 &attributes
, NULL
, NULL
, DEPRECATED_NORMAL
);
7150 /* If the declarator is not suitable for a function definition,
7151 cause a syntax error. */
7155 loc
= DECL_SOURCE_LOCATION (decl1
);
7157 decl_attributes (&decl1
, attributes
, 0);
7159 if (DECL_DECLARED_INLINE_P (decl1
)
7160 && DECL_UNINLINABLE (decl1
)
7161 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1
)))
7162 warning_at (loc
, OPT_Wattributes
,
7163 "inline function %qD given attribute noinline",
7166 /* Handle gnu_inline attribute. */
7167 if (declspecs
->inline_p
7168 && !flag_gnu89_inline
7169 && TREE_CODE (decl1
) == FUNCTION_DECL
7170 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1
))
7171 || current_function_decl
))
7173 if (declspecs
->storage_class
!= csc_static
)
7174 DECL_EXTERNAL (decl1
) = !DECL_EXTERNAL (decl1
);
7177 announce_function (decl1
);
7179 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1
))))
7181 error_at (loc
, "return type is an incomplete type");
7182 /* Make it return void instead. */
7184 = build_function_type (void_type_node
,
7185 TYPE_ARG_TYPES (TREE_TYPE (decl1
)));
7188 if (warn_about_return_type
)
7189 pedwarn_c99 (loc
, flag_isoc99
? 0
7190 : (warn_return_type
? OPT_Wreturn_type
: OPT_Wimplicit_int
),
7191 "return type defaults to %<int%>");
7193 /* Make the init_value nonzero so pushdecl knows this is not tentative.
7194 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
7195 DECL_INITIAL (decl1
) = error_mark_node
;
7197 /* If this definition isn't a prototype and we had a prototype declaration
7198 before, copy the arg type info from that prototype. */
7199 old_decl
= lookup_name_in_scope (DECL_NAME (decl1
), current_scope
);
7200 if (old_decl
&& TREE_CODE (old_decl
) != FUNCTION_DECL
)
7202 current_function_prototype_locus
= UNKNOWN_LOCATION
;
7203 current_function_prototype_built_in
= false;
7204 current_function_prototype_arg_types
= NULL_TREE
;
7205 if (TYPE_ARG_TYPES (TREE_TYPE (decl1
)) == 0)
7207 if (old_decl
!= 0 && TREE_CODE (TREE_TYPE (old_decl
)) == FUNCTION_TYPE
7208 && comptypes (TREE_TYPE (TREE_TYPE (decl1
)),
7209 TREE_TYPE (TREE_TYPE (old_decl
))))
7211 TREE_TYPE (decl1
) = composite_type (TREE_TYPE (old_decl
),
7213 current_function_prototype_locus
= DECL_SOURCE_LOCATION (old_decl
);
7214 current_function_prototype_built_in
7215 = C_DECL_BUILTIN_PROTOTYPE (old_decl
);
7216 current_function_prototype_arg_types
7217 = TYPE_ARG_TYPES (TREE_TYPE (decl1
));
7219 if (TREE_PUBLIC (decl1
))
7221 /* If there is an external prototype declaration of this
7222 function, record its location but do not copy information
7223 to this decl. This may be an invisible declaration
7224 (built-in or in a scope which has finished) or simply
7225 have more refined argument types than any declaration
7227 struct c_binding
*b
;
7228 for (b
= I_SYMBOL_BINDING (DECL_NAME (decl1
)); b
; b
= b
->shadowed
)
7229 if (B_IN_SCOPE (b
, external_scope
))
7233 tree ext_decl
, ext_type
;
7235 ext_type
= b
->u
.type
? b
->u
.type
: TREE_TYPE (ext_decl
);
7236 if (TREE_CODE (ext_type
) == FUNCTION_TYPE
7237 && comptypes (TREE_TYPE (TREE_TYPE (decl1
)),
7238 TREE_TYPE (ext_type
)))
7240 current_function_prototype_locus
7241 = DECL_SOURCE_LOCATION (ext_decl
);
7242 current_function_prototype_built_in
7243 = C_DECL_BUILTIN_PROTOTYPE (ext_decl
);
7244 current_function_prototype_arg_types
7245 = TYPE_ARG_TYPES (ext_type
);
7251 /* Optionally warn of old-fashioned def with no previous prototype. */
7252 if (warn_strict_prototypes
7253 && old_decl
!= error_mark_node
7254 && TYPE_ARG_TYPES (TREE_TYPE (decl1
)) == 0
7255 && C_DECL_ISNT_PROTOTYPE (old_decl
))
7256 warning_at (loc
, OPT_Wstrict_prototypes
,
7257 "function declaration isn%'t a prototype");
7258 /* Optionally warn of any global def with no previous prototype. */
7259 else if (warn_missing_prototypes
7260 && old_decl
!= error_mark_node
7261 && TREE_PUBLIC (decl1
)
7262 && !MAIN_NAME_P (DECL_NAME (decl1
))
7263 && C_DECL_ISNT_PROTOTYPE (old_decl
))
7264 warning_at (loc
, OPT_Wmissing_prototypes
,
7265 "no previous prototype for %qD", decl1
);
7266 /* Optionally warn of any def with no previous prototype
7267 if the function has already been used. */
7268 else if (warn_missing_prototypes
7270 && old_decl
!= error_mark_node
7271 && TREE_USED (old_decl
)
7272 && TYPE_ARG_TYPES (TREE_TYPE (old_decl
)) == 0)
7273 warning_at (loc
, OPT_Wmissing_prototypes
,
7274 "%qD was used with no prototype before its definition", decl1
);
7275 /* Optionally warn of any global def with no previous declaration. */
7276 else if (warn_missing_declarations
7277 && TREE_PUBLIC (decl1
)
7279 && !MAIN_NAME_P (DECL_NAME (decl1
)))
7280 warning_at (loc
, OPT_Wmissing_declarations
,
7281 "no previous declaration for %qD",
7283 /* Optionally warn of any def with no previous declaration
7284 if the function has already been used. */
7285 else if (warn_missing_declarations
7287 && old_decl
!= error_mark_node
7288 && TREE_USED (old_decl
)
7289 && C_DECL_IMPLICIT (old_decl
))
7290 warning_at (loc
, OPT_Wmissing_declarations
,
7291 "%qD was used with no declaration before its definition", decl1
);
7293 /* This function exists in static storage.
7294 (This does not mean `static' in the C sense!) */
7295 TREE_STATIC (decl1
) = 1;
7297 /* A nested function is not global. */
7298 if (current_function_decl
!= 0)
7299 TREE_PUBLIC (decl1
) = 0;
7301 /* This is the earliest point at which we might know the assembler
7302 name of the function. Thus, if it's set before this, die horribly. */
7303 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1
));
7305 /* If #pragma weak was used, mark the decl weak now. */
7306 if (current_scope
== file_scope
)
7307 maybe_apply_pragma_weak (decl1
);
7309 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
7310 if (warn_main
&& MAIN_NAME_P (DECL_NAME (decl1
)))
7312 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1
)))
7313 != integer_type_node
)
7314 pedwarn (loc
, OPT_Wmain
, "return type of %qD is not %<int%>", decl1
);
7316 check_main_parameter_types (decl1
);
7318 if (!TREE_PUBLIC (decl1
))
7319 pedwarn (loc
, OPT_Wmain
,
7320 "%qD is normally a non-static function", decl1
);
7323 /* Record the decl so that the function name is defined.
7324 If we already have a decl for this name, and it is a FUNCTION_DECL,
7325 use the old decl. */
7327 current_function_decl
= pushdecl (decl1
);
7330 declare_parm_level ();
7332 restype
= TREE_TYPE (TREE_TYPE (current_function_decl
));
7333 resdecl
= build_decl (loc
, RESULT_DECL
, NULL_TREE
, restype
);
7334 DECL_ARTIFICIAL (resdecl
) = 1;
7335 DECL_IGNORED_P (resdecl
) = 1;
7336 DECL_RESULT (current_function_decl
) = resdecl
;
7338 start_fname_decls ();
7343 /* Subroutine of store_parm_decls which handles new-style function
7344 definitions (prototype format). The parms already have decls, so we
7345 need only record them as in effect and complain if any redundant
7346 old-style parm decls were written. */
7348 store_parm_decls_newstyle (tree fndecl
, const struct c_arg_info
*arg_info
)
7352 if (current_scope
->bindings
)
7354 error ("%Jold-style parameter declarations in prototyped "
7355 "function definition", fndecl
);
7357 /* Get rid of the old-style declarations. */
7361 /* Don't issue this warning for nested functions, and don't issue this
7362 warning if we got here because ARG_INFO_TYPES was error_mark_node
7363 (this happens when a function definition has just an ellipsis in
7364 its parameter list). */
7365 else if (!in_system_header
&& !current_function_scope
7366 && arg_info
->types
!= error_mark_node
)
7367 warning (OPT_Wtraditional
,
7368 "%Jtraditional C rejects ISO C style function definitions",
7371 /* Now make all the parameter declarations visible in the function body.
7372 We can bypass most of the grunt work of pushdecl. */
7373 for (decl
= arg_info
->parms
; decl
; decl
= TREE_CHAIN (decl
))
7375 DECL_CONTEXT (decl
) = current_function_decl
;
7376 if (DECL_NAME (decl
))
7378 bind (DECL_NAME (decl
), decl
, current_scope
,
7379 /*invisible=*/false, /*nested=*/false,
7381 if (!TREE_USED (decl
))
7382 warn_if_shadowing (decl
);
7385 error ("%Jparameter name omitted", decl
);
7388 /* Record the parameter list in the function declaration. */
7389 DECL_ARGUMENTS (fndecl
) = arg_info
->parms
;
7391 /* Now make all the ancillary declarations visible, likewise. */
7392 for (decl
= arg_info
->others
; decl
; decl
= TREE_CHAIN (decl
))
7394 DECL_CONTEXT (decl
) = current_function_decl
;
7395 if (DECL_NAME (decl
))
7396 bind (DECL_NAME (decl
), decl
, current_scope
,
7397 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION
);
7400 /* And all the tag declarations. */
7401 for (decl
= arg_info
->tags
; decl
; decl
= TREE_CHAIN (decl
))
7402 if (TREE_PURPOSE (decl
))
7403 bind (TREE_PURPOSE (decl
), TREE_VALUE (decl
), current_scope
,
7404 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION
);
7407 /* Subroutine of store_parm_decls which handles old-style function
7408 definitions (separate parameter list and declarations). */
7411 store_parm_decls_oldstyle (tree fndecl
, const struct c_arg_info
*arg_info
)
7413 struct c_binding
*b
;
7414 tree parm
, decl
, last
;
7415 tree parmids
= arg_info
->parms
;
7416 struct pointer_set_t
*seen_args
= pointer_set_create ();
7418 if (!in_system_header
)
7419 warning_at (DECL_SOURCE_LOCATION (fndecl
),
7420 OPT_Wold_style_definition
, "old-style function definition");
7422 /* Match each formal parameter name with its declaration. Save each
7423 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
7424 for (parm
= parmids
; parm
; parm
= TREE_CHAIN (parm
))
7426 if (TREE_VALUE (parm
) == 0)
7428 error_at (DECL_SOURCE_LOCATION (fndecl
),
7429 "parameter name missing from parameter list");
7430 TREE_PURPOSE (parm
) = 0;
7434 b
= I_SYMBOL_BINDING (TREE_VALUE (parm
));
7435 if (b
&& B_IN_CURRENT_SCOPE (b
))
7438 /* If we got something other than a PARM_DECL it is an error. */
7439 if (TREE_CODE (decl
) != PARM_DECL
)
7440 error_at (DECL_SOURCE_LOCATION (decl
),
7441 "%qD declared as a non-parameter", decl
);
7442 /* If the declaration is already marked, we have a duplicate
7443 name. Complain and ignore the duplicate. */
7444 else if (pointer_set_contains (seen_args
, decl
))
7446 error_at (DECL_SOURCE_LOCATION (decl
),
7447 "multiple parameters named %qD", decl
);
7448 TREE_PURPOSE (parm
) = 0;
7451 /* If the declaration says "void", complain and turn it into
7453 else if (VOID_TYPE_P (TREE_TYPE (decl
)))
7455 error_at (DECL_SOURCE_LOCATION (decl
),
7456 "parameter %qD declared with void type", decl
);
7457 TREE_TYPE (decl
) = integer_type_node
;
7458 DECL_ARG_TYPE (decl
) = integer_type_node
;
7459 layout_decl (decl
, 0);
7461 warn_if_shadowing (decl
);
7463 /* If no declaration found, default to int. */
7466 /* FIXME diagnostics: This should be the location of the argument,
7467 not the FNDECL. E.g., for an old-style declaration
7469 int f10(v) { blah; }
7471 We should use the location of the V, not the F10.
7472 Unfortunately, the V is an IDENTIFIER_NODE which has no
7473 location. In the future we need locations for c_arg_info
7476 See gcc.dg/Wshadow-3.c for an example of this problem. */
7477 decl
= build_decl (DECL_SOURCE_LOCATION (fndecl
),
7478 PARM_DECL
, TREE_VALUE (parm
), integer_type_node
);
7479 DECL_ARG_TYPE (decl
) = TREE_TYPE (decl
);
7481 warn_if_shadowing (decl
);
7484 pedwarn (DECL_SOURCE_LOCATION (decl
),
7485 0, "type of %qD defaults to %<int%>", decl
);
7487 warning_at (DECL_SOURCE_LOCATION (decl
),
7488 OPT_Wmissing_parameter_type
,
7489 "type of %qD defaults to %<int%>", decl
);
7492 TREE_PURPOSE (parm
) = decl
;
7493 pointer_set_insert (seen_args
, decl
);
7496 /* Now examine the parms chain for incomplete declarations
7497 and declarations with no corresponding names. */
7499 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
7502 if (TREE_CODE (parm
) != PARM_DECL
)
7505 if (TREE_TYPE (parm
) != error_mark_node
7506 && !COMPLETE_TYPE_P (TREE_TYPE (parm
)))
7508 error_at (DECL_SOURCE_LOCATION (parm
),
7509 "parameter %qD has incomplete type", parm
);
7510 TREE_TYPE (parm
) = error_mark_node
;
7513 if (!pointer_set_contains (seen_args
, parm
))
7515 error_at (DECL_SOURCE_LOCATION (parm
),
7516 "declaration for parameter %qD but no such parameter",
7519 /* Pretend the parameter was not missing.
7520 This gets us to a standard state and minimizes
7521 further error messages. */
7522 parmids
= chainon (parmids
, tree_cons (parm
, 0, 0));
7526 /* Chain the declarations together in the order of the list of
7527 names. Store that chain in the function decl, replacing the
7528 list of names. Update the current scope to match. */
7529 DECL_ARGUMENTS (fndecl
) = 0;
7531 for (parm
= parmids
; parm
; parm
= TREE_CHAIN (parm
))
7532 if (TREE_PURPOSE (parm
))
7534 if (parm
&& TREE_PURPOSE (parm
))
7536 last
= TREE_PURPOSE (parm
);
7537 DECL_ARGUMENTS (fndecl
) = last
;
7539 for (parm
= TREE_CHAIN (parm
); parm
; parm
= TREE_CHAIN (parm
))
7540 if (TREE_PURPOSE (parm
))
7542 TREE_CHAIN (last
) = TREE_PURPOSE (parm
);
7543 last
= TREE_PURPOSE (parm
);
7545 TREE_CHAIN (last
) = 0;
7548 pointer_set_destroy (seen_args
);
7550 /* If there was a previous prototype,
7551 set the DECL_ARG_TYPE of each argument according to
7552 the type previously specified, and report any mismatches. */
7554 if (current_function_prototype_arg_types
)
7557 for (parm
= DECL_ARGUMENTS (fndecl
),
7558 type
= current_function_prototype_arg_types
;
7559 parm
|| (type
&& TREE_VALUE (type
) != error_mark_node
7560 && (TYPE_MAIN_VARIANT (TREE_VALUE (type
)) != void_type_node
));
7561 parm
= TREE_CHAIN (parm
), type
= TREE_CHAIN (type
))
7563 if (parm
== 0 || type
== 0
7564 || TYPE_MAIN_VARIANT (TREE_VALUE (type
)) == void_type_node
)
7566 if (current_function_prototype_built_in
)
7567 warning_at (DECL_SOURCE_LOCATION (fndecl
),
7568 0, "number of arguments doesn%'t match "
7569 "built-in prototype");
7572 /* FIXME diagnostics: This should be the location of
7573 FNDECL, but there is bug when a prototype is
7574 declared inside function context, but defined
7575 outside of it (e.g., gcc.dg/pr15698-2.c). In
7576 which case FNDECL gets the location of the
7577 prototype, not the definition. */
7578 error_at (input_location
,
7579 "number of arguments doesn%'t match prototype");
7581 error_at (current_function_prototype_locus
,
7582 "prototype declaration");
7586 /* Type for passing arg must be consistent with that
7587 declared for the arg. ISO C says we take the unqualified
7588 type for parameters declared with qualified type. */
7589 if (TREE_TYPE (parm
) != error_mark_node
7590 && TREE_TYPE (type
) != error_mark_node
7591 && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm
)),
7592 TYPE_MAIN_VARIANT (TREE_VALUE (type
))))
7594 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm
))
7595 == TYPE_MAIN_VARIANT (TREE_VALUE (type
)))
7597 /* Adjust argument to match prototype. E.g. a previous
7598 `int foo(float);' prototype causes
7599 `int foo(x) float x; {...}' to be treated like
7600 `int foo(float x) {...}'. This is particularly
7601 useful for argument types like uid_t. */
7602 DECL_ARG_TYPE (parm
) = TREE_TYPE (parm
);
7604 if (targetm
.calls
.promote_prototypes (TREE_TYPE (current_function_decl
))
7605 && INTEGRAL_TYPE_P (TREE_TYPE (parm
))
7606 && TYPE_PRECISION (TREE_TYPE (parm
))
7607 < TYPE_PRECISION (integer_type_node
))
7608 DECL_ARG_TYPE (parm
) = integer_type_node
;
7610 /* ??? Is it possible to get here with a
7611 built-in prototype or will it always have
7612 been diagnosed as conflicting with an
7613 old-style definition and discarded? */
7614 if (current_function_prototype_built_in
)
7615 warning_at (DECL_SOURCE_LOCATION (parm
),
7616 OPT_pedantic
, "promoted argument %qD "
7617 "doesn%'t match built-in prototype", parm
);
7620 pedwarn (DECL_SOURCE_LOCATION (parm
),
7621 OPT_pedantic
, "promoted argument %qD "
7622 "doesn%'t match prototype", parm
);
7623 pedwarn (current_function_prototype_locus
, OPT_pedantic
,
7624 "prototype declaration");
7629 if (current_function_prototype_built_in
)
7630 warning_at (DECL_SOURCE_LOCATION (parm
),
7631 0, "argument %qD doesn%'t match "
7632 "built-in prototype", parm
);
7635 error_at (DECL_SOURCE_LOCATION (parm
),
7636 "argument %qD doesn%'t match prototype", parm
);
7637 error_at (current_function_prototype_locus
,
7638 "prototype declaration");
7643 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl
)) = 0;
7646 /* Otherwise, create a prototype that would match. */
7650 tree actual
= 0, last
= 0, type
;
7652 for (parm
= DECL_ARGUMENTS (fndecl
); parm
; parm
= TREE_CHAIN (parm
))
7654 type
= tree_cons (NULL_TREE
, DECL_ARG_TYPE (parm
), NULL_TREE
);
7656 TREE_CHAIN (last
) = type
;
7661 type
= tree_cons (NULL_TREE
, void_type_node
, NULL_TREE
);
7663 TREE_CHAIN (last
) = type
;
7667 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
7668 of the type of this function, but we need to avoid having this
7669 affect the types of other similarly-typed functions, so we must
7670 first force the generation of an identical (but separate) type
7671 node for the relevant function type. The new node we create
7672 will be a variant of the main variant of the original function
7675 TREE_TYPE (fndecl
) = build_variant_type_copy (TREE_TYPE (fndecl
));
7677 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl
)) = actual
;
7681 /* Store parameter declarations passed in ARG_INFO into the current
7682 function declaration. */
7685 store_parm_decls_from (struct c_arg_info
*arg_info
)
7687 current_function_arg_info
= arg_info
;
7688 store_parm_decls ();
7691 /* Store the parameter declarations into the current function declaration.
7692 This is called after parsing the parameter declarations, before
7693 digesting the body of the function.
7695 For an old-style definition, construct a prototype out of the old-style
7696 parameter declarations and inject it into the function's type. */
7699 store_parm_decls (void)
7701 tree fndecl
= current_function_decl
;
7704 /* The argument information block for FNDECL. */
7705 struct c_arg_info
*arg_info
= current_function_arg_info
;
7706 current_function_arg_info
= 0;
7708 /* True if this definition is written with a prototype. Note:
7709 despite C99 6.7.5.3p14, we can *not* treat an empty argument
7710 list in a function definition as equivalent to (void) -- an
7711 empty argument list specifies the function has no parameters,
7712 but only (void) sets up a prototype for future calls. */
7713 proto
= arg_info
->types
!= 0;
7716 store_parm_decls_newstyle (fndecl
, arg_info
);
7718 store_parm_decls_oldstyle (fndecl
, arg_info
);
7720 /* The next call to push_scope will be a function body. */
7722 next_is_function_body
= true;
7724 /* Write a record describing this function definition to the prototypes
7725 file (if requested). */
7727 gen_aux_info_record (fndecl
, 1, 0, proto
);
7729 /* Initialize the RTL code for the function. */
7730 allocate_struct_function (fndecl
, false);
7732 /* Begin the statement tree for this function. */
7733 DECL_SAVED_TREE (fndecl
) = push_stmt_list ();
7735 /* ??? Insert the contents of the pending sizes list into the function
7736 to be evaluated. The only reason left to have this is
7737 void foo(int n, int array[n++])
7738 because we throw away the array type in favor of a pointer type, and
7739 thus won't naturally see the SAVE_EXPR containing the increment. All
7740 other pending sizes would be handled by gimplify_parameters. */
7743 for (t
= nreverse (get_pending_sizes ()); t
; t
= TREE_CHAIN (t
))
7744 add_stmt (TREE_VALUE (t
));
7747 /* Even though we're inside a function body, we still don't want to
7748 call expand_expr to calculate the size of a variable-sized array.
7749 We haven't necessarily assigned RTL to all variables yet, so it's
7750 not safe to try to expand expressions involving them. */
7751 cfun
->dont_save_pending_sizes_p
= 1;
7754 /* Emit diagnostics that require gimple input for detection. Operate on
7755 FNDECL and all its nested functions. */
7758 c_gimple_diagnostics_recursively (tree fndecl
)
7760 struct cgraph_node
*cgn
;
7761 gimple_seq body
= gimple_body (fndecl
);
7763 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
7764 c_warn_unused_result (body
);
7766 /* Notice when OpenMP structured block constraints are violated. */
7768 diagnose_omp_structured_block_errors (fndecl
);
7770 /* Finalize all nested functions now. */
7771 cgn
= cgraph_node (fndecl
);
7772 for (cgn
= cgn
->nested
; cgn
; cgn
= cgn
->next_nested
)
7773 c_gimple_diagnostics_recursively (cgn
->decl
);
7776 /* Finish up a function declaration and compile that function
7777 all the way to assembler language output. The free the storage
7778 for the function definition.
7780 This is called after parsing the body of the function definition. */
7783 finish_function (void)
7785 tree fndecl
= current_function_decl
;
7787 if (TREE_CODE (fndecl
) == FUNCTION_DECL
7788 && targetm
.calls
.promote_prototypes (TREE_TYPE (fndecl
)))
7790 tree args
= DECL_ARGUMENTS (fndecl
);
7791 for (; args
; args
= TREE_CHAIN (args
))
7793 tree type
= TREE_TYPE (args
);
7794 if (INTEGRAL_TYPE_P (type
)
7795 && TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
))
7796 DECL_ARG_TYPE (args
) = integer_type_node
;
7800 if (DECL_INITIAL (fndecl
) && DECL_INITIAL (fndecl
) != error_mark_node
)
7801 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl
)) = fndecl
;
7803 /* Must mark the RESULT_DECL as being in this function. */
7805 if (DECL_RESULT (fndecl
) && DECL_RESULT (fndecl
) != error_mark_node
)
7806 DECL_CONTEXT (DECL_RESULT (fndecl
)) = fndecl
;
7808 if (MAIN_NAME_P (DECL_NAME (fndecl
)) && flag_hosted
7809 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl
)))
7810 == integer_type_node
&& flag_isoc99
)
7812 /* Hack. We don't want the middle-end to warn that this return
7813 is unreachable, so we mark its location as special. Using
7814 UNKNOWN_LOCATION has the problem that it gets clobbered in
7815 annotate_one_with_locus. A cleaner solution might be to
7816 ensure ! should_carry_locus_p (stmt), but that needs a flag.
7818 c_finish_return (BUILTINS_LOCATION
, integer_zero_node
, NULL_TREE
);
7821 /* Tie off the statement tree for this function. */
7822 DECL_SAVED_TREE (fndecl
) = pop_stmt_list (DECL_SAVED_TREE (fndecl
));
7824 finish_fname_decls ();
7826 /* Complain if there's just no return statement. */
7827 if (warn_return_type
7828 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl
))) != VOID_TYPE
7829 && !current_function_returns_value
&& !current_function_returns_null
7830 /* Don't complain if we are no-return. */
7831 && !current_function_returns_abnormally
7832 /* Don't warn for main(). */
7833 && !MAIN_NAME_P (DECL_NAME (fndecl
))
7834 /* Or if they didn't actually specify a return type. */
7835 && !C_FUNCTION_IMPLICIT_INT (fndecl
)
7836 /* Normally, with -Wreturn-type, flow will complain, but we might
7837 optimize out static functions. */
7838 && !TREE_PUBLIC (fndecl
))
7840 warning (OPT_Wreturn_type
,
7841 "no return statement in function returning non-void");
7842 TREE_NO_WARNING (fndecl
) = 1;
7845 /* Store the end of the function, so that we get good line number
7846 info for the epilogue. */
7847 cfun
->function_end_locus
= input_location
;
7849 /* Finalize the ELF visibility for the function. */
7850 c_determine_visibility (fndecl
);
7852 /* For GNU C extern inline functions disregard inline limits. */
7853 if (DECL_EXTERNAL (fndecl
)
7854 && DECL_DECLARED_INLINE_P (fndecl
))
7855 DECL_DISREGARD_INLINE_LIMITS (fndecl
) = 1;
7857 /* Genericize before inlining. Delay genericizing nested functions
7858 until their parent function is genericized. Since finalizing
7859 requires GENERIC, delay that as well. */
7861 if (DECL_INITIAL (fndecl
) && DECL_INITIAL (fndecl
) != error_mark_node
7862 && !undef_nested_function
)
7864 if (!decl_function_context (fndecl
))
7866 c_genericize (fndecl
);
7867 c_gimple_diagnostics_recursively (fndecl
);
7869 /* ??? Objc emits functions after finalizing the compilation unit.
7870 This should be cleaned up later and this conditional removed. */
7871 if (cgraph_global_info_ready
)
7873 cgraph_add_new_function (fndecl
, false);
7876 cgraph_finalize_function (fndecl
, false);
7880 /* Register this function with cgraph just far enough to get it
7881 added to our parent's nested function list. Handy, since the
7882 C front end doesn't have such a list. */
7883 (void) cgraph_node (fndecl
);
7887 if (!decl_function_context (fndecl
))
7888 undef_nested_function
= false;
7890 /* We're leaving the context of this function, so zap cfun.
7891 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
7892 tree_rest_of_compilation. */
7894 current_function_decl
= NULL
;
7897 /* Check the declarations given in a for-loop for satisfying the C99
7898 constraints. If exactly one such decl is found, return it. LOC is
7899 the location of the opening parenthesis of the for loop. */
7902 check_for_loop_decls (location_t loc
)
7904 struct c_binding
*b
;
7905 tree one_decl
= NULL_TREE
;
7910 static bool hint
= true;
7911 /* If we get here, declarations have been used in a for loop without
7912 the C99 for loop scope. This doesn't make much sense, so don't
7914 error_at (loc
, "%<for%> loop initial declarations "
7915 "are only allowed in C99 mode");
7919 "use option -std=c99 or -std=gnu99 to compile your code");
7924 /* C99 subclause 6.8.5 paragraph 3:
7926 [#3] The declaration part of a for statement shall only
7927 declare identifiers for objects having storage class auto or
7930 It isn't clear whether, in this sentence, "identifiers" binds to
7931 "shall only declare" or to "objects" - that is, whether all identifiers
7932 declared must be identifiers for objects, or whether the restriction
7933 only applies to those that are. (A question on this in comp.std.c
7934 in November 2000 received no answer.) We implement the strictest
7935 interpretation, to avoid creating an extension which later causes
7938 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
7941 tree decl
= b
->decl
;
7946 switch (TREE_CODE (decl
))
7950 location_t decl_loc
= DECL_SOURCE_LOCATION (decl
);
7951 if (TREE_STATIC (decl
))
7953 "declaration of static variable %qD in %<for%> loop "
7954 "initial declaration", decl
);
7955 else if (DECL_EXTERNAL (decl
))
7957 "declaration of %<extern%> variable %qD in %<for%> loop "
7958 "initial declaration", decl
);
7964 "%<struct %E%> declared in %<for%> loop initial "
7969 "%<union %E%> declared in %<for%> loop initial declaration",
7973 error_at (loc
, "%<enum %E%> declared in %<for%> loop "
7974 "initial declaration", id
);
7977 error_at (loc
, "declaration of non-variable "
7978 "%qD in %<for%> loop initial declaration", decl
);
7985 return n_decls
== 1 ? one_decl
: NULL_TREE
;
7988 /* Save and reinitialize the variables
7989 used during compilation of a C function. */
7992 c_push_function_context (void)
7994 struct language_function
*p
;
7995 p
= GGC_NEW (struct language_function
);
7998 p
->base
.x_stmt_tree
= c_stmt_tree
;
7999 p
->x_break_label
= c_break_label
;
8000 p
->x_cont_label
= c_cont_label
;
8001 p
->x_switch_stack
= c_switch_stack
;
8002 p
->arg_info
= current_function_arg_info
;
8003 p
->returns_value
= current_function_returns_value
;
8004 p
->returns_null
= current_function_returns_null
;
8005 p
->returns_abnormally
= current_function_returns_abnormally
;
8006 p
->warn_about_return_type
= warn_about_return_type
;
8008 push_function_context ();
8011 /* Restore the variables used during compilation of a C function. */
8014 c_pop_function_context (void)
8016 struct language_function
*p
;
8018 pop_function_context ();
8020 cfun
->language
= NULL
;
8022 if (DECL_STRUCT_FUNCTION (current_function_decl
) == 0
8023 && DECL_SAVED_TREE (current_function_decl
) == NULL_TREE
)
8025 /* Stop pointing to the local nodes about to be freed. */
8026 /* But DECL_INITIAL must remain nonzero so we know this
8027 was an actual function definition. */
8028 DECL_INITIAL (current_function_decl
) = error_mark_node
;
8029 DECL_ARGUMENTS (current_function_decl
) = 0;
8032 c_stmt_tree
= p
->base
.x_stmt_tree
;
8033 c_break_label
= p
->x_break_label
;
8034 c_cont_label
= p
->x_cont_label
;
8035 c_switch_stack
= p
->x_switch_stack
;
8036 current_function_arg_info
= p
->arg_info
;
8037 current_function_returns_value
= p
->returns_value
;
8038 current_function_returns_null
= p
->returns_null
;
8039 current_function_returns_abnormally
= p
->returns_abnormally
;
8040 warn_about_return_type
= p
->warn_about_return_type
;
8043 /* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
8046 c_dup_lang_specific_decl (tree decl
)
8048 struct lang_decl
*ld
;
8050 if (!DECL_LANG_SPECIFIC (decl
))
8053 ld
= GGC_NEW (struct lang_decl
);
8054 memcpy (ld
, DECL_LANG_SPECIFIC (decl
), sizeof (struct lang_decl
));
8055 DECL_LANG_SPECIFIC (decl
) = ld
;
8058 /* The functions below are required for functionality of doing
8059 function at once processing in the C front end. Currently these
8060 functions are not called from anywhere in the C front end, but as
8061 these changes continue, that will change. */
8063 /* Returns the stmt_tree (if any) to which statements are currently
8064 being added. If there is no active statement-tree, NULL is
8068 current_stmt_tree (void)
8070 return &c_stmt_tree
;
8073 /* Return the global value of T as a symbol. */
8076 identifier_global_value (tree t
)
8078 struct c_binding
*b
;
8080 for (b
= I_SYMBOL_BINDING (t
); b
; b
= b
->shadowed
)
8081 if (B_IN_FILE_SCOPE (b
) || B_IN_EXTERNAL_SCOPE (b
))
8087 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
8088 otherwise the name is found in ridpointers from RID_INDEX. */
8091 record_builtin_type (enum rid rid_index
, const char *name
, tree type
)
8095 id
= ridpointers
[(int) rid_index
];
8097 id
= get_identifier (name
);
8098 decl
= build_decl (UNKNOWN_LOCATION
, TYPE_DECL
, id
, type
);
8100 if (debug_hooks
->type_decl
)
8101 debug_hooks
->type_decl (decl
, false);
8104 /* Build the void_list_node (void_type_node having been created). */
8106 build_void_list_node (void)
8108 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
8112 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
8115 build_c_parm (struct c_declspecs
*specs
, tree attrs
,
8116 struct c_declarator
*declarator
)
8118 struct c_parm
*ret
= XOBNEW (&parser_obstack
, struct c_parm
);
8121 ret
->declarator
= declarator
;
8125 /* Return a declarator with nested attributes. TARGET is the inner
8126 declarator to which these attributes apply. ATTRS are the
8129 struct c_declarator
*
8130 build_attrs_declarator (tree attrs
, struct c_declarator
*target
)
8132 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
8133 ret
->kind
= cdk_attrs
;
8134 ret
->declarator
= target
;
8135 ret
->u
.attrs
= attrs
;
8139 /* Return a declarator for a function with arguments specified by ARGS
8140 and return type specified by TARGET. */
8142 struct c_declarator
*
8143 build_function_declarator (struct c_arg_info
*args
,
8144 struct c_declarator
*target
)
8146 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
8147 ret
->kind
= cdk_function
;
8148 ret
->declarator
= target
;
8149 ret
->u
.arg_info
= args
;
8153 /* Return a declarator for the identifier IDENT (which may be
8154 NULL_TREE for an abstract declarator). */
8156 struct c_declarator
*
8157 build_id_declarator (tree ident
)
8159 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
8161 ret
->declarator
= 0;
8163 /* Default value - may get reset to a more precise location. */
8164 ret
->id_loc
= input_location
;
8168 /* Return something to represent absolute declarators containing a *.
8169 TARGET is the absolute declarator that the * contains.
8170 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
8171 to apply to the pointer type. */
8173 struct c_declarator
*
8174 make_pointer_declarator (struct c_declspecs
*type_quals_attrs
,
8175 struct c_declarator
*target
)
8179 struct c_declarator
*itarget
= target
;
8180 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
8181 if (type_quals_attrs
)
8183 attrs
= type_quals_attrs
->attrs
;
8184 quals
= quals_from_declspecs (type_quals_attrs
);
8185 if (attrs
!= NULL_TREE
)
8186 itarget
= build_attrs_declarator (attrs
, target
);
8188 ret
->kind
= cdk_pointer
;
8189 ret
->declarator
= itarget
;
8190 ret
->u
.pointer_quals
= quals
;
8194 /* Return a pointer to a structure for an empty list of declaration
8197 struct c_declspecs
*
8198 build_null_declspecs (void)
8200 struct c_declspecs
*ret
= XOBNEW (&parser_obstack
, struct c_declspecs
);
8205 ret
->typespec_word
= cts_none
;
8206 ret
->storage_class
= csc_none
;
8207 ret
->expr_const_operands
= true;
8208 ret
->declspecs_seen_p
= false;
8209 ret
->type_seen_p
= false;
8210 ret
->non_sc_seen_p
= false;
8211 ret
->typedef_p
= false;
8212 ret
->tag_defined_p
= false;
8213 ret
->explicit_signed_p
= false;
8214 ret
->deprecated_p
= false;
8215 ret
->default_int_p
= false;
8216 ret
->long_p
= false;
8217 ret
->long_long_p
= false;
8218 ret
->short_p
= false;
8219 ret
->signed_p
= false;
8220 ret
->unsigned_p
= false;
8221 ret
->complex_p
= false;
8222 ret
->inline_p
= false;
8223 ret
->thread_p
= false;
8224 ret
->const_p
= false;
8225 ret
->volatile_p
= false;
8226 ret
->restrict_p
= false;
8227 ret
->saturating_p
= false;
8231 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
8234 struct c_declspecs
*
8235 declspecs_add_qual (struct c_declspecs
*specs
, tree qual
)
8239 specs
->non_sc_seen_p
= true;
8240 specs
->declspecs_seen_p
= true;
8241 gcc_assert (TREE_CODE (qual
) == IDENTIFIER_NODE
8242 && C_IS_RESERVED_WORD (qual
));
8243 i
= C_RID_CODE (qual
);
8247 dupe
= specs
->const_p
;
8248 specs
->const_p
= true;
8251 dupe
= specs
->volatile_p
;
8252 specs
->volatile_p
= true;
8255 dupe
= specs
->restrict_p
;
8256 specs
->restrict_p
= true;
8261 if (dupe
&& !flag_isoc99
)
8262 pedwarn (input_location
, OPT_pedantic
, "duplicate %qE", qual
);
8266 /* Add the type specifier TYPE to the declaration specifiers SPECS,
8269 struct c_declspecs
*
8270 declspecs_add_type (struct c_declspecs
*specs
, struct c_typespec spec
)
8272 tree type
= spec
.spec
;
8273 specs
->non_sc_seen_p
= true;
8274 specs
->declspecs_seen_p
= true;
8275 specs
->type_seen_p
= true;
8276 if (TREE_DEPRECATED (type
))
8277 specs
->deprecated_p
= true;
8279 /* Handle type specifier keywords. */
8280 if (TREE_CODE (type
) == IDENTIFIER_NODE
8281 && C_IS_RESERVED_WORD (type
)
8282 && C_RID_CODE (type
) != RID_CXX_COMPAT_WARN
)
8284 enum rid i
= C_RID_CODE (type
);
8287 error ("two or more data types in declaration specifiers");
8290 if ((int) i
<= (int) RID_LAST_MODIFIER
)
8292 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
8297 if (specs
->long_long_p
)
8299 error ("%<long long long%> is too long for GCC");
8304 if (specs
->typespec_word
== cts_double
)
8306 error ("both %<long long%> and %<double%> in "
8307 "declaration specifiers");
8310 pedwarn_c90 (input_location
, OPT_Wlong_long
,
8311 "ISO C90 does not support %<long long%>");
8312 specs
->long_long_p
= 1;
8316 error ("both %<long%> and %<short%> in "
8317 "declaration specifiers");
8318 else if (specs
->typespec_word
== cts_void
)
8319 error ("both %<long%> and %<void%> in "
8320 "declaration specifiers");
8321 else if (specs
->typespec_word
== cts_bool
)
8322 error ("both %<long%> and %<_Bool%> in "
8323 "declaration specifiers");
8324 else if (specs
->typespec_word
== cts_char
)
8325 error ("both %<long%> and %<char%> in "
8326 "declaration specifiers");
8327 else if (specs
->typespec_word
== cts_float
)
8328 error ("both %<long%> and %<float%> in "
8329 "declaration specifiers");
8330 else if (specs
->typespec_word
== cts_dfloat32
)
8331 error ("both %<long%> and %<_Decimal32%> in "
8332 "declaration specifiers");
8333 else if (specs
->typespec_word
== cts_dfloat64
)
8334 error ("both %<long%> and %<_Decimal64%> in "
8335 "declaration specifiers");
8336 else if (specs
->typespec_word
== cts_dfloat128
)
8337 error ("both %<long%> and %<_Decimal128%> in "
8338 "declaration specifiers");
8340 specs
->long_p
= true;
8343 dupe
= specs
->short_p
;
8345 error ("both %<long%> and %<short%> in "
8346 "declaration specifiers");
8347 else if (specs
->typespec_word
== cts_void
)
8348 error ("both %<short%> and %<void%> in "
8349 "declaration specifiers");
8350 else if (specs
->typespec_word
== cts_bool
)
8351 error ("both %<short%> and %<_Bool%> in "
8352 "declaration specifiers");
8353 else if (specs
->typespec_word
== cts_char
)
8354 error ("both %<short%> and %<char%> in "
8355 "declaration specifiers");
8356 else if (specs
->typespec_word
== cts_float
)
8357 error ("both %<short%> and %<float%> in "
8358 "declaration specifiers");
8359 else if (specs
->typespec_word
== cts_double
)
8360 error ("both %<short%> and %<double%> in "
8361 "declaration specifiers");
8362 else if (specs
->typespec_word
== cts_dfloat32
)
8363 error ("both %<short%> and %<_Decimal32%> in "
8364 "declaration specifiers");
8365 else if (specs
->typespec_word
== cts_dfloat64
)
8366 error ("both %<short%> and %<_Decimal64%> in "
8367 "declaration specifiers");
8368 else if (specs
->typespec_word
== cts_dfloat128
)
8369 error ("both %<short%> and %<_Decimal128%> in "
8370 "declaration specifiers");
8372 specs
->short_p
= true;
8375 dupe
= specs
->signed_p
;
8376 if (specs
->unsigned_p
)
8377 error ("both %<signed%> and %<unsigned%> in "
8378 "declaration specifiers");
8379 else if (specs
->typespec_word
== cts_void
)
8380 error ("both %<signed%> and %<void%> in "
8381 "declaration specifiers");
8382 else if (specs
->typespec_word
== cts_bool
)
8383 error ("both %<signed%> and %<_Bool%> in "
8384 "declaration specifiers");
8385 else if (specs
->typespec_word
== cts_float
)
8386 error ("both %<signed%> and %<float%> in "
8387 "declaration specifiers");
8388 else if (specs
->typespec_word
== cts_double
)
8389 error ("both %<signed%> and %<double%> in "
8390 "declaration specifiers");
8391 else if (specs
->typespec_word
== cts_dfloat32
)
8392 error ("both %<signed%> and %<_Decimal32%> in "
8393 "declaration specifiers");
8394 else if (specs
->typespec_word
== cts_dfloat64
)
8395 error ("both %<signed%> and %<_Decimal64%> in "
8396 "declaration specifiers");
8397 else if (specs
->typespec_word
== cts_dfloat128
)
8398 error ("both %<signed%> and %<_Decimal128%> in "
8399 "declaration specifiers");
8401 specs
->signed_p
= true;
8404 dupe
= specs
->unsigned_p
;
8405 if (specs
->signed_p
)
8406 error ("both %<signed%> and %<unsigned%> in "
8407 "declaration specifiers");
8408 else if (specs
->typespec_word
== cts_void
)
8409 error ("both %<unsigned%> and %<void%> in "
8410 "declaration specifiers");
8411 else if (specs
->typespec_word
== cts_bool
)
8412 error ("both %<unsigned%> and %<_Bool%> in "
8413 "declaration specifiers");
8414 else if (specs
->typespec_word
== cts_float
)
8415 error ("both %<unsigned%> and %<float%> in "
8416 "declaration specifiers");
8417 else if (specs
->typespec_word
== cts_double
)
8418 error ("both %<unsigned%> and %<double%> in "
8419 "declaration specifiers");
8420 else if (specs
->typespec_word
== cts_dfloat32
)
8421 error ("both %<unsigned%> and %<_Decimal32%> in "
8422 "declaration specifiers");
8423 else if (specs
->typespec_word
== cts_dfloat64
)
8424 error ("both %<unsigned%> and %<_Decimal64%> in "
8425 "declaration specifiers");
8426 else if (specs
->typespec_word
== cts_dfloat128
)
8427 error ("both %<unsigned%> and %<_Decimal128%> in "
8428 "declaration specifiers");
8430 specs
->unsigned_p
= true;
8433 dupe
= specs
->complex_p
;
8434 if (!flag_isoc99
&& !in_system_header
)
8435 pedwarn (input_location
, OPT_pedantic
, "ISO C90 does not support complex types");
8436 if (specs
->typespec_word
== cts_void
)
8437 error ("both %<complex%> and %<void%> in "
8438 "declaration specifiers");
8439 else if (specs
->typespec_word
== cts_bool
)
8440 error ("both %<complex%> and %<_Bool%> in "
8441 "declaration specifiers");
8442 else if (specs
->typespec_word
== cts_dfloat32
)
8443 error ("both %<complex%> and %<_Decimal32%> in "
8444 "declaration specifiers");
8445 else if (specs
->typespec_word
== cts_dfloat64
)
8446 error ("both %<complex%> and %<_Decimal64%> in "
8447 "declaration specifiers");
8448 else if (specs
->typespec_word
== cts_dfloat128
)
8449 error ("both %<complex%> and %<_Decimal128%> in "
8450 "declaration specifiers");
8451 else if (specs
->typespec_word
== cts_fract
)
8452 error ("both %<complex%> and %<_Fract%> in "
8453 "declaration specifiers");
8454 else if (specs
->typespec_word
== cts_accum
)
8455 error ("both %<complex%> and %<_Accum%> in "
8456 "declaration specifiers");
8457 else if (specs
->saturating_p
)
8458 error ("both %<complex%> and %<_Sat%> in "
8459 "declaration specifiers");
8461 specs
->complex_p
= true;
8464 dupe
= specs
->saturating_p
;
8465 pedwarn (input_location
, OPT_pedantic
, "ISO C does not support saturating types");
8466 if (specs
->typespec_word
== cts_void
)
8467 error ("both %<_Sat%> and %<void%> in "
8468 "declaration specifiers");
8469 else if (specs
->typespec_word
== cts_bool
)
8470 error ("both %<_Sat%> and %<_Bool%> in "
8471 "declaration specifiers");
8472 else if (specs
->typespec_word
== cts_char
)
8473 error ("both %<_Sat%> and %<char%> in "
8474 "declaration specifiers");
8475 else if (specs
->typespec_word
== cts_int
)
8476 error ("both %<_Sat%> and %<int%> in "
8477 "declaration specifiers");
8478 else if (specs
->typespec_word
== cts_float
)
8479 error ("both %<_Sat%> and %<float%> in "
8480 "declaration specifiers");
8481 else if (specs
->typespec_word
== cts_double
)
8482 error ("both %<_Sat%> and %<double%> in "
8483 "declaration specifiers");
8484 else if (specs
->typespec_word
== cts_dfloat32
)
8485 error ("both %<_Sat%> and %<_Decimal32%> in "
8486 "declaration specifiers");
8487 else if (specs
->typespec_word
== cts_dfloat64
)
8488 error ("both %<_Sat%> and %<_Decimal64%> in "
8489 "declaration specifiers");
8490 else if (specs
->typespec_word
== cts_dfloat128
)
8491 error ("both %<_Sat%> and %<_Decimal128%> in "
8492 "declaration specifiers");
8493 else if (specs
->complex_p
)
8494 error ("both %<_Sat%> and %<complex%> in "
8495 "declaration specifiers");
8497 specs
->saturating_p
= true;
8504 error ("duplicate %qE", type
);
8510 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
8511 "_Decimal64", "_Decimal128", "_Fract" or "_Accum". */
8512 if (specs
->typespec_word
!= cts_none
)
8514 error ("two or more data types in declaration specifiers");
8521 error ("both %<long%> and %<void%> in "
8522 "declaration specifiers");
8523 else if (specs
->short_p
)
8524 error ("both %<short%> and %<void%> in "
8525 "declaration specifiers");
8526 else if (specs
->signed_p
)
8527 error ("both %<signed%> and %<void%> in "
8528 "declaration specifiers");
8529 else if (specs
->unsigned_p
)
8530 error ("both %<unsigned%> and %<void%> in "
8531 "declaration specifiers");
8532 else if (specs
->complex_p
)
8533 error ("both %<complex%> and %<void%> in "
8534 "declaration specifiers");
8535 else if (specs
->saturating_p
)
8536 error ("both %<_Sat%> and %<void%> in "
8537 "declaration specifiers");
8539 specs
->typespec_word
= cts_void
;
8543 error ("both %<long%> and %<_Bool%> in "
8544 "declaration specifiers");
8545 else if (specs
->short_p
)
8546 error ("both %<short%> and %<_Bool%> in "
8547 "declaration specifiers");
8548 else if (specs
->signed_p
)
8549 error ("both %<signed%> and %<_Bool%> in "
8550 "declaration specifiers");
8551 else if (specs
->unsigned_p
)
8552 error ("both %<unsigned%> and %<_Bool%> in "
8553 "declaration specifiers");
8554 else if (specs
->complex_p
)
8555 error ("both %<complex%> and %<_Bool%> in "
8556 "declaration specifiers");
8557 else if (specs
->saturating_p
)
8558 error ("both %<_Sat%> and %<_Bool%> in "
8559 "declaration specifiers");
8561 specs
->typespec_word
= cts_bool
;
8565 error ("both %<long%> and %<char%> in "
8566 "declaration specifiers");
8567 else if (specs
->short_p
)
8568 error ("both %<short%> and %<char%> in "
8569 "declaration specifiers");
8570 else if (specs
->saturating_p
)
8571 error ("both %<_Sat%> and %<char%> in "
8572 "declaration specifiers");
8574 specs
->typespec_word
= cts_char
;
8577 if (specs
->saturating_p
)
8578 error ("both %<_Sat%> and %<int%> in "
8579 "declaration specifiers");
8581 specs
->typespec_word
= cts_int
;
8585 error ("both %<long%> and %<float%> in "
8586 "declaration specifiers");
8587 else if (specs
->short_p
)
8588 error ("both %<short%> and %<float%> in "
8589 "declaration specifiers");
8590 else if (specs
->signed_p
)
8591 error ("both %<signed%> and %<float%> in "
8592 "declaration specifiers");
8593 else if (specs
->unsigned_p
)
8594 error ("both %<unsigned%> and %<float%> in "
8595 "declaration specifiers");
8596 else if (specs
->saturating_p
)
8597 error ("both %<_Sat%> and %<float%> in "
8598 "declaration specifiers");
8600 specs
->typespec_word
= cts_float
;
8603 if (specs
->long_long_p
)
8604 error ("both %<long long%> and %<double%> in "
8605 "declaration specifiers");
8606 else if (specs
->short_p
)
8607 error ("both %<short%> and %<double%> in "
8608 "declaration specifiers");
8609 else if (specs
->signed_p
)
8610 error ("both %<signed%> and %<double%> in "
8611 "declaration specifiers");
8612 else if (specs
->unsigned_p
)
8613 error ("both %<unsigned%> and %<double%> in "
8614 "declaration specifiers");
8615 else if (specs
->saturating_p
)
8616 error ("both %<_Sat%> and %<double%> in "
8617 "declaration specifiers");
8619 specs
->typespec_word
= cts_double
;
8626 if (i
== RID_DFLOAT32
)
8628 else if (i
== RID_DFLOAT64
)
8631 str
= "_Decimal128";
8632 if (specs
->long_long_p
)
8633 error ("both %<long long%> and %<%s%> in "
8634 "declaration specifiers", str
);
8636 error ("both %<long%> and %<%s%> in "
8637 "declaration specifiers", str
);
8638 else if (specs
->short_p
)
8639 error ("both %<short%> and %<%s%> in "
8640 "declaration specifiers", str
);
8641 else if (specs
->signed_p
)
8642 error ("both %<signed%> and %<%s%> in "
8643 "declaration specifiers", str
);
8644 else if (specs
->unsigned_p
)
8645 error ("both %<unsigned%> and %<%s%> in "
8646 "declaration specifiers", str
);
8647 else if (specs
->complex_p
)
8648 error ("both %<complex%> and %<%s%> in "
8649 "declaration specifiers", str
);
8650 else if (specs
->saturating_p
)
8651 error ("both %<_Sat%> and %<%s%> in "
8652 "declaration specifiers", str
);
8653 else if (i
== RID_DFLOAT32
)
8654 specs
->typespec_word
= cts_dfloat32
;
8655 else if (i
== RID_DFLOAT64
)
8656 specs
->typespec_word
= cts_dfloat64
;
8658 specs
->typespec_word
= cts_dfloat128
;
8660 if (!targetm
.decimal_float_supported_p ())
8661 error ("decimal floating point not supported for this target");
8662 pedwarn (input_location
, OPT_pedantic
,
8663 "ISO C does not support decimal floating point");
8673 if (specs
->complex_p
)
8674 error ("both %<complex%> and %<%s%> in "
8675 "declaration specifiers", str
);
8676 else if (i
== RID_FRACT
)
8677 specs
->typespec_word
= cts_fract
;
8679 specs
->typespec_word
= cts_accum
;
8681 if (!targetm
.fixed_point_supported_p ())
8682 error ("fixed-point types not supported for this target");
8683 pedwarn (input_location
, OPT_pedantic
,
8684 "ISO C does not support fixed-point types");
8687 /* ObjC reserved word "id", handled below. */
8693 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
8694 form of ObjC type, cases such as "int" and "long" being handled
8695 above), a TYPE (struct, union, enum and typeof specifiers) or an
8696 ERROR_MARK. In none of these cases may there have previously
8697 been any type specifiers. */
8698 if (specs
->type
|| specs
->typespec_word
!= cts_none
8699 || specs
->long_p
|| specs
->short_p
|| specs
->signed_p
8700 || specs
->unsigned_p
|| specs
->complex_p
)
8701 error ("two or more data types in declaration specifiers");
8702 else if (TREE_CODE (type
) == TYPE_DECL
)
8704 if (TREE_TYPE (type
) == error_mark_node
)
8705 ; /* Allow the type to default to int to avoid cascading errors. */
8708 specs
->type
= TREE_TYPE (type
);
8709 specs
->decl_attr
= DECL_ATTRIBUTES (type
);
8710 specs
->typedef_p
= true;
8711 specs
->explicit_signed_p
= C_TYPEDEF_EXPLICITLY_SIGNED (type
);
8714 else if (TREE_CODE (type
) == IDENTIFIER_NODE
)
8716 tree t
= lookup_name (type
);
8717 if (!t
|| TREE_CODE (t
) != TYPE_DECL
)
8718 error ("%qE fails to be a typedef or built in type", type
);
8719 else if (TREE_TYPE (t
) == error_mark_node
)
8722 specs
->type
= TREE_TYPE (t
);
8724 else if (TREE_CODE (type
) != ERROR_MARK
)
8726 if (spec
.kind
== ctsk_tagdef
|| spec
.kind
== ctsk_tagfirstref
)
8727 specs
->tag_defined_p
= true;
8728 if (spec
.kind
== ctsk_typeof
)
8730 specs
->typedef_p
= true;
8734 specs
->expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (spec
.expr
),
8735 specs
->expr
, spec
.expr
);
8737 specs
->expr
= spec
.expr
;
8738 specs
->expr_const_operands
&= spec
.expr_const_operands
;
8747 /* Add the storage class specifier or function specifier SCSPEC to the
8748 declaration specifiers SPECS, returning SPECS. */
8750 struct c_declspecs
*
8751 declspecs_add_scspec (struct c_declspecs
*specs
, tree scspec
)
8754 enum c_storage_class n
= csc_none
;
8756 specs
->declspecs_seen_p
= true;
8757 gcc_assert (TREE_CODE (scspec
) == IDENTIFIER_NODE
8758 && C_IS_RESERVED_WORD (scspec
));
8759 i
= C_RID_CODE (scspec
);
8760 if (specs
->non_sc_seen_p
)
8761 warning (OPT_Wold_style_declaration
,
8762 "%qE is not at beginning of declaration", scspec
);
8766 /* C99 permits duplicate inline. Although of doubtful utility,
8767 it seems simplest to permit it in gnu89 mode as well, as
8768 there is also little utility in maintaining this as a
8769 difference between gnu89 and C99 inline. */
8771 specs
->inline_p
= true;
8774 dupe
= specs
->thread_p
;
8775 if (specs
->storage_class
== csc_auto
)
8776 error ("%<__thread%> used with %<auto%>");
8777 else if (specs
->storage_class
== csc_register
)
8778 error ("%<__thread%> used with %<register%>");
8779 else if (specs
->storage_class
== csc_typedef
)
8780 error ("%<__thread%> used with %<typedef%>");
8782 specs
->thread_p
= true;
8789 /* Diagnose "__thread extern". */
8790 if (specs
->thread_p
)
8791 error ("%<__thread%> before %<extern%>");
8798 /* Diagnose "__thread static". */
8799 if (specs
->thread_p
)
8800 error ("%<__thread%> before %<static%>");
8808 if (n
!= csc_none
&& n
== specs
->storage_class
)
8811 error ("duplicate %qE", scspec
);
8814 if (specs
->storage_class
!= csc_none
&& n
!= specs
->storage_class
)
8816 error ("multiple storage classes in declaration specifiers");
8820 specs
->storage_class
= n
;
8821 if (n
!= csc_extern
&& n
!= csc_static
&& specs
->thread_p
)
8823 error ("%<__thread%> used with %qE", scspec
);
8824 specs
->thread_p
= false;
8831 /* Add the attributes ATTRS to the declaration specifiers SPECS,
8834 struct c_declspecs
*
8835 declspecs_add_attrs (struct c_declspecs
*specs
, tree attrs
)
8837 specs
->attrs
= chainon (attrs
, specs
->attrs
);
8838 specs
->declspecs_seen_p
= true;
8842 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
8843 specifiers with any other type specifier to determine the resulting
8844 type. This is where ISO C checks on complex types are made, since
8845 "_Complex long" is a prefix of the valid ISO C type "_Complex long
8848 struct c_declspecs
*
8849 finish_declspecs (struct c_declspecs
*specs
)
8851 /* If a type was specified as a whole, we have no modifiers and are
8853 if (specs
->type
!= NULL_TREE
)
8855 gcc_assert (!specs
->long_p
&& !specs
->long_long_p
&& !specs
->short_p
8856 && !specs
->signed_p
&& !specs
->unsigned_p
8857 && !specs
->complex_p
);
8861 /* If none of "void", "_Bool", "char", "int", "float" or "double"
8862 has been specified, treat it as "int" unless "_Complex" is
8863 present and there are no other specifiers. If we just have
8864 "_Complex", it is equivalent to "_Complex double", but e.g.
8865 "_Complex short" is equivalent to "_Complex short int". */
8866 if (specs
->typespec_word
== cts_none
)
8868 if (specs
->saturating_p
)
8870 error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
8871 if (!targetm
.fixed_point_supported_p ())
8872 error ("fixed-point types not supported for this target");
8873 specs
->typespec_word
= cts_fract
;
8875 else if (specs
->long_p
|| specs
->short_p
8876 || specs
->signed_p
|| specs
->unsigned_p
)
8878 specs
->typespec_word
= cts_int
;
8880 else if (specs
->complex_p
)
8882 specs
->typespec_word
= cts_double
;
8883 pedwarn (input_location
, OPT_pedantic
,
8884 "ISO C does not support plain %<complex%> meaning "
8885 "%<double complex%>");
8889 specs
->typespec_word
= cts_int
;
8890 specs
->default_int_p
= true;
8891 /* We don't diagnose this here because grokdeclarator will
8892 give more specific diagnostics according to whether it is
8893 a function definition. */
8897 /* If "signed" was specified, record this to distinguish "int" and
8898 "signed int" in the case of a bit-field with
8899 -funsigned-bitfields. */
8900 specs
->explicit_signed_p
= specs
->signed_p
;
8902 /* Now compute the actual type. */
8903 switch (specs
->typespec_word
)
8906 gcc_assert (!specs
->long_p
&& !specs
->short_p
8907 && !specs
->signed_p
&& !specs
->unsigned_p
8908 && !specs
->complex_p
);
8909 specs
->type
= void_type_node
;
8912 gcc_assert (!specs
->long_p
&& !specs
->short_p
8913 && !specs
->signed_p
&& !specs
->unsigned_p
8914 && !specs
->complex_p
);
8915 specs
->type
= boolean_type_node
;
8918 gcc_assert (!specs
->long_p
&& !specs
->short_p
);
8919 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
8920 if (specs
->signed_p
)
8921 specs
->type
= signed_char_type_node
;
8922 else if (specs
->unsigned_p
)
8923 specs
->type
= unsigned_char_type_node
;
8925 specs
->type
= char_type_node
;
8926 if (specs
->complex_p
)
8928 pedwarn (input_location
, OPT_pedantic
,
8929 "ISO C does not support complex integer types");
8930 specs
->type
= build_complex_type (specs
->type
);
8934 gcc_assert (!(specs
->long_p
&& specs
->short_p
));
8935 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
8936 if (specs
->long_long_p
)
8937 specs
->type
= (specs
->unsigned_p
8938 ? long_long_unsigned_type_node
8939 : long_long_integer_type_node
);
8940 else if (specs
->long_p
)
8941 specs
->type
= (specs
->unsigned_p
8942 ? long_unsigned_type_node
8943 : long_integer_type_node
);
8944 else if (specs
->short_p
)
8945 specs
->type
= (specs
->unsigned_p
8946 ? short_unsigned_type_node
8947 : short_integer_type_node
);
8949 specs
->type
= (specs
->unsigned_p
8950 ? unsigned_type_node
8951 : integer_type_node
);
8952 if (specs
->complex_p
)
8954 pedwarn (input_location
, OPT_pedantic
,
8955 "ISO C does not support complex integer types");
8956 specs
->type
= build_complex_type (specs
->type
);
8960 gcc_assert (!specs
->long_p
&& !specs
->short_p
8961 && !specs
->signed_p
&& !specs
->unsigned_p
);
8962 specs
->type
= (specs
->complex_p
8963 ? complex_float_type_node
8967 gcc_assert (!specs
->long_long_p
&& !specs
->short_p
8968 && !specs
->signed_p
&& !specs
->unsigned_p
);
8971 specs
->type
= (specs
->complex_p
8972 ? complex_long_double_type_node
8973 : long_double_type_node
);
8977 specs
->type
= (specs
->complex_p
8978 ? complex_double_type_node
8979 : double_type_node
);
8985 gcc_assert (!specs
->long_p
&& !specs
->long_long_p
&& !specs
->short_p
8986 && !specs
->signed_p
&& !specs
->unsigned_p
&& !specs
->complex_p
);
8987 if (specs
->typespec_word
== cts_dfloat32
)
8988 specs
->type
= dfloat32_type_node
;
8989 else if (specs
->typespec_word
== cts_dfloat64
)
8990 specs
->type
= dfloat64_type_node
;
8992 specs
->type
= dfloat128_type_node
;
8995 gcc_assert (!specs
->complex_p
);
8996 if (!targetm
.fixed_point_supported_p ())
8997 specs
->type
= integer_type_node
;
8998 else if (specs
->saturating_p
)
9000 if (specs
->long_long_p
)
9001 specs
->type
= specs
->unsigned_p
9002 ? sat_unsigned_long_long_fract_type_node
9003 : sat_long_long_fract_type_node
;
9004 else if (specs
->long_p
)
9005 specs
->type
= specs
->unsigned_p
9006 ? sat_unsigned_long_fract_type_node
9007 : sat_long_fract_type_node
;
9008 else if (specs
->short_p
)
9009 specs
->type
= specs
->unsigned_p
9010 ? sat_unsigned_short_fract_type_node
9011 : sat_short_fract_type_node
;
9013 specs
->type
= specs
->unsigned_p
9014 ? sat_unsigned_fract_type_node
9015 : sat_fract_type_node
;
9019 if (specs
->long_long_p
)
9020 specs
->type
= specs
->unsigned_p
9021 ? unsigned_long_long_fract_type_node
9022 : long_long_fract_type_node
;
9023 else if (specs
->long_p
)
9024 specs
->type
= specs
->unsigned_p
9025 ? unsigned_long_fract_type_node
9026 : long_fract_type_node
;
9027 else if (specs
->short_p
)
9028 specs
->type
= specs
->unsigned_p
9029 ? unsigned_short_fract_type_node
9030 : short_fract_type_node
;
9032 specs
->type
= specs
->unsigned_p
9033 ? unsigned_fract_type_node
9038 gcc_assert (!specs
->complex_p
);
9039 if (!targetm
.fixed_point_supported_p ())
9040 specs
->type
= integer_type_node
;
9041 else if (specs
->saturating_p
)
9043 if (specs
->long_long_p
)
9044 specs
->type
= specs
->unsigned_p
9045 ? sat_unsigned_long_long_accum_type_node
9046 : sat_long_long_accum_type_node
;
9047 else if (specs
->long_p
)
9048 specs
->type
= specs
->unsigned_p
9049 ? sat_unsigned_long_accum_type_node
9050 : sat_long_accum_type_node
;
9051 else if (specs
->short_p
)
9052 specs
->type
= specs
->unsigned_p
9053 ? sat_unsigned_short_accum_type_node
9054 : sat_short_accum_type_node
;
9056 specs
->type
= specs
->unsigned_p
9057 ? sat_unsigned_accum_type_node
9058 : sat_accum_type_node
;
9062 if (specs
->long_long_p
)
9063 specs
->type
= specs
->unsigned_p
9064 ? unsigned_long_long_accum_type_node
9065 : long_long_accum_type_node
;
9066 else if (specs
->long_p
)
9067 specs
->type
= specs
->unsigned_p
9068 ? unsigned_long_accum_type_node
9069 : long_accum_type_node
;
9070 else if (specs
->short_p
)
9071 specs
->type
= specs
->unsigned_p
9072 ? unsigned_short_accum_type_node
9073 : short_accum_type_node
;
9075 specs
->type
= specs
->unsigned_p
9076 ? unsigned_accum_type_node
9087 /* A subroutine of c_write_global_declarations. Perform final processing
9088 on one file scope's declarations (or the external scope's declarations),
9092 c_write_global_declarations_1 (tree globals
)
9097 /* Process the decls in the order they were written. */
9098 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
9100 /* Check for used but undefined static functions using the C
9101 standard's definition of "used", and set TREE_NO_WARNING so
9102 that check_global_declarations doesn't repeat the check. */
9103 if (TREE_CODE (decl
) == FUNCTION_DECL
9104 && DECL_INITIAL (decl
) == 0
9105 && DECL_EXTERNAL (decl
)
9106 && !TREE_PUBLIC (decl
)
9107 && C_DECL_USED (decl
))
9109 pedwarn (input_location
, 0, "%q+F used but never defined", decl
);
9110 TREE_NO_WARNING (decl
) = 1;
9113 wrapup_global_declaration_1 (decl
);
9119 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
9120 reconsider
|= wrapup_global_declaration_2 (decl
);
9124 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
9125 check_global_declaration_1 (decl
);
9128 /* A subroutine of c_write_global_declarations Emit debug information for each
9129 of the declarations in GLOBALS. */
9132 c_write_global_declarations_2 (tree globals
)
9136 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
9137 debug_hooks
->global_decl (decl
);
9140 /* Preserve the external declarations scope across a garbage collect. */
9141 static GTY(()) tree ext_block
;
9144 c_write_global_declarations (void)
9148 /* We don't want to do this if generating a PCH. */
9152 /* Don't waste time on further processing if -fsyntax-only or we've
9153 encountered errors. */
9154 if (flag_syntax_only
|| errorcount
|| sorrycount
)
9157 /* Close the external scope. */
9158 ext_block
= pop_scope ();
9160 gcc_assert (!current_scope
);
9164 tree tmp
= BLOCK_VARS (ext_block
);
9166 FILE * stream
= dump_begin (TDI_tu
, &flags
);
9169 dump_node (tmp
, flags
& ~TDF_SLIM
, stream
);
9170 dump_end (TDI_tu
, stream
);
9174 /* Process all file scopes in this compilation, and the external_scope,
9175 through wrapup_global_declarations and check_global_declarations. */
9176 for (t
= all_translation_units
; t
; t
= TREE_CHAIN (t
))
9177 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t
)));
9178 c_write_global_declarations_1 (BLOCK_VARS (ext_block
));
9180 /* We're done parsing; proceed to optimize and emit assembly.
9181 FIXME: shouldn't be the front end's responsibility to call this. */
9184 /* After cgraph has had a chance to emit everything that's going to
9185 be emitted, output debug information for globals. */
9186 if (errorcount
== 0 && sorrycount
== 0)
9188 timevar_push (TV_SYMOUT
);
9189 for (t
= all_translation_units
; t
; t
= TREE_CHAIN (t
))
9190 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t
)));
9191 c_write_global_declarations_2 (BLOCK_VARS (ext_block
));
9192 timevar_pop (TV_SYMOUT
);
9198 #include "gt-c-decl.h"