1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988-2017 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 /* Process declarations and symbol lookup for C front end.
21 Also constructs types; the standard scalar types at initialization,
22 and structure, union, array and enum types when they are declared. */
24 /* ??? not all decl nodes are given the most useful possible
25 line numbers. For example, the CONST_DECLs for enum values. */
29 #include "coretypes.h"
34 #include "stringpool.h"
37 #include "print-tree.h"
38 #include "stor-layout.h"
43 #include "c-family/c-objc.h"
44 #include "c-family/c-pragma.h"
45 #include "c-family/c-ubsan.h"
47 #include "langhooks.h"
48 #include "tree-iterator.h"
51 #include "c-family/c-ada-spec.h"
54 #include "spellcheck-tree.h"
55 #include "gcc-rich-location.h"
58 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
60 { NORMAL
, /* Ordinary declaration */
61 FUNCDEF
, /* Function definition */
62 PARM
, /* Declaration of parm before function body */
63 FIELD
, /* Declaration inside struct or union */
64 TYPENAME
}; /* Typename (inside cast or sizeof) */
66 /* States indicating how grokdeclarator() should handle declspecs marked
67 with __attribute__((deprecated)). An object declared as
68 __attribute__((deprecated)) suppresses warnings of uses of other
71 enum deprecated_states
{
77 /* Nonzero if we have seen an invalid cross reference
78 to a struct, union, or enum, but not yet printed the message. */
79 tree pending_invalid_xref
;
81 /* File and line to appear in the eventual error message. */
82 location_t pending_invalid_xref_location
;
84 /* The file and line that the prototype came from if this is an
85 old-style definition; used for diagnostics in
86 store_parm_decls_oldstyle. */
88 static location_t current_function_prototype_locus
;
90 /* Whether this prototype was built-in. */
92 static bool current_function_prototype_built_in
;
94 /* The argument type information of this prototype. */
96 static tree current_function_prototype_arg_types
;
98 /* The argument information structure for the function currently being
101 static struct c_arg_info
*current_function_arg_info
;
103 /* The obstack on which parser and related data structures, which are
104 not live beyond their top-level declaration or definition, are
106 struct obstack parser_obstack
;
108 /* The current statement tree. */
110 static GTY(()) struct stmt_tree_s c_stmt_tree
;
112 /* State saving variables. */
116 /* A list of decls to be made automatically visible in each file scope. */
117 static GTY(()) tree visible_builtins
;
119 /* Set to 0 at beginning of a function definition, set to 1 if
120 a return statement that specifies a return value is seen. */
122 int current_function_returns_value
;
124 /* Set to 0 at beginning of a function definition, set to 1 if
125 a return statement with no argument is seen. */
127 int current_function_returns_null
;
129 /* Set to 0 at beginning of a function definition, set to 1 if
130 a call to a noreturn function is seen. */
132 int current_function_returns_abnormally
;
134 /* Set to nonzero by `grokdeclarator' for a function
135 whose return type is defaulted, if warnings for this are desired. */
137 static int warn_about_return_type
;
139 /* Nonzero when the current toplevel function contains a declaration
140 of a nested function which is never defined. */
142 static bool undef_nested_function
;
144 /* If non-zero, implicit "omp declare target" attribute is added into the
146 int current_omp_declare_target_attribute
;
148 /* Each c_binding structure describes one binding of an identifier to
149 a decl. All the decls in a scope - irrespective of namespace - are
150 chained together by the ->prev field, which (as the name implies)
151 runs in reverse order. All the decls in a given namespace bound to
152 a given identifier are chained by the ->shadowed field, which runs
153 from inner to outer scopes.
155 The ->decl field usually points to a DECL node, but there are two
156 exceptions. In the namespace of type tags, the bound entity is a
157 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
158 identifier is encountered, it is bound to error_mark_node to
159 suppress further errors about that identifier in the current
162 The ->u.type field stores the type of the declaration in this scope;
163 if NULL, the type is the type of the ->decl field. This is only of
164 relevance for objects with external or internal linkage which may
165 be redeclared in inner scopes, forming composite types that only
166 persist for the duration of those scopes. In the external scope,
167 this stores the composite of all the types declared for this
168 object, visible or not. The ->inner_comp field (used only at file
169 scope) stores whether an incomplete array type at file scope was
170 completed at an inner scope to an array size other than 1.
172 The ->u.label field is used for labels. It points to a structure
173 which stores additional information used for warnings.
175 The depth field is copied from the scope structure that holds this
176 decl. It is used to preserve the proper ordering of the ->shadowed
177 field (see bind()) and also for a handful of special-case checks.
178 Finally, the invisible bit is true for a decl which should be
179 ignored for purposes of normal name lookup, and the nested bit is
180 true for a decl that's been bound a second time in an inner scope;
181 in all such cases, the binding in the outer scope will have its
182 invisible bit true. */
184 struct GTY((chain_next ("%h.prev"))) c_binding
{
185 union GTY(()) { /* first so GTY desc can use decl */
186 tree
GTY((tag ("0"))) type
; /* the type in this scope */
187 struct c_label_vars
* GTY((tag ("1"))) label
; /* for warnings */
188 } GTY((desc ("TREE_CODE (%0.decl) == LABEL_DECL"))) u
;
189 tree decl
; /* the decl bound */
190 tree id
; /* the identifier it's bound to */
191 struct c_binding
*prev
; /* the previous decl in this scope */
192 struct c_binding
*shadowed
; /* the innermost decl shadowed by this one */
193 unsigned int depth
: 28; /* depth of this scope */
194 BOOL_BITFIELD invisible
: 1; /* normal lookup should ignore this binding */
195 BOOL_BITFIELD nested
: 1; /* do not set DECL_CONTEXT when popping */
196 BOOL_BITFIELD inner_comp
: 1; /* incomplete array completed in inner scope */
197 BOOL_BITFIELD in_struct
: 1; /* currently defined as struct field */
198 location_t locus
; /* location for nested bindings */
200 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
201 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
202 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
203 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
205 /* Each C symbol points to three linked lists of c_binding structures.
206 These describe the values of the identifier in the three different
207 namespaces defined by the language. */
209 struct GTY(()) lang_identifier
{
210 struct c_common_identifier common_id
;
211 struct c_binding
*symbol_binding
; /* vars, funcs, constants, typedefs */
212 struct c_binding
*tag_binding
; /* struct/union/enum tags */
213 struct c_binding
*label_binding
; /* labels */
216 /* Validate c-lang.c's assumptions. */
217 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
218 [(sizeof(struct lang_identifier
) == C_SIZEOF_STRUCT_LANG_IDENTIFIER
) ? 1 : -1];
220 /* The binding oracle; see c-tree.h. */
221 void (*c_binding_oracle
) (enum c_oracle_request
, tree identifier
);
223 /* This flag is set on an identifier if we have previously asked the
224 binding oracle for this identifier's symbol binding. */
225 #define I_SYMBOL_CHECKED(node) \
226 (TREE_LANG_FLAG_4 (IDENTIFIER_NODE_CHECK (node)))
228 static inline struct c_binding
* *
229 i_symbol_binding (tree node
)
231 struct lang_identifier
*lid
232 = (struct lang_identifier
*) IDENTIFIER_NODE_CHECK (node
);
234 if (lid
->symbol_binding
== NULL
235 && c_binding_oracle
!= NULL
236 && !I_SYMBOL_CHECKED (node
))
238 /* Set the "checked" flag first, to avoid infinite recursion
239 when the binding oracle calls back into gcc. */
240 I_SYMBOL_CHECKED (node
) = 1;
241 c_binding_oracle (C_ORACLE_SYMBOL
, node
);
244 return &lid
->symbol_binding
;
247 #define I_SYMBOL_BINDING(node) (*i_symbol_binding (node))
249 #define I_SYMBOL_DECL(node) \
250 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
252 /* This flag is set on an identifier if we have previously asked the
253 binding oracle for this identifier's tag binding. */
254 #define I_TAG_CHECKED(node) \
255 (TREE_LANG_FLAG_5 (IDENTIFIER_NODE_CHECK (node)))
257 static inline struct c_binding
**
258 i_tag_binding (tree node
)
260 struct lang_identifier
*lid
261 = (struct lang_identifier
*) IDENTIFIER_NODE_CHECK (node
);
263 if (lid
->tag_binding
== NULL
264 && c_binding_oracle
!= NULL
265 && !I_TAG_CHECKED (node
))
267 /* Set the "checked" flag first, to avoid infinite recursion
268 when the binding oracle calls back into gcc. */
269 I_TAG_CHECKED (node
) = 1;
270 c_binding_oracle (C_ORACLE_TAG
, node
);
273 return &lid
->tag_binding
;
276 #define I_TAG_BINDING(node) (*i_tag_binding (node))
278 #define I_TAG_DECL(node) \
279 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
281 /* This flag is set on an identifier if we have previously asked the
282 binding oracle for this identifier's label binding. */
283 #define I_LABEL_CHECKED(node) \
284 (TREE_LANG_FLAG_6 (IDENTIFIER_NODE_CHECK (node)))
286 static inline struct c_binding
**
287 i_label_binding (tree node
)
289 struct lang_identifier
*lid
290 = (struct lang_identifier
*) IDENTIFIER_NODE_CHECK (node
);
292 if (lid
->label_binding
== NULL
293 && c_binding_oracle
!= NULL
294 && !I_LABEL_CHECKED (node
))
296 /* Set the "checked" flag first, to avoid infinite recursion
297 when the binding oracle calls back into gcc. */
298 I_LABEL_CHECKED (node
) = 1;
299 c_binding_oracle (C_ORACLE_LABEL
, node
);
302 return &lid
->label_binding
;
305 #define I_LABEL_BINDING(node) (*i_label_binding (node))
307 #define I_LABEL_DECL(node) \
308 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
310 /* The resulting tree type. */
312 union GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
313 chain_next ("(union lang_tree_node *) c_tree_chain_next (&%h.generic)"))) lang_tree_node
315 union tree_node
GTY ((tag ("0"),
316 desc ("tree_node_structure (&%h)")))
318 struct lang_identifier
GTY ((tag ("1"))) identifier
;
321 /* Track bindings and other things that matter for goto warnings. For
322 efficiency, we do not gather all the decls at the point of
323 definition. Instead, we point into the bindings structure. As
324 scopes are popped, we update these structures and gather the decls
325 that matter at that time. */
327 struct GTY(()) c_spot_bindings
{
328 /* The currently open scope which holds bindings defined when the
329 label was defined or the goto statement was found. */
330 struct c_scope
*scope
;
331 /* The bindings in the scope field which were defined at the point
332 of the label or goto. This lets us look at older or newer
333 bindings in the scope, as appropriate. */
334 struct c_binding
*bindings_in_scope
;
335 /* The number of statement expressions that have started since this
336 label or goto statement was defined. This is zero if we are at
337 the same statement expression level. It is positive if we are in
338 a statement expression started since this spot. It is negative
339 if this spot was in a statement expression and we have left
342 /* Whether we started in a statement expression but are no longer in
343 it. This is set to true if stmt_exprs ever goes negative. */
347 /* This structure is used to keep track of bindings seen when a goto
348 statement is defined. This is only used if we see the goto
349 statement before we see the label. */
351 struct GTY(()) c_goto_bindings
{
352 /* The location of the goto statement. */
354 /* The bindings of the goto statement. */
355 struct c_spot_bindings goto_bindings
;
358 typedef struct c_goto_bindings
*c_goto_bindings_p
;
360 /* The additional information we keep track of for a label binding.
361 These fields are updated as scopes are popped. */
363 struct GTY(()) c_label_vars
{
364 /* The shadowed c_label_vars, when one label shadows another (which
365 can only happen using a __label__ declaration). */
366 struct c_label_vars
*shadowed
;
367 /* The bindings when the label was defined. */
368 struct c_spot_bindings label_bindings
;
369 /* A list of decls that we care about: decls about which we should
370 warn if a goto branches to this label from later in the function.
371 Decls are added to this list as scopes are popped. We only add
372 the decls that matter. */
373 vec
<tree
, va_gc
> *decls_in_scope
;
374 /* A list of goto statements to this label. This is only used for
375 goto statements seen before the label was defined, so that we can
376 issue appropriate warnings for them. */
377 vec
<c_goto_bindings_p
, va_gc
> *gotos
;
380 /* Each c_scope structure describes the complete contents of one
381 scope. Four scopes are distinguished specially: the innermost or
382 current scope, the innermost function scope, the file scope (always
383 the second to outermost) and the outermost or external scope.
385 Most declarations are recorded in the current scope.
387 All normal label declarations are recorded in the innermost
388 function scope, as are bindings of undeclared identifiers to
389 error_mark_node. (GCC permits nested functions as an extension,
390 hence the 'innermost' qualifier.) Explicitly declared labels
391 (using the __label__ extension) appear in the current scope.
393 Being in the file scope (current_scope == file_scope) causes
394 special behavior in several places below. Also, under some
395 conditions the Objective-C front end records declarations in the
396 file scope even though that isn't the current scope.
398 All declarations with external linkage are recorded in the external
399 scope, even if they aren't visible there; this models the fact that
400 such declarations are visible to the entire program, and (with a
401 bit of cleverness, see pushdecl) allows diagnosis of some violations
402 of C99 6.2.2p7 and 6.2.7p2:
404 If, within the same translation unit, the same identifier appears
405 with both internal and external linkage, the behavior is
408 All declarations that refer to the same object or function shall
409 have compatible type; otherwise, the behavior is undefined.
411 Initially only the built-in declarations, which describe compiler
412 intrinsic functions plus a subset of the standard library, are in
415 The order of the blocks list matters, and it is frequently appended
416 to. To avoid having to walk all the way to the end of the list on
417 each insertion, or reverse the list later, we maintain a pointer to
418 the last list entry. (FIXME: It should be feasible to use a reversed
421 The bindings list is strictly in reverse order of declarations;
422 pop_scope relies on this. */
425 struct GTY((chain_next ("%h.outer"))) c_scope
{
426 /* The scope containing this one. */
427 struct c_scope
*outer
;
429 /* The next outermost function scope. */
430 struct c_scope
*outer_function
;
432 /* All bindings in this scope. */
433 struct c_binding
*bindings
;
435 /* For each scope (except the global one), a chain of BLOCK nodes
436 for all the scopes that were entered and exited one level down. */
440 /* The depth of this scope. Used to keep the ->shadowed chain of
441 bindings sorted innermost to outermost. */
442 unsigned int depth
: 28;
444 /* True if we are currently filling this scope with parameter
446 BOOL_BITFIELD parm_flag
: 1;
448 /* True if we saw [*] in this scope. Used to give an error messages
449 if these appears in a function definition. */
450 BOOL_BITFIELD had_vla_unspec
: 1;
452 /* True if we already complained about forward parameter decls
453 in this scope. This prevents double warnings on
454 foo (int a; int b; ...) */
455 BOOL_BITFIELD warned_forward_parm_decls
: 1;
457 /* True if this is the outermost block scope of a function body.
458 This scope contains the parameters, the local variables declared
459 in the outermost block, and all the labels (except those in
460 nested functions, or declared at block scope with __label__). */
461 BOOL_BITFIELD function_body
: 1;
463 /* True means make a BLOCK for this scope no matter what. */
464 BOOL_BITFIELD keep
: 1;
466 /* True means that an unsuffixed float constant is _Decimal64. */
467 BOOL_BITFIELD float_const_decimal64
: 1;
469 /* True if this scope has any label bindings. This is used to speed
470 up searching for labels when popping scopes, particularly since
471 labels are normally only found at function scope. */
472 BOOL_BITFIELD has_label_bindings
: 1;
474 /* True if we should issue a warning if a goto statement crosses any
475 of the bindings. We still need to check the list of bindings to
476 find the specific ones we need to warn about. This is true if
477 decl_jump_unsafe would return true for any of the bindings. This
478 is used to avoid looping over all the bindings unnecessarily. */
479 BOOL_BITFIELD has_jump_unsafe_decl
: 1;
482 /* The scope currently in effect. */
484 static GTY(()) struct c_scope
*current_scope
;
486 /* The innermost function scope. Ordinary (not explicitly declared)
487 labels, bindings to error_mark_node, and the lazily-created
488 bindings of __func__ and its friends get this scope. */
490 static GTY(()) struct c_scope
*current_function_scope
;
492 /* The C file scope. This is reset for each input translation unit. */
494 static GTY(()) struct c_scope
*file_scope
;
496 /* The outermost scope. This is used for all declarations with
497 external linkage, and only these, hence the name. */
499 static GTY(()) struct c_scope
*external_scope
;
501 /* A chain of c_scope structures awaiting reuse. */
503 static GTY((deletable
)) struct c_scope
*scope_freelist
;
505 /* A chain of c_binding structures awaiting reuse. */
507 static GTY((deletable
)) struct c_binding
*binding_freelist
;
509 /* Append VAR to LIST in scope SCOPE. */
510 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
511 struct c_scope *s_ = (scope); \
513 if (s_->list##_last) \
514 BLOCK_CHAIN (s_->list##_last) = d_; \
517 s_->list##_last = d_; \
520 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
521 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
522 struct c_scope *t_ = (tscope); \
523 struct c_scope *f_ = (fscope); \
525 BLOCK_CHAIN (t_->to##_last) = f_->from; \
528 t_->to##_last = f_->from##_last; \
531 /* A c_inline_static structure stores details of a static identifier
532 referenced in a definition of a function that may be an inline
533 definition if no subsequent declaration of that function uses
534 "extern" or does not use "inline". */
536 struct GTY((chain_next ("%h.next"))) c_inline_static
{
537 /* The location for a diagnostic. */
540 /* The function that may be an inline definition. */
543 /* The object or function referenced. */
546 /* What sort of reference this is. */
547 enum c_inline_static_type type
;
549 /* The next such structure or NULL. */
550 struct c_inline_static
*next
;
553 /* List of static identifiers used or referenced in functions that may
554 be inline definitions. */
555 static GTY(()) struct c_inline_static
*c_inline_statics
;
557 /* True means unconditionally make a BLOCK for the next scope pushed. */
559 static bool keep_next_level_flag
;
561 /* True means the next call to push_scope will be the outermost scope
562 of a function body, so do not push a new scope, merely cease
563 expecting parameter decls. */
565 static bool next_is_function_body
;
567 /* A vector of pointers to c_binding structures. */
569 typedef struct c_binding
*c_binding_ptr
;
571 /* Information that we keep for a struct or union while it is being
574 struct c_struct_parse_info
576 /* If warn_cxx_compat, a list of types defined within this
578 auto_vec
<tree
> struct_types
;
579 /* If warn_cxx_compat, a list of field names which have bindings,
580 and which are defined in this struct, but which are not defined
581 in any enclosing struct. This is used to clear the in_struct
582 field of the c_bindings structure. */
583 auto_vec
<c_binding_ptr
> fields
;
584 /* If warn_cxx_compat, a list of typedef names used when defining
585 fields in this struct. */
586 auto_vec
<tree
> typedefs_seen
;
589 /* Information for the struct or union currently being parsed, or
590 NULL if not parsing a struct or union. */
591 static struct c_struct_parse_info
*struct_parse_info
;
593 /* Forward declarations. */
594 static tree
lookup_name_in_scope (tree
, struct c_scope
*);
595 static tree
c_make_fname_decl (location_t
, tree
, int);
596 static tree
grokdeclarator (const struct c_declarator
*,
597 struct c_declspecs
*,
598 enum decl_context
, bool, tree
*, tree
*, tree
*,
599 bool *, enum deprecated_states
);
600 static tree
grokparms (struct c_arg_info
*, bool);
601 static void layout_array_type (tree
);
602 static void warn_defaults_to (location_t
, int, const char *, ...)
603 ATTRIBUTE_GCC_DIAG(3,4);
605 /* T is a statement. Add it to the statement-tree. This is the
606 C/ObjC version--C++ has a slightly different version of this
612 enum tree_code code
= TREE_CODE (t
);
614 if (CAN_HAVE_LOCATION_P (t
) && code
!= LABEL_EXPR
)
616 if (!EXPR_HAS_LOCATION (t
))
617 SET_EXPR_LOCATION (t
, input_location
);
620 if (code
== LABEL_EXPR
|| code
== CASE_LABEL_EXPR
)
621 STATEMENT_LIST_HAS_LABEL (cur_stmt_list
) = 1;
623 /* Add T to the statement-tree. Non-side-effect statements need to be
624 recorded during statement expressions. */
625 if (!building_stmt_list_p ())
627 append_to_statement_list_force (t
, &cur_stmt_list
);
632 /* Build a pointer type using the default pointer mode. */
635 c_build_pointer_type (tree to_type
)
637 addr_space_t as
= to_type
== error_mark_node
? ADDR_SPACE_GENERIC
638 : TYPE_ADDR_SPACE (to_type
);
639 machine_mode pointer_mode
;
641 if (as
!= ADDR_SPACE_GENERIC
|| c_default_pointer_mode
== VOIDmode
)
642 pointer_mode
= targetm
.addr_space
.pointer_mode (as
);
644 pointer_mode
= c_default_pointer_mode
;
645 return build_pointer_type_for_mode (to_type
, pointer_mode
, false);
649 /* Return true if we will want to say something if a goto statement
653 decl_jump_unsafe (tree decl
)
655 if (error_operand_p (decl
))
658 /* Always warn about crossing variably modified types. */
659 if ((VAR_P (decl
) || TREE_CODE (decl
) == TYPE_DECL
)
660 && variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
663 /* Otherwise, only warn if -Wgoto-misses-init and this is an
664 initialized automatic decl. */
665 if (warn_jump_misses_init
667 && !TREE_STATIC (decl
)
668 && DECL_INITIAL (decl
) != NULL_TREE
)
676 c_print_identifier (FILE *file
, tree node
, int indent
)
678 void (*save
) (enum c_oracle_request
, tree identifier
);
680 /* Temporarily hide any binding oracle. Without this, calls to
681 debug_tree from the debugger will end up calling into the oracle,
682 making for a confusing debug session. As the oracle isn't needed
683 here for normal operation, it's simplest to suppress it. */
684 save
= c_binding_oracle
;
685 c_binding_oracle
= NULL
;
687 print_node (file
, "symbol", I_SYMBOL_DECL (node
), indent
+ 4);
688 print_node (file
, "tag", I_TAG_DECL (node
), indent
+ 4);
689 print_node (file
, "label", I_LABEL_DECL (node
), indent
+ 4);
690 if (C_IS_RESERVED_WORD (node
) && C_RID_CODE (node
) != RID_CXX_COMPAT_WARN
)
692 tree rid
= ridpointers
[C_RID_CODE (node
)];
693 indent_to (file
, indent
+ 4);
694 fprintf (file
, "rid " HOST_PTR_PRINTF
" \"%s\"",
695 (void *) rid
, IDENTIFIER_POINTER (rid
));
698 c_binding_oracle
= save
;
701 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
702 which may be any of several kinds of DECL or TYPE or error_mark_node,
703 in the scope SCOPE. */
705 bind (tree name
, tree decl
, struct c_scope
*scope
, bool invisible
,
706 bool nested
, location_t locus
)
708 struct c_binding
*b
, **here
;
710 if (binding_freelist
)
712 b
= binding_freelist
;
713 binding_freelist
= b
->prev
;
716 b
= ggc_alloc
<c_binding
> ();
721 b
->depth
= scope
->depth
;
722 b
->invisible
= invisible
;
730 b
->prev
= scope
->bindings
;
733 if (decl_jump_unsafe (decl
))
734 scope
->has_jump_unsafe_decl
= 1;
739 switch (TREE_CODE (decl
))
741 case LABEL_DECL
: here
= &I_LABEL_BINDING (name
); break;
744 case RECORD_TYPE
: here
= &I_TAG_BINDING (name
); break;
750 case ERROR_MARK
: here
= &I_SYMBOL_BINDING (name
); break;
756 /* Locate the appropriate place in the chain of shadowed decls
757 to insert this binding. Normally, scope == current_scope and
758 this does nothing. */
759 while (*here
&& (*here
)->depth
> scope
->depth
)
760 here
= &(*here
)->shadowed
;
766 /* Clear the binding structure B, stick it on the binding_freelist,
767 and return the former value of b->prev. This is used by pop_scope
768 and get_parm_info to iterate destructively over all the bindings
769 from a given scope. */
770 static struct c_binding
*
771 free_binding_and_advance (struct c_binding
*b
)
773 struct c_binding
*prev
= b
->prev
;
775 memset (b
, 0, sizeof (struct c_binding
));
776 b
->prev
= binding_freelist
;
777 binding_freelist
= b
;
782 /* Bind a label. Like bind, but skip fields which aren't used for
783 labels, and add the LABEL_VARS value. */
785 bind_label (tree name
, tree label
, struct c_scope
*scope
,
786 struct c_label_vars
*label_vars
)
790 bind (name
, label
, scope
, /*invisible=*/false, /*nested=*/false,
793 scope
->has_label_bindings
= true;
796 gcc_assert (b
->decl
== label
);
797 label_vars
->shadowed
= b
->u
.label
;
798 b
->u
.label
= label_vars
;
801 /* Hook called at end of compilation to assume 1 elt
802 for a file-scope tentative array defn that wasn't complete before. */
805 c_finish_incomplete_decl (tree decl
)
809 tree type
= TREE_TYPE (decl
);
810 if (type
!= error_mark_node
811 && TREE_CODE (type
) == ARRAY_TYPE
812 && !DECL_EXTERNAL (decl
)
813 && TYPE_DOMAIN (type
) == NULL_TREE
)
815 warning_at (DECL_SOURCE_LOCATION (decl
),
816 0, "array %q+D assumed to have one element", decl
);
818 complete_array_type (&TREE_TYPE (decl
), NULL_TREE
, true);
820 relayout_decl (decl
);
825 /* Record that inline function FUNC contains a reference (location
826 LOC) to static DECL (file-scope or function-local according to
830 record_inline_static (location_t loc
, tree func
, tree decl
,
831 enum c_inline_static_type type
)
833 c_inline_static
*csi
= ggc_alloc
<c_inline_static
> ();
835 csi
->function
= func
;
836 csi
->static_decl
= decl
;
838 csi
->next
= c_inline_statics
;
839 c_inline_statics
= csi
;
842 /* Check for references to static declarations in inline functions at
843 the end of the translation unit and diagnose them if the functions
844 are still inline definitions. */
847 check_inline_statics (void)
849 struct c_inline_static
*csi
;
850 for (csi
= c_inline_statics
; csi
; csi
= csi
->next
)
852 if (DECL_EXTERNAL (csi
->function
))
856 pedwarn (csi
->location
, 0,
857 "%qD is static but used in inline function %qD "
858 "which is not static", csi
->static_decl
, csi
->function
);
861 pedwarn (csi
->location
, 0,
862 "%q+D is static but declared in inline function %qD "
863 "which is not static", csi
->static_decl
, csi
->function
);
869 c_inline_statics
= NULL
;
872 /* Fill in a c_spot_bindings structure. If DEFINING is true, set it
873 for the current state, otherwise set it to uninitialized. */
876 set_spot_bindings (struct c_spot_bindings
*p
, bool defining
)
880 p
->scope
= current_scope
;
881 p
->bindings_in_scope
= current_scope
->bindings
;
886 p
->bindings_in_scope
= NULL
;
889 p
->left_stmt_expr
= false;
892 /* Update spot bindings P as we pop out of SCOPE. Return true if we
893 should push decls for a label. */
896 update_spot_bindings (struct c_scope
*scope
, struct c_spot_bindings
*p
)
898 if (p
->scope
!= scope
)
900 /* This label or goto is defined in some other scope, or it is a
901 label which is not yet defined. There is nothing to
906 /* Adjust the spot bindings to refer to the bindings already defined
907 in the enclosing scope. */
908 p
->scope
= scope
->outer
;
909 p
->bindings_in_scope
= p
->scope
->bindings
;
914 /* The Objective-C front-end often needs to determine the current scope. */
917 objc_get_current_scope (void)
919 return current_scope
;
922 /* The following function is used only by Objective-C. It needs to live here
923 because it accesses the innards of c_scope. */
926 objc_mark_locals_volatile (void *enclosing_blk
)
928 struct c_scope
*scope
;
931 for (scope
= current_scope
;
932 scope
&& scope
!= enclosing_blk
;
933 scope
= scope
->outer
)
935 for (b
= scope
->bindings
; b
; b
= b
->prev
)
936 objc_volatilize_decl (b
->decl
);
938 /* Do not climb up past the current function. */
939 if (scope
->function_body
)
944 /* Return true if we are in the global binding level. */
947 global_bindings_p (void)
949 return current_scope
== file_scope
;
953 keep_next_level (void)
955 keep_next_level_flag
= true;
958 /* Set the flag for the FLOAT_CONST_DECIMAL64 pragma being ON. */
961 set_float_const_decimal64 (void)
963 current_scope
->float_const_decimal64
= true;
966 /* Clear the flag for the FLOAT_CONST_DECIMAL64 pragma. */
969 clear_float_const_decimal64 (void)
971 current_scope
->float_const_decimal64
= false;
974 /* Return nonzero if an unsuffixed float constant is _Decimal64. */
977 float_const_decimal64_p (void)
979 return current_scope
->float_const_decimal64
;
982 /* Identify this scope as currently being filled with parameters. */
985 declare_parm_level (void)
987 current_scope
->parm_flag
= true;
993 if (next_is_function_body
)
995 /* This is the transition from the parameters to the top level
996 of the function body. These are the same scope
997 (C99 6.2.1p4,6) so we do not push another scope structure.
998 next_is_function_body is set only by store_parm_decls, which
999 in turn is called when and only when we are about to
1000 encounter the opening curly brace for the function body.
1002 The outermost block of a function always gets a BLOCK node,
1003 because the debugging output routines expect that each
1004 function has at least one BLOCK. */
1005 current_scope
->parm_flag
= false;
1006 current_scope
->function_body
= true;
1007 current_scope
->keep
= true;
1008 current_scope
->outer_function
= current_function_scope
;
1009 current_function_scope
= current_scope
;
1011 keep_next_level_flag
= false;
1012 next_is_function_body
= false;
1014 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
1015 if (current_scope
->outer
)
1016 current_scope
->float_const_decimal64
1017 = current_scope
->outer
->float_const_decimal64
;
1019 current_scope
->float_const_decimal64
= false;
1023 struct c_scope
*scope
;
1026 scope
= scope_freelist
;
1027 scope_freelist
= scope
->outer
;
1030 scope
= ggc_cleared_alloc
<c_scope
> ();
1032 /* The FLOAT_CONST_DECIMAL64 pragma applies to nested scopes. */
1034 scope
->float_const_decimal64
= current_scope
->float_const_decimal64
;
1036 scope
->float_const_decimal64
= false;
1038 scope
->keep
= keep_next_level_flag
;
1039 scope
->outer
= current_scope
;
1040 scope
->depth
= current_scope
? (current_scope
->depth
+ 1) : 0;
1042 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
1044 if (current_scope
&& scope
->depth
== 0)
1047 sorry ("GCC supports only %u nested scopes", scope
->depth
);
1050 current_scope
= scope
;
1051 keep_next_level_flag
= false;
1055 /* This is called when we are leaving SCOPE. For each label defined
1056 in SCOPE, add any appropriate decls to its decls_in_scope fields.
1057 These are the decls whose initialization will be skipped by a goto
1058 later in the function. */
1061 update_label_decls (struct c_scope
*scope
)
1068 if (s
->has_label_bindings
)
1070 struct c_binding
*b
;
1072 for (b
= s
->bindings
; b
!= NULL
; b
= b
->prev
)
1074 struct c_label_vars
*label_vars
;
1075 struct c_binding
*b1
;
1078 struct c_goto_bindings
*g
;
1080 if (TREE_CODE (b
->decl
) != LABEL_DECL
)
1082 label_vars
= b
->u
.label
;
1084 b1
= label_vars
->label_bindings
.bindings_in_scope
;
1085 if (label_vars
->label_bindings
.scope
== NULL
)
1088 hjud
= label_vars
->label_bindings
.scope
->has_jump_unsafe_decl
;
1089 if (update_spot_bindings (scope
, &label_vars
->label_bindings
))
1091 /* This label is defined in this scope. */
1094 for (; b1
!= NULL
; b1
= b1
->prev
)
1096 /* A goto from later in the function to this
1097 label will never see the initialization
1098 of B1, if any. Save it to issue a
1099 warning if needed. */
1100 if (decl_jump_unsafe (b1
->decl
))
1101 vec_safe_push(label_vars
->decls_in_scope
, b1
->decl
);
1106 /* Update the bindings of any goto statements associated
1108 FOR_EACH_VEC_SAFE_ELT (label_vars
->gotos
, ix
, g
)
1109 update_spot_bindings (scope
, &g
->goto_bindings
);
1113 /* Don't search beyond the current function. */
1114 if (s
== current_function_scope
)
1121 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
1124 set_type_context (tree type
, tree context
)
1126 for (type
= TYPE_MAIN_VARIANT (type
); type
;
1127 type
= TYPE_NEXT_VARIANT (type
))
1128 TYPE_CONTEXT (type
) = context
;
1131 /* Exit a scope. Restore the state of the identifier-decl mappings
1132 that were in effect when this scope was entered. Return a BLOCK
1133 node containing all the DECLs in this scope that are of interest
1134 to debug info generation. */
1139 struct c_scope
*scope
= current_scope
;
1140 tree block
, context
, p
;
1141 struct c_binding
*b
;
1143 bool functionbody
= scope
->function_body
;
1144 bool keep
= functionbody
|| scope
->keep
|| scope
->bindings
;
1146 update_label_decls (scope
);
1148 /* If appropriate, create a BLOCK to record the decls for the life
1149 of this function. */
1153 block
= make_node (BLOCK
);
1154 BLOCK_SUBBLOCKS (block
) = scope
->blocks
;
1155 TREE_USED (block
) = 1;
1157 /* In each subblock, record that this is its superior. */
1158 for (p
= scope
->blocks
; p
; p
= BLOCK_CHAIN (p
))
1159 BLOCK_SUPERCONTEXT (p
) = block
;
1161 BLOCK_VARS (block
) = NULL_TREE
;
1164 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
1165 scope must be set so that they point to the appropriate
1166 construct, i.e. either to the current FUNCTION_DECL node, or
1167 else to the BLOCK node we just constructed.
1169 Note that for tagged types whose scope is just the formal
1170 parameter list for some function type specification, we can't
1171 properly set their TYPE_CONTEXTs here, because we don't have a
1172 pointer to the appropriate FUNCTION_TYPE node readily available
1173 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
1174 type nodes get set in `grokdeclarator' as soon as we have created
1175 the FUNCTION_TYPE node which will represent the "scope" for these
1176 "parameter list local" tagged types. */
1177 if (scope
->function_body
)
1178 context
= current_function_decl
;
1179 else if (scope
== file_scope
)
1182 = build_translation_unit_decl (get_identifier (main_input_filename
));
1183 context
= file_decl
;
1184 debug_hooks
->register_main_translation_unit (file_decl
);
1189 /* Clear all bindings in this scope. */
1190 for (b
= scope
->bindings
; b
; b
= free_binding_and_advance (b
))
1193 switch (TREE_CODE (p
))
1196 /* Warnings for unused labels, errors for undefined labels. */
1197 if (TREE_USED (p
) && !DECL_INITIAL (p
))
1199 error ("label %q+D used but not defined", p
);
1200 DECL_INITIAL (p
) = error_mark_node
;
1203 warn_for_unused_label (p
);
1205 /* Labels go in BLOCK_VARS. */
1206 DECL_CHAIN (p
) = BLOCK_VARS (block
);
1207 BLOCK_VARS (block
) = p
;
1208 gcc_assert (I_LABEL_BINDING (b
->id
) == b
);
1209 I_LABEL_BINDING (b
->id
) = b
->shadowed
;
1211 /* Also pop back to the shadowed label_vars. */
1212 release_tree_vector (b
->u
.label
->decls_in_scope
);
1213 b
->u
.label
= b
->u
.label
->shadowed
;
1219 set_type_context (p
, context
);
1221 /* Types may not have tag-names, in which case the type
1222 appears in the bindings list with b->id NULL. */
1225 gcc_assert (I_TAG_BINDING (b
->id
) == b
);
1226 I_TAG_BINDING (b
->id
) = b
->shadowed
;
1231 /* Propagate TREE_ADDRESSABLE from nested functions to their
1232 containing functions. */
1233 if (!TREE_ASM_WRITTEN (p
)
1234 && DECL_INITIAL (p
) != NULL_TREE
1235 && TREE_ADDRESSABLE (p
)
1236 && DECL_ABSTRACT_ORIGIN (p
) != NULL_TREE
1237 && DECL_ABSTRACT_ORIGIN (p
) != p
)
1238 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p
)) = 1;
1239 if (!DECL_EXTERNAL (p
)
1240 && !DECL_INITIAL (p
)
1241 && scope
!= file_scope
1242 && scope
!= external_scope
)
1244 error ("nested function %q+D declared but never defined", p
);
1245 undef_nested_function
= true;
1247 else if (DECL_DECLARED_INLINE_P (p
)
1249 && !DECL_INITIAL (p
))
1251 /* C99 6.7.4p6: "a function with external linkage... declared
1252 with an inline function specifier ... shall also be defined
1253 in the same translation unit." */
1254 if (!flag_gnu89_inline
1255 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (p
))
1256 && scope
!= external_scope
)
1257 pedwarn (input_location
, 0,
1258 "inline function %q+D declared but never defined", p
);
1259 DECL_EXTERNAL (p
) = 1;
1265 /* Warnings for unused variables. */
1266 if ((!TREE_USED (p
) || !DECL_READ_P (p
))
1267 && !TREE_NO_WARNING (p
)
1268 && !DECL_IN_SYSTEM_HEADER (p
)
1270 && !DECL_ARTIFICIAL (p
)
1271 && scope
!= file_scope
1272 && scope
!= external_scope
)
1275 warning (OPT_Wunused_variable
, "unused variable %q+D", p
);
1276 else if (DECL_CONTEXT (p
) == current_function_decl
)
1277 warning_at (DECL_SOURCE_LOCATION (p
),
1278 OPT_Wunused_but_set_variable
,
1279 "variable %qD set but not used", p
);
1284 error ("type of array %q+D completed incompatibly with"
1285 " implicit initialization", p
);
1292 /* All of these go in BLOCK_VARS, but only if this is the
1293 binding in the home scope. */
1296 DECL_CHAIN (p
) = BLOCK_VARS (block
);
1297 BLOCK_VARS (block
) = p
;
1299 else if (VAR_OR_FUNCTION_DECL_P (p
) && scope
!= file_scope
)
1301 /* For block local externs add a special
1302 DECL_EXTERNAL decl for debug info generation. */
1303 tree extp
= copy_node (p
);
1305 DECL_EXTERNAL (extp
) = 1;
1306 TREE_STATIC (extp
) = 0;
1307 TREE_PUBLIC (extp
) = 1;
1308 DECL_INITIAL (extp
) = NULL_TREE
;
1309 DECL_LANG_SPECIFIC (extp
) = NULL
;
1310 DECL_CONTEXT (extp
) = current_function_decl
;
1311 if (TREE_CODE (p
) == FUNCTION_DECL
)
1313 DECL_RESULT (extp
) = NULL_TREE
;
1314 DECL_SAVED_TREE (extp
) = NULL_TREE
;
1315 DECL_STRUCT_FUNCTION (extp
) = NULL
;
1317 if (b
->locus
!= UNKNOWN_LOCATION
)
1318 DECL_SOURCE_LOCATION (extp
) = b
->locus
;
1319 DECL_CHAIN (extp
) = BLOCK_VARS (block
);
1320 BLOCK_VARS (block
) = extp
;
1322 /* If this is the file scope set DECL_CONTEXT of each decl to
1323 the TRANSLATION_UNIT_DECL. This makes same_translation_unit_p
1325 if (scope
== file_scope
)
1327 DECL_CONTEXT (p
) = context
;
1328 if (TREE_CODE (p
) == TYPE_DECL
1329 && TREE_TYPE (p
) != error_mark_node
)
1330 set_type_context (TREE_TYPE (p
), context
);
1334 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
1335 already been put there by store_parm_decls. Unused-
1336 parameter warnings are handled by function.c.
1337 error_mark_node obviously does not go in BLOCK_VARS and
1338 does not get unused-variable warnings. */
1341 /* It is possible for a decl not to have a name. We get
1342 here with b->id NULL in this case. */
1345 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
1346 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
1347 if (b
->shadowed
&& b
->shadowed
->u
.type
)
1348 TREE_TYPE (b
->shadowed
->decl
) = b
->shadowed
->u
.type
;
1358 /* Dispose of the block that we just made inside some higher level. */
1359 if ((scope
->function_body
|| scope
== file_scope
) && context
)
1361 DECL_INITIAL (context
) = block
;
1362 BLOCK_SUPERCONTEXT (block
) = context
;
1364 else if (scope
->outer
)
1367 SCOPE_LIST_APPEND (scope
->outer
, blocks
, block
);
1368 /* If we did not make a block for the scope just exited, any
1369 blocks made for inner scopes must be carried forward so they
1370 will later become subblocks of something else. */
1371 else if (scope
->blocks
)
1372 SCOPE_LIST_CONCAT (scope
->outer
, blocks
, scope
, blocks
);
1375 /* Pop the current scope, and free the structure for reuse. */
1376 current_scope
= scope
->outer
;
1377 if (scope
->function_body
)
1378 current_function_scope
= scope
->outer_function
;
1380 memset (scope
, 0, sizeof (struct c_scope
));
1381 scope
->outer
= scope_freelist
;
1382 scope_freelist
= scope
;
1388 push_file_scope (void)
1396 file_scope
= current_scope
;
1398 start_fname_decls ();
1400 for (decl
= visible_builtins
; decl
; decl
= DECL_CHAIN (decl
))
1401 bind (DECL_NAME (decl
), decl
, file_scope
,
1402 /*invisible=*/false, /*nested=*/true, DECL_SOURCE_LOCATION (decl
));
1406 pop_file_scope (void)
1408 /* In case there were missing closebraces, get us back to the global
1410 while (current_scope
!= file_scope
)
1413 /* __FUNCTION__ is defined at file scope (""). This
1414 call may not be necessary as my tests indicate it
1415 still works without it. */
1416 finish_fname_decls ();
1418 check_inline_statics ();
1420 /* This is the point to write out a PCH if we're doing that.
1421 In that case we do not want to do anything else. */
1424 c_common_write_pch ();
1425 /* Ensure even the callers don't try to finalize the CU. */
1426 flag_syntax_only
= 1;
1430 /* Pop off the file scope and close this translation unit. */
1434 maybe_apply_pending_pragma_weaks ();
1437 /* Adjust the bindings for the start of a statement expression. */
1440 c_bindings_start_stmt_expr (struct c_spot_bindings
* switch_bindings
)
1442 struct c_scope
*scope
;
1444 for (scope
= current_scope
; scope
!= NULL
; scope
= scope
->outer
)
1446 struct c_binding
*b
;
1448 if (!scope
->has_label_bindings
)
1451 for (b
= scope
->bindings
; b
!= NULL
; b
= b
->prev
)
1453 struct c_label_vars
*label_vars
;
1455 struct c_goto_bindings
*g
;
1457 if (TREE_CODE (b
->decl
) != LABEL_DECL
)
1459 label_vars
= b
->u
.label
;
1460 ++label_vars
->label_bindings
.stmt_exprs
;
1461 FOR_EACH_VEC_SAFE_ELT (label_vars
->gotos
, ix
, g
)
1462 ++g
->goto_bindings
.stmt_exprs
;
1466 if (switch_bindings
!= NULL
)
1467 ++switch_bindings
->stmt_exprs
;
1470 /* Adjust the bindings for the end of a statement expression. */
1473 c_bindings_end_stmt_expr (struct c_spot_bindings
*switch_bindings
)
1475 struct c_scope
*scope
;
1477 for (scope
= current_scope
; scope
!= NULL
; scope
= scope
->outer
)
1479 struct c_binding
*b
;
1481 if (!scope
->has_label_bindings
)
1484 for (b
= scope
->bindings
; b
!= NULL
; b
= b
->prev
)
1486 struct c_label_vars
*label_vars
;
1488 struct c_goto_bindings
*g
;
1490 if (TREE_CODE (b
->decl
) != LABEL_DECL
)
1492 label_vars
= b
->u
.label
;
1493 --label_vars
->label_bindings
.stmt_exprs
;
1494 if (label_vars
->label_bindings
.stmt_exprs
< 0)
1496 label_vars
->label_bindings
.left_stmt_expr
= true;
1497 label_vars
->label_bindings
.stmt_exprs
= 0;
1499 FOR_EACH_VEC_SAFE_ELT (label_vars
->gotos
, ix
, g
)
1501 --g
->goto_bindings
.stmt_exprs
;
1502 if (g
->goto_bindings
.stmt_exprs
< 0)
1504 g
->goto_bindings
.left_stmt_expr
= true;
1505 g
->goto_bindings
.stmt_exprs
= 0;
1511 if (switch_bindings
!= NULL
)
1513 --switch_bindings
->stmt_exprs
;
1514 gcc_assert (switch_bindings
->stmt_exprs
>= 0);
1518 /* Push a definition or a declaration of struct, union or enum tag "name".
1519 "type" should be the type node.
1520 We assume that the tag "name" is not already defined, and has a location
1523 Note that the definition may really be just a forward reference.
1524 In that case, the TYPE_SIZE will be zero. */
1527 pushtag (location_t loc
, tree name
, tree type
)
1529 /* Record the identifier as the type's name if it has none. */
1530 if (name
&& !TYPE_NAME (type
))
1531 TYPE_NAME (type
) = name
;
1532 bind (name
, type
, current_scope
, /*invisible=*/false, /*nested=*/false, loc
);
1534 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
1535 tagged type we just added to the current scope. This fake
1536 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
1537 to output a representation of a tagged type, and it also gives
1538 us a convenient place to record the "scope start" address for the
1541 TYPE_STUB_DECL (type
) = pushdecl (build_decl (loc
,
1542 TYPE_DECL
, NULL_TREE
, type
));
1544 /* An approximation for now, so we can tell this is a function-scope tag.
1545 This will be updated in pop_scope. */
1546 TYPE_CONTEXT (type
) = DECL_CONTEXT (TYPE_STUB_DECL (type
));
1548 if (warn_cxx_compat
&& name
!= NULL_TREE
)
1550 struct c_binding
*b
= I_SYMBOL_BINDING (name
);
1553 && b
->decl
!= NULL_TREE
1554 && TREE_CODE (b
->decl
) == TYPE_DECL
1555 && (B_IN_CURRENT_SCOPE (b
)
1556 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
1557 && (TYPE_MAIN_VARIANT (TREE_TYPE (b
->decl
))
1558 != TYPE_MAIN_VARIANT (type
)))
1560 warning_at (loc
, OPT_Wc___compat
,
1561 ("using %qD as both a typedef and a tag is "
1564 if (b
->locus
!= UNKNOWN_LOCATION
)
1565 inform (b
->locus
, "originally defined here");
1570 /* An exported interface to pushtag. This is used by the gdb plugin's
1571 binding oracle to introduce a new tag binding. */
1574 c_pushtag (location_t loc
, tree name
, tree type
)
1576 pushtag (loc
, name
, type
);
1579 /* An exported interface to bind a declaration. LOC is the location
1580 to use. DECL is the declaration to bind. The decl's name is used
1581 to determine how it is bound. If DECL is a VAR_DECL, then
1582 IS_GLOBAL determines whether the decl is put into the global (file
1583 and external) scope or the current function's scope; if DECL is not
1584 a VAR_DECL then it is always put into the file scope. */
1587 c_bind (location_t loc
, tree decl
, bool is_global
)
1589 struct c_scope
*scope
;
1590 bool nested
= false;
1592 if (!VAR_P (decl
) || current_function_scope
== NULL
)
1594 /* Types and functions are always considered to be global. */
1596 DECL_EXTERNAL (decl
) = 1;
1597 TREE_PUBLIC (decl
) = 1;
1601 /* Also bind it into the external scope. */
1602 bind (DECL_NAME (decl
), decl
, external_scope
, true, false, loc
);
1605 DECL_EXTERNAL (decl
) = 1;
1606 TREE_PUBLIC (decl
) = 1;
1610 DECL_CONTEXT (decl
) = current_function_decl
;
1611 TREE_PUBLIC (decl
) = 0;
1612 scope
= current_function_scope
;
1615 bind (DECL_NAME (decl
), decl
, scope
, false, nested
, loc
);
1618 /* Subroutine of compare_decls. Allow harmless mismatches in return
1619 and argument types provided that the type modes match. This function
1620 return a unified type given a suitable match, and 0 otherwise. */
1623 match_builtin_function_types (tree newtype
, tree oldtype
)
1625 tree newrettype
, oldrettype
;
1626 tree newargs
, oldargs
;
1627 tree trytype
, tryargs
;
1629 /* Accept the return type of the new declaration if same modes. */
1630 oldrettype
= TREE_TYPE (oldtype
);
1631 newrettype
= TREE_TYPE (newtype
);
1633 if (TYPE_MODE (oldrettype
) != TYPE_MODE (newrettype
))
1636 oldargs
= TYPE_ARG_TYPES (oldtype
);
1637 newargs
= TYPE_ARG_TYPES (newtype
);
1640 while (oldargs
|| newargs
)
1644 || !TREE_VALUE (oldargs
)
1645 || !TREE_VALUE (newargs
)
1646 || TYPE_MODE (TREE_VALUE (oldargs
))
1647 != TYPE_MODE (TREE_VALUE (newargs
)))
1650 oldargs
= TREE_CHAIN (oldargs
);
1651 newargs
= TREE_CHAIN (newargs
);
1654 trytype
= build_function_type (newrettype
, tryargs
);
1656 /* Allow declaration to change transaction_safe attribute. */
1657 tree oldattrs
= TYPE_ATTRIBUTES (oldtype
);
1658 tree oldtsafe
= lookup_attribute ("transaction_safe", oldattrs
);
1659 tree newattrs
= TYPE_ATTRIBUTES (newtype
);
1660 tree newtsafe
= lookup_attribute ("transaction_safe", newattrs
);
1661 if (oldtsafe
&& !newtsafe
)
1662 oldattrs
= remove_attribute ("transaction_safe", oldattrs
);
1663 else if (newtsafe
&& !oldtsafe
)
1664 oldattrs
= tree_cons (get_identifier ("transaction_safe"),
1665 NULL_TREE
, oldattrs
);
1667 return build_type_attribute_variant (trytype
, oldattrs
);
1670 /* Subroutine of diagnose_mismatched_decls. Check for function type
1671 mismatch involving an empty arglist vs a nonempty one and give clearer
1674 diagnose_arglist_conflict (tree newdecl
, tree olddecl
,
1675 tree newtype
, tree oldtype
)
1679 if (TREE_CODE (olddecl
) != FUNCTION_DECL
1680 || !comptypes (TREE_TYPE (oldtype
), TREE_TYPE (newtype
))
1681 || !((!prototype_p (oldtype
) && DECL_INITIAL (olddecl
) == NULL_TREE
)
1682 || (!prototype_p (newtype
) && DECL_INITIAL (newdecl
) == NULL_TREE
)))
1685 t
= TYPE_ARG_TYPES (oldtype
);
1687 t
= TYPE_ARG_TYPES (newtype
);
1688 for (; t
; t
= TREE_CHAIN (t
))
1690 tree type
= TREE_VALUE (t
);
1692 if (TREE_CHAIN (t
) == NULL_TREE
1693 && TYPE_MAIN_VARIANT (type
) != void_type_node
)
1695 inform (input_location
, "a parameter list with an ellipsis can%'t match "
1696 "an empty parameter name list declaration");
1700 if (c_type_promotes_to (type
) != type
)
1702 inform (input_location
, "an argument type that has a default promotion can%'t match "
1703 "an empty parameter name list declaration");
1709 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1710 old-style function definition, NEWDECL is a prototype declaration.
1711 Diagnose inconsistencies in the argument list. Returns TRUE if
1712 the prototype is compatible, FALSE if not. */
1714 validate_proto_after_old_defn (tree newdecl
, tree newtype
, tree oldtype
)
1716 tree newargs
, oldargs
;
1719 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1721 oldargs
= TYPE_ACTUAL_ARG_TYPES (oldtype
);
1722 newargs
= TYPE_ARG_TYPES (newtype
);
1727 tree oldargtype
= TREE_VALUE (oldargs
);
1728 tree newargtype
= TREE_VALUE (newargs
);
1730 if (oldargtype
== error_mark_node
|| newargtype
== error_mark_node
)
1733 oldargtype
= (TYPE_ATOMIC (oldargtype
)
1734 ? c_build_qualified_type (TYPE_MAIN_VARIANT (oldargtype
),
1736 : TYPE_MAIN_VARIANT (oldargtype
));
1737 newargtype
= (TYPE_ATOMIC (newargtype
)
1738 ? c_build_qualified_type (TYPE_MAIN_VARIANT (newargtype
),
1740 : TYPE_MAIN_VARIANT (newargtype
));
1742 if (END_OF_ARGLIST (oldargtype
) && END_OF_ARGLIST (newargtype
))
1745 /* Reaching the end of just one list means the two decls don't
1746 agree on the number of arguments. */
1747 if (END_OF_ARGLIST (oldargtype
))
1749 error ("prototype for %q+D declares more arguments "
1750 "than previous old-style definition", newdecl
);
1753 else if (END_OF_ARGLIST (newargtype
))
1755 error ("prototype for %q+D declares fewer arguments "
1756 "than previous old-style definition", newdecl
);
1760 /* Type for passing arg must be consistent with that declared
1762 else if (!comptypes (oldargtype
, newargtype
))
1764 error ("prototype for %q+D declares argument %d"
1765 " with incompatible type",
1770 oldargs
= TREE_CHAIN (oldargs
);
1771 newargs
= TREE_CHAIN (newargs
);
1775 /* If we get here, no errors were found, but do issue a warning
1776 for this poor-style construct. */
1777 warning (0, "prototype for %q+D follows non-prototype definition",
1780 #undef END_OF_ARGLIST
1783 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1784 first in a pair of mismatched declarations, using the diagnostic
1787 locate_old_decl (tree decl
)
1789 if (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (decl
)
1790 && !C_DECL_DECLARED_BUILTIN (decl
))
1792 else if (DECL_INITIAL (decl
))
1793 inform (input_location
, "previous definition of %q+D was here", decl
);
1794 else if (C_DECL_IMPLICIT (decl
))
1795 inform (input_location
, "previous implicit declaration of %q+D was here", decl
);
1797 inform (input_location
, "previous declaration of %q+D was here", decl
);
1800 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1801 Returns true if the caller should proceed to merge the two, false
1802 if OLDDECL should simply be discarded. As a side effect, issues
1803 all necessary diagnostics for invalid or poor-style combinations.
1804 If it returns true, writes the types of NEWDECL and OLDDECL to
1805 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1806 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1809 diagnose_mismatched_decls (tree newdecl
, tree olddecl
,
1810 tree
*newtypep
, tree
*oldtypep
)
1812 tree newtype
, oldtype
;
1813 bool pedwarned
= false;
1814 bool warned
= false;
1817 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1818 && DECL_EXTERNAL (DECL))
1820 /* If we have error_mark_node for either decl or type, just discard
1821 the previous decl - we're in an error cascade already. */
1822 if (olddecl
== error_mark_node
|| newdecl
== error_mark_node
)
1824 *oldtypep
= oldtype
= TREE_TYPE (olddecl
);
1825 *newtypep
= newtype
= TREE_TYPE (newdecl
);
1826 if (oldtype
== error_mark_node
|| newtype
== error_mark_node
)
1829 /* Two different categories of symbol altogether. This is an error
1830 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1831 if (TREE_CODE (olddecl
) != TREE_CODE (newdecl
))
1833 if (!(TREE_CODE (olddecl
) == FUNCTION_DECL
1834 && DECL_BUILT_IN (olddecl
)
1835 && !C_DECL_DECLARED_BUILTIN (olddecl
)))
1837 error ("%q+D redeclared as different kind of symbol", newdecl
);
1838 locate_old_decl (olddecl
);
1840 else if (TREE_PUBLIC (newdecl
))
1841 warning (0, "built-in function %q+D declared as non-function",
1844 warning (OPT_Wshadow
, "declaration of %q+D shadows "
1845 "a built-in function", newdecl
);
1849 /* Enumerators have no linkage, so may only be declared once in a
1851 if (TREE_CODE (olddecl
) == CONST_DECL
)
1853 error ("redeclaration of enumerator %q+D", newdecl
);
1854 locate_old_decl (olddecl
);
1858 if (!comptypes (oldtype
, newtype
))
1860 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1861 && DECL_BUILT_IN (olddecl
) && !C_DECL_DECLARED_BUILTIN (olddecl
))
1863 /* Accept harmless mismatch in function types.
1864 This is for the ffs and fprintf builtins. */
1865 tree trytype
= match_builtin_function_types (newtype
, oldtype
);
1867 if (trytype
&& comptypes (newtype
, trytype
))
1868 *oldtypep
= oldtype
= trytype
;
1871 /* If types don't match for a built-in, throw away the
1872 built-in. No point in calling locate_old_decl here, it
1873 won't print anything. */
1874 warning (OPT_Wbuiltin_declaration_mismatch
,
1875 "conflicting types for built-in function %q+D",
1880 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
1881 && DECL_IS_BUILTIN (olddecl
))
1883 /* A conflicting function declaration for a predeclared
1884 function that isn't actually built in. Objective C uses
1885 these. The new declaration silently overrides everything
1886 but the volatility (i.e. noreturn) indication. See also
1887 below. FIXME: Make Objective C use normal builtins. */
1888 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
1891 /* Permit void foo (...) to match int foo (...) if the latter is
1892 the definition and implicit int was used. See
1893 c-torture/compile/920625-2.c. */
1894 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
&& DECL_INITIAL (newdecl
)
1895 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype
)) == void_type_node
1896 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype
)) == integer_type_node
1897 && C_FUNCTION_IMPLICIT_INT (newdecl
) && !DECL_INITIAL (olddecl
))
1899 pedwarned
= pedwarn (input_location
, 0,
1900 "conflicting types for %q+D", newdecl
);
1901 /* Make sure we keep void as the return type. */
1902 TREE_TYPE (newdecl
) = *newtypep
= newtype
= oldtype
;
1903 C_FUNCTION_IMPLICIT_INT (newdecl
) = 0;
1905 /* Permit void foo (...) to match an earlier call to foo (...) with
1906 no declared type (thus, implicitly int). */
1907 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1908 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype
)) == void_type_node
1909 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype
)) == integer_type_node
1910 && C_DECL_IMPLICIT (olddecl
) && !DECL_INITIAL (olddecl
))
1912 pedwarned
= pedwarn (input_location
, 0,
1913 "conflicting types for %q+D", newdecl
);
1914 /* Make sure we keep void as the return type. */
1915 TREE_TYPE (olddecl
) = *oldtypep
= oldtype
= newtype
;
1919 int new_quals
= TYPE_QUALS (newtype
);
1920 int old_quals
= TYPE_QUALS (oldtype
);
1922 if (new_quals
!= old_quals
)
1924 addr_space_t new_addr
= DECODE_QUAL_ADDR_SPACE (new_quals
);
1925 addr_space_t old_addr
= DECODE_QUAL_ADDR_SPACE (old_quals
);
1926 if (new_addr
!= old_addr
)
1928 if (ADDR_SPACE_GENERIC_P (new_addr
))
1929 error ("conflicting named address spaces (generic vs %s) "
1931 c_addr_space_name (old_addr
), newdecl
);
1932 else if (ADDR_SPACE_GENERIC_P (old_addr
))
1933 error ("conflicting named address spaces (%s vs generic) "
1935 c_addr_space_name (new_addr
), newdecl
);
1937 error ("conflicting named address spaces (%s vs %s) "
1939 c_addr_space_name (new_addr
),
1940 c_addr_space_name (old_addr
),
1944 if (CLEAR_QUAL_ADDR_SPACE (new_quals
)
1945 != CLEAR_QUAL_ADDR_SPACE (old_quals
))
1946 error ("conflicting type qualifiers for %q+D", newdecl
);
1949 error ("conflicting types for %q+D", newdecl
);
1950 diagnose_arglist_conflict (newdecl
, olddecl
, newtype
, oldtype
);
1951 locate_old_decl (olddecl
);
1956 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1957 but silently ignore the redeclaration if either is in a system
1958 header. (Conflicting redeclarations were handled above.) This
1959 is allowed for C11 if the types are the same, not just
1961 if (TREE_CODE (newdecl
) == TYPE_DECL
)
1963 bool types_different
= false;
1964 int comptypes_result
;
1967 = comptypes_check_different_types (oldtype
, newtype
, &types_different
);
1969 if (comptypes_result
!= 1 || types_different
)
1971 error ("redefinition of typedef %q+D with different type", newdecl
);
1972 locate_old_decl (olddecl
);
1976 if (DECL_IN_SYSTEM_HEADER (newdecl
)
1977 || DECL_IN_SYSTEM_HEADER (olddecl
)
1978 || TREE_NO_WARNING (newdecl
)
1979 || TREE_NO_WARNING (olddecl
))
1980 return true; /* Allow OLDDECL to continue in use. */
1982 if (variably_modified_type_p (newtype
, NULL
))
1984 error ("redefinition of typedef %q+D with variably modified type",
1986 locate_old_decl (olddecl
);
1988 else if (pedwarn_c99 (input_location
, OPT_Wpedantic
,
1989 "redefinition of typedef %q+D", newdecl
))
1990 locate_old_decl (olddecl
);
1995 /* Function declarations can either be 'static' or 'extern' (no
1996 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1997 can never conflict with each other on account of linkage
1998 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1999 gnu89 mode permits two definitions if one is 'extern inline' and
2000 one is not. The non- extern-inline definition supersedes the
2001 extern-inline definition. */
2003 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2005 /* If you declare a built-in function name as static, or
2006 define the built-in with an old-style definition (so we
2007 can't validate the argument list) the built-in definition is
2008 overridden, but optionally warn this was a bad choice of name. */
2009 if (DECL_BUILT_IN (olddecl
)
2010 && !C_DECL_DECLARED_BUILTIN (olddecl
)
2011 && (!TREE_PUBLIC (newdecl
)
2012 || (DECL_INITIAL (newdecl
)
2013 && !prototype_p (TREE_TYPE (newdecl
)))))
2015 warning (OPT_Wshadow
, "declaration of %q+D shadows "
2016 "a built-in function", newdecl
);
2017 /* Discard the old built-in function. */
2021 if (DECL_INITIAL (newdecl
))
2023 if (DECL_INITIAL (olddecl
))
2025 /* If both decls are in the same TU and the new declaration
2026 isn't overriding an extern inline reject the new decl.
2027 In c99, no overriding is allowed in the same translation
2029 if ((!DECL_EXTERN_INLINE (olddecl
)
2030 || DECL_EXTERN_INLINE (newdecl
)
2031 || (!flag_gnu89_inline
2032 && (!DECL_DECLARED_INLINE_P (olddecl
)
2033 || !lookup_attribute ("gnu_inline",
2034 DECL_ATTRIBUTES (olddecl
)))
2035 && (!DECL_DECLARED_INLINE_P (newdecl
)
2036 || !lookup_attribute ("gnu_inline",
2037 DECL_ATTRIBUTES (newdecl
))))
2039 && same_translation_unit_p (newdecl
, olddecl
))
2041 error ("redefinition of %q+D", newdecl
);
2042 locate_old_decl (olddecl
);
2047 /* If we have a prototype after an old-style function definition,
2048 the argument types must be checked specially. */
2049 else if (DECL_INITIAL (olddecl
)
2050 && !prototype_p (oldtype
) && prototype_p (newtype
)
2051 && TYPE_ACTUAL_ARG_TYPES (oldtype
)
2052 && !validate_proto_after_old_defn (newdecl
, newtype
, oldtype
))
2054 locate_old_decl (olddecl
);
2057 /* A non-static declaration (even an "extern") followed by a
2058 static declaration is undefined behavior per C99 6.2.2p3-5,7.
2059 The same is true for a static forward declaration at block
2060 scope followed by a non-static declaration/definition at file
2061 scope. Static followed by non-static at the same scope is
2062 not undefined behavior, and is the most convenient way to get
2063 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
2064 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
2065 we do diagnose it if -Wtraditional. */
2066 if (TREE_PUBLIC (olddecl
) && !TREE_PUBLIC (newdecl
))
2068 /* Two exceptions to the rule. If olddecl is an extern
2069 inline, or a predeclared function that isn't actually
2070 built in, newdecl silently overrides olddecl. The latter
2071 occur only in Objective C; see also above. (FIXME: Make
2072 Objective C use normal builtins.) */
2073 if (!DECL_IS_BUILTIN (olddecl
)
2074 && !DECL_EXTERN_INLINE (olddecl
))
2076 error ("static declaration of %q+D follows "
2077 "non-static declaration", newdecl
);
2078 locate_old_decl (olddecl
);
2082 else if (TREE_PUBLIC (newdecl
) && !TREE_PUBLIC (olddecl
))
2084 if (DECL_CONTEXT (olddecl
))
2086 error ("non-static declaration of %q+D follows "
2087 "static declaration", newdecl
);
2088 locate_old_decl (olddecl
);
2091 else if (warn_traditional
)
2093 warned
|= warning (OPT_Wtraditional
,
2094 "non-static declaration of %q+D "
2095 "follows static declaration", newdecl
);
2099 /* Make sure gnu_inline attribute is either not present, or
2100 present on all inline decls. */
2101 if (DECL_DECLARED_INLINE_P (olddecl
)
2102 && DECL_DECLARED_INLINE_P (newdecl
))
2104 bool newa
= lookup_attribute ("gnu_inline",
2105 DECL_ATTRIBUTES (newdecl
)) != NULL
;
2106 bool olda
= lookup_attribute ("gnu_inline",
2107 DECL_ATTRIBUTES (olddecl
)) != NULL
;
2110 error_at (input_location
, "%<gnu_inline%> attribute present on %q+D",
2111 newa
? newdecl
: olddecl
);
2112 error_at (DECL_SOURCE_LOCATION (newa
? olddecl
: newdecl
),
2117 else if (VAR_P (newdecl
))
2119 /* Only variables can be thread-local, and all declarations must
2120 agree on this property. */
2121 if (C_DECL_THREADPRIVATE_P (olddecl
) && !DECL_THREAD_LOCAL_P (newdecl
))
2123 /* Nothing to check. Since OLDDECL is marked threadprivate
2124 and NEWDECL does not have a thread-local attribute, we
2125 will merge the threadprivate attribute into NEWDECL. */
2128 else if (DECL_THREAD_LOCAL_P (newdecl
) != DECL_THREAD_LOCAL_P (olddecl
))
2130 if (DECL_THREAD_LOCAL_P (newdecl
))
2131 error ("thread-local declaration of %q+D follows "
2132 "non-thread-local declaration", newdecl
);
2134 error ("non-thread-local declaration of %q+D follows "
2135 "thread-local declaration", newdecl
);
2137 locate_old_decl (olddecl
);
2141 /* Multiple initialized definitions are not allowed (6.9p3,5). */
2142 if (DECL_INITIAL (newdecl
) && DECL_INITIAL (olddecl
))
2144 error ("redefinition of %q+D", newdecl
);
2145 locate_old_decl (olddecl
);
2149 /* Objects declared at file scope: if the first declaration had
2150 external linkage (even if it was an external reference) the
2151 second must have external linkage as well, or the behavior is
2152 undefined. If the first declaration had internal linkage, then
2153 the second must too, or else be an external reference (in which
2154 case the composite declaration still has internal linkage).
2155 As for function declarations, we warn about the static-then-
2156 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
2157 if (DECL_FILE_SCOPE_P (newdecl
)
2158 && TREE_PUBLIC (newdecl
) != TREE_PUBLIC (olddecl
))
2160 if (DECL_EXTERNAL (newdecl
))
2162 if (!DECL_FILE_SCOPE_P (olddecl
))
2164 error ("extern declaration of %q+D follows "
2165 "declaration with no linkage", newdecl
);
2166 locate_old_decl (olddecl
);
2169 else if (warn_traditional
)
2171 warned
|= warning (OPT_Wtraditional
,
2172 "non-static declaration of %q+D "
2173 "follows static declaration", newdecl
);
2178 if (TREE_PUBLIC (newdecl
))
2179 error ("non-static declaration of %q+D follows "
2180 "static declaration", newdecl
);
2182 error ("static declaration of %q+D follows "
2183 "non-static declaration", newdecl
);
2185 locate_old_decl (olddecl
);
2189 /* Two objects with the same name declared at the same block
2190 scope must both be external references (6.7p3). */
2191 else if (!DECL_FILE_SCOPE_P (newdecl
))
2193 if (DECL_EXTERNAL (newdecl
))
2195 /* Extern with initializer at block scope, which will
2196 already have received an error. */
2198 else if (DECL_EXTERNAL (olddecl
))
2200 error ("declaration of %q+D with no linkage follows "
2201 "extern declaration", newdecl
);
2202 locate_old_decl (olddecl
);
2206 error ("redeclaration of %q+D with no linkage", newdecl
);
2207 locate_old_decl (olddecl
);
2213 /* C++ does not permit a decl to appear multiple times at file
2216 && DECL_FILE_SCOPE_P (newdecl
)
2217 && !DECL_EXTERNAL (newdecl
)
2218 && !DECL_EXTERNAL (olddecl
))
2219 warned
|= warning_at (DECL_SOURCE_LOCATION (newdecl
),
2221 ("duplicate declaration of %qD is "
2227 /* All decls must agree on a visibility. */
2228 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl
), TS_DECL_WITH_VIS
)
2229 && DECL_VISIBILITY_SPECIFIED (newdecl
) && DECL_VISIBILITY_SPECIFIED (olddecl
)
2230 && DECL_VISIBILITY (newdecl
) != DECL_VISIBILITY (olddecl
))
2232 warned
|= warning (0, "redeclaration of %q+D with different visibility "
2233 "(old visibility preserved)", newdecl
);
2236 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2237 warned
|= diagnose_mismatched_attributes (olddecl
, newdecl
);
2238 else /* PARM_DECL, VAR_DECL */
2240 /* Redeclaration of a parameter is a constraint violation (this is
2241 not explicitly stated, but follows from C99 6.7p3 [no more than
2242 one declaration of the same identifier with no linkage in the
2243 same scope, except type tags] and 6.2.2p6 [parameters have no
2244 linkage]). We must check for a forward parameter declaration,
2245 indicated by TREE_ASM_WRITTEN on the old declaration - this is
2246 an extension, the mandatory diagnostic for which is handled by
2247 mark_forward_parm_decls. */
2249 if (TREE_CODE (newdecl
) == PARM_DECL
2250 && (!TREE_ASM_WRITTEN (olddecl
) || TREE_ASM_WRITTEN (newdecl
)))
2252 error ("redefinition of parameter %q+D", newdecl
);
2253 locate_old_decl (olddecl
);
2258 /* Optional warning for completely redundant decls. */
2259 if (!warned
&& !pedwarned
2260 && warn_redundant_decls
2261 /* Don't warn about a function declaration followed by a
2263 && !(TREE_CODE (newdecl
) == FUNCTION_DECL
2264 && DECL_INITIAL (newdecl
) && !DECL_INITIAL (olddecl
))
2265 /* Don't warn about redundant redeclarations of builtins. */
2266 && !(TREE_CODE (newdecl
) == FUNCTION_DECL
2267 && !DECL_BUILT_IN (newdecl
)
2268 && DECL_BUILT_IN (olddecl
)
2269 && !C_DECL_DECLARED_BUILTIN (olddecl
))
2270 /* Don't warn about an extern followed by a definition. */
2271 && !(DECL_EXTERNAL (olddecl
) && !DECL_EXTERNAL (newdecl
))
2272 /* Don't warn about forward parameter decls. */
2273 && !(TREE_CODE (newdecl
) == PARM_DECL
2274 && TREE_ASM_WRITTEN (olddecl
) && !TREE_ASM_WRITTEN (newdecl
))
2275 /* Don't warn about a variable definition following a declaration. */
2276 && !(VAR_P (newdecl
)
2277 && DECL_INITIAL (newdecl
) && !DECL_INITIAL (olddecl
)))
2279 warned
= warning (OPT_Wredundant_decls
, "redundant redeclaration of %q+D",
2283 /* Report location of previous decl/defn. */
2284 if (warned
|| pedwarned
)
2285 locate_old_decl (olddecl
);
2287 #undef DECL_EXTERN_INLINE
2292 /* Subroutine of duplicate_decls. NEWDECL has been found to be
2293 consistent with OLDDECL, but carries new information. Merge the
2294 new information into OLDDECL. This function issues no
2298 merge_decls (tree newdecl
, tree olddecl
, tree newtype
, tree oldtype
)
2300 bool new_is_definition
= (TREE_CODE (newdecl
) == FUNCTION_DECL
2301 && DECL_INITIAL (newdecl
) != NULL_TREE
);
2302 bool new_is_prototype
= (TREE_CODE (newdecl
) == FUNCTION_DECL
2303 && prototype_p (TREE_TYPE (newdecl
)));
2304 bool old_is_prototype
= (TREE_CODE (olddecl
) == FUNCTION_DECL
2305 && prototype_p (TREE_TYPE (olddecl
)));
2307 /* For real parm decl following a forward decl, rechain the old decl
2308 in its new location and clear TREE_ASM_WRITTEN (it's not a
2309 forward decl anymore). */
2310 if (TREE_CODE (newdecl
) == PARM_DECL
2311 && TREE_ASM_WRITTEN (olddecl
) && !TREE_ASM_WRITTEN (newdecl
))
2313 struct c_binding
*b
, **here
;
2315 for (here
= ¤t_scope
->bindings
; *here
; here
= &(*here
)->prev
)
2316 if ((*here
)->decl
== olddecl
)
2323 b
->prev
= current_scope
->bindings
;
2324 current_scope
->bindings
= b
;
2326 TREE_ASM_WRITTEN (olddecl
) = 0;
2329 DECL_ATTRIBUTES (newdecl
)
2330 = targetm
.merge_decl_attributes (olddecl
, newdecl
);
2332 /* For typedefs use the old type, as the new type's DECL_NAME points
2333 at newdecl, which will be ggc_freed. */
2334 if (TREE_CODE (newdecl
) == TYPE_DECL
)
2336 /* But NEWTYPE might have an attribute, honor that. */
2340 if (TYPE_USER_ALIGN (tem
))
2342 if (TYPE_ALIGN (tem
) > TYPE_ALIGN (newtype
))
2343 SET_TYPE_ALIGN (newtype
, TYPE_ALIGN (tem
));
2344 TYPE_USER_ALIGN (newtype
) = true;
2347 /* And remove the new type from the variants list. */
2348 if (TYPE_NAME (TREE_TYPE (newdecl
)) == newdecl
)
2350 tree remove
= TREE_TYPE (newdecl
);
2351 for (tree t
= TYPE_MAIN_VARIANT (remove
); ;
2352 t
= TYPE_NEXT_VARIANT (t
))
2353 if (TYPE_NEXT_VARIANT (t
) == remove
)
2355 TYPE_NEXT_VARIANT (t
) = TYPE_NEXT_VARIANT (remove
);
2361 /* Merge the data types specified in the two decls. */
2363 = TREE_TYPE (olddecl
)
2364 = composite_type (newtype
, oldtype
);
2366 /* Lay the type out, unless already done. */
2367 if (!comptypes (oldtype
, TREE_TYPE (newdecl
)))
2369 if (TREE_TYPE (newdecl
) != error_mark_node
)
2370 layout_type (TREE_TYPE (newdecl
));
2371 if (TREE_CODE (newdecl
) != FUNCTION_DECL
2372 && TREE_CODE (newdecl
) != TYPE_DECL
2373 && TREE_CODE (newdecl
) != CONST_DECL
)
2374 layout_decl (newdecl
, 0);
2378 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
2379 DECL_SIZE (newdecl
) = DECL_SIZE (olddecl
);
2380 DECL_SIZE_UNIT (newdecl
) = DECL_SIZE_UNIT (olddecl
);
2381 SET_DECL_MODE (newdecl
, DECL_MODE (olddecl
));
2382 if (DECL_ALIGN (olddecl
) > DECL_ALIGN (newdecl
))
2384 SET_DECL_ALIGN (newdecl
, DECL_ALIGN (olddecl
));
2385 DECL_USER_ALIGN (newdecl
) |= DECL_USER_ALIGN (olddecl
);
2389 /* Keep the old rtl since we can safely use it. */
2390 if (HAS_RTL_P (olddecl
))
2391 COPY_DECL_RTL (olddecl
, newdecl
);
2393 /* Merge the type qualifiers. */
2394 if (TREE_READONLY (newdecl
))
2395 TREE_READONLY (olddecl
) = 1;
2397 if (TREE_THIS_VOLATILE (newdecl
))
2398 TREE_THIS_VOLATILE (olddecl
) = 1;
2400 /* Merge deprecatedness. */
2401 if (TREE_DEPRECATED (newdecl
))
2402 TREE_DEPRECATED (olddecl
) = 1;
2404 /* If a decl is in a system header and the other isn't, keep the one on the
2405 system header. Otherwise, keep source location of definition rather than
2406 declaration and of prototype rather than non-prototype unless that
2407 prototype is built-in. */
2408 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
)
2409 && DECL_IN_SYSTEM_HEADER (olddecl
)
2410 && !DECL_IN_SYSTEM_HEADER (newdecl
) )
2411 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
2412 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
)
2413 && DECL_IN_SYSTEM_HEADER (newdecl
)
2414 && !DECL_IN_SYSTEM_HEADER (olddecl
))
2415 DECL_SOURCE_LOCATION (olddecl
) = DECL_SOURCE_LOCATION (newdecl
);
2416 else if ((DECL_INITIAL (newdecl
) == NULL_TREE
2417 && DECL_INITIAL (olddecl
) != NULL_TREE
)
2418 || (old_is_prototype
&& !new_is_prototype
2419 && !C_DECL_BUILTIN_PROTOTYPE (olddecl
)))
2420 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
2422 /* Merge the initialization information. */
2423 if (DECL_INITIAL (newdecl
) == NULL_TREE
)
2424 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
2426 /* Merge the threadprivate attribute. */
2427 if (VAR_P (olddecl
) && C_DECL_THREADPRIVATE_P (olddecl
))
2428 C_DECL_THREADPRIVATE_P (newdecl
) = 1;
2430 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
))
2432 /* Copy the assembler name.
2433 Currently, it can only be defined in the prototype. */
2434 COPY_DECL_ASSEMBLER_NAME (olddecl
, newdecl
);
2436 /* Use visibility of whichever declaration had it specified */
2437 if (DECL_VISIBILITY_SPECIFIED (olddecl
))
2439 DECL_VISIBILITY (newdecl
) = DECL_VISIBILITY (olddecl
);
2440 DECL_VISIBILITY_SPECIFIED (newdecl
) = 1;
2443 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2445 DECL_STATIC_CONSTRUCTOR(newdecl
) |= DECL_STATIC_CONSTRUCTOR(olddecl
);
2446 DECL_STATIC_DESTRUCTOR (newdecl
) |= DECL_STATIC_DESTRUCTOR (olddecl
);
2447 DECL_NO_LIMIT_STACK (newdecl
) |= DECL_NO_LIMIT_STACK (olddecl
);
2448 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl
)
2449 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl
);
2450 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
2451 DECL_IS_MALLOC (newdecl
) |= DECL_IS_MALLOC (olddecl
);
2452 DECL_IS_OPERATOR_NEW (newdecl
) |= DECL_IS_OPERATOR_NEW (olddecl
);
2453 TREE_READONLY (newdecl
) |= TREE_READONLY (olddecl
);
2454 DECL_PURE_P (newdecl
) |= DECL_PURE_P (olddecl
);
2455 DECL_IS_NOVOPS (newdecl
) |= DECL_IS_NOVOPS (olddecl
);
2458 /* Merge the storage class information. */
2459 merge_weak (newdecl
, olddecl
);
2461 /* For functions, static overrides non-static. */
2462 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2464 TREE_PUBLIC (newdecl
) &= TREE_PUBLIC (olddecl
);
2465 /* This is since we don't automatically
2466 copy the attributes of NEWDECL into OLDDECL. */
2467 TREE_PUBLIC (olddecl
) = TREE_PUBLIC (newdecl
);
2468 /* If this clears `static', clear it in the identifier too. */
2469 if (!TREE_PUBLIC (olddecl
))
2470 TREE_PUBLIC (DECL_NAME (olddecl
)) = 0;
2474 /* In c99, 'extern' declaration before (or after) 'inline' means this
2475 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
2477 if (TREE_CODE (newdecl
) == FUNCTION_DECL
2478 && !flag_gnu89_inline
2479 && (DECL_DECLARED_INLINE_P (newdecl
)
2480 || DECL_DECLARED_INLINE_P (olddecl
))
2481 && (!DECL_DECLARED_INLINE_P (newdecl
)
2482 || !DECL_DECLARED_INLINE_P (olddecl
)
2483 || !DECL_EXTERNAL (olddecl
))
2484 && DECL_EXTERNAL (newdecl
)
2485 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl
))
2486 && !current_function_decl
)
2487 DECL_EXTERNAL (newdecl
) = 0;
2489 /* An inline definition following a static declaration is not
2491 if (new_is_definition
2492 && (DECL_DECLARED_INLINE_P (newdecl
)
2493 || DECL_DECLARED_INLINE_P (olddecl
))
2494 && !TREE_PUBLIC (olddecl
))
2495 DECL_EXTERNAL (newdecl
) = 0;
2497 if (DECL_EXTERNAL (newdecl
))
2499 TREE_STATIC (newdecl
) = TREE_STATIC (olddecl
);
2500 DECL_EXTERNAL (newdecl
) = DECL_EXTERNAL (olddecl
);
2502 /* An extern decl does not override previous storage class. */
2503 TREE_PUBLIC (newdecl
) = TREE_PUBLIC (olddecl
);
2504 if (!DECL_EXTERNAL (newdecl
))
2506 DECL_CONTEXT (newdecl
) = DECL_CONTEXT (olddecl
);
2507 DECL_COMMON (newdecl
) = DECL_COMMON (olddecl
);
2512 TREE_STATIC (olddecl
) = TREE_STATIC (newdecl
);
2513 TREE_PUBLIC (olddecl
) = TREE_PUBLIC (newdecl
);
2516 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2518 /* If we're redefining a function previously defined as extern
2519 inline, make sure we emit debug info for the inline before we
2520 throw it away, in case it was inlined into a function that
2521 hasn't been written out yet. */
2522 if (new_is_definition
&& DECL_INITIAL (olddecl
))
2523 /* The new defn must not be inline. */
2524 DECL_UNINLINABLE (newdecl
) = 1;
2527 /* If either decl says `inline', this fn is inline, unless
2528 its definition was passed already. */
2529 if (DECL_DECLARED_INLINE_P (newdecl
)
2530 || DECL_DECLARED_INLINE_P (olddecl
))
2531 DECL_DECLARED_INLINE_P (newdecl
) = 1;
2533 DECL_UNINLINABLE (newdecl
) = DECL_UNINLINABLE (olddecl
)
2534 = (DECL_UNINLINABLE (newdecl
) || DECL_UNINLINABLE (olddecl
));
2536 DECL_DISREGARD_INLINE_LIMITS (newdecl
)
2537 = DECL_DISREGARD_INLINE_LIMITS (olddecl
)
2538 = (DECL_DISREGARD_INLINE_LIMITS (newdecl
)
2539 || DECL_DISREGARD_INLINE_LIMITS (olddecl
));
2542 if (DECL_BUILT_IN (olddecl
))
2544 /* If redeclaring a builtin function, it stays built in.
2545 But it gets tagged as having been declared. */
2546 DECL_BUILT_IN_CLASS (newdecl
) = DECL_BUILT_IN_CLASS (olddecl
);
2547 DECL_FUNCTION_CODE (newdecl
) = DECL_FUNCTION_CODE (olddecl
);
2548 C_DECL_DECLARED_BUILTIN (newdecl
) = 1;
2549 if (new_is_prototype
)
2551 C_DECL_BUILTIN_PROTOTYPE (newdecl
) = 0;
2552 if (DECL_BUILT_IN_CLASS (newdecl
) == BUILT_IN_NORMAL
)
2554 enum built_in_function fncode
= DECL_FUNCTION_CODE (newdecl
);
2557 /* If a compatible prototype of these builtin functions
2558 is seen, assume the runtime implements it with the
2559 expected semantics. */
2560 case BUILT_IN_STPCPY
:
2561 if (builtin_decl_explicit_p (fncode
))
2562 set_builtin_decl_implicit_p (fncode
, true);
2565 if (builtin_decl_explicit_p (fncode
))
2566 set_builtin_decl_declared_p (fncode
, true);
2572 C_DECL_BUILTIN_PROTOTYPE (newdecl
)
2573 = C_DECL_BUILTIN_PROTOTYPE (olddecl
);
2576 /* Preserve function specific target and optimization options */
2577 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl
)
2578 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl
))
2579 DECL_FUNCTION_SPECIFIC_TARGET (newdecl
)
2580 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl
);
2582 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
)
2583 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
))
2584 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
)
2585 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
);
2587 /* Also preserve various other info from the definition. */
2588 if (!new_is_definition
)
2591 DECL_RESULT (newdecl
) = DECL_RESULT (olddecl
);
2592 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
2593 DECL_STRUCT_FUNCTION (newdecl
) = DECL_STRUCT_FUNCTION (olddecl
);
2594 DECL_SAVED_TREE (newdecl
) = DECL_SAVED_TREE (olddecl
);
2595 DECL_ARGUMENTS (newdecl
) = copy_list (DECL_ARGUMENTS (olddecl
));
2596 for (t
= DECL_ARGUMENTS (newdecl
); t
; t
= DECL_CHAIN (t
))
2597 DECL_CONTEXT (t
) = newdecl
;
2599 /* See if we've got a function to instantiate from. */
2600 if (DECL_SAVED_TREE (olddecl
))
2601 DECL_ABSTRACT_ORIGIN (newdecl
)
2602 = DECL_ABSTRACT_ORIGIN (olddecl
);
2606 /* Merge the USED information. */
2607 if (TREE_USED (olddecl
))
2608 TREE_USED (newdecl
) = 1;
2609 else if (TREE_USED (newdecl
))
2610 TREE_USED (olddecl
) = 1;
2611 if (VAR_P (olddecl
) || TREE_CODE (olddecl
) == PARM_DECL
)
2612 DECL_READ_P (newdecl
) |= DECL_READ_P (olddecl
);
2613 if (DECL_PRESERVE_P (olddecl
))
2614 DECL_PRESERVE_P (newdecl
) = 1;
2615 else if (DECL_PRESERVE_P (newdecl
))
2616 DECL_PRESERVE_P (olddecl
) = 1;
2618 /* Merge DECL_COMMON */
2619 if (VAR_P (olddecl
) && VAR_P (newdecl
)
2620 && !lookup_attribute ("common", DECL_ATTRIBUTES (newdecl
))
2621 && !lookup_attribute ("nocommon", DECL_ATTRIBUTES (newdecl
)))
2622 DECL_COMMON (newdecl
) = DECL_COMMON (newdecl
) && DECL_COMMON (olddecl
);
2624 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
2625 But preserve OLDDECL's DECL_UID, DECL_CONTEXT and
2626 DECL_ARGUMENTS (if appropriate). */
2628 unsigned olddecl_uid
= DECL_UID (olddecl
);
2629 tree olddecl_context
= DECL_CONTEXT (olddecl
);
2630 tree olddecl_arguments
= NULL
;
2631 if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
2632 olddecl_arguments
= DECL_ARGUMENTS (olddecl
);
2634 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
2635 (char *) newdecl
+ sizeof (struct tree_common
),
2636 sizeof (struct tree_decl_common
) - sizeof (struct tree_common
));
2637 DECL_USER_ALIGN (olddecl
) = DECL_USER_ALIGN (newdecl
);
2638 switch (TREE_CODE (olddecl
))
2643 struct symtab_node
*snode
= olddecl
->decl_with_vis
.symtab_node
;
2645 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2646 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2647 tree_code_size (TREE_CODE (olddecl
)) - sizeof (struct tree_decl_common
));
2648 olddecl
->decl_with_vis
.symtab_node
= snode
;
2650 if ((DECL_EXTERNAL (olddecl
)
2651 || TREE_PUBLIC (olddecl
)
2652 || TREE_STATIC (olddecl
))
2653 && DECL_SECTION_NAME (newdecl
) != NULL
)
2654 set_decl_section_name (olddecl
, DECL_SECTION_NAME (newdecl
));
2656 /* This isn't quite correct for something like
2657 int __thread x attribute ((tls_model ("local-exec")));
2658 extern int __thread x;
2659 as we'll lose the "local-exec" model. */
2660 if (VAR_P (olddecl
) && DECL_THREAD_LOCAL_P (newdecl
))
2661 set_decl_tls_model (olddecl
, DECL_TLS_MODEL (newdecl
));
2671 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2672 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2673 tree_code_size (TREE_CODE (olddecl
)) - sizeof (struct tree_decl_common
));
2678 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
2679 (char *) newdecl
+ sizeof (struct tree_decl_common
),
2680 sizeof (struct tree_decl_non_common
) - sizeof (struct tree_decl_common
));
2682 DECL_UID (olddecl
) = olddecl_uid
;
2683 DECL_CONTEXT (olddecl
) = olddecl_context
;
2684 if (TREE_CODE (olddecl
) == FUNCTION_DECL
)
2685 DECL_ARGUMENTS (olddecl
) = olddecl_arguments
;
2688 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2689 so that encode_section_info has a chance to look at the new decl
2690 flags and attributes. */
2691 if (DECL_RTL_SET_P (olddecl
)
2692 && (TREE_CODE (olddecl
) == FUNCTION_DECL
2693 || (VAR_P (olddecl
) && TREE_STATIC (olddecl
))))
2694 make_decl_rtl (olddecl
);
2697 /* Handle when a new declaration NEWDECL has the same name as an old
2698 one OLDDECL in the same binding contour. Prints an error message
2701 If safely possible, alter OLDDECL to look like NEWDECL, and return
2702 true. Otherwise, return false. */
2705 duplicate_decls (tree newdecl
, tree olddecl
)
2707 tree newtype
= NULL
, oldtype
= NULL
;
2709 if (!diagnose_mismatched_decls (newdecl
, olddecl
, &newtype
, &oldtype
))
2711 /* Avoid `unused variable' and other warnings for OLDDECL. */
2712 TREE_NO_WARNING (olddecl
) = 1;
2716 merge_decls (newdecl
, olddecl
, newtype
, oldtype
);
2718 /* The NEWDECL will no longer be needed.
2720 Before releasing the node, be sure to remove function from symbol
2721 table that might have been inserted there to record comdat group.
2722 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2723 structure is shared in between NEWDECL and OLDECL. */
2724 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
2725 DECL_STRUCT_FUNCTION (newdecl
) = NULL
;
2726 if (VAR_OR_FUNCTION_DECL_P (newdecl
))
2728 struct symtab_node
*snode
= symtab_node::get (newdecl
);
2737 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
2739 warn_if_shadowing (tree new_decl
)
2741 struct c_binding
*b
;
2743 /* Shadow warnings wanted? */
2745 || warn_shadow_local
2746 || warn_shadow_compatible_local
)
2747 /* No shadow warnings for internally generated vars. */
2748 || DECL_IS_BUILTIN (new_decl
)
2749 /* No shadow warnings for vars made for inlining. */
2750 || DECL_FROM_INLINE (new_decl
))
2753 /* Is anything being shadowed? Invisible decls do not count. */
2754 for (b
= I_SYMBOL_BINDING (DECL_NAME (new_decl
)); b
; b
= b
->shadowed
)
2755 if (b
->decl
&& b
->decl
!= new_decl
&& !b
->invisible
2756 && (b
->decl
== error_mark_node
2757 || diagnostic_report_warnings_p (global_dc
,
2758 DECL_SOURCE_LOCATION (b
->decl
))))
2760 tree old_decl
= b
->decl
;
2761 bool warned
= false;
2763 if (old_decl
== error_mark_node
)
2765 warning (OPT_Wshadow
, "declaration of %q+D shadows previous "
2766 "non-variable", new_decl
);
2769 else if (TREE_CODE (old_decl
) == PARM_DECL
)
2771 enum opt_code warning_code
;
2773 /* If '-Wshadow=compatible-local' is specified without other
2774 -Wshadow= flags, we will warn only when the types of the
2775 shadowing variable (i.e. new_decl) and the shadowed variable
2776 (old_decl) are compatible. */
2778 warning_code
= OPT_Wshadow
;
2779 else if (comptypes (TREE_TYPE (old_decl
), TREE_TYPE (new_decl
)))
2780 warning_code
= OPT_Wshadow_compatible_local
;
2782 warning_code
= OPT_Wshadow_local
;
2783 warned
= warning_at (DECL_SOURCE_LOCATION (new_decl
), warning_code
,
2784 "declaration of %qD shadows a parameter",
2787 else if (DECL_FILE_SCOPE_P (old_decl
))
2789 /* Do not warn if a variable shadows a function, unless
2790 the variable is a function or a pointer-to-function. */
2791 if (TREE_CODE (old_decl
) == FUNCTION_DECL
2792 && TREE_CODE (new_decl
) != FUNCTION_DECL
2793 && !FUNCTION_POINTER_TYPE_P (TREE_TYPE (new_decl
)))
2796 warned
= warning_at (DECL_SOURCE_LOCATION (new_decl
), OPT_Wshadow
,
2797 "declaration of %qD shadows a global "
2801 else if (TREE_CODE (old_decl
) == FUNCTION_DECL
2802 && DECL_BUILT_IN (old_decl
))
2804 warning (OPT_Wshadow
, "declaration of %q+D shadows "
2805 "a built-in function", new_decl
);
2810 enum opt_code warning_code
;
2812 /* If '-Wshadow=compatible-local' is specified without other
2813 -Wshadow= flags, we will warn only when the types of the
2814 shadowing variable (i.e. new_decl) and the shadowed variable
2815 (old_decl) are compatible. */
2817 warning_code
= OPT_Wshadow
;
2818 else if (comptypes (TREE_TYPE (old_decl
), TREE_TYPE (new_decl
)))
2819 warning_code
= OPT_Wshadow_compatible_local
;
2821 warning_code
= OPT_Wshadow_local
;
2822 warned
= warning_at (DECL_SOURCE_LOCATION (new_decl
), warning_code
,
2823 "declaration of %qD shadows a previous local",
2828 inform (DECL_SOURCE_LOCATION (old_decl
),
2829 "shadowed declaration is here");
2835 /* Record a decl-node X as belonging to the current lexical scope.
2836 Check for errors (such as an incompatible declaration for the same
2837 name already seen in the same scope).
2839 Returns either X or an old decl for the same name.
2840 If an old decl is returned, it may have been smashed
2841 to agree with what X says. */
2846 tree name
= DECL_NAME (x
);
2847 struct c_scope
*scope
= current_scope
;
2848 struct c_binding
*b
;
2849 bool nested
= false;
2850 location_t locus
= DECL_SOURCE_LOCATION (x
);
2852 /* Must set DECL_CONTEXT for everything not at file scope or
2853 DECL_FILE_SCOPE_P won't work. Local externs don't count
2854 unless they have initializers (which generate code). */
2855 if (current_function_decl
2856 && (!VAR_OR_FUNCTION_DECL_P (x
)
2857 || DECL_INITIAL (x
) || !DECL_EXTERNAL (x
)))
2858 DECL_CONTEXT (x
) = current_function_decl
;
2860 /* Anonymous decls are just inserted in the scope. */
2863 bind (name
, x
, scope
, /*invisible=*/false, /*nested=*/false,
2868 /* First, see if there is another declaration with the same name in
2869 the current scope. If there is, duplicate_decls may do all the
2870 work for us. If duplicate_decls returns false, that indicates
2871 two incompatible decls in the same scope; we are to silently
2872 replace the old one (duplicate_decls has issued all appropriate
2873 diagnostics). In particular, we should not consider possible
2874 duplicates in the external scope, or shadowing. */
2875 b
= I_SYMBOL_BINDING (name
);
2876 if (b
&& B_IN_SCOPE (b
, scope
))
2878 struct c_binding
*b_ext
, *b_use
;
2879 tree type
= TREE_TYPE (x
);
2880 tree visdecl
= b
->decl
;
2881 tree vistype
= TREE_TYPE (visdecl
);
2882 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
2883 && COMPLETE_TYPE_P (TREE_TYPE (x
)))
2884 b
->inner_comp
= false;
2887 /* If this is an external linkage declaration, we should check
2888 for compatibility with the type in the external scope before
2889 setting the type at this scope based on the visible
2890 information only. */
2891 if (TREE_PUBLIC (x
) && TREE_PUBLIC (visdecl
))
2893 while (b_ext
&& !B_IN_EXTERNAL_SCOPE (b_ext
))
2894 b_ext
= b_ext
->shadowed
;
2899 TREE_TYPE (b_use
->decl
) = b_use
->u
.type
;
2902 if (duplicate_decls (x
, b_use
->decl
))
2906 /* Save the updated type in the external scope and
2907 restore the proper type for this scope. */
2909 if (comptypes (vistype
, type
))
2910 thistype
= composite_type (vistype
, type
);
2912 thistype
= TREE_TYPE (b_use
->decl
);
2913 b_use
->u
.type
= TREE_TYPE (b_use
->decl
);
2914 if (TREE_CODE (b_use
->decl
) == FUNCTION_DECL
2915 && DECL_BUILT_IN (b_use
->decl
))
2917 = build_type_attribute_variant (thistype
,
2920 TREE_TYPE (b_use
->decl
) = thistype
;
2925 goto skip_external_and_shadow_checks
;
2928 /* All declarations with external linkage, and all external
2929 references, go in the external scope, no matter what scope is
2930 current. However, the binding in that scope is ignored for
2931 purposes of normal name lookup. A separate binding structure is
2932 created in the requested scope; this governs the normal
2933 visibility of the symbol.
2935 The binding in the externals scope is used exclusively for
2936 detecting duplicate declarations of the same object, no matter
2937 what scope they are in; this is what we do here. (C99 6.2.7p2:
2938 All declarations that refer to the same object or function shall
2939 have compatible type; otherwise, the behavior is undefined.) */
2940 if (DECL_EXTERNAL (x
) || scope
== file_scope
)
2942 tree type
= TREE_TYPE (x
);
2943 tree vistype
= NULL_TREE
;
2944 tree visdecl
= NULL_TREE
;
2945 bool type_saved
= false;
2946 if (b
&& !B_IN_EXTERNAL_SCOPE (b
)
2947 && VAR_OR_FUNCTION_DECL_P (b
->decl
)
2948 && DECL_FILE_SCOPE_P (b
->decl
))
2951 vistype
= TREE_TYPE (visdecl
);
2953 if (scope
!= file_scope
2954 && !DECL_IN_SYSTEM_HEADER (x
))
2955 warning_at (locus
, OPT_Wnested_externs
,
2956 "nested extern declaration of %qD", x
);
2958 while (b
&& !B_IN_EXTERNAL_SCOPE (b
))
2960 /* If this decl might be modified, save its type. This is
2961 done here rather than when the decl is first bound
2962 because the type may change after first binding, through
2963 being completed or through attributes being added. If we
2964 encounter multiple such decls, only the first should have
2965 its type saved; the others will already have had their
2966 proper types saved and the types will not have changed as
2967 their scopes will not have been re-entered. */
2968 if (DECL_P (b
->decl
) && DECL_FILE_SCOPE_P (b
->decl
) && !type_saved
)
2970 b
->u
.type
= TREE_TYPE (b
->decl
);
2973 if (B_IN_FILE_SCOPE (b
)
2975 && TREE_STATIC (b
->decl
)
2976 && TREE_CODE (TREE_TYPE (b
->decl
)) == ARRAY_TYPE
2977 && !TYPE_DOMAIN (TREE_TYPE (b
->decl
))
2978 && TREE_CODE (type
) == ARRAY_TYPE
2979 && TYPE_DOMAIN (type
)
2980 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
))
2981 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))
2983 /* Array type completed in inner scope, which should be
2984 diagnosed if the completion does not have size 1 and
2985 it does not get completed in the file scope. */
2986 b
->inner_comp
= true;
2991 /* If a matching external declaration has been found, set its
2992 type to the composite of all the types of that declaration.
2993 After the consistency checks, it will be reset to the
2994 composite of the visible types only. */
2995 if (b
&& (TREE_PUBLIC (x
) || same_translation_unit_p (x
, b
->decl
))
2997 TREE_TYPE (b
->decl
) = b
->u
.type
;
2999 /* The point of the same_translation_unit_p check here is,
3000 we want to detect a duplicate decl for a construct like
3001 foo() { extern bar(); } ... static bar(); but not if
3002 they are in different translation units. In any case,
3003 the static does not go in the externals scope. */
3005 && (TREE_PUBLIC (x
) || same_translation_unit_p (x
, b
->decl
))
3006 && duplicate_decls (x
, b
->decl
))
3011 if (comptypes (vistype
, type
))
3012 thistype
= composite_type (vistype
, type
);
3014 thistype
= TREE_TYPE (b
->decl
);
3018 b
->u
.type
= TREE_TYPE (b
->decl
);
3019 if (TREE_CODE (b
->decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (b
->decl
))
3021 = build_type_attribute_variant (thistype
,
3022 TYPE_ATTRIBUTES (b
->u
.type
));
3023 TREE_TYPE (b
->decl
) = thistype
;
3024 bind (name
, b
->decl
, scope
, /*invisible=*/false, /*nested=*/true,
3028 else if (TREE_PUBLIC (x
))
3030 if (visdecl
&& !b
&& duplicate_decls (x
, visdecl
))
3032 /* An external declaration at block scope referring to a
3033 visible entity with internal linkage. The composite
3034 type will already be correct for this scope, so we
3035 just need to fall through to make the declaration in
3042 bind (name
, x
, external_scope
, /*invisible=*/true,
3043 /*nested=*/false, locus
);
3049 if (TREE_CODE (x
) != PARM_DECL
)
3050 warn_if_shadowing (x
);
3052 skip_external_and_shadow_checks
:
3053 if (TREE_CODE (x
) == TYPE_DECL
)
3055 /* So this is a typedef, set its underlying type. */
3056 set_underlying_type (x
);
3058 /* If X is a typedef defined in the current function, record it
3059 for the purpose of implementing the -Wunused-local-typedefs
3061 record_locally_defined_typedef (x
);
3064 bind (name
, x
, scope
, /*invisible=*/false, nested
, locus
);
3066 /* If x's type is incomplete because it's based on a
3067 structure or union which has not yet been fully declared,
3068 attach it to that structure or union type, so we can go
3069 back and complete the variable declaration later, if the
3070 structure or union gets fully declared.
3072 If the input is erroneous, we can have error_mark in the type
3073 slot (e.g. "f(void a, ...)") - that doesn't count as an
3075 if (TREE_TYPE (x
) != error_mark_node
3076 && !COMPLETE_TYPE_P (TREE_TYPE (x
)))
3078 tree element
= TREE_TYPE (x
);
3080 while (TREE_CODE (element
) == ARRAY_TYPE
)
3081 element
= TREE_TYPE (element
);
3082 element
= TYPE_MAIN_VARIANT (element
);
3084 if (RECORD_OR_UNION_TYPE_P (element
)
3085 && (TREE_CODE (x
) != TYPE_DECL
3086 || TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
)
3087 && !COMPLETE_TYPE_P (element
))
3088 C_TYPE_INCOMPLETE_VARS (element
)
3089 = tree_cons (NULL_TREE
, x
, C_TYPE_INCOMPLETE_VARS (element
));
3095 /* Issue a warning about implicit function declaration. ID is the function
3096 identifier, OLDDECL is a declaration of the function in a different scope,
3100 implicit_decl_warning (location_t loc
, tree id
, tree olddecl
)
3102 if (!warn_implicit_function_declaration
)
3106 const char *hint
= NULL
;
3108 hint
= lookup_name_fuzzy (id
, FUZZY_LOOKUP_FUNCTION_NAME
);
3114 gcc_rich_location
richloc (loc
);
3115 richloc
.add_fixit_replace (hint
);
3116 warned
= pedwarn_at_rich_loc
3117 (&richloc
, OPT_Wimplicit_function_declaration
,
3118 "implicit declaration of function %qE; did you mean %qs?",
3122 warned
= pedwarn (loc
, OPT_Wimplicit_function_declaration
,
3123 "implicit declaration of function %qE", id
);
3127 gcc_rich_location
richloc (loc
);
3128 richloc
.add_fixit_replace (hint
);
3129 warned
= warning_at_rich_loc
3130 (&richloc
, OPT_Wimplicit_function_declaration
,
3131 G_("implicit declaration of function %qE; did you mean %qs?"),
3135 warned
= warning_at (loc
, OPT_Wimplicit_function_declaration
,
3136 G_("implicit declaration of function %qE"), id
);
3138 if (olddecl
&& warned
)
3139 locate_old_decl (olddecl
);
3142 /* This function represents mapping of a function code FCODE
3143 to its respective header. */
3146 header_for_builtin_fn (enum built_in_function fcode
)
3150 CASE_FLT_FN (BUILT_IN_ACOS
):
3151 CASE_FLT_FN (BUILT_IN_ACOSH
):
3152 CASE_FLT_FN (BUILT_IN_ASIN
):
3153 CASE_FLT_FN (BUILT_IN_ASINH
):
3154 CASE_FLT_FN (BUILT_IN_ATAN
):
3155 CASE_FLT_FN (BUILT_IN_ATANH
):
3156 CASE_FLT_FN (BUILT_IN_ATAN2
):
3157 CASE_FLT_FN (BUILT_IN_CBRT
):
3158 CASE_FLT_FN (BUILT_IN_CEIL
):
3159 CASE_FLT_FN (BUILT_IN_COPYSIGN
):
3160 CASE_FLT_FN (BUILT_IN_COS
):
3161 CASE_FLT_FN (BUILT_IN_COSH
):
3162 CASE_FLT_FN (BUILT_IN_ERF
):
3163 CASE_FLT_FN (BUILT_IN_ERFC
):
3164 CASE_FLT_FN (BUILT_IN_EXP
):
3165 CASE_FLT_FN (BUILT_IN_EXP2
):
3166 CASE_FLT_FN (BUILT_IN_EXPM1
):
3167 CASE_FLT_FN (BUILT_IN_FABS
):
3168 CASE_FLT_FN (BUILT_IN_FDIM
):
3169 CASE_FLT_FN (BUILT_IN_FLOOR
):
3170 CASE_FLT_FN (BUILT_IN_FMA
):
3171 CASE_FLT_FN (BUILT_IN_FMAX
):
3172 CASE_FLT_FN (BUILT_IN_FMIN
):
3173 CASE_FLT_FN (BUILT_IN_FMOD
):
3174 CASE_FLT_FN (BUILT_IN_FREXP
):
3175 CASE_FLT_FN (BUILT_IN_HYPOT
):
3176 CASE_FLT_FN (BUILT_IN_ILOGB
):
3177 CASE_FLT_FN (BUILT_IN_LDEXP
):
3178 CASE_FLT_FN (BUILT_IN_LGAMMA
):
3179 CASE_FLT_FN (BUILT_IN_LLRINT
):
3180 CASE_FLT_FN (BUILT_IN_LLROUND
):
3181 CASE_FLT_FN (BUILT_IN_LOG
):
3182 CASE_FLT_FN (BUILT_IN_LOG10
):
3183 CASE_FLT_FN (BUILT_IN_LOG1P
):
3184 CASE_FLT_FN (BUILT_IN_LOG2
):
3185 CASE_FLT_FN (BUILT_IN_LOGB
):
3186 CASE_FLT_FN (BUILT_IN_LRINT
):
3187 CASE_FLT_FN (BUILT_IN_LROUND
):
3188 CASE_FLT_FN (BUILT_IN_MODF
):
3189 CASE_FLT_FN (BUILT_IN_NAN
):
3190 CASE_FLT_FN (BUILT_IN_NEARBYINT
):
3191 CASE_FLT_FN (BUILT_IN_NEXTAFTER
):
3192 CASE_FLT_FN (BUILT_IN_NEXTTOWARD
):
3193 CASE_FLT_FN (BUILT_IN_POW
):
3194 CASE_FLT_FN (BUILT_IN_REMAINDER
):
3195 CASE_FLT_FN (BUILT_IN_REMQUO
):
3196 CASE_FLT_FN (BUILT_IN_RINT
):
3197 CASE_FLT_FN (BUILT_IN_ROUND
):
3198 CASE_FLT_FN (BUILT_IN_SCALBLN
):
3199 CASE_FLT_FN (BUILT_IN_SCALBN
):
3200 CASE_FLT_FN (BUILT_IN_SIN
):
3201 CASE_FLT_FN (BUILT_IN_SINH
):
3202 CASE_FLT_FN (BUILT_IN_SINCOS
):
3203 CASE_FLT_FN (BUILT_IN_SQRT
):
3204 CASE_FLT_FN (BUILT_IN_TAN
):
3205 CASE_FLT_FN (BUILT_IN_TANH
):
3206 CASE_FLT_FN (BUILT_IN_TGAMMA
):
3207 CASE_FLT_FN (BUILT_IN_TRUNC
):
3208 case BUILT_IN_ISINF
:
3209 case BUILT_IN_ISNAN
:
3211 CASE_FLT_FN (BUILT_IN_CABS
):
3212 CASE_FLT_FN (BUILT_IN_CACOS
):
3213 CASE_FLT_FN (BUILT_IN_CACOSH
):
3214 CASE_FLT_FN (BUILT_IN_CARG
):
3215 CASE_FLT_FN (BUILT_IN_CASIN
):
3216 CASE_FLT_FN (BUILT_IN_CASINH
):
3217 CASE_FLT_FN (BUILT_IN_CATAN
):
3218 CASE_FLT_FN (BUILT_IN_CATANH
):
3219 CASE_FLT_FN (BUILT_IN_CCOS
):
3220 CASE_FLT_FN (BUILT_IN_CCOSH
):
3221 CASE_FLT_FN (BUILT_IN_CEXP
):
3222 CASE_FLT_FN (BUILT_IN_CIMAG
):
3223 CASE_FLT_FN (BUILT_IN_CLOG
):
3224 CASE_FLT_FN (BUILT_IN_CONJ
):
3225 CASE_FLT_FN (BUILT_IN_CPOW
):
3226 CASE_FLT_FN (BUILT_IN_CPROJ
):
3227 CASE_FLT_FN (BUILT_IN_CREAL
):
3228 CASE_FLT_FN (BUILT_IN_CSIN
):
3229 CASE_FLT_FN (BUILT_IN_CSINH
):
3230 CASE_FLT_FN (BUILT_IN_CSQRT
):
3231 CASE_FLT_FN (BUILT_IN_CTAN
):
3232 CASE_FLT_FN (BUILT_IN_CTANH
):
3233 return "<complex.h>";
3234 case BUILT_IN_MEMCHR
:
3235 case BUILT_IN_MEMCMP
:
3236 case BUILT_IN_MEMCPY
:
3237 case BUILT_IN_MEMMOVE
:
3238 case BUILT_IN_MEMSET
:
3239 case BUILT_IN_STRCAT
:
3240 case BUILT_IN_STRCHR
:
3241 case BUILT_IN_STRCMP
:
3242 case BUILT_IN_STRCPY
:
3243 case BUILT_IN_STRCSPN
:
3244 case BUILT_IN_STRLEN
:
3245 case BUILT_IN_STRNCAT
:
3246 case BUILT_IN_STRNCMP
:
3247 case BUILT_IN_STRNCPY
:
3248 case BUILT_IN_STRPBRK
:
3249 case BUILT_IN_STRRCHR
:
3250 case BUILT_IN_STRSPN
:
3251 case BUILT_IN_STRSTR
:
3252 return "<string.h>";
3253 case BUILT_IN_FPRINTF
:
3255 case BUILT_IN_FPUTC
:
3256 case BUILT_IN_FPUTS
:
3257 case BUILT_IN_FSCANF
:
3258 case BUILT_IN_FWRITE
:
3259 case BUILT_IN_PRINTF
:
3260 case BUILT_IN_PUTCHAR
:
3262 case BUILT_IN_SCANF
:
3263 case BUILT_IN_SNPRINTF
:
3264 case BUILT_IN_SPRINTF
:
3265 case BUILT_IN_SSCANF
:
3266 case BUILT_IN_VFPRINTF
:
3267 case BUILT_IN_VFSCANF
:
3268 case BUILT_IN_VPRINTF
:
3269 case BUILT_IN_VSCANF
:
3270 case BUILT_IN_VSNPRINTF
:
3271 case BUILT_IN_VSPRINTF
:
3272 case BUILT_IN_VSSCANF
:
3274 case BUILT_IN_ISALNUM
:
3275 case BUILT_IN_ISALPHA
:
3276 case BUILT_IN_ISBLANK
:
3277 case BUILT_IN_ISCNTRL
:
3278 case BUILT_IN_ISDIGIT
:
3279 case BUILT_IN_ISGRAPH
:
3280 case BUILT_IN_ISLOWER
:
3281 case BUILT_IN_ISPRINT
:
3282 case BUILT_IN_ISPUNCT
:
3283 case BUILT_IN_ISSPACE
:
3284 case BUILT_IN_ISUPPER
:
3285 case BUILT_IN_ISXDIGIT
:
3286 case BUILT_IN_TOLOWER
:
3287 case BUILT_IN_TOUPPER
:
3289 case BUILT_IN_ISWALNUM
:
3290 case BUILT_IN_ISWALPHA
:
3291 case BUILT_IN_ISWBLANK
:
3292 case BUILT_IN_ISWCNTRL
:
3293 case BUILT_IN_ISWDIGIT
:
3294 case BUILT_IN_ISWGRAPH
:
3295 case BUILT_IN_ISWLOWER
:
3296 case BUILT_IN_ISWPRINT
:
3297 case BUILT_IN_ISWPUNCT
:
3298 case BUILT_IN_ISWSPACE
:
3299 case BUILT_IN_ISWUPPER
:
3300 case BUILT_IN_ISWXDIGIT
:
3301 case BUILT_IN_TOWLOWER
:
3302 case BUILT_IN_TOWUPPER
:
3303 return "<wctype.h>";
3304 case BUILT_IN_ABORT
:
3306 case BUILT_IN_CALLOC
:
3310 case BUILT_IN_LLABS
:
3311 case BUILT_IN_MALLOC
:
3312 case BUILT_IN_REALLOC
:
3313 case BUILT_IN__EXIT2
:
3314 case BUILT_IN_ALIGNED_ALLOC
:
3315 return "<stdlib.h>";
3316 case BUILT_IN_IMAXABS
:
3317 return "<inttypes.h>";
3318 case BUILT_IN_STRFTIME
:
3325 /* Generate an implicit declaration for identifier FUNCTIONID at LOC as a
3326 function of type int (). */
3329 implicitly_declare (location_t loc
, tree functionid
)
3331 struct c_binding
*b
;
3332 tree decl
= NULL_TREE
;
3335 for (b
= I_SYMBOL_BINDING (functionid
); b
; b
= b
->shadowed
)
3337 if (B_IN_SCOPE (b
, external_scope
))
3346 if (TREE_CODE (decl
) != FUNCTION_DECL
)
3349 /* FIXME: Objective-C has weird not-really-builtin functions
3350 which are supposed to be visible automatically. They wind up
3351 in the external scope because they're pushed before the file
3352 scope gets created. Catch this here and rebind them into the
3354 if (!DECL_BUILT_IN (decl
) && DECL_IS_BUILTIN (decl
))
3356 bind (functionid
, decl
, file_scope
,
3357 /*invisible=*/false, /*nested=*/true,
3358 DECL_SOURCE_LOCATION (decl
));
3363 tree newtype
= default_function_type
;
3365 TREE_TYPE (decl
) = b
->u
.type
;
3366 /* Implicit declaration of a function already declared
3367 (somehow) in a different scope, or as a built-in.
3368 If this is the first time this has happened, warn;
3369 then recycle the old declaration but with the new type. */
3370 if (!C_DECL_IMPLICIT (decl
))
3372 implicit_decl_warning (loc
, functionid
, decl
);
3373 C_DECL_IMPLICIT (decl
) = 1;
3375 if (DECL_BUILT_IN (decl
))
3377 newtype
= build_type_attribute_variant (newtype
,
3379 (TREE_TYPE (decl
)));
3380 if (!comptypes (newtype
, TREE_TYPE (decl
)))
3382 bool warned
= warning_at (loc
, 0, "incompatible implicit "
3383 "declaration of built-in "
3384 "function %qD", decl
);
3385 /* See if we can hint which header to include. */
3387 = header_for_builtin_fn (DECL_FUNCTION_CODE (decl
));
3388 if (header
!= NULL
&& warned
)
3389 inform (loc
, "include %qs or provide a declaration of %qD",
3391 newtype
= TREE_TYPE (decl
);
3396 if (!comptypes (newtype
, TREE_TYPE (decl
)))
3398 error_at (loc
, "incompatible implicit declaration of "
3399 "function %qD", decl
);
3400 locate_old_decl (decl
);
3403 b
->u
.type
= TREE_TYPE (decl
);
3404 TREE_TYPE (decl
) = newtype
;
3405 bind (functionid
, decl
, current_scope
,
3406 /*invisible=*/false, /*nested=*/true,
3407 DECL_SOURCE_LOCATION (decl
));
3412 /* Not seen before. */
3413 decl
= build_decl (loc
, FUNCTION_DECL
, functionid
, default_function_type
);
3414 DECL_EXTERNAL (decl
) = 1;
3415 TREE_PUBLIC (decl
) = 1;
3416 C_DECL_IMPLICIT (decl
) = 1;
3417 implicit_decl_warning (loc
, functionid
, 0);
3418 asmspec_tree
= maybe_apply_renaming_pragma (decl
, /*asmname=*/NULL
);
3420 set_user_assembler_name (decl
, TREE_STRING_POINTER (asmspec_tree
));
3422 /* C89 says implicit declarations are in the innermost block.
3423 So we record the decl in the standard fashion. */
3424 decl
= pushdecl (decl
);
3426 /* No need to call objc_check_decl here - it's a function type. */
3427 rest_of_decl_compilation (decl
, 0, 0);
3429 /* Write a record describing this implicit function declaration
3430 to the prototypes file (if requested). */
3431 gen_aux_info_record (decl
, 0, 1, 0);
3433 /* Possibly apply some default attributes to this implicit declaration. */
3434 decl_attributes (&decl
, NULL_TREE
, 0);
3439 /* Issue an error message for a reference to an undeclared variable
3440 ID, including a reference to a builtin outside of function-call
3441 context. Establish a binding of the identifier to error_mark_node
3442 in an appropriate scope, which will suppress further errors for the
3443 same identifier. The error message should be given location LOC. */
3445 undeclared_variable (location_t loc
, tree id
)
3447 static bool already
= false;
3448 struct c_scope
*scope
;
3450 if (current_function_decl
== NULL_TREE
)
3452 const char *guessed_id
= lookup_name_fuzzy (id
, FUZZY_LOOKUP_NAME
);
3455 gcc_rich_location
richloc (loc
);
3456 richloc
.add_fixit_replace (guessed_id
);
3457 error_at_rich_loc (&richloc
,
3458 "%qE undeclared here (not in a function);"
3459 " did you mean %qs?",
3463 error_at (loc
, "%qE undeclared here (not in a function)", id
);
3464 scope
= current_scope
;
3468 if (!objc_diagnose_private_ivar (id
))
3470 const char *guessed_id
= lookup_name_fuzzy (id
, FUZZY_LOOKUP_NAME
);
3473 gcc_rich_location
richloc (loc
);
3474 richloc
.add_fixit_replace (guessed_id
);
3477 "%qE undeclared (first use in this function);"
3478 " did you mean %qs?",
3482 error_at (loc
, "%qE undeclared (first use in this function)", id
);
3486 inform (loc
, "each undeclared identifier is reported only"
3487 " once for each function it appears in");
3491 /* If we are parsing old-style parameter decls, current_function_decl
3492 will be nonnull but current_function_scope will be null. */
3493 scope
= current_function_scope
? current_function_scope
: current_scope
;
3495 bind (id
, error_mark_node
, scope
, /*invisible=*/false, /*nested=*/false,
3499 /* Subroutine of lookup_label, declare_label, define_label: construct a
3500 LABEL_DECL with all the proper frills. Also create a struct
3501 c_label_vars initialized for the current scope. */
3504 make_label (location_t location
, tree name
, bool defining
,
3505 struct c_label_vars
**p_label_vars
)
3507 tree label
= build_decl (location
, LABEL_DECL
, name
, void_type_node
);
3508 DECL_CONTEXT (label
) = current_function_decl
;
3509 SET_DECL_MODE (label
, VOIDmode
);
3511 c_label_vars
*label_vars
= ggc_alloc
<c_label_vars
> ();
3512 label_vars
->shadowed
= NULL
;
3513 set_spot_bindings (&label_vars
->label_bindings
, defining
);
3514 label_vars
->decls_in_scope
= make_tree_vector ();
3515 label_vars
->gotos
= NULL
;
3516 *p_label_vars
= label_vars
;
3521 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
3522 Create one if none exists so far for the current function.
3523 This is called when a label is used in a goto expression or
3524 has its address taken. */
3527 lookup_label (tree name
)
3530 struct c_label_vars
*label_vars
;
3532 if (current_function_scope
== 0)
3534 error ("label %qE referenced outside of any function", name
);
3538 /* Use a label already defined or ref'd with this name, but not if
3539 it is inherited from a containing function and wasn't declared
3541 label
= I_LABEL_DECL (name
);
3542 if (label
&& (DECL_CONTEXT (label
) == current_function_decl
3543 || C_DECLARED_LABEL_FLAG (label
)))
3545 /* If the label has only been declared, update its apparent
3546 location to point here, for better diagnostics if it
3547 turns out not to have been defined. */
3548 if (DECL_INITIAL (label
) == NULL_TREE
)
3549 DECL_SOURCE_LOCATION (label
) = input_location
;
3553 /* No label binding for that identifier; make one. */
3554 label
= make_label (input_location
, name
, false, &label_vars
);
3556 /* Ordinary labels go in the current function scope. */
3557 bind_label (name
, label
, current_function_scope
, label_vars
);
3562 /* Issue a warning about DECL for a goto statement at GOTO_LOC going
3566 warn_about_goto (location_t goto_loc
, tree label
, tree decl
)
3568 if (variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
3570 "jump into scope of identifier with variably modified type");
3572 warning_at (goto_loc
, OPT_Wjump_misses_init
,
3573 "jump skips variable initialization");
3574 inform (DECL_SOURCE_LOCATION (label
), "label %qD defined here", label
);
3575 inform (DECL_SOURCE_LOCATION (decl
), "%qD declared here", decl
);
3578 /* Look up a label because of a goto statement. This is like
3579 lookup_label, but also issues any appropriate warnings. */
3582 lookup_label_for_goto (location_t loc
, tree name
)
3585 struct c_label_vars
*label_vars
;
3589 label
= lookup_label (name
);
3590 if (label
== NULL_TREE
)
3593 /* If we are jumping to a different function, we can't issue any
3595 if (DECL_CONTEXT (label
) != current_function_decl
)
3597 gcc_assert (C_DECLARED_LABEL_FLAG (label
));
3601 label_vars
= I_LABEL_BINDING (name
)->u
.label
;
3603 /* If the label has not yet been defined, then push this goto on a
3604 list for possible later warnings. */
3605 if (label_vars
->label_bindings
.scope
== NULL
)
3607 c_goto_bindings
*g
= ggc_alloc
<c_goto_bindings
> ();
3610 set_spot_bindings (&g
->goto_bindings
, true);
3611 vec_safe_push (label_vars
->gotos
, g
);
3615 /* If there are any decls in label_vars->decls_in_scope, then this
3616 goto has missed the declaration of the decl. This happens for a
3622 Issue a warning or error. */
3623 FOR_EACH_VEC_SAFE_ELT (label_vars
->decls_in_scope
, ix
, decl
)
3624 warn_about_goto (loc
, label
, decl
);
3626 if (label_vars
->label_bindings
.left_stmt_expr
)
3628 error_at (loc
, "jump into statement expression");
3629 inform (DECL_SOURCE_LOCATION (label
), "label %qD defined here", label
);
3635 /* Make a label named NAME in the current function, shadowing silently
3636 any that may be inherited from containing functions or containing
3637 scopes. This is called for __label__ declarations. */
3640 declare_label (tree name
)
3642 struct c_binding
*b
= I_LABEL_BINDING (name
);
3644 struct c_label_vars
*label_vars
;
3646 /* Check to make sure that the label hasn't already been declared
3648 if (b
&& B_IN_CURRENT_SCOPE (b
))
3650 error ("duplicate label declaration %qE", name
);
3651 locate_old_decl (b
->decl
);
3653 /* Just use the previous declaration. */
3657 label
= make_label (input_location
, name
, false, &label_vars
);
3658 C_DECLARED_LABEL_FLAG (label
) = 1;
3660 /* Declared labels go in the current scope. */
3661 bind_label (name
, label
, current_scope
, label_vars
);
3666 /* When we define a label, issue any appropriate warnings if there are
3667 any gotos earlier in the function which jump to this label. */
3670 check_earlier_gotos (tree label
, struct c_label_vars
* label_vars
)
3673 struct c_goto_bindings
*g
;
3675 FOR_EACH_VEC_SAFE_ELT (label_vars
->gotos
, ix
, g
)
3677 struct c_binding
*b
;
3678 struct c_scope
*scope
;
3680 /* We have a goto to this label. The goto is going forward. In
3681 g->scope, the goto is going to skip any binding which was
3682 defined after g->bindings_in_scope. */
3683 if (g
->goto_bindings
.scope
->has_jump_unsafe_decl
)
3685 for (b
= g
->goto_bindings
.scope
->bindings
;
3686 b
!= g
->goto_bindings
.bindings_in_scope
;
3689 if (decl_jump_unsafe (b
->decl
))
3690 warn_about_goto (g
->loc
, label
, b
->decl
);
3694 /* We also need to warn about decls defined in any scopes
3695 between the scope of the label and the scope of the goto. */
3696 for (scope
= label_vars
->label_bindings
.scope
;
3697 scope
!= g
->goto_bindings
.scope
;
3698 scope
= scope
->outer
)
3700 gcc_assert (scope
!= NULL
);
3701 if (scope
->has_jump_unsafe_decl
)
3703 if (scope
== label_vars
->label_bindings
.scope
)
3704 b
= label_vars
->label_bindings
.bindings_in_scope
;
3706 b
= scope
->bindings
;
3707 for (; b
!= NULL
; b
= b
->prev
)
3709 if (decl_jump_unsafe (b
->decl
))
3710 warn_about_goto (g
->loc
, label
, b
->decl
);
3715 if (g
->goto_bindings
.stmt_exprs
> 0)
3717 error_at (g
->loc
, "jump into statement expression");
3718 inform (DECL_SOURCE_LOCATION (label
), "label %qD defined here",
3723 /* Now that the label is defined, we will issue warnings about
3724 subsequent gotos to this label when we see them. */
3725 vec_safe_truncate (label_vars
->gotos
, 0);
3726 label_vars
->gotos
= NULL
;
3729 /* Define a label, specifying the location in the source file.
3730 Return the LABEL_DECL node for the label, if the definition is valid.
3731 Otherwise return NULL_TREE. */
3734 define_label (location_t location
, tree name
)
3736 /* Find any preexisting label with this name. It is an error
3737 if that label has already been defined in this function, or
3738 if there is a containing function with a declared label with
3740 tree label
= I_LABEL_DECL (name
);
3743 && ((DECL_CONTEXT (label
) == current_function_decl
3744 && DECL_INITIAL (label
) != NULL_TREE
)
3745 || (DECL_CONTEXT (label
) != current_function_decl
3746 && C_DECLARED_LABEL_FLAG (label
))))
3748 error_at (location
, "duplicate label %qD", label
);
3749 locate_old_decl (label
);
3752 else if (label
&& DECL_CONTEXT (label
) == current_function_decl
)
3754 struct c_label_vars
*label_vars
= I_LABEL_BINDING (name
)->u
.label
;
3756 /* The label has been used or declared already in this function,
3757 but not defined. Update its location to point to this
3759 DECL_SOURCE_LOCATION (label
) = location
;
3760 set_spot_bindings (&label_vars
->label_bindings
, true);
3762 /* Issue warnings as required about any goto statements from
3763 earlier in the function. */
3764 check_earlier_gotos (label
, label_vars
);
3768 struct c_label_vars
*label_vars
;
3770 /* No label binding for that identifier; make one. */
3771 label
= make_label (location
, name
, true, &label_vars
);
3773 /* Ordinary labels go in the current function scope. */
3774 bind_label (name
, label
, current_function_scope
, label_vars
);
3777 if (!in_system_header_at (input_location
) && lookup_name (name
))
3778 warning_at (location
, OPT_Wtraditional
,
3779 "traditional C lacks a separate namespace "
3780 "for labels, identifier %qE conflicts", name
);
3782 /* Mark label as having been defined. */
3783 DECL_INITIAL (label
) = error_mark_node
;
3787 /* Get the bindings for a new switch statement. This is used to issue
3788 warnings as appropriate for jumps from the switch to case or
3791 struct c_spot_bindings
*
3792 c_get_switch_bindings (void)
3794 struct c_spot_bindings
*switch_bindings
;
3796 switch_bindings
= XNEW (struct c_spot_bindings
);
3797 set_spot_bindings (switch_bindings
, true);
3798 return switch_bindings
;
3802 c_release_switch_bindings (struct c_spot_bindings
*bindings
)
3804 gcc_assert (bindings
->stmt_exprs
== 0 && !bindings
->left_stmt_expr
);
3808 /* This is called at the point of a case or default label to issue
3809 warnings about decls as needed. It returns true if it found an
3810 error, not just a warning. */
3813 c_check_switch_jump_warnings (struct c_spot_bindings
*switch_bindings
,
3814 location_t switch_loc
, location_t case_loc
)
3817 struct c_scope
*scope
;
3820 for (scope
= current_scope
;
3821 scope
!= switch_bindings
->scope
;
3822 scope
= scope
->outer
)
3824 struct c_binding
*b
;
3826 gcc_assert (scope
!= NULL
);
3828 if (!scope
->has_jump_unsafe_decl
)
3831 for (b
= scope
->bindings
; b
!= NULL
; b
= b
->prev
)
3833 if (decl_jump_unsafe (b
->decl
))
3835 if (variably_modified_type_p (TREE_TYPE (b
->decl
), NULL_TREE
))
3839 ("switch jumps into scope of identifier with "
3840 "variably modified type"));
3843 warning_at (case_loc
, OPT_Wjump_misses_init
,
3844 "switch jumps over variable initialization");
3845 inform (switch_loc
, "switch starts here");
3846 inform (DECL_SOURCE_LOCATION (b
->decl
), "%qD declared here",
3852 if (switch_bindings
->stmt_exprs
> 0)
3855 error_at (case_loc
, "switch jumps into statement expression");
3856 inform (switch_loc
, "switch starts here");
3862 /* Given NAME, an IDENTIFIER_NODE,
3863 return the structure (or union or enum) definition for that name.
3864 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
3865 CODE says which kind of type the caller wants;
3866 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
3867 If PLOC is not NULL and this returns non-null, it sets *PLOC to the
3868 location where the tag was defined.
3869 If the wrong kind of type is found, an error is reported. */
3872 lookup_tag (enum tree_code code
, tree name
, bool thislevel_only
,
3875 struct c_binding
*b
= I_TAG_BINDING (name
);
3876 bool thislevel
= false;
3881 /* We only care about whether it's in this level if
3882 thislevel_only was set or it might be a type clash. */
3883 if (thislevel_only
|| TREE_CODE (b
->decl
) != code
)
3885 /* For our purposes, a tag in the external scope is the same as
3886 a tag in the file scope. (Primarily relevant to Objective-C
3887 and its builtin structure tags, which get pushed before the
3888 file scope is created.) */
3889 if (B_IN_CURRENT_SCOPE (b
)
3890 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
3894 if (thislevel_only
&& !thislevel
)
3897 if (TREE_CODE (b
->decl
) != code
)
3899 /* Definition isn't the kind we were looking for. */
3900 pending_invalid_xref
= name
;
3901 pending_invalid_xref_location
= input_location
;
3903 /* If in the same binding level as a declaration as a tag
3904 of a different type, this must not be allowed to
3905 shadow that tag, so give the error immediately.
3906 (For example, "struct foo; union foo;" is invalid.) */
3908 pending_xref_error ();
3917 /* Return true if a definition exists for NAME with code CODE. */
3920 tag_exists_p (enum tree_code code
, tree name
)
3922 struct c_binding
*b
= I_TAG_BINDING (name
);
3924 if (b
== NULL
|| b
->decl
== NULL_TREE
)
3926 return TREE_CODE (b
->decl
) == code
;
3929 /* Print an error message now
3930 for a recent invalid struct, union or enum cross reference.
3931 We don't print them immediately because they are not invalid
3932 when used in the `struct foo;' construct for shadowing. */
3935 pending_xref_error (void)
3937 if (pending_invalid_xref
!= NULL_TREE
)
3938 error_at (pending_invalid_xref_location
, "%qE defined as wrong kind of tag",
3939 pending_invalid_xref
);
3940 pending_invalid_xref
= NULL_TREE
;
3944 /* Look up NAME in the current scope and its superiors
3945 in the namespace of variables, functions and typedefs.
3946 Return a ..._DECL node of some kind representing its definition,
3947 or return NULL_TREE if it is undefined. */
3950 lookup_name (tree name
)
3952 struct c_binding
*b
= I_SYMBOL_BINDING (name
);
3953 if (b
&& !b
->invisible
)
3955 maybe_record_typedef_use (b
->decl
);
3961 /* Similar to `lookup_name' but look only at the indicated scope. */
3964 lookup_name_in_scope (tree name
, struct c_scope
*scope
)
3966 struct c_binding
*b
;
3968 for (b
= I_SYMBOL_BINDING (name
); b
; b
= b
->shadowed
)
3969 if (B_IN_SCOPE (b
, scope
))
3974 /* Look for the closest match for NAME within the currently valid
3977 This finds the identifier with the lowest Levenshtein distance to
3978 NAME. If there are multiple candidates with equal minimal distance,
3979 the first one found is returned. Scopes are searched from innermost
3980 outwards, and within a scope in reverse order of declaration, thus
3981 benefiting candidates "near" to the current scope.
3983 The function also looks for similar macro names to NAME, since a
3984 misspelled macro name will not be expanded, and hence looks like an
3985 identifier to the C frontend.
3987 It also looks for start_typename keywords, to detect "singed" vs "signed"
3991 lookup_name_fuzzy (tree name
, enum lookup_name_fuzzy_kind kind
)
3993 gcc_assert (TREE_CODE (name
) == IDENTIFIER_NODE
);
3995 best_match
<tree
, tree
> bm (name
);
3997 /* Look within currently valid scopes. */
3998 for (c_scope
*scope
= current_scope
; scope
; scope
= scope
->outer
)
3999 for (c_binding
*binding
= scope
->bindings
; binding
; binding
= binding
->prev
)
4001 if (!binding
->id
|| binding
->invisible
)
4003 /* Don't use bindings from implicitly declared functions,
4004 as they were likely misspellings themselves. */
4005 if (TREE_CODE (binding
->decl
) == FUNCTION_DECL
)
4006 if (C_DECL_IMPLICIT (binding
->decl
))
4010 case FUZZY_LOOKUP_TYPENAME
:
4011 if (TREE_CODE (binding
->decl
) != TYPE_DECL
)
4015 case FUZZY_LOOKUP_FUNCTION_NAME
:
4016 if (TREE_CODE (binding
->decl
) != FUNCTION_DECL
)
4018 /* Allow function pointers. */
4019 if ((VAR_P (binding
->decl
)
4020 || TREE_CODE (binding
->decl
) == PARM_DECL
)
4021 && TREE_CODE (TREE_TYPE (binding
->decl
)) == POINTER_TYPE
4022 && (TREE_CODE (TREE_TYPE (TREE_TYPE (binding
->decl
)))
4032 bm
.consider (binding
->id
);
4035 /* Consider macros: if the user misspelled a macro name e.g. "SOME_MACRO"
4037 x = SOME_OTHER_MACRO (y);
4038 then "SOME_OTHER_MACRO" will survive to the frontend and show up
4039 as a misspelled identifier.
4041 Use the best distance so far so that a candidate is only set if
4042 a macro is better than anything so far. This allows early rejection
4043 (without calculating the edit distance) of macro names that must have
4044 distance >= bm.get_best_distance (), and means that we only get a
4045 non-NULL result for best_macro_match if it's better than any of
4046 the identifiers already checked, which avoids needless creation
4047 of identifiers for macro hashnodes. */
4048 best_macro_match
bmm (name
, bm
.get_best_distance (), parse_in
);
4049 cpp_hashnode
*best_macro
= bmm
.get_best_meaningful_candidate ();
4050 /* If a macro is the closest so far to NAME, use it, creating an
4051 identifier tree node for it. */
4054 const char *id
= (const char *)best_macro
->ident
.str
;
4055 tree macro_as_identifier
4056 = get_identifier_with_length (id
, best_macro
->ident
.len
);
4057 bm
.set_best_so_far (macro_as_identifier
,
4058 bmm
.get_best_distance (),
4059 bmm
.get_best_candidate_length ());
4062 /* Try the "start_typename" keywords to detect
4063 "singed" vs "signed" typos. */
4064 if (kind
== FUZZY_LOOKUP_TYPENAME
)
4066 for (unsigned i
= 0; i
< num_c_common_reswords
; i
++)
4068 const c_common_resword
*resword
= &c_common_reswords
[i
];
4069 if (!c_keyword_starts_typename (resword
->rid
))
4071 tree resword_identifier
= ridpointers
[resword
->rid
];
4072 if (!resword_identifier
)
4074 gcc_assert (TREE_CODE (resword_identifier
) == IDENTIFIER_NODE
);
4075 bm
.consider (resword_identifier
);
4079 tree best
= bm
.get_best_meaningful_candidate ();
4081 return IDENTIFIER_POINTER (best
);
4087 /* Create the predefined scalar types of C,
4088 and some nodes representing standard constants (0, 1, (void *) 0).
4089 Initialize the global scope.
4090 Make definitions for built-in primitive functions. */
4093 c_init_decl_processing (void)
4095 location_t save_loc
= input_location
;
4097 /* Initialize reserved words for parser. */
4100 current_function_decl
= NULL_TREE
;
4102 gcc_obstack_init (&parser_obstack
);
4104 /* Make the externals scope. */
4106 external_scope
= current_scope
;
4108 /* Declarations from c_common_nodes_and_builtins must not be associated
4109 with this input file, lest we get differences between using and not
4110 using preprocessed headers. */
4111 input_location
= BUILTINS_LOCATION
;
4113 c_common_nodes_and_builtins ();
4115 /* In C, comparisons and TRUTH_* expressions have type int. */
4116 truthvalue_type_node
= integer_type_node
;
4117 truthvalue_true_node
= integer_one_node
;
4118 truthvalue_false_node
= integer_zero_node
;
4120 /* Even in C99, which has a real boolean type. */
4121 pushdecl (build_decl (UNKNOWN_LOCATION
, TYPE_DECL
, get_identifier ("_Bool"),
4122 boolean_type_node
));
4124 input_location
= save_loc
;
4126 make_fname_decl
= c_make_fname_decl
;
4127 start_fname_decls ();
4130 /* Create the VAR_DECL at LOC for __FUNCTION__ etc. ID is the name to
4131 give the decl, NAME is the initialization string and TYPE_DEP
4132 indicates whether NAME depended on the type of the function. As we
4133 don't yet implement delayed emission of static data, we mark the
4134 decl as emitted so it is not placed in the output. Anything using
4135 it must therefore pull out the STRING_CST initializer directly.
4139 c_make_fname_decl (location_t loc
, tree id
, int type_dep
)
4141 const char *name
= fname_as_string (type_dep
);
4142 tree decl
, type
, init
;
4143 size_t length
= strlen (name
);
4145 type
= build_array_type (char_type_node
,
4146 build_index_type (size_int (length
)));
4147 type
= c_build_qualified_type (type
, TYPE_QUAL_CONST
);
4149 decl
= build_decl (loc
, VAR_DECL
, id
, type
);
4151 TREE_STATIC (decl
) = 1;
4152 TREE_READONLY (decl
) = 1;
4153 DECL_ARTIFICIAL (decl
) = 1;
4155 init
= build_string (length
+ 1, name
);
4156 free (CONST_CAST (char *, name
));
4157 TREE_TYPE (init
) = type
;
4158 DECL_INITIAL (decl
) = init
;
4160 TREE_USED (decl
) = 1;
4162 if (current_function_decl
4163 /* For invalid programs like this:
4166 const char* p = __FUNCTION__;
4168 the __FUNCTION__ is believed to appear in K&R style function
4169 parameter declarator. In that case we still don't have
4171 && current_function_scope
)
4173 DECL_CONTEXT (decl
) = current_function_decl
;
4174 bind (id
, decl
, current_function_scope
,
4175 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION
);
4178 finish_decl (decl
, loc
, init
, NULL_TREE
, NULL_TREE
);
4184 c_builtin_function (tree decl
)
4186 tree type
= TREE_TYPE (decl
);
4187 tree id
= DECL_NAME (decl
);
4189 const char *name
= IDENTIFIER_POINTER (id
);
4190 C_DECL_BUILTIN_PROTOTYPE (decl
) = prototype_p (type
);
4192 /* Should never be called on a symbol with a preexisting meaning. */
4193 gcc_assert (!I_SYMBOL_BINDING (id
));
4195 bind (id
, decl
, external_scope
, /*invisible=*/true, /*nested=*/false,
4198 /* Builtins in the implementation namespace are made visible without
4199 needing to be explicitly declared. See push_file_scope. */
4200 if (name
[0] == '_' && (name
[1] == '_' || ISUPPER (name
[1])))
4202 DECL_CHAIN (decl
) = visible_builtins
;
4203 visible_builtins
= decl
;
4210 c_builtin_function_ext_scope (tree decl
)
4212 tree type
= TREE_TYPE (decl
);
4213 tree id
= DECL_NAME (decl
);
4215 const char *name
= IDENTIFIER_POINTER (id
);
4216 C_DECL_BUILTIN_PROTOTYPE (decl
) = prototype_p (type
);
4219 bind (id
, decl
, external_scope
, /*invisible=*/false, /*nested=*/false,
4222 /* Builtins in the implementation namespace are made visible without
4223 needing to be explicitly declared. See push_file_scope. */
4224 if (name
[0] == '_' && (name
[1] == '_' || ISUPPER (name
[1])))
4226 DECL_CHAIN (decl
) = visible_builtins
;
4227 visible_builtins
= decl
;
4233 /* Called when a declaration is seen that contains no names to declare.
4234 If its type is a reference to a structure, union or enum inherited
4235 from a containing scope, shadow that tag name for the current scope
4236 with a forward reference.
4237 If its type defines a new named structure or union
4238 or defines an enum, it is valid but we need not do anything here.
4239 Otherwise, it is an error. */
4242 shadow_tag (const struct c_declspecs
*declspecs
)
4244 shadow_tag_warned (declspecs
, 0);
4247 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
4250 shadow_tag_warned (const struct c_declspecs
*declspecs
, int warned
)
4252 bool found_tag
= false;
4254 if (declspecs
->type
&& !declspecs
->default_int_p
&& !declspecs
->typedef_p
)
4256 tree value
= declspecs
->type
;
4257 enum tree_code code
= TREE_CODE (value
);
4259 if (code
== RECORD_TYPE
|| code
== UNION_TYPE
|| code
== ENUMERAL_TYPE
)
4260 /* Used to test also that TYPE_SIZE (value) != 0.
4261 That caused warning for `struct foo;' at top level in the file. */
4263 tree name
= TYPE_NAME (value
);
4268 if (declspecs
->restrict_p
)
4270 error ("invalid use of %<restrict%>");
4274 if (name
== NULL_TREE
)
4276 if (warned
!= 1 && code
!= ENUMERAL_TYPE
)
4277 /* Empty unnamed enum OK */
4279 pedwarn (input_location
, 0,
4280 "unnamed struct/union that defines no instances");
4284 else if (declspecs
->typespec_kind
!= ctsk_tagdef
4285 && declspecs
->typespec_kind
!= ctsk_tagfirstref
4286 && declspecs
->storage_class
!= csc_none
)
4289 pedwarn (input_location
, 0,
4290 "empty declaration with storage class specifier "
4291 "does not redeclare tag");
4293 pending_xref_error ();
4295 else if (declspecs
->typespec_kind
!= ctsk_tagdef
4296 && declspecs
->typespec_kind
!= ctsk_tagfirstref
4297 && (declspecs
->const_p
4298 || declspecs
->volatile_p
4299 || declspecs
->atomic_p
4300 || declspecs
->restrict_p
4301 || declspecs
->address_space
))
4304 pedwarn (input_location
, 0,
4305 "empty declaration with type qualifier "
4306 "does not redeclare tag");
4308 pending_xref_error ();
4310 else if (declspecs
->typespec_kind
!= ctsk_tagdef
4311 && declspecs
->typespec_kind
!= ctsk_tagfirstref
4312 && declspecs
->alignas_p
)
4315 pedwarn (input_location
, 0,
4316 "empty declaration with %<_Alignas%> "
4317 "does not redeclare tag");
4319 pending_xref_error ();
4323 pending_invalid_xref
= NULL_TREE
;
4324 t
= lookup_tag (code
, name
, true, NULL
);
4328 t
= make_node (code
);
4329 pushtag (input_location
, name
, t
);
4335 if (warned
!= 1 && !in_system_header_at (input_location
))
4337 pedwarn (input_location
, 0,
4338 "useless type name in empty declaration");
4343 else if (warned
!= 1 && !in_system_header_at (input_location
)
4344 && declspecs
->typedef_p
)
4346 pedwarn (input_location
, 0, "useless type name in empty declaration");
4350 pending_invalid_xref
= NULL_TREE
;
4352 if (declspecs
->inline_p
)
4354 error ("%<inline%> in empty declaration");
4358 if (declspecs
->noreturn_p
)
4360 error ("%<_Noreturn%> in empty declaration");
4364 if (current_scope
== file_scope
&& declspecs
->storage_class
== csc_auto
)
4366 error ("%<auto%> in file-scope empty declaration");
4370 if (current_scope
== file_scope
&& declspecs
->storage_class
== csc_register
)
4372 error ("%<register%> in file-scope empty declaration");
4376 if (!warned
&& !in_system_header_at (input_location
)
4377 && declspecs
->storage_class
!= csc_none
)
4379 warning (0, "useless storage class specifier in empty declaration");
4383 if (!warned
&& !in_system_header_at (input_location
) && declspecs
->thread_p
)
4385 warning (0, "useless %qs in empty declaration",
4386 declspecs
->thread_gnu_p
? "__thread" : "_Thread_local");
4391 && !in_system_header_at (input_location
)
4392 && (declspecs
->const_p
4393 || declspecs
->volatile_p
4394 || declspecs
->atomic_p
4395 || declspecs
->restrict_p
4396 || declspecs
->address_space
))
4398 warning (0, "useless type qualifier in empty declaration");
4402 if (!warned
&& !in_system_header_at (input_location
)
4403 && declspecs
->alignas_p
)
4405 warning (0, "useless %<_Alignas%> in empty declaration");
4412 pedwarn (input_location
, 0, "empty declaration");
4417 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
4418 bits. SPECS represents declaration specifiers that the grammar
4419 only permits to contain type qualifiers and attributes. */
4422 quals_from_declspecs (const struct c_declspecs
*specs
)
4424 int quals
= ((specs
->const_p
? TYPE_QUAL_CONST
: 0)
4425 | (specs
->volatile_p
? TYPE_QUAL_VOLATILE
: 0)
4426 | (specs
->restrict_p
? TYPE_QUAL_RESTRICT
: 0)
4427 | (specs
->atomic_p
? TYPE_QUAL_ATOMIC
: 0)
4428 | (ENCODE_QUAL_ADDR_SPACE (specs
->address_space
)));
4429 gcc_assert (!specs
->type
4430 && !specs
->decl_attr
4431 && specs
->typespec_word
== cts_none
4432 && specs
->storage_class
== csc_none
4433 && !specs
->typedef_p
4434 && !specs
->explicit_signed_p
4435 && !specs
->deprecated_p
4437 && !specs
->long_long_p
4440 && !specs
->unsigned_p
4441 && !specs
->complex_p
4443 && !specs
->noreturn_p
4444 && !specs
->thread_p
);
4448 /* Construct an array declarator. LOC is the location of the
4449 beginning of the array (usually the opening brace). EXPR is the
4450 expression inside [], or NULL_TREE. QUALS are the type qualifiers
4451 inside the [] (to be applied to the pointer to which a parameter
4452 array is converted). STATIC_P is true if "static" is inside the
4453 [], false otherwise. VLA_UNSPEC_P is true if the array is [*], a
4454 VLA of unspecified length which is nevertheless a complete type,
4455 false otherwise. The field for the contained declarator is left to
4456 be filled in by set_array_declarator_inner. */
4458 struct c_declarator
*
4459 build_array_declarator (location_t loc
,
4460 tree expr
, struct c_declspecs
*quals
, bool static_p
,
4463 struct c_declarator
*declarator
= XOBNEW (&parser_obstack
,
4464 struct c_declarator
);
4465 declarator
->id_loc
= loc
;
4466 declarator
->kind
= cdk_array
;
4467 declarator
->declarator
= 0;
4468 declarator
->u
.array
.dimen
= expr
;
4471 declarator
->u
.array
.attrs
= quals
->attrs
;
4472 declarator
->u
.array
.quals
= quals_from_declspecs (quals
);
4476 declarator
->u
.array
.attrs
= NULL_TREE
;
4477 declarator
->u
.array
.quals
= 0;
4479 declarator
->u
.array
.static_p
= static_p
;
4480 declarator
->u
.array
.vla_unspec_p
= vla_unspec_p
;
4481 if (static_p
|| quals
!= NULL
)
4482 pedwarn_c90 (loc
, OPT_Wpedantic
,
4483 "ISO C90 does not support %<static%> or type "
4484 "qualifiers in parameter array declarators");
4486 pedwarn_c90 (loc
, OPT_Wpedantic
,
4487 "ISO C90 does not support %<[*]%> array declarators");
4490 if (!current_scope
->parm_flag
)
4493 error_at (loc
, "%<[*]%> not allowed in other than "
4494 "function prototype scope");
4495 declarator
->u
.array
.vla_unspec_p
= false;
4498 current_scope
->had_vla_unspec
= true;
4503 /* Set the contained declarator of an array declarator. DECL is the
4504 declarator, as constructed by build_array_declarator; INNER is what
4505 appears on the left of the []. */
4507 struct c_declarator
*
4508 set_array_declarator_inner (struct c_declarator
*decl
,
4509 struct c_declarator
*inner
)
4511 decl
->declarator
= inner
;
4515 /* INIT is a constructor that forms DECL's initializer. If the final
4516 element initializes a flexible array field, add the size of that
4517 initializer to DECL's size. */
4520 add_flexible_array_elts_to_size (tree decl
, tree init
)
4524 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init
)))
4527 elt
= CONSTRUCTOR_ELTS (init
)->last ().value
;
4528 type
= TREE_TYPE (elt
);
4529 if (TREE_CODE (type
) == ARRAY_TYPE
4530 && TYPE_SIZE (type
) == NULL_TREE
4531 && TYPE_DOMAIN (type
) != NULL_TREE
4532 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) == NULL_TREE
)
4534 complete_array_type (&type
, elt
, false);
4536 = size_binop (PLUS_EXPR
, DECL_SIZE (decl
), TYPE_SIZE (type
));
4537 DECL_SIZE_UNIT (decl
)
4538 = size_binop (PLUS_EXPR
, DECL_SIZE_UNIT (decl
), TYPE_SIZE_UNIT (type
));
4542 /* Decode a "typename", such as "int **", returning a ..._TYPE node.
4543 Set *EXPR, if EXPR not NULL, to any expression to be evaluated
4544 before the type name, and set *EXPR_CONST_OPERANDS, if
4545 EXPR_CONST_OPERANDS not NULL, to indicate whether the type name may
4546 appear in a constant expression. */
4549 groktypename (struct c_type_name
*type_name
, tree
*expr
,
4550 bool *expr_const_operands
)
4553 tree attrs
= type_name
->specs
->attrs
;
4555 type_name
->specs
->attrs
= NULL_TREE
;
4557 type
= grokdeclarator (type_name
->declarator
, type_name
->specs
, TYPENAME
,
4558 false, NULL
, &attrs
, expr
, expr_const_operands
,
4561 /* Apply attributes. */
4562 decl_attributes (&type
, attrs
, 0);
4567 /* Wrapper for decl_attributes that adds some implicit attributes
4568 to VAR_DECLs or FUNCTION_DECLs. */
4571 c_decl_attributes (tree
*node
, tree attributes
, int flags
)
4573 /* Add implicit "omp declare target" attribute if requested. */
4574 if (current_omp_declare_target_attribute
4575 && ((VAR_P (*node
) && is_global_var (*node
))
4576 || TREE_CODE (*node
) == FUNCTION_DECL
))
4579 && !lang_hooks
.types
.omp_mappable_type (TREE_TYPE (*node
)))
4580 error ("%q+D in declare target directive does not have mappable type",
4583 attributes
= tree_cons (get_identifier ("omp declare target"),
4584 NULL_TREE
, attributes
);
4586 return decl_attributes (node
, attributes
, flags
);
4590 /* Decode a declarator in an ordinary declaration or data definition.
4591 This is called as soon as the type information and variable name
4592 have been parsed, before parsing the initializer if any.
4593 Here we create the ..._DECL node, fill in its type,
4594 and put it on the list of decls for the current context.
4595 The ..._DECL node is returned as the value.
4597 Exception: for arrays where the length is not specified,
4598 the type is left null, to be filled in by `finish_decl'.
4600 Function definitions do not come here; they go to start_function
4601 instead. However, external and forward declarations of functions
4602 do go through here. Structure field declarations are done by
4603 grokfield and not through here. */
4606 start_decl (struct c_declarator
*declarator
, struct c_declspecs
*declspecs
,
4607 bool initialized
, tree attributes
)
4611 tree expr
= NULL_TREE
;
4612 enum deprecated_states deprecated_state
= DEPRECATED_NORMAL
;
4614 /* An object declared as __attribute__((deprecated)) suppresses
4615 warnings of uses of other deprecated items. */
4616 if (lookup_attribute ("deprecated", attributes
))
4617 deprecated_state
= DEPRECATED_SUPPRESS
;
4619 decl
= grokdeclarator (declarator
, declspecs
,
4620 NORMAL
, initialized
, NULL
, &attributes
, &expr
, NULL
,
4622 if (!decl
|| decl
== error_mark_node
)
4626 add_stmt (fold_convert (void_type_node
, expr
));
4628 if (TREE_CODE (decl
) != FUNCTION_DECL
&& MAIN_NAME_P (DECL_NAME (decl
)))
4629 warning (OPT_Wmain
, "%q+D is usually a function", decl
);
4632 /* Is it valid for this decl to have an initializer at all?
4633 If not, set INITIALIZED to zero, which will indirectly
4634 tell 'finish_decl' to ignore the initializer once it is parsed. */
4635 switch (TREE_CODE (decl
))
4638 error ("typedef %qD is initialized (use __typeof__ instead)", decl
);
4639 initialized
= false;
4643 error ("function %qD is initialized like a variable", decl
);
4644 initialized
= false;
4648 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
4649 error ("parameter %qD is initialized", decl
);
4650 initialized
= false;
4654 /* Don't allow initializations for incomplete types except for
4655 arrays which might be completed by the initialization. */
4657 /* This can happen if the array size is an undefined macro.
4658 We already gave a warning, so we don't need another one. */
4659 if (TREE_TYPE (decl
) == error_mark_node
)
4660 initialized
= false;
4661 else if (COMPLETE_TYPE_P (TREE_TYPE (decl
)))
4663 /* A complete type is ok if size is fixed. */
4665 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl
))) != INTEGER_CST
4666 || C_DECL_VARIABLE_SIZE (decl
))
4668 error ("variable-sized object may not be initialized");
4669 initialized
= false;
4672 else if (TREE_CODE (TREE_TYPE (decl
)) != ARRAY_TYPE
)
4674 error ("variable %qD has initializer but incomplete type", decl
);
4675 initialized
= false;
4677 else if (C_DECL_VARIABLE_SIZE (decl
))
4679 /* Although C99 is unclear about whether incomplete arrays
4680 of VLAs themselves count as VLAs, it does not make
4681 sense to permit them to be initialized given that
4682 ordinary VLAs may not be initialized. */
4683 error ("variable-sized object may not be initialized");
4684 initialized
= false;
4690 if (current_scope
== file_scope
)
4691 TREE_STATIC (decl
) = 1;
4693 /* Tell 'pushdecl' this is an initialized decl
4694 even though we don't yet have the initializer expression.
4695 Also tell 'finish_decl' it may store the real initializer. */
4696 DECL_INITIAL (decl
) = error_mark_node
;
4699 /* If this is a function declaration, write a record describing it to the
4700 prototypes file (if requested). */
4702 if (TREE_CODE (decl
) == FUNCTION_DECL
)
4703 gen_aux_info_record (decl
, 0, 0, prototype_p (TREE_TYPE (decl
)));
4705 /* ANSI specifies that a tentative definition which is not merged with
4706 a non-tentative definition behaves exactly like a definition with an
4707 initializer equal to zero. (Section 3.7.2)
4709 -fno-common gives strict ANSI behavior, though this tends to break
4710 a large body of code that grew up without this rule.
4712 Thread-local variables are never common, since there's no entrenched
4713 body of code to break, and it allows more efficient variable references
4714 in the presence of dynamic linking. */
4718 && TREE_PUBLIC (decl
)
4719 && !DECL_THREAD_LOCAL_P (decl
)
4721 DECL_COMMON (decl
) = 1;
4723 /* Set attributes here so if duplicate decl, will have proper attributes. */
4724 c_decl_attributes (&decl
, attributes
, 0);
4726 /* Handle gnu_inline attribute. */
4727 if (declspecs
->inline_p
4728 && !flag_gnu89_inline
4729 && TREE_CODE (decl
) == FUNCTION_DECL
4730 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl
))
4731 || current_function_decl
))
4733 if (declspecs
->storage_class
== csc_auto
&& current_scope
!= file_scope
)
4735 else if (declspecs
->storage_class
!= csc_static
)
4736 DECL_EXTERNAL (decl
) = !DECL_EXTERNAL (decl
);
4739 if (TREE_CODE (decl
) == FUNCTION_DECL
4740 && targetm
.calls
.promote_prototypes (TREE_TYPE (decl
)))
4742 struct c_declarator
*ce
= declarator
;
4744 if (ce
->kind
== cdk_pointer
)
4745 ce
= declarator
->declarator
;
4746 if (ce
->kind
== cdk_function
)
4748 tree args
= ce
->u
.arg_info
->parms
;
4749 for (; args
; args
= DECL_CHAIN (args
))
4751 tree type
= TREE_TYPE (args
);
4752 if (type
&& INTEGRAL_TYPE_P (type
)
4753 && TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
))
4754 DECL_ARG_TYPE (args
) = c_type_promotes_to (type
);
4759 if (TREE_CODE (decl
) == FUNCTION_DECL
4760 && DECL_DECLARED_INLINE_P (decl
)
4761 && DECL_UNINLINABLE (decl
)
4762 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl
)))
4763 warning (OPT_Wattributes
, "inline function %q+D given attribute noinline",
4766 /* C99 6.7.4p3: An inline definition of a function with external
4767 linkage shall not contain a definition of a modifiable object
4768 with static storage duration... */
4770 && current_scope
!= file_scope
4771 && TREE_STATIC (decl
)
4772 && !TREE_READONLY (decl
)
4773 && DECL_DECLARED_INLINE_P (current_function_decl
)
4774 && DECL_EXTERNAL (current_function_decl
))
4775 record_inline_static (input_location
, current_function_decl
,
4776 decl
, csi_modifiable
);
4778 if (c_dialect_objc ()
4779 && VAR_OR_FUNCTION_DECL_P (decl
))
4780 objc_check_global_decl (decl
);
4782 /* Add this decl to the current scope.
4783 TEM may equal DECL or it may be a previous decl of the same name. */
4784 tem
= pushdecl (decl
);
4786 if (initialized
&& DECL_EXTERNAL (tem
))
4788 DECL_EXTERNAL (tem
) = 0;
4789 TREE_STATIC (tem
) = 1;
4795 /* Subroutine of finish_decl. TYPE is the type of an uninitialized object
4796 DECL or the non-array element type if DECL is an uninitialized array.
4797 If that type has a const member, diagnose this. */
4800 diagnose_uninitialized_cst_member (tree decl
, tree type
)
4803 for (field
= TYPE_FIELDS (type
); field
; field
= TREE_CHAIN (field
))
4806 if (TREE_CODE (field
) != FIELD_DECL
)
4808 field_type
= strip_array_types (TREE_TYPE (field
));
4810 if (TYPE_QUALS (field_type
) & TYPE_QUAL_CONST
)
4812 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wc___compat
,
4813 "uninitialized const member in %qT is invalid in C++",
4814 strip_array_types (TREE_TYPE (decl
)));
4815 inform (DECL_SOURCE_LOCATION (field
), "%qD should be initialized", field
);
4818 if (RECORD_OR_UNION_TYPE_P (field_type
))
4819 diagnose_uninitialized_cst_member (decl
, field_type
);
4823 /* Finish processing of a declaration;
4824 install its initial value.
4825 If ORIGTYPE is not NULL_TREE, it is the original type of INIT.
4826 If the length of an array type is not known before,
4827 it must be determined now, from the initial value, or it is an error.
4829 INIT_LOC is the location of the initial value. */
4832 finish_decl (tree decl
, location_t init_loc
, tree init
,
4833 tree origtype
, tree asmspec_tree
)
4836 bool was_incomplete
= (DECL_SIZE (decl
) == NULL_TREE
);
4837 const char *asmspec
= 0;
4839 /* If a name was specified, get the string. */
4840 if (VAR_OR_FUNCTION_DECL_P (decl
)
4841 && DECL_FILE_SCOPE_P (decl
))
4842 asmspec_tree
= maybe_apply_renaming_pragma (decl
, asmspec_tree
);
4844 asmspec
= TREE_STRING_POINTER (asmspec_tree
);
4847 && TREE_STATIC (decl
)
4848 && global_bindings_p ())
4849 /* So decl is a global variable. Record the types it uses
4850 so that we can decide later to emit debug info for them. */
4851 record_types_used_by_current_var_decl (decl
);
4853 /* If `start_decl' didn't like having an initialization, ignore it now. */
4854 if (init
!= NULL_TREE
&& DECL_INITIAL (decl
) == NULL_TREE
)
4857 /* Don't crash if parm is initialized. */
4858 if (TREE_CODE (decl
) == PARM_DECL
)
4862 store_init_value (init_loc
, decl
, init
, origtype
);
4864 if (c_dialect_objc () && (VAR_OR_FUNCTION_DECL_P (decl
)
4865 || TREE_CODE (decl
) == FIELD_DECL
))
4866 objc_check_decl (decl
);
4868 type
= TREE_TYPE (decl
);
4870 /* Deduce size of array from initialization, if not already known. */
4871 if (TREE_CODE (type
) == ARRAY_TYPE
4872 && TYPE_DOMAIN (type
) == NULL_TREE
4873 && TREE_CODE (decl
) != TYPE_DECL
)
4876 = (TREE_STATIC (decl
)
4877 /* Even if pedantic, an external linkage array
4878 may have incomplete type at first. */
4879 ? pedantic
&& !TREE_PUBLIC (decl
)
4880 : !DECL_EXTERNAL (decl
));
4882 = complete_array_type (&TREE_TYPE (decl
), DECL_INITIAL (decl
),
4885 /* Get the completed type made by complete_array_type. */
4886 type
= TREE_TYPE (decl
);
4891 error ("initializer fails to determine size of %q+D", decl
);
4896 error ("array size missing in %q+D", decl
);
4897 /* If a `static' var's size isn't known,
4898 make it extern as well as static, so it does not get
4900 If it is not `static', then do not mark extern;
4901 finish_incomplete_decl will give it a default size
4902 and it will get allocated. */
4903 else if (!pedantic
&& TREE_STATIC (decl
) && !TREE_PUBLIC (decl
))
4904 DECL_EXTERNAL (decl
) = 1;
4908 error ("zero or negative size array %q+D", decl
);
4912 /* For global variables, update the copy of the type that
4913 exists in the binding. */
4914 if (TREE_PUBLIC (decl
))
4916 struct c_binding
*b_ext
= I_SYMBOL_BINDING (DECL_NAME (decl
));
4917 while (b_ext
&& !B_IN_EXTERNAL_SCOPE (b_ext
))
4918 b_ext
= b_ext
->shadowed
;
4919 if (b_ext
&& TREE_CODE (decl
) == TREE_CODE (b_ext
->decl
))
4921 if (b_ext
->u
.type
&& comptypes (b_ext
->u
.type
, type
))
4922 b_ext
->u
.type
= composite_type (b_ext
->u
.type
, type
);
4924 b_ext
->u
.type
= type
;
4933 if (DECL_INITIAL (decl
))
4934 TREE_TYPE (DECL_INITIAL (decl
)) = type
;
4936 relayout_decl (decl
);
4941 if (init
&& TREE_CODE (init
) == CONSTRUCTOR
)
4942 add_flexible_array_elts_to_size (decl
, init
);
4944 if (DECL_SIZE (decl
) == NULL_TREE
&& TREE_TYPE (decl
) != error_mark_node
4945 && COMPLETE_TYPE_P (TREE_TYPE (decl
)))
4946 layout_decl (decl
, 0);
4948 if (DECL_SIZE (decl
) == NULL_TREE
4949 /* Don't give an error if we already gave one earlier. */
4950 && TREE_TYPE (decl
) != error_mark_node
4951 && (TREE_STATIC (decl
)
4952 /* A static variable with an incomplete type
4953 is an error if it is initialized.
4954 Also if it is not file scope.
4955 Otherwise, let it through, but if it is not `extern'
4956 then it may cause an error message later. */
4957 ? (DECL_INITIAL (decl
) != NULL_TREE
4958 || !DECL_FILE_SCOPE_P (decl
))
4959 /* An automatic variable with an incomplete type
4961 : !DECL_EXTERNAL (decl
)))
4963 error ("storage size of %q+D isn%'t known", decl
);
4964 TREE_TYPE (decl
) = error_mark_node
;
4967 if ((RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl
))
4968 || TREE_CODE (TREE_TYPE (decl
)) == ENUMERAL_TYPE
)
4969 && DECL_SIZE (decl
) == NULL_TREE
4970 && TREE_STATIC (decl
))
4971 incomplete_record_decls
.safe_push (decl
);
4973 if (is_global_var (decl
) && DECL_SIZE (decl
) != NULL_TREE
)
4975 if (TREE_CODE (DECL_SIZE (decl
)) == INTEGER_CST
)
4976 constant_expression_warning (DECL_SIZE (decl
));
4979 error ("storage size of %q+D isn%'t constant", decl
);
4980 TREE_TYPE (decl
) = error_mark_node
;
4984 if (TREE_USED (type
))
4986 TREE_USED (decl
) = 1;
4987 DECL_READ_P (decl
) = 1;
4991 /* If this is a function and an assembler name is specified, reset DECL_RTL
4992 so we can give it its new name. Also, update builtin_decl if it
4993 was a normal built-in. */
4994 if (TREE_CODE (decl
) == FUNCTION_DECL
&& asmspec
)
4996 if (DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
)
4997 set_builtin_user_assembler_name (decl
, asmspec
);
4998 set_user_assembler_name (decl
, asmspec
);
5001 /* If #pragma weak was used, mark the decl weak now. */
5002 maybe_apply_pragma_weak (decl
);
5004 /* Output the assembler code and/or RTL code for variables and functions,
5005 unless the type is an undefined structure or union.
5006 If not, it will get done when the type is completed. */
5008 if (VAR_OR_FUNCTION_DECL_P (decl
))
5010 /* Determine the ELF visibility. */
5011 if (TREE_PUBLIC (decl
))
5012 c_determine_visibility (decl
);
5014 /* This is a no-op in c-lang.c or something real in objc-act.c. */
5015 if (c_dialect_objc ())
5016 objc_check_decl (decl
);
5020 /* If this is not a static variable, issue a warning.
5021 It doesn't make any sense to give an ASMSPEC for an
5022 ordinary, non-register local variable. Historically,
5023 GCC has accepted -- but ignored -- the ASMSPEC in
5025 if (!DECL_FILE_SCOPE_P (decl
)
5027 && !C_DECL_REGISTER (decl
)
5028 && !TREE_STATIC (decl
))
5029 warning (0, "ignoring asm-specifier for non-static local "
5030 "variable %q+D", decl
);
5032 set_user_assembler_name (decl
, asmspec
);
5035 if (DECL_FILE_SCOPE_P (decl
))
5037 if (DECL_INITIAL (decl
) == NULL_TREE
5038 || DECL_INITIAL (decl
) == error_mark_node
)
5039 /* Don't output anything
5040 when a tentative file-scope definition is seen.
5041 But at end of compilation, do output code for them. */
5042 DECL_DEFER_OUTPUT (decl
) = 1;
5043 if (asmspec
&& VAR_P (decl
) && C_DECL_REGISTER (decl
))
5044 DECL_HARD_REGISTER (decl
) = 1;
5045 rest_of_decl_compilation (decl
, true, 0);
5049 /* In conjunction with an ASMSPEC, the `register'
5050 keyword indicates that we should place the variable
5051 in a particular register. */
5052 if (asmspec
&& C_DECL_REGISTER (decl
))
5054 DECL_HARD_REGISTER (decl
) = 1;
5055 /* This cannot be done for a structure with volatile
5056 fields, on which DECL_REGISTER will have been
5058 if (!DECL_REGISTER (decl
))
5059 error ("cannot put object with volatile field into register");
5062 if (TREE_CODE (decl
) != FUNCTION_DECL
)
5064 /* If we're building a variable sized type, and we might be
5065 reachable other than via the top of the current binding
5066 level, then create a new BIND_EXPR so that we deallocate
5067 the object at the right time. */
5068 /* Note that DECL_SIZE can be null due to errors. */
5069 if (DECL_SIZE (decl
)
5070 && !TREE_CONSTANT (DECL_SIZE (decl
))
5071 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list
))
5074 bind
= build3 (BIND_EXPR
, void_type_node
, NULL
, NULL
, NULL
);
5075 TREE_SIDE_EFFECTS (bind
) = 1;
5077 BIND_EXPR_BODY (bind
) = push_stmt_list ();
5079 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl
),
5085 if (!DECL_FILE_SCOPE_P (decl
))
5087 /* Recompute the RTL of a local array now
5088 if it used to be an incomplete type. */
5089 if (was_incomplete
&& !is_global_var (decl
))
5091 /* If we used it already as memory, it must stay in memory. */
5092 TREE_ADDRESSABLE (decl
) = TREE_USED (decl
);
5093 /* If it's still incomplete now, no init will save it. */
5094 if (DECL_SIZE (decl
) == NULL_TREE
)
5095 DECL_INITIAL (decl
) = NULL_TREE
;
5100 if (TREE_CODE (decl
) == TYPE_DECL
)
5102 if (!DECL_FILE_SCOPE_P (decl
)
5103 && variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
5104 add_stmt (build_stmt (DECL_SOURCE_LOCATION (decl
), DECL_EXPR
, decl
));
5106 rest_of_decl_compilation (decl
, DECL_FILE_SCOPE_P (decl
), 0);
5109 /* Install a cleanup (aka destructor) if one was given. */
5110 if (VAR_P (decl
) && !TREE_STATIC (decl
))
5112 tree attr
= lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl
));
5115 tree cleanup_id
= TREE_VALUE (TREE_VALUE (attr
));
5116 tree cleanup_decl
= lookup_name (cleanup_id
);
5118 vec
<tree
, va_gc
> *v
;
5120 /* Build "cleanup(&decl)" for the destructor. */
5121 cleanup
= build_unary_op (input_location
, ADDR_EXPR
, decl
, false);
5123 v
->quick_push (cleanup
);
5124 cleanup
= c_build_function_call_vec (DECL_SOURCE_LOCATION (decl
),
5125 vNULL
, cleanup_decl
, v
, NULL
);
5128 /* Don't warn about decl unused; the cleanup uses it. */
5129 TREE_USED (decl
) = 1;
5130 TREE_USED (cleanup_decl
) = 1;
5131 DECL_READ_P (decl
) = 1;
5133 push_cleanup (decl
, cleanup
, false);
5139 && !DECL_EXTERNAL (decl
)
5140 && DECL_INITIAL (decl
) == NULL_TREE
)
5142 type
= strip_array_types (type
);
5143 if (TREE_READONLY (decl
))
5144 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wc___compat
,
5145 "uninitialized const %qD is invalid in C++", decl
);
5146 else if (RECORD_OR_UNION_TYPE_P (type
)
5147 && C_TYPE_FIELDS_READONLY (type
))
5148 diagnose_uninitialized_cst_member (decl
, type
);
5151 invoke_plugin_callbacks (PLUGIN_FINISH_DECL
, decl
);
5154 /* Given a parsed parameter declaration, decode it into a PARM_DECL.
5155 EXPR is NULL or a pointer to an expression that needs to be
5156 evaluated for the side effects of array size expressions in the
5160 grokparm (const struct c_parm
*parm
, tree
*expr
)
5162 tree attrs
= parm
->attrs
;
5163 tree decl
= grokdeclarator (parm
->declarator
, parm
->specs
, PARM
, false,
5164 NULL
, &attrs
, expr
, NULL
, DEPRECATED_NORMAL
);
5166 decl_attributes (&decl
, attrs
, 0);
5171 /* Given a parsed parameter declaration, decode it into a PARM_DECL
5172 and push that on the current scope. EXPR is a pointer to an
5173 expression that needs to be evaluated for the side effects of array
5174 size expressions in the parameters. */
5177 push_parm_decl (const struct c_parm
*parm
, tree
*expr
)
5179 tree attrs
= parm
->attrs
;
5182 decl
= grokdeclarator (parm
->declarator
, parm
->specs
, PARM
, false, NULL
,
5183 &attrs
, expr
, NULL
, DEPRECATED_NORMAL
);
5184 decl_attributes (&decl
, attrs
, 0);
5186 decl
= pushdecl (decl
);
5188 finish_decl (decl
, input_location
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
5191 /* Mark all the parameter declarations to date as forward decls.
5192 Also diagnose use of this extension. */
5195 mark_forward_parm_decls (void)
5197 struct c_binding
*b
;
5199 if (pedantic
&& !current_scope
->warned_forward_parm_decls
)
5201 pedwarn (input_location
, OPT_Wpedantic
,
5202 "ISO C forbids forward parameter declarations");
5203 current_scope
->warned_forward_parm_decls
= true;
5206 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
5207 if (TREE_CODE (b
->decl
) == PARM_DECL
)
5208 TREE_ASM_WRITTEN (b
->decl
) = 1;
5211 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
5212 literal, which may be an incomplete array type completed by the
5213 initializer; INIT is a CONSTRUCTOR at LOC that initializes the compound
5214 literal. NON_CONST is true if the initializers contain something
5215 that cannot occur in a constant expression. */
5218 build_compound_literal (location_t loc
, tree type
, tree init
, bool non_const
)
5220 /* We do not use start_decl here because we have a type, not a declarator;
5221 and do not use finish_decl because the decl should be stored inside
5222 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
5227 if (type
== error_mark_node
5228 || init
== error_mark_node
)
5229 return error_mark_node
;
5231 decl
= build_decl (loc
, VAR_DECL
, NULL_TREE
, type
);
5232 DECL_EXTERNAL (decl
) = 0;
5233 TREE_PUBLIC (decl
) = 0;
5234 TREE_STATIC (decl
) = (current_scope
== file_scope
);
5235 DECL_CONTEXT (decl
) = current_function_decl
;
5236 TREE_USED (decl
) = 1;
5237 DECL_READ_P (decl
) = 1;
5238 DECL_ARTIFICIAL (decl
) = 1;
5239 DECL_IGNORED_P (decl
) = 1;
5240 TREE_TYPE (decl
) = type
;
5241 TREE_READONLY (decl
) = (TYPE_READONLY (type
)
5242 || (TREE_CODE (type
) == ARRAY_TYPE
5243 && TYPE_READONLY (TREE_TYPE (type
))));
5244 store_init_value (loc
, decl
, init
, NULL_TREE
);
5246 if (TREE_CODE (type
) == ARRAY_TYPE
&& !COMPLETE_TYPE_P (type
))
5248 int failure
= complete_array_type (&TREE_TYPE (decl
),
5249 DECL_INITIAL (decl
), true);
5250 /* If complete_array_type returns 3, it means that the
5251 initial value of the compound literal is empty. Allow it. */
5252 gcc_assert (failure
== 0 || failure
== 3);
5254 type
= TREE_TYPE (decl
);
5255 TREE_TYPE (DECL_INITIAL (decl
)) = type
;
5258 if (type
== error_mark_node
|| !COMPLETE_TYPE_P (type
))
5260 c_incomplete_type_error (loc
, NULL_TREE
, type
);
5261 return error_mark_node
;
5264 stmt
= build_stmt (DECL_SOURCE_LOCATION (decl
), DECL_EXPR
, decl
);
5265 complit
= build1 (COMPOUND_LITERAL_EXPR
, type
, stmt
);
5266 TREE_SIDE_EFFECTS (complit
) = 1;
5268 layout_decl (decl
, 0);
5270 if (TREE_STATIC (decl
))
5272 /* This decl needs a name for the assembler output. */
5273 set_compound_literal_name (decl
);
5274 DECL_DEFER_OUTPUT (decl
) = 1;
5275 DECL_COMDAT (decl
) = 1;
5277 rest_of_decl_compilation (decl
, 1, 0);
5282 complit
= build2 (C_MAYBE_CONST_EXPR
, type
, NULL
, complit
);
5283 C_MAYBE_CONST_EXPR_NON_CONST (complit
) = 1;
5289 /* Check the type of a compound literal. Here we just check that it
5290 is valid for C++. */
5293 check_compound_literal_type (location_t loc
, struct c_type_name
*type_name
)
5296 && (type_name
->specs
->typespec_kind
== ctsk_tagdef
5297 || type_name
->specs
->typespec_kind
== ctsk_tagfirstref
))
5298 warning_at (loc
, OPT_Wc___compat
,
5299 "defining a type in a compound literal is invalid in C++");
5302 /* Determine whether TYPE is a structure with a flexible array member,
5303 or a union containing such a structure (possibly recursively). */
5306 flexible_array_type_p (tree type
)
5309 switch (TREE_CODE (type
))
5312 x
= TYPE_FIELDS (type
);
5315 while (DECL_CHAIN (x
) != NULL_TREE
)
5317 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
5318 && TYPE_SIZE (TREE_TYPE (x
)) == NULL_TREE
5319 && TYPE_DOMAIN (TREE_TYPE (x
)) != NULL_TREE
5320 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x
))) == NULL_TREE
)
5324 for (x
= TYPE_FIELDS (type
); x
!= NULL_TREE
; x
= DECL_CHAIN (x
))
5326 if (flexible_array_type_p (TREE_TYPE (x
)))
5335 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
5336 replacing with appropriate values if they are invalid. */
5339 check_bitfield_type_and_width (location_t loc
, tree
*type
, tree
*width
,
5343 unsigned int max_width
;
5344 unsigned HOST_WIDE_INT w
;
5345 const char *name
= (orig_name
5346 ? identifier_to_locale (IDENTIFIER_POINTER (orig_name
))
5347 : _("<anonymous>"));
5349 /* Detect and ignore out of range field width and process valid
5351 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width
)))
5353 error_at (loc
, "bit-field %qs width not an integer constant", name
);
5354 *width
= integer_one_node
;
5358 if (TREE_CODE (*width
) != INTEGER_CST
)
5360 *width
= c_fully_fold (*width
, false, NULL
);
5361 if (TREE_CODE (*width
) == INTEGER_CST
)
5362 pedwarn (loc
, OPT_Wpedantic
,
5363 "bit-field %qs width not an integer constant expression",
5366 if (TREE_CODE (*width
) != INTEGER_CST
)
5368 error_at (loc
, "bit-field %qs width not an integer constant", name
);
5369 *width
= integer_one_node
;
5371 constant_expression_warning (*width
);
5372 if (tree_int_cst_sgn (*width
) < 0)
5374 error_at (loc
, "negative width in bit-field %qs", name
);
5375 *width
= integer_one_node
;
5377 else if (integer_zerop (*width
) && orig_name
)
5379 error_at (loc
, "zero width for bit-field %qs", name
);
5380 *width
= integer_one_node
;
5384 /* Detect invalid bit-field type. */
5385 if (TREE_CODE (*type
) != INTEGER_TYPE
5386 && TREE_CODE (*type
) != BOOLEAN_TYPE
5387 && TREE_CODE (*type
) != ENUMERAL_TYPE
)
5389 error_at (loc
, "bit-field %qs has invalid type", name
);
5390 *type
= unsigned_type_node
;
5393 type_mv
= TYPE_MAIN_VARIANT (*type
);
5394 if (!in_system_header_at (input_location
)
5395 && type_mv
!= integer_type_node
5396 && type_mv
!= unsigned_type_node
5397 && type_mv
!= boolean_type_node
)
5398 pedwarn_c90 (loc
, OPT_Wpedantic
,
5399 "type of bit-field %qs is a GCC extension", name
);
5401 max_width
= TYPE_PRECISION (*type
);
5403 if (0 < compare_tree_int (*width
, max_width
))
5405 error_at (loc
, "width of %qs exceeds its type", name
);
5407 *width
= build_int_cst (integer_type_node
, w
);
5410 w
= tree_to_uhwi (*width
);
5412 if (TREE_CODE (*type
) == ENUMERAL_TYPE
)
5414 struct lang_type
*lt
= TYPE_LANG_SPECIFIC (*type
);
5416 || w
< tree_int_cst_min_precision (lt
->enum_min
, TYPE_SIGN (*type
))
5417 || w
< tree_int_cst_min_precision (lt
->enum_max
, TYPE_SIGN (*type
)))
5418 warning_at (loc
, 0, "%qs is narrower than values of its type", name
);
5424 /* Print warning about variable length array if necessary. */
5427 warn_variable_length_array (tree name
, tree size
)
5429 if (TREE_CONSTANT (size
))
5432 pedwarn_c90 (input_location
, OPT_Wvla
,
5433 "ISO C90 forbids array %qE whose size "
5434 "can%'t be evaluated", name
);
5436 pedwarn_c90 (input_location
, OPT_Wvla
, "ISO C90 forbids array "
5437 "whose size can%'t be evaluated");
5442 pedwarn_c90 (input_location
, OPT_Wvla
,
5443 "ISO C90 forbids variable length array %qE", name
);
5445 pedwarn_c90 (input_location
, OPT_Wvla
, "ISO C90 forbids variable "
5450 /* Print warning about defaulting to int if necessary. */
5453 warn_defaults_to (location_t location
, int opt
, const char *gmsgid
, ...)
5455 diagnostic_info diagnostic
;
5457 rich_location
richloc (line_table
, location
);
5459 va_start (ap
, gmsgid
);
5460 diagnostic_set_info (&diagnostic
, gmsgid
, &ap
, &richloc
,
5461 flag_isoc99
? DK_PEDWARN
: DK_WARNING
);
5462 diagnostic
.option_index
= opt
;
5463 diagnostic_report_diagnostic (global_dc
, &diagnostic
);
5467 /* Returns the smallest location != UNKNOWN_LOCATION in LOCATIONS,
5468 considering only those c_declspec_words found in LIST, which
5469 must be terminated by cdw_number_of_elements. */
5472 smallest_type_quals_location (const location_t
*locations
,
5473 const c_declspec_word
*list
)
5475 location_t loc
= UNKNOWN_LOCATION
;
5476 while (*list
!= cdw_number_of_elements
)
5478 location_t newloc
= locations
[*list
];
5479 if (loc
== UNKNOWN_LOCATION
5480 || (newloc
!= UNKNOWN_LOCATION
&& newloc
< loc
))
5488 /* Given declspecs and a declarator,
5489 determine the name and type of the object declared
5490 and construct a ..._DECL node for it.
5491 (In one case we can return a ..._TYPE node instead.
5492 For invalid input we sometimes return NULL_TREE.)
5494 DECLSPECS is a c_declspecs structure for the declaration specifiers.
5496 DECL_CONTEXT says which syntactic context this declaration is in:
5497 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
5498 FUNCDEF for a function definition. Like NORMAL but a few different
5499 error messages in each case. Return value may be zero meaning
5500 this definition is too screwy to try to parse.
5501 PARM for a parameter declaration (either within a function prototype
5502 or before a function body). Make a PARM_DECL, or return void_type_node.
5503 TYPENAME if for a typename (in a cast or sizeof).
5504 Don't make a DECL node; just return the ..._TYPE node.
5505 FIELD for a struct or union field; make a FIELD_DECL.
5506 INITIALIZED is true if the decl has an initializer.
5507 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
5508 representing the width of the bit-field.
5509 DECL_ATTRS points to the list of attributes that should be added to this
5510 decl. Any nested attributes that belong on the decl itself will be
5512 If EXPR is not NULL, any expressions that need to be evaluated as
5513 part of evaluating variably modified types will be stored in *EXPR.
5514 If EXPR_CONST_OPERANDS is not NULL, *EXPR_CONST_OPERANDS will be
5515 set to indicate whether operands in *EXPR can be used in constant
5517 DEPRECATED_STATE is a deprecated_states value indicating whether
5518 deprecation warnings should be suppressed.
5520 In the TYPENAME case, DECLARATOR is really an absolute declarator.
5521 It may also be so in the PARM case, for a prototype where the
5522 argument type is specified but not the name.
5524 This function is where the complicated C meanings of `static'
5525 and `extern' are interpreted. */
5528 grokdeclarator (const struct c_declarator
*declarator
,
5529 struct c_declspecs
*declspecs
,
5530 enum decl_context decl_context
, bool initialized
, tree
*width
,
5531 tree
*decl_attrs
, tree
*expr
, bool *expr_const_operands
,
5532 enum deprecated_states deprecated_state
)
5534 tree type
= declspecs
->type
;
5535 bool threadp
= declspecs
->thread_p
;
5536 enum c_storage_class storage_class
= declspecs
->storage_class
;
5541 int type_quals
= TYPE_UNQUALIFIED
;
5542 tree name
= NULL_TREE
;
5543 bool funcdef_flag
= false;
5544 bool funcdef_syntax
= false;
5545 bool size_varies
= false;
5546 tree decl_attr
= declspecs
->decl_attr
;
5547 int array_ptr_quals
= TYPE_UNQUALIFIED
;
5548 tree array_ptr_attrs
= NULL_TREE
;
5549 bool array_parm_static
= false;
5550 bool array_parm_vla_unspec_p
= false;
5551 tree returned_attrs
= NULL_TREE
;
5552 bool bitfield
= width
!= NULL
;
5554 tree orig_qual_type
= NULL
;
5555 size_t orig_qual_indirect
= 0;
5556 struct c_arg_info
*arg_info
= 0;
5557 addr_space_t as1
, as2
, address_space
;
5558 location_t loc
= UNKNOWN_LOCATION
;
5560 bool expr_const_operands_dummy
;
5561 enum c_declarator_kind first_non_attr_kind
;
5562 unsigned int alignas_align
= 0;
5564 if (TREE_CODE (type
) == ERROR_MARK
)
5565 return error_mark_node
;
5569 expr_dummy
= NULL_TREE
;
5571 if (expr_const_operands
== NULL
)
5572 expr_const_operands
= &expr_const_operands_dummy
;
5574 if (declspecs
->expr
)
5577 *expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (declspecs
->expr
), *expr
,
5580 *expr
= declspecs
->expr
;
5582 *expr_const_operands
= declspecs
->expr_const_operands
;
5584 if (decl_context
== FUNCDEF
)
5585 funcdef_flag
= true, decl_context
= NORMAL
;
5587 /* Look inside a declarator for the name being declared
5588 and get it as an IDENTIFIER_NODE, for an error message. */
5590 const struct c_declarator
*decl
= declarator
;
5592 first_non_attr_kind
= cdk_attrs
;
5602 funcdef_syntax
= (decl
->kind
== cdk_function
);
5603 if (first_non_attr_kind
== cdk_attrs
)
5604 first_non_attr_kind
= decl
->kind
;
5605 decl
= decl
->declarator
;
5609 decl
= decl
->declarator
;
5616 if (first_non_attr_kind
== cdk_attrs
)
5617 first_non_attr_kind
= decl
->kind
;
5624 if (name
== NULL_TREE
)
5626 gcc_assert (decl_context
== PARM
5627 || decl_context
== TYPENAME
5628 || (decl_context
== FIELD
5629 && declarator
->kind
== cdk_id
));
5630 gcc_assert (!initialized
);
5634 /* A function definition's declarator must have the form of
5635 a function declarator. */
5637 if (funcdef_flag
&& !funcdef_syntax
)
5640 /* If this looks like a function definition, make it one,
5641 even if it occurs where parms are expected.
5642 Then store_parm_decls will reject it and not use it as a parm. */
5643 if (decl_context
== NORMAL
&& !funcdef_flag
&& current_scope
->parm_flag
)
5644 decl_context
= PARM
;
5646 if (declspecs
->deprecated_p
&& deprecated_state
!= DEPRECATED_SUPPRESS
)
5647 warn_deprecated_use (declspecs
->type
, declspecs
->decl_attr
);
5649 if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
5650 && current_scope
== file_scope
5651 && variably_modified_type_p (type
, NULL_TREE
))
5654 error_at (loc
, "variably modified %qE at file scope", name
);
5656 error_at (loc
, "variably modified field at file scope");
5657 type
= integer_type_node
;
5660 size_varies
= C_TYPE_VARIABLE_SIZE (type
) != 0;
5662 /* Diagnose defaulting to "int". */
5664 if (declspecs
->default_int_p
&& !in_system_header_at (input_location
))
5666 /* Issue a warning if this is an ISO C 99 program or if
5667 -Wreturn-type and this is a function, or if -Wimplicit;
5668 prefer the former warning since it is more explicit. */
5669 if ((warn_implicit_int
|| warn_return_type
|| flag_isoc99
)
5671 warn_about_return_type
= 1;
5675 warn_defaults_to (loc
, OPT_Wimplicit_int
,
5676 "type defaults to %<int%> in declaration "
5679 warn_defaults_to (loc
, OPT_Wimplicit_int
,
5680 "type defaults to %<int%> in type name");
5684 /* Adjust the type if a bit-field is being declared,
5685 -funsigned-bitfields applied and the type is not explicitly
5687 if (bitfield
&& !flag_signed_bitfields
&& !declspecs
->explicit_signed_p
5688 && TREE_CODE (type
) == INTEGER_TYPE
)
5689 type
= unsigned_type_for (type
);
5691 /* Figure out the type qualifiers for the declaration. There are
5692 two ways a declaration can become qualified. One is something
5693 like `const int i' where the `const' is explicit. Another is
5694 something like `typedef const int CI; CI i' where the type of the
5695 declaration contains the `const'. A third possibility is that
5696 there is a type qualifier on the element type of a typedefed
5697 array type, in which case we should extract that qualifier so
5698 that c_apply_type_quals_to_decl receives the full list of
5699 qualifiers to work with (C90 is not entirely clear about whether
5700 duplicate qualifiers should be diagnosed in this case, but it
5701 seems most appropriate to do so). */
5702 element_type
= strip_array_types (type
);
5703 constp
= declspecs
->const_p
+ TYPE_READONLY (element_type
);
5704 restrictp
= declspecs
->restrict_p
+ TYPE_RESTRICT (element_type
);
5705 volatilep
= declspecs
->volatile_p
+ TYPE_VOLATILE (element_type
);
5706 atomicp
= declspecs
->atomic_p
+ TYPE_ATOMIC (element_type
);
5707 as1
= declspecs
->address_space
;
5708 as2
= TYPE_ADDR_SPACE (element_type
);
5709 address_space
= ADDR_SPACE_GENERIC_P (as1
)? as2
: as1
;
5712 pedwarn_c90 (loc
, OPT_Wpedantic
, "duplicate %<const%>");
5714 pedwarn_c90 (loc
, OPT_Wpedantic
, "duplicate %<restrict%>");
5716 pedwarn_c90 (loc
, OPT_Wpedantic
, "duplicate %<volatile%>");
5718 pedwarn_c90 (loc
, OPT_Wpedantic
, "duplicate %<_Atomic%>");
5720 if (!ADDR_SPACE_GENERIC_P (as1
) && !ADDR_SPACE_GENERIC_P (as2
) && as1
!= as2
)
5721 error_at (loc
, "conflicting named address spaces (%s vs %s)",
5722 c_addr_space_name (as1
), c_addr_space_name (as2
));
5724 if ((TREE_CODE (type
) == ARRAY_TYPE
5725 || first_non_attr_kind
== cdk_array
)
5726 && TYPE_QUALS (element_type
))
5728 orig_qual_type
= type
;
5729 type
= TYPE_MAIN_VARIANT (type
);
5731 type_quals
= ((constp
? TYPE_QUAL_CONST
: 0)
5732 | (restrictp
? TYPE_QUAL_RESTRICT
: 0)
5733 | (volatilep
? TYPE_QUAL_VOLATILE
: 0)
5734 | (atomicp
? TYPE_QUAL_ATOMIC
: 0)
5735 | ENCODE_QUAL_ADDR_SPACE (address_space
));
5736 if (type_quals
!= TYPE_QUALS (element_type
))
5737 orig_qual_type
= NULL_TREE
;
5739 /* Applying the _Atomic qualifier to an array type (through the use
5740 of typedefs or typeof) must be detected here. If the qualifier
5741 is introduced later, any appearance of applying it to an array is
5742 actually applying it to an element of that array. */
5743 if (atomicp
&& TREE_CODE (type
) == ARRAY_TYPE
)
5744 error_at (loc
, "%<_Atomic%>-qualified array type");
5746 /* Warn about storage classes that are invalid for certain
5747 kinds of declarations (parameters, typenames, etc.). */
5751 || storage_class
== csc_auto
5752 || storage_class
== csc_register
5753 || storage_class
== csc_typedef
))
5755 if (storage_class
== csc_auto
)
5757 (current_scope
== file_scope
) ? 0 : OPT_Wpedantic
,
5758 "function definition declared %<auto%>");
5759 if (storage_class
== csc_register
)
5760 error_at (loc
, "function definition declared %<register%>");
5761 if (storage_class
== csc_typedef
)
5762 error_at (loc
, "function definition declared %<typedef%>");
5764 error_at (loc
, "function definition declared %qs",
5765 declspecs
->thread_gnu_p
? "__thread" : "_Thread_local");
5767 if (storage_class
== csc_auto
5768 || storage_class
== csc_register
5769 || storage_class
== csc_typedef
)
5770 storage_class
= csc_none
;
5772 else if (decl_context
!= NORMAL
&& (storage_class
!= csc_none
|| threadp
))
5774 if (decl_context
== PARM
&& storage_class
== csc_register
)
5778 switch (decl_context
)
5782 error_at (loc
, "storage class specified for structure "
5785 error_at (loc
, "storage class specified for structure field");
5789 error_at (loc
, "storage class specified for parameter %qE",
5792 error_at (loc
, "storage class specified for unnamed parameter");
5795 error_at (loc
, "storage class specified for typename");
5798 storage_class
= csc_none
;
5802 else if (storage_class
== csc_extern
5806 /* 'extern' with initialization is invalid if not at file scope. */
5807 if (current_scope
== file_scope
)
5809 /* It is fine to have 'extern const' when compiling at C
5810 and C++ intersection. */
5811 if (!(warn_cxx_compat
&& constp
))
5812 warning_at (loc
, 0, "%qE initialized and declared %<extern%>",
5816 error_at (loc
, "%qE has both %<extern%> and initializer", name
);
5818 else if (current_scope
== file_scope
)
5820 if (storage_class
== csc_auto
)
5821 error_at (loc
, "file-scope declaration of %qE specifies %<auto%>",
5823 if (pedantic
&& storage_class
== csc_register
)
5824 pedwarn (input_location
, OPT_Wpedantic
,
5825 "file-scope declaration of %qE specifies %<register%>", name
);
5829 if (storage_class
== csc_extern
&& funcdef_flag
)
5830 error_at (loc
, "nested function %qE declared %<extern%>", name
);
5831 else if (threadp
&& storage_class
== csc_none
)
5833 error_at (loc
, "function-scope %qE implicitly auto and declared "
5835 declspecs
->thread_gnu_p
? "__thread" : "_Thread_local");
5840 /* Now figure out the structure of the declarator proper.
5841 Descend through it, creating more complex types, until we reach
5842 the declared identifier (or NULL_TREE, in an absolute declarator).
5843 At each stage we maintain an unqualified version of the type
5844 together with any qualifiers that should be applied to it with
5845 c_build_qualified_type; this way, array types including
5846 multidimensional array types are first built up in unqualified
5847 form and then the qualified form is created with
5848 TYPE_MAIN_VARIANT pointing to the unqualified form. */
5850 while (declarator
&& declarator
->kind
!= cdk_id
)
5852 if (type
== error_mark_node
)
5854 declarator
= declarator
->declarator
;
5858 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
5859 a cdk_pointer (for *...),
5860 a cdk_function (for ...(...)),
5861 a cdk_attrs (for nested attributes),
5862 or a cdk_id (for the name being declared
5863 or the place in an absolute declarator
5864 where the name was omitted).
5865 For the last case, we have just exited the loop.
5867 At this point, TYPE is the type of elements of an array,
5868 or for a function to return, or for a pointer to point to.
5869 After this sequence of ifs, TYPE is the type of the
5870 array or function or pointer, and DECLARATOR has had its
5871 outermost layer removed. */
5873 if (array_ptr_quals
!= TYPE_UNQUALIFIED
5874 || array_ptr_attrs
!= NULL_TREE
5875 || array_parm_static
)
5877 /* Only the innermost declarator (making a parameter be of
5878 array type which is converted to pointer type)
5879 may have static or type qualifiers. */
5880 error_at (loc
, "static or type qualifiers in non-parameter array declarator");
5881 array_ptr_quals
= TYPE_UNQUALIFIED
;
5882 array_ptr_attrs
= NULL_TREE
;
5883 array_parm_static
= false;
5886 switch (declarator
->kind
)
5890 /* A declarator with embedded attributes. */
5891 tree attrs
= declarator
->u
.attrs
;
5892 const struct c_declarator
*inner_decl
;
5894 declarator
= declarator
->declarator
;
5895 inner_decl
= declarator
;
5896 while (inner_decl
->kind
== cdk_attrs
)
5897 inner_decl
= inner_decl
->declarator
;
5898 if (inner_decl
->kind
== cdk_id
)
5899 attr_flags
|= (int) ATTR_FLAG_DECL_NEXT
;
5900 else if (inner_decl
->kind
== cdk_function
)
5901 attr_flags
|= (int) ATTR_FLAG_FUNCTION_NEXT
;
5902 else if (inner_decl
->kind
== cdk_array
)
5903 attr_flags
|= (int) ATTR_FLAG_ARRAY_NEXT
;
5904 returned_attrs
= decl_attributes (&type
,
5905 chainon (returned_attrs
, attrs
),
5911 tree itype
= NULL_TREE
;
5912 tree size
= declarator
->u
.array
.dimen
;
5913 /* The index is a signed object `sizetype' bits wide. */
5914 tree index_type
= c_common_signed_type (sizetype
);
5916 array_ptr_quals
= declarator
->u
.array
.quals
;
5917 array_ptr_attrs
= declarator
->u
.array
.attrs
;
5918 array_parm_static
= declarator
->u
.array
.static_p
;
5919 array_parm_vla_unspec_p
= declarator
->u
.array
.vla_unspec_p
;
5921 declarator
= declarator
->declarator
;
5923 /* Check for some types that there cannot be arrays of. */
5925 if (VOID_TYPE_P (type
))
5928 error_at (loc
, "declaration of %qE as array of voids", name
);
5930 error_at (loc
, "declaration of type name as array of voids");
5931 type
= error_mark_node
;
5934 if (TREE_CODE (type
) == FUNCTION_TYPE
)
5937 error_at (loc
, "declaration of %qE as array of functions",
5940 error_at (loc
, "declaration of type name as array of "
5942 type
= error_mark_node
;
5945 if (pedantic
&& !in_system_header_at (input_location
)
5946 && flexible_array_type_p (type
))
5947 pedwarn (loc
, OPT_Wpedantic
,
5948 "invalid use of structure with flexible array member");
5950 if (size
== error_mark_node
)
5951 type
= error_mark_node
;
5953 if (type
== error_mark_node
)
5956 /* If size was specified, set ITYPE to a range-type for
5957 that size. Otherwise, ITYPE remains null. finish_decl
5958 may figure it out from an initial value. */
5962 bool size_maybe_const
= true;
5963 bool size_int_const
= (TREE_CODE (size
) == INTEGER_CST
5964 && !TREE_OVERFLOW (size
));
5965 bool this_size_varies
= false;
5967 /* Strip NON_LVALUE_EXPRs since we aren't using as an
5969 STRIP_TYPE_NOPS (size
);
5971 if (!INTEGRAL_TYPE_P (TREE_TYPE (size
)))
5974 error_at (loc
, "size of array %qE has non-integer type",
5978 "size of unnamed array has non-integer type");
5979 size
= integer_one_node
;
5981 /* This can happen with enum forward declaration. */
5982 else if (!COMPLETE_TYPE_P (TREE_TYPE (size
)))
5985 error_at (loc
, "size of array %qE has incomplete type",
5988 error_at (loc
, "size of unnamed array has incomplete "
5990 size
= integer_one_node
;
5993 size
= c_fully_fold (size
, false, &size_maybe_const
);
5995 if (pedantic
&& size_maybe_const
&& integer_zerop (size
))
5998 pedwarn (loc
, OPT_Wpedantic
,
5999 "ISO C forbids zero-size array %qE", name
);
6001 pedwarn (loc
, OPT_Wpedantic
,
6002 "ISO C forbids zero-size array");
6005 if (TREE_CODE (size
) == INTEGER_CST
&& size_maybe_const
)
6007 constant_expression_warning (size
);
6008 if (tree_int_cst_sgn (size
) < 0)
6011 error_at (loc
, "size of array %qE is negative", name
);
6013 error_at (loc
, "size of unnamed array is negative");
6014 size
= integer_one_node
;
6016 /* Handle a size folded to an integer constant but
6017 not an integer constant expression. */
6018 if (!size_int_const
)
6020 /* If this is a file scope declaration of an
6021 ordinary identifier, this is invalid code;
6022 diagnosing it here and not subsequently
6023 treating the type as variable-length avoids
6024 more confusing diagnostics later. */
6025 if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
6026 && current_scope
== file_scope
)
6027 pedwarn (input_location
, 0,
6028 "variably modified %qE at file scope",
6031 this_size_varies
= size_varies
= true;
6032 warn_variable_length_array (name
, size
);
6035 else if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
6036 && current_scope
== file_scope
)
6038 error_at (loc
, "variably modified %qE at file scope", name
);
6039 size
= integer_one_node
;
6043 /* Make sure the array size remains visibly
6044 nonconstant even if it is (eg) a const variable
6045 with known value. */
6046 this_size_varies
= size_varies
= true;
6047 warn_variable_length_array (name
, size
);
6048 if (sanitize_flags_p (SANITIZE_VLA
)
6049 && decl_context
== NORMAL
)
6051 /* Evaluate the array size only once. */
6052 size
= save_expr (size
);
6053 size
= c_fully_fold (size
, false, NULL
);
6054 size
= fold_build2 (COMPOUND_EXPR
, TREE_TYPE (size
),
6055 ubsan_instrument_vla (loc
, size
),
6060 if (integer_zerop (size
) && !this_size_varies
)
6062 /* A zero-length array cannot be represented with
6063 an unsigned index type, which is what we'll
6064 get with build_index_type. Create an
6065 open-ended range instead. */
6066 itype
= build_range_type (sizetype
, size
, NULL_TREE
);
6070 /* Arrange for the SAVE_EXPR on the inside of the
6071 MINUS_EXPR, which allows the -1 to get folded
6072 with the +1 that happens when building TYPE_SIZE. */
6074 size
= save_expr (size
);
6075 if (this_size_varies
&& TREE_CODE (size
) == INTEGER_CST
)
6076 size
= build2 (COMPOUND_EXPR
, TREE_TYPE (size
),
6077 integer_zero_node
, size
);
6079 /* Compute the maximum valid index, that is, size
6080 - 1. Do the calculation in index_type, so that
6081 if it is a variable the computations will be
6082 done in the proper mode. */
6083 itype
= fold_build2_loc (loc
, MINUS_EXPR
, index_type
,
6084 convert (index_type
, size
),
6085 convert (index_type
,
6088 /* The above overflows when size does not fit
6090 ??? While a size of INT_MAX+1 technically shouldn't
6091 cause an overflow (because we subtract 1), handling
6092 this case seems like an unnecessary complication. */
6093 if (TREE_CODE (size
) == INTEGER_CST
6094 && !int_fits_type_p (size
, index_type
))
6097 error_at (loc
, "size of array %qE is too large",
6100 error_at (loc
, "size of unnamed array is too large");
6101 type
= error_mark_node
;
6105 itype
= build_index_type (itype
);
6107 if (this_size_varies
)
6110 *expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (size
),
6114 *expr_const_operands
&= size_maybe_const
;
6117 else if (decl_context
== FIELD
)
6119 bool flexible_array_member
= false;
6120 if (array_parm_vla_unspec_p
)
6121 /* Field names can in fact have function prototype
6122 scope so [*] is disallowed here through making
6123 the field variably modified, not through being
6124 something other than a declaration with function
6129 const struct c_declarator
*t
= declarator
;
6130 while (t
->kind
== cdk_attrs
)
6132 flexible_array_member
= (t
->kind
== cdk_id
);
6134 if (flexible_array_member
6135 && !in_system_header_at (input_location
))
6136 pedwarn_c90 (loc
, OPT_Wpedantic
, "ISO C90 does not "
6137 "support flexible array members");
6139 /* ISO C99 Flexible array members are effectively
6140 identical to GCC's zero-length array extension. */
6141 if (flexible_array_member
|| array_parm_vla_unspec_p
)
6142 itype
= build_range_type (sizetype
, size_zero_node
,
6145 else if (decl_context
== PARM
)
6147 if (array_parm_vla_unspec_p
)
6149 itype
= build_range_type (sizetype
, size_zero_node
, NULL_TREE
);
6153 else if (decl_context
== TYPENAME
)
6155 if (array_parm_vla_unspec_p
)
6158 warning (0, "%<[*]%> not in a declaration");
6159 /* We use this to avoid messing up with incomplete
6160 array types of the same type, that would
6161 otherwise be modified below. */
6162 itype
= build_range_type (sizetype
, size_zero_node
,
6168 /* Complain about arrays of incomplete types. */
6169 if (!COMPLETE_TYPE_P (type
))
6171 error_at (loc
, "array type has incomplete element type %qT",
6173 /* See if we can be more helpful. */
6174 if (TREE_CODE (type
) == ARRAY_TYPE
)
6177 inform (loc
, "declaration of %qE as multidimensional "
6178 "array must have bounds for all dimensions "
6179 "except the first", name
);
6181 inform (loc
, "declaration of multidimensional array "
6182 "must have bounds for all dimensions except "
6185 type
= error_mark_node
;
6188 /* When itype is NULL, a shared incomplete array type is
6189 returned for all array of a given type. Elsewhere we
6190 make sure we don't complete that type before copying
6191 it, but here we want to make sure we don't ever
6192 modify the shared type, so we gcc_assert (itype)
6195 addr_space_t as
= DECODE_QUAL_ADDR_SPACE (type_quals
);
6196 if (!ADDR_SPACE_GENERIC_P (as
) && as
!= TYPE_ADDR_SPACE (type
))
6197 type
= build_qualified_type (type
,
6198 ENCODE_QUAL_ADDR_SPACE (as
));
6200 type
= build_array_type (type
, itype
);
6203 if (type
!= error_mark_node
)
6207 /* It is ok to modify type here even if itype is
6208 NULL: if size_varies, we're in a
6209 multi-dimensional array and the inner type has
6210 variable size, so the enclosing shared array type
6212 if (size
&& TREE_CODE (size
) == INTEGER_CST
)
6214 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
6215 C_TYPE_VARIABLE_SIZE (type
) = 1;
6218 /* The GCC extension for zero-length arrays differs from
6219 ISO flexible array members in that sizeof yields
6221 if (size
&& integer_zerop (size
))
6224 type
= build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
6225 TYPE_SIZE (type
) = bitsize_zero_node
;
6226 TYPE_SIZE_UNIT (type
) = size_zero_node
;
6227 SET_TYPE_STRUCTURAL_EQUALITY (type
);
6229 if (array_parm_vla_unspec_p
)
6232 /* The type is complete. C99 6.7.5.2p4 */
6233 type
= build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
6234 TYPE_SIZE (type
) = bitsize_zero_node
;
6235 TYPE_SIZE_UNIT (type
) = size_zero_node
;
6236 SET_TYPE_STRUCTURAL_EQUALITY (type
);
6239 if (!valid_array_size_p (loc
, type
, name
))
6240 type
= error_mark_node
;
6243 if (decl_context
!= PARM
6244 && (array_ptr_quals
!= TYPE_UNQUALIFIED
6245 || array_ptr_attrs
!= NULL_TREE
6246 || array_parm_static
))
6248 error_at (loc
, "static or type qualifiers in non-parameter "
6249 "array declarator");
6250 array_ptr_quals
= TYPE_UNQUALIFIED
;
6251 array_ptr_attrs
= NULL_TREE
;
6252 array_parm_static
= false;
6254 orig_qual_indirect
++;
6259 /* Say it's a definition only for the declarator closest
6260 to the identifier, apart possibly from some
6262 bool really_funcdef
= false;
6264 orig_qual_type
= NULL_TREE
;
6267 const struct c_declarator
*t
= declarator
->declarator
;
6268 while (t
->kind
== cdk_attrs
)
6270 really_funcdef
= (t
->kind
== cdk_id
);
6273 /* Declaring a function type. Make sure we have a valid
6274 type for the function to return. */
6275 if (type
== error_mark_node
)
6278 size_varies
= false;
6280 /* Warn about some types functions can't return. */
6281 if (TREE_CODE (type
) == FUNCTION_TYPE
)
6284 error_at (loc
, "%qE declared as function returning a "
6287 error_at (loc
, "type name declared as function "
6288 "returning a function");
6289 type
= integer_type_node
;
6291 if (TREE_CODE (type
) == ARRAY_TYPE
)
6294 error_at (loc
, "%qE declared as function returning an array",
6297 error_at (loc
, "type name declared as function returning "
6299 type
= integer_type_node
;
6302 /* Construct the function type and go to the next
6303 inner layer of declarator. */
6304 arg_info
= declarator
->u
.arg_info
;
6305 arg_types
= grokparms (arg_info
, really_funcdef
);
6307 /* Type qualifiers before the return type of the function
6308 qualify the return type, not the function type. */
6311 const enum c_declspec_word ignored_quals_list
[] =
6313 cdw_const
, cdw_volatile
, cdw_restrict
, cdw_address_space
,
6314 cdw_atomic
, cdw_number_of_elements
6316 location_t specs_loc
6317 = smallest_type_quals_location (declspecs
->locations
,
6318 ignored_quals_list
);
6319 if (specs_loc
== UNKNOWN_LOCATION
)
6320 specs_loc
= declspecs
->locations
[cdw_typedef
];
6321 if (specs_loc
== UNKNOWN_LOCATION
)
6324 /* Type qualifiers on a function return type are
6325 normally permitted by the standard but have no
6326 effect, so give a warning at -Wreturn-type.
6327 Qualifiers on a void return type are banned on
6328 function definitions in ISO C; GCC used to used
6329 them for noreturn functions. The resolution of C11
6330 DR#423 means qualifiers (other than _Atomic) are
6331 actually removed from the return type when
6332 determining the function type. */
6333 int quals_used
= type_quals
;
6335 quals_used
&= TYPE_QUAL_ATOMIC
;
6336 if (quals_used
&& VOID_TYPE_P (type
) && really_funcdef
)
6337 pedwarn (specs_loc
, 0,
6338 "function definition has qualified void return type");
6340 warning_at (specs_loc
, OPT_Wignored_qualifiers
,
6341 "type qualifiers ignored on function return type");
6343 /* Ensure an error for restrict on invalid types; the
6344 DR#423 resolution is not entirely clear about
6347 && (type_quals
& TYPE_QUAL_RESTRICT
)
6348 && (!POINTER_TYPE_P (type
)
6349 || !C_TYPE_OBJECT_OR_INCOMPLETE_P (TREE_TYPE (type
))))
6350 error_at (loc
, "invalid use of %<restrict%>");
6352 type
= c_build_qualified_type (type
, quals_used
);
6354 type_quals
= TYPE_UNQUALIFIED
;
6356 type
= build_function_type (type
, arg_types
);
6357 declarator
= declarator
->declarator
;
6359 /* Set the TYPE_CONTEXTs for each tagged type which is local to
6360 the formal parameter list of this FUNCTION_TYPE to point to
6361 the FUNCTION_TYPE node itself. */
6366 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info
->tags
, ix
, tag
)
6367 TYPE_CONTEXT (tag
->type
) = type
;
6373 /* Merge any constancy or volatility into the target type
6375 if ((type_quals
& TYPE_QUAL_ATOMIC
)
6376 && TREE_CODE (type
) == FUNCTION_TYPE
)
6379 "%<_Atomic%>-qualified function type");
6380 type_quals
&= ~TYPE_QUAL_ATOMIC
;
6382 else if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
6384 pedwarn (loc
, OPT_Wpedantic
,
6385 "ISO C forbids qualified function types");
6387 type
= c_build_qualified_type (type
, type_quals
, orig_qual_type
,
6388 orig_qual_indirect
);
6389 orig_qual_type
= NULL_TREE
;
6390 size_varies
= false;
6392 /* When the pointed-to type involves components of variable size,
6393 care must be taken to ensure that the size evaluation code is
6394 emitted early enough to dominate all the possible later uses
6395 and late enough for the variables on which it depends to have
6398 This is expected to happen automatically when the pointed-to
6399 type has a name/declaration of it's own, but special attention
6400 is required if the type is anonymous.
6402 We handle the NORMAL and FIELD contexts here by attaching an
6403 artificial TYPE_DECL to such pointed-to type. This forces the
6404 sizes evaluation at a safe point and ensures it is not deferred
6405 until e.g. within a deeper conditional context.
6407 We expect nothing to be needed here for PARM or TYPENAME.
6408 Pushing a TYPE_DECL at this point for TYPENAME would actually
6409 be incorrect, as we might be in the middle of an expression
6410 with side effects on the pointed-to type size "arguments" prior
6411 to the pointer declaration point and the fake TYPE_DECL in the
6412 enclosing context would force the size evaluation prior to the
6415 if (!TYPE_NAME (type
)
6416 && (decl_context
== NORMAL
|| decl_context
== FIELD
)
6417 && variably_modified_type_p (type
, NULL_TREE
))
6419 tree decl
= build_decl (loc
, TYPE_DECL
, NULL_TREE
, type
);
6420 DECL_ARTIFICIAL (decl
) = 1;
6422 finish_decl (decl
, loc
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
6423 TYPE_NAME (type
) = decl
;
6426 type
= c_build_pointer_type (type
);
6428 /* Process type qualifiers (such as const or volatile)
6429 that were given inside the `*'. */
6430 type_quals
= declarator
->u
.pointer_quals
;
6432 declarator
= declarator
->declarator
;
6439 *decl_attrs
= chainon (returned_attrs
, *decl_attrs
);
6441 /* Now TYPE has the actual type, apart from any qualifiers in
6444 /* Warn about address space used for things other than static memory or
6446 address_space
= DECODE_QUAL_ADDR_SPACE (type_quals
);
6447 if (!ADDR_SPACE_GENERIC_P (address_space
))
6449 if (decl_context
== NORMAL
)
6451 switch (storage_class
)
6454 error ("%qs combined with %<auto%> qualifier for %qE",
6455 c_addr_space_name (address_space
), name
);
6458 error ("%qs combined with %<register%> qualifier for %qE",
6459 c_addr_space_name (address_space
), name
);
6462 if (current_function_scope
)
6464 error ("%qs specified for auto variable %qE",
6465 c_addr_space_name (address_space
), name
);
6477 else if (decl_context
== PARM
&& TREE_CODE (type
) != ARRAY_TYPE
)
6480 error ("%qs specified for parameter %qE",
6481 c_addr_space_name (address_space
), name
);
6483 error ("%qs specified for unnamed parameter",
6484 c_addr_space_name (address_space
));
6486 else if (decl_context
== FIELD
)
6489 error ("%qs specified for structure field %qE",
6490 c_addr_space_name (address_space
), name
);
6492 error ("%qs specified for structure field",
6493 c_addr_space_name (address_space
));
6497 /* Check the type and width of a bit-field. */
6500 check_bitfield_type_and_width (loc
, &type
, width
, name
);
6501 /* C11 makes it implementation-defined (6.7.2.1#5) whether
6502 atomic types are permitted for bit-fields; we have no code to
6503 make bit-field accesses atomic, so disallow them. */
6504 if (type_quals
& TYPE_QUAL_ATOMIC
)
6507 error_at (loc
, "bit-field %qE has atomic type", name
);
6509 error_at (loc
, "bit-field has atomic type");
6510 type_quals
&= ~TYPE_QUAL_ATOMIC
;
6514 /* Reject invalid uses of _Alignas. */
6515 if (declspecs
->alignas_p
)
6517 if (storage_class
== csc_typedef
)
6518 error_at (loc
, "alignment specified for typedef %qE", name
);
6519 else if (storage_class
== csc_register
)
6520 error_at (loc
, "alignment specified for %<register%> object %qE",
6522 else if (decl_context
== PARM
)
6525 error_at (loc
, "alignment specified for parameter %qE", name
);
6527 error_at (loc
, "alignment specified for unnamed parameter");
6532 error_at (loc
, "alignment specified for bit-field %qE", name
);
6534 error_at (loc
, "alignment specified for unnamed bit-field");
6536 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
6537 error_at (loc
, "alignment specified for function %qE", name
);
6538 else if (declspecs
->align_log
!= -1 && TYPE_P (type
))
6540 alignas_align
= 1U << declspecs
->align_log
;
6541 if (alignas_align
< min_align_of_type (type
))
6544 error_at (loc
, "%<_Alignas%> specifiers cannot reduce "
6545 "alignment of %qE", name
);
6547 error_at (loc
, "%<_Alignas%> specifiers cannot reduce "
6548 "alignment of unnamed field");
6554 /* If this is declaring a typedef name, return a TYPE_DECL. */
6556 if (storage_class
== csc_typedef
)
6559 if ((type_quals
& TYPE_QUAL_ATOMIC
)
6560 && TREE_CODE (type
) == FUNCTION_TYPE
)
6563 "%<_Atomic%>-qualified function type");
6564 type_quals
&= ~TYPE_QUAL_ATOMIC
;
6566 else if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
6568 pedwarn (loc
, OPT_Wpedantic
,
6569 "ISO C forbids qualified function types");
6571 type
= c_build_qualified_type (type
, type_quals
, orig_qual_type
,
6572 orig_qual_indirect
);
6573 decl
= build_decl (declarator
->id_loc
,
6574 TYPE_DECL
, declarator
->u
.id
, type
);
6575 if (declspecs
->explicit_signed_p
)
6576 C_TYPEDEF_EXPLICITLY_SIGNED (decl
) = 1;
6577 if (declspecs
->inline_p
)
6578 pedwarn (loc
, 0,"typedef %q+D declared %<inline%>", decl
);
6579 if (declspecs
->noreturn_p
)
6580 pedwarn (loc
, 0,"typedef %q+D declared %<_Noreturn%>", decl
);
6582 if (warn_cxx_compat
&& declarator
->u
.id
!= NULL_TREE
)
6584 struct c_binding
*b
= I_TAG_BINDING (declarator
->u
.id
);
6587 && b
->decl
!= NULL_TREE
6588 && (B_IN_CURRENT_SCOPE (b
)
6589 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
6590 && TYPE_MAIN_VARIANT (b
->decl
) != TYPE_MAIN_VARIANT (type
))
6592 warning_at (declarator
->id_loc
, OPT_Wc___compat
,
6593 ("using %qD as both a typedef and a tag is "
6596 if (b
->locus
!= UNKNOWN_LOCATION
)
6597 inform (b
->locus
, "originally defined here");
6604 /* If this is a type name (such as, in a cast or sizeof),
6605 compute the type and return it now. */
6607 if (decl_context
== TYPENAME
)
6609 /* Note that the grammar rejects storage classes in typenames
6611 gcc_assert (storage_class
== csc_none
&& !threadp
6612 && !declspecs
->inline_p
&& !declspecs
->noreturn_p
);
6613 if ((type_quals
& TYPE_QUAL_ATOMIC
)
6614 && TREE_CODE (type
) == FUNCTION_TYPE
)
6617 "%<_Atomic%>-qualified function type");
6618 type_quals
&= ~TYPE_QUAL_ATOMIC
;
6620 else if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
6622 pedwarn (loc
, OPT_Wpedantic
,
6623 "ISO C forbids const or volatile function types");
6625 type
= c_build_qualified_type (type
, type_quals
, orig_qual_type
,
6626 orig_qual_indirect
);
6630 if (pedantic
&& decl_context
== FIELD
6631 && variably_modified_type_p (type
, NULL_TREE
))
6634 pedwarn (loc
, OPT_Wpedantic
, "a member of a structure or union cannot "
6635 "have a variably modified type");
6638 /* Aside from typedefs and type names (handle above),
6639 `void' at top level (not within pointer)
6640 is allowed only in public variables.
6641 We don't complain about parms either, but that is because
6642 a better error message can be made later. */
6644 if (VOID_TYPE_P (type
) && decl_context
!= PARM
6645 && !((decl_context
!= FIELD
&& TREE_CODE (type
) != FUNCTION_TYPE
)
6646 && (storage_class
== csc_extern
6647 || (current_scope
== file_scope
6648 && !(storage_class
== csc_static
6649 || storage_class
== csc_register
)))))
6651 error_at (loc
, "variable or field %qE declared void", name
);
6652 type
= integer_type_node
;
6655 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
6656 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
6661 if (decl_context
== PARM
)
6664 bool array_parameter_p
= false;
6666 /* A parameter declared as an array of T is really a pointer to T.
6667 One declared as a function is really a pointer to a function. */
6669 if (TREE_CODE (type
) == ARRAY_TYPE
)
6671 /* Transfer const-ness of array into that of type pointed to. */
6672 type
= TREE_TYPE (type
);
6673 if (orig_qual_type
!= NULL_TREE
)
6675 if (orig_qual_indirect
== 0)
6676 orig_qual_type
= TREE_TYPE (orig_qual_type
);
6678 orig_qual_indirect
--;
6681 type
= c_build_qualified_type (type
, type_quals
, orig_qual_type
,
6682 orig_qual_indirect
);
6683 type
= c_build_pointer_type (type
);
6684 type_quals
= array_ptr_quals
;
6686 type
= c_build_qualified_type (type
, type_quals
);
6688 /* We don't yet implement attributes in this context. */
6689 if (array_ptr_attrs
!= NULL_TREE
)
6690 warning_at (loc
, OPT_Wattributes
,
6691 "attributes in parameter array declarator ignored");
6693 size_varies
= false;
6694 array_parameter_p
= true;
6696 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
6698 if (type_quals
& TYPE_QUAL_ATOMIC
)
6701 "%<_Atomic%>-qualified function type");
6702 type_quals
&= ~TYPE_QUAL_ATOMIC
;
6704 else if (type_quals
)
6705 pedwarn (loc
, OPT_Wpedantic
,
6706 "ISO C forbids qualified function types");
6708 type
= c_build_qualified_type (type
, type_quals
);
6709 type
= c_build_pointer_type (type
);
6710 type_quals
= TYPE_UNQUALIFIED
;
6712 else if (type_quals
)
6713 type
= c_build_qualified_type (type
, type_quals
);
6715 decl
= build_decl (declarator
->id_loc
,
6716 PARM_DECL
, declarator
->u
.id
, type
);
6718 C_DECL_VARIABLE_SIZE (decl
) = 1;
6719 C_ARRAY_PARAMETER (decl
) = array_parameter_p
;
6721 /* Compute the type actually passed in the parmlist,
6722 for the case where there is no prototype.
6723 (For example, shorts and chars are passed as ints.)
6724 When there is a prototype, this is overridden later. */
6726 if (type
== error_mark_node
)
6727 promoted_type
= type
;
6729 promoted_type
= c_type_promotes_to (type
);
6731 DECL_ARG_TYPE (decl
) = promoted_type
;
6732 if (declspecs
->inline_p
)
6733 pedwarn (loc
, 0, "parameter %q+D declared %<inline%>", decl
);
6734 if (declspecs
->noreturn_p
)
6735 pedwarn (loc
, 0, "parameter %q+D declared %<_Noreturn%>", decl
);
6737 else if (decl_context
== FIELD
)
6739 /* Note that the grammar rejects storage classes in typenames
6741 gcc_assert (storage_class
== csc_none
&& !threadp
6742 && !declspecs
->inline_p
&& !declspecs
->noreturn_p
);
6744 /* Structure field. It may not be a function. */
6746 if (TREE_CODE (type
) == FUNCTION_TYPE
)
6748 error_at (loc
, "field %qE declared as a function", name
);
6749 type
= build_pointer_type (type
);
6751 else if (TREE_CODE (type
) != ERROR_MARK
6752 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type
))
6755 error_at (loc
, "field %qE has incomplete type", name
);
6757 error_at (loc
, "unnamed field has incomplete type");
6758 type
= error_mark_node
;
6760 else if (TREE_CODE (type
) == ARRAY_TYPE
6761 && TYPE_DOMAIN (type
) == NULL_TREE
)
6763 /* We have a flexible array member through a typedef.
6764 Set suitable range. Whether this is a correct position
6765 for a flexible array member will be determined elsewhere. */
6766 if (!in_system_header_at (input_location
))
6767 pedwarn_c90 (loc
, OPT_Wpedantic
, "ISO C90 does not "
6768 "support flexible array members");
6769 type
= build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
6770 TYPE_DOMAIN (type
) = build_range_type (sizetype
, size_zero_node
,
6772 if (orig_qual_indirect
== 0)
6773 orig_qual_type
= NULL_TREE
;
6775 type
= c_build_qualified_type (type
, type_quals
, orig_qual_type
,
6776 orig_qual_indirect
);
6777 decl
= build_decl (declarator
->id_loc
,
6778 FIELD_DECL
, declarator
->u
.id
, type
);
6779 DECL_NONADDRESSABLE_P (decl
) = bitfield
;
6780 if (bitfield
&& !declarator
->u
.id
)
6781 TREE_NO_WARNING (decl
) = 1;
6784 C_DECL_VARIABLE_SIZE (decl
) = 1;
6786 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
6788 if (storage_class
== csc_register
|| threadp
)
6790 error_at (loc
, "invalid storage class for function %qE", name
);
6792 else if (current_scope
!= file_scope
)
6794 /* Function declaration not at file scope. Storage
6795 classes other than `extern' are not allowed, C99
6796 6.7.1p5, and `extern' makes no difference. However,
6797 GCC allows 'auto', perhaps with 'inline', to support
6798 nested functions. */
6799 if (storage_class
== csc_auto
)
6800 pedwarn (loc
, OPT_Wpedantic
,
6801 "invalid storage class for function %qE", name
);
6802 else if (storage_class
== csc_static
)
6804 error_at (loc
, "invalid storage class for function %qE", name
);
6806 storage_class
= declspecs
->storage_class
= csc_none
;
6812 decl
= build_decl (declarator
->id_loc
,
6813 FUNCTION_DECL
, declarator
->u
.id
, type
);
6814 decl
= build_decl_attribute_variant (decl
, decl_attr
);
6816 if (type_quals
& TYPE_QUAL_ATOMIC
)
6819 "%<_Atomic%>-qualified function type");
6820 type_quals
&= ~TYPE_QUAL_ATOMIC
;
6822 else if (pedantic
&& type_quals
&& !DECL_IN_SYSTEM_HEADER (decl
))
6823 pedwarn (loc
, OPT_Wpedantic
,
6824 "ISO C forbids qualified function types");
6826 /* Every function declaration is an external reference
6827 (DECL_EXTERNAL) except for those which are not at file
6828 scope and are explicitly declared "auto". This is
6829 forbidden by standard C (C99 6.7.1p5) and is interpreted by
6830 GCC to signify a forward declaration of a nested function. */
6831 if (storage_class
== csc_auto
&& current_scope
!= file_scope
)
6832 DECL_EXTERNAL (decl
) = 0;
6833 /* In C99, a function which is declared 'inline' with 'extern'
6834 is not an external reference (which is confusing). It
6835 means that the later definition of the function must be output
6836 in this file, C99 6.7.4p6. In GNU C89, a function declared
6837 'extern inline' is an external reference. */
6838 else if (declspecs
->inline_p
&& storage_class
!= csc_static
)
6839 DECL_EXTERNAL (decl
) = ((storage_class
== csc_extern
)
6840 == flag_gnu89_inline
);
6842 DECL_EXTERNAL (decl
) = !initialized
;
6844 /* Record absence of global scope for `static' or `auto'. */
6846 = !(storage_class
== csc_static
|| storage_class
== csc_auto
);
6848 /* For a function definition, record the argument information
6849 block where store_parm_decls will look for it. */
6851 current_function_arg_info
= arg_info
;
6853 if (declspecs
->default_int_p
)
6854 C_FUNCTION_IMPLICIT_INT (decl
) = 1;
6856 /* Record presence of `inline' and `_Noreturn', if it is
6858 if (flag_hosted
&& MAIN_NAME_P (declarator
->u
.id
))
6860 if (declspecs
->inline_p
)
6861 pedwarn (loc
, 0, "cannot inline function %<main%>");
6862 if (declspecs
->noreturn_p
)
6863 pedwarn (loc
, 0, "%<main%> declared %<_Noreturn%>");
6867 if (declspecs
->inline_p
)
6868 /* Record that the function is declared `inline'. */
6869 DECL_DECLARED_INLINE_P (decl
) = 1;
6870 if (declspecs
->noreturn_p
)
6873 pedwarn_c99 (loc
, OPT_Wpedantic
,
6874 "ISO C99 does not support %<_Noreturn%>");
6876 pedwarn_c99 (loc
, OPT_Wpedantic
,
6877 "ISO C90 does not support %<_Noreturn%>");
6878 TREE_THIS_VOLATILE (decl
) = 1;
6884 /* It's a variable. */
6885 /* An uninitialized decl with `extern' is a reference. */
6886 int extern_ref
= !initialized
&& storage_class
== csc_extern
;
6888 type
= c_build_qualified_type (type
, type_quals
, orig_qual_type
,
6889 orig_qual_indirect
);
6891 /* C99 6.2.2p7: It is invalid (compile-time undefined
6892 behavior) to create an 'extern' declaration for a
6893 variable if there is a global declaration that is
6894 'static' and the global declaration is not visible.
6895 (If the static declaration _is_ currently visible,
6896 the 'extern' declaration is taken to refer to that decl.) */
6897 if (extern_ref
&& current_scope
!= file_scope
)
6899 tree global_decl
= identifier_global_value (declarator
->u
.id
);
6900 tree visible_decl
= lookup_name (declarator
->u
.id
);
6903 && global_decl
!= visible_decl
6904 && VAR_P (global_decl
)
6905 && !TREE_PUBLIC (global_decl
))
6906 error_at (loc
, "variable previously declared %<static%> "
6907 "redeclared %<extern%>");
6910 decl
= build_decl (declarator
->id_loc
,
6911 VAR_DECL
, declarator
->u
.id
, type
);
6913 C_DECL_VARIABLE_SIZE (decl
) = 1;
6915 if (declspecs
->inline_p
)
6916 pedwarn (loc
, 0, "variable %q+D declared %<inline%>", decl
);
6917 if (declspecs
->noreturn_p
)
6918 pedwarn (loc
, 0, "variable %q+D declared %<_Noreturn%>", decl
);
6920 /* At file scope, an initialized extern declaration may follow
6921 a static declaration. In that case, DECL_EXTERNAL will be
6922 reset later in start_decl. */
6923 DECL_EXTERNAL (decl
) = (storage_class
== csc_extern
);
6925 /* At file scope, the presence of a `static' or `register' storage
6926 class specifier, or the absence of all storage class specifiers
6927 makes this declaration a definition (perhaps tentative). Also,
6928 the absence of `static' makes it public. */
6929 if (current_scope
== file_scope
)
6931 TREE_PUBLIC (decl
) = storage_class
!= csc_static
;
6932 TREE_STATIC (decl
) = !extern_ref
;
6934 /* Not at file scope, only `static' makes a static definition. */
6937 TREE_STATIC (decl
) = (storage_class
== csc_static
);
6938 TREE_PUBLIC (decl
) = extern_ref
;
6942 set_decl_tls_model (decl
, decl_default_tls_model (decl
));
6945 if ((storage_class
== csc_extern
6946 || (storage_class
== csc_none
6947 && TREE_CODE (type
) == FUNCTION_TYPE
6949 && variably_modified_type_p (type
, NULL_TREE
))
6952 if (TREE_CODE (type
) == FUNCTION_TYPE
)
6953 error_at (loc
, "non-nested function with variably modified type");
6955 error_at (loc
, "object with variably modified type must have "
6959 /* Record `register' declaration for warnings on &
6960 and in case doing stupid register allocation. */
6962 if (storage_class
== csc_register
)
6964 C_DECL_REGISTER (decl
) = 1;
6965 DECL_REGISTER (decl
) = 1;
6968 /* Record constancy and volatility. */
6969 c_apply_type_quals_to_decl (type_quals
, decl
);
6971 /* Apply _Alignas specifiers. */
6974 SET_DECL_ALIGN (decl
, alignas_align
* BITS_PER_UNIT
);
6975 DECL_USER_ALIGN (decl
) = 1;
6978 /* If a type has volatile components, it should be stored in memory.
6979 Otherwise, the fact that those components are volatile
6980 will be ignored, and would even crash the compiler.
6981 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
6982 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl
))
6983 && (VAR_P (decl
) || TREE_CODE (decl
) == PARM_DECL
6984 || TREE_CODE (decl
) == RESULT_DECL
))
6986 /* It is not an error for a structure with volatile fields to
6987 be declared register, but reset DECL_REGISTER since it
6988 cannot actually go in a register. */
6989 int was_reg
= C_DECL_REGISTER (decl
);
6990 C_DECL_REGISTER (decl
) = 0;
6991 DECL_REGISTER (decl
) = 0;
6992 c_mark_addressable (decl
);
6993 C_DECL_REGISTER (decl
) = was_reg
;
6996 /* This is the earliest point at which we might know the assembler
6997 name of a variable. Thus, if it's known before this, die horribly. */
6998 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl
));
7002 && TREE_PUBLIC (decl
)
7003 && TREE_STATIC (decl
)
7004 && (RECORD_OR_UNION_TYPE_P (TREE_TYPE (decl
))
7005 || TREE_CODE (TREE_TYPE (decl
)) == ENUMERAL_TYPE
)
7006 && TYPE_NAME (TREE_TYPE (decl
)) == NULL_TREE
)
7007 warning_at (DECL_SOURCE_LOCATION (decl
), OPT_Wc___compat
,
7008 ("non-local variable %qD with anonymous type is "
7009 "questionable in C++"),
7016 /* Decode the parameter-list info for a function type or function definition.
7017 The argument is the value returned by `get_parm_info' (or made in c-parse.c
7018 if there is an identifier list instead of a parameter decl list).
7019 These two functions are separate because when a function returns
7020 or receives functions then each is called multiple times but the order
7021 of calls is different. The last call to `grokparms' is always the one
7022 that contains the formal parameter names of a function definition.
7024 Return a list of arg types to use in the FUNCTION_TYPE for this function.
7026 FUNCDEF_FLAG is true for a function definition, false for
7027 a mere declaration. A nonempty identifier-list gets an error message
7028 when FUNCDEF_FLAG is false. */
7031 grokparms (struct c_arg_info
*arg_info
, bool funcdef_flag
)
7033 tree arg_types
= arg_info
->types
;
7035 if (funcdef_flag
&& arg_info
->had_vla_unspec
)
7037 /* A function definition isn't function prototype scope C99 6.2.1p4. */
7039 error ("%<[*]%> not allowed in other than function prototype scope");
7042 if (arg_types
== NULL_TREE
&& !funcdef_flag
7043 && !in_system_header_at (input_location
))
7044 warning (OPT_Wstrict_prototypes
,
7045 "function declaration isn%'t a prototype");
7047 if (arg_types
== error_mark_node
)
7048 /* Don't set TYPE_ARG_TYPES in this case. */
7051 else if (arg_types
&& TREE_CODE (TREE_VALUE (arg_types
)) == IDENTIFIER_NODE
)
7055 pedwarn (input_location
, 0, "parameter names (without types) in "
7056 "function declaration");
7057 arg_info
->parms
= NULL_TREE
;
7060 arg_info
->parms
= arg_info
->types
;
7062 arg_info
->types
= NULL_TREE
;
7067 tree parm
, type
, typelt
;
7068 unsigned int parmno
;
7070 /* If there is a parameter of incomplete type in a definition,
7071 this is an error. In a declaration this is valid, and a
7072 struct or union type may be completed later, before any calls
7073 or definition of the function. In the case where the tag was
7074 first declared within the parameter list, a warning has
7075 already been given. If a parameter has void type, then
7076 however the function cannot be defined or called, so
7079 for (parm
= arg_info
->parms
, typelt
= arg_types
, parmno
= 1;
7081 parm
= DECL_CHAIN (parm
), typelt
= TREE_CHAIN (typelt
), parmno
++)
7083 type
= TREE_VALUE (typelt
);
7084 if (type
== error_mark_node
)
7087 if (!COMPLETE_TYPE_P (type
))
7091 if (DECL_NAME (parm
))
7092 error_at (input_location
,
7093 "parameter %u (%q+D) has incomplete type",
7096 error_at (DECL_SOURCE_LOCATION (parm
),
7097 "parameter %u has incomplete type",
7100 TREE_VALUE (typelt
) = error_mark_node
;
7101 TREE_TYPE (parm
) = error_mark_node
;
7102 arg_types
= NULL_TREE
;
7104 else if (VOID_TYPE_P (type
))
7106 if (DECL_NAME (parm
))
7107 warning_at (input_location
, 0,
7108 "parameter %u (%q+D) has void type",
7111 warning_at (DECL_SOURCE_LOCATION (parm
), 0,
7112 "parameter %u has void type",
7117 if (DECL_NAME (parm
) && TREE_USED (parm
))
7118 warn_if_shadowing (parm
);
7124 /* Allocate and initialize a c_arg_info structure from the parser's
7128 build_arg_info (void)
7130 struct c_arg_info
*ret
= XOBNEW (&parser_obstack
, struct c_arg_info
);
7131 ret
->parms
= NULL_TREE
;
7133 ret
->types
= NULL_TREE
;
7134 ret
->others
= NULL_TREE
;
7135 ret
->pending_sizes
= NULL
;
7136 ret
->had_vla_unspec
= 0;
7140 /* Take apart the current scope and return a c_arg_info structure with
7141 info on a parameter list just parsed.
7143 This structure is later fed to 'grokparms' and 'store_parm_decls'.
7145 ELLIPSIS being true means the argument list ended in '...' so don't
7146 append a sentinel (void_list_node) to the end of the type-list.
7148 EXPR is NULL or an expression that needs to be evaluated for the
7149 side effects of array size expressions in the parameters. */
7152 get_parm_info (bool ellipsis
, tree expr
)
7154 struct c_binding
*b
= current_scope
->bindings
;
7155 struct c_arg_info
*arg_info
= build_arg_info ();
7157 tree parms
= NULL_TREE
;
7158 vec
<c_arg_tag
, va_gc
> *tags
= NULL
;
7159 tree types
= NULL_TREE
;
7160 tree others
= NULL_TREE
;
7162 bool gave_void_only_once_err
= false;
7164 arg_info
->had_vla_unspec
= current_scope
->had_vla_unspec
;
7166 /* The bindings in this scope must not get put into a block.
7167 We will take care of deleting the binding nodes. */
7168 current_scope
->bindings
= 0;
7170 /* This function is only called if there was *something* on the
7174 /* A parameter list consisting solely of 'void' indicates that the
7175 function takes no arguments. But if the 'void' is qualified
7176 (by 'const' or 'volatile'), or has a storage class specifier
7177 ('register'), then the behavior is undefined; issue an error.
7178 Typedefs for 'void' are OK (see DR#157). */
7179 if (b
->prev
== 0 /* one binding */
7180 && TREE_CODE (b
->decl
) == PARM_DECL
/* which is a parameter */
7181 && !DECL_NAME (b
->decl
) /* anonymous */
7182 && VOID_TYPE_P (TREE_TYPE (b
->decl
))) /* of void type */
7184 if (TYPE_QUALS (TREE_TYPE (b
->decl
)) != TYPE_UNQUALIFIED
7185 || C_DECL_REGISTER (b
->decl
))
7186 error_at (b
->locus
, "%<void%> as only parameter may not be qualified");
7188 /* There cannot be an ellipsis. */
7190 error_at (b
->locus
, "%<void%> must be the only parameter");
7192 arg_info
->types
= void_list_node
;
7197 types
= void_list_node
;
7199 /* Break up the bindings list into parms, tags, types, and others;
7200 apply sanity checks; purge the name-to-decl bindings. */
7203 tree decl
= b
->decl
;
7204 tree type
= TREE_TYPE (decl
);
7206 const char *keyword
;
7208 switch (TREE_CODE (decl
))
7213 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
7214 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
7217 /* Check for forward decls that never got their actual decl. */
7218 if (TREE_ASM_WRITTEN (decl
))
7220 "parameter %q+D has just a forward declaration", decl
);
7221 /* Check for (..., void, ...) and issue an error. */
7222 else if (VOID_TYPE_P (type
) && !DECL_NAME (decl
))
7224 if (!gave_void_only_once_err
)
7226 error_at (b
->locus
, "%<void%> must be the only parameter");
7227 gave_void_only_once_err
= true;
7232 /* Valid parameter, add it to the list. */
7233 DECL_CHAIN (decl
) = parms
;
7236 /* Since there is a prototype, args are passed in their
7237 declared types. The back end may override this later. */
7238 DECL_ARG_TYPE (decl
) = type
;
7239 types
= tree_cons (0, type
, types
);
7243 case ENUMERAL_TYPE
: keyword
= "enum"; goto tag
;
7244 case UNION_TYPE
: keyword
= "union"; goto tag
;
7245 case RECORD_TYPE
: keyword
= "struct"; goto tag
;
7247 /* Types may not have tag-names, in which case the type
7248 appears in the bindings list with b->id NULL. */
7251 gcc_assert (I_TAG_BINDING (b
->id
) == b
);
7252 I_TAG_BINDING (b
->id
) = b
->shadowed
;
7255 /* Warn about any struct, union or enum tags defined in a
7256 parameter list. The scope of such types is limited to
7257 the parameter list, which is rarely if ever desirable
7258 (it's impossible to call such a function with type-
7259 correct arguments). An anonymous union parm type is
7260 meaningful as a GNU extension, so don't warn for that. */
7261 if (TREE_CODE (decl
) != UNION_TYPE
|| b
->id
!= NULL_TREE
)
7264 /* The %s will be one of 'struct', 'union', or 'enum'. */
7265 warning_at (b
->locus
, 0,
7266 "%<%s %E%> declared inside parameter list"
7267 " will not be visible outside of this definition or"
7268 " declaration", keyword
, b
->id
);
7270 /* The %s will be one of 'struct', 'union', or 'enum'. */
7271 warning_at (b
->locus
, 0,
7272 "anonymous %s declared inside parameter list"
7273 " will not be visible outside of this definition or"
7274 " declaration", keyword
);
7279 vec_safe_push (tags
, tag
);
7283 /* FUNCTION_DECLs appear when there is an implicit function
7284 declaration in the parameter list. */
7285 gcc_assert (b
->nested
|| seen_error ());
7290 /* CONST_DECLs appear here when we have an embedded enum,
7291 and TYPE_DECLs appear here when we have an embedded struct
7292 or union. No warnings for this - we already warned about the
7295 /* When we reinsert this decl in the function body, we need
7296 to reconstruct whether it was marked as nested. */
7297 gcc_assert (!b
->nested
);
7298 DECL_CHAIN (decl
) = others
;
7304 /* error_mark_node appears here when we have an undeclared
7305 variable. Just throw it away. */
7308 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
7309 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
7313 /* Other things that might be encountered. */
7320 b
= free_binding_and_advance (b
);
7323 arg_info
->parms
= parms
;
7324 arg_info
->tags
= tags
;
7325 arg_info
->types
= types
;
7326 arg_info
->others
= others
;
7327 arg_info
->pending_sizes
= expr
;
7331 /* Get the struct, enum or union (CODE says which) with tag NAME.
7332 Define the tag as a forward-reference with location LOC if it is
7333 not defined. Return a c_typespec structure for the type
7337 parser_xref_tag (location_t loc
, enum tree_code code
, tree name
)
7339 struct c_typespec ret
;
7343 ret
.expr
= NULL_TREE
;
7344 ret
.expr_const_operands
= true;
7346 /* If a cross reference is requested, look up the type
7347 already defined for this tag and return it. */
7349 ref
= lookup_tag (code
, name
, false, &refloc
);
7350 /* If this is the right type of tag, return what we found.
7351 (This reference will be shadowed by shadow_tag later if appropriate.)
7352 If this is the wrong type of tag, do not return it. If it was the
7353 wrong type in the same scope, we will have had an error
7354 message already; if in a different scope and declaring
7355 a name, pending_xref_error will give an error message; but if in a
7356 different scope and not declaring a name, this tag should
7357 shadow the previous declaration of a different type of tag, and
7358 this would not work properly if we return the reference found.
7359 (For example, with "struct foo" in an outer scope, "union foo;"
7360 must shadow that tag with a new one of union type.) */
7361 ret
.kind
= (ref
? ctsk_tagref
: ctsk_tagfirstref
);
7362 if (ref
&& TREE_CODE (ref
) == code
)
7364 if (C_TYPE_DEFINED_IN_STRUCT (ref
)
7365 && loc
!= UNKNOWN_LOCATION
7371 warning_at (loc
, OPT_Wc___compat
,
7372 ("enum type defined in struct or union "
7373 "is not visible in C++"));
7374 inform (refloc
, "enum type defined here");
7377 warning_at (loc
, OPT_Wc___compat
,
7378 ("struct defined in struct or union "
7379 "is not visible in C++"));
7380 inform (refloc
, "struct defined here");
7383 warning_at (loc
, OPT_Wc___compat
,
7384 ("union defined in struct or union "
7385 "is not visible in C++"));
7386 inform (refloc
, "union defined here");
7397 /* If no such tag is yet defined, create a forward-reference node
7398 and record it as the "definition".
7399 When a real declaration of this type is found,
7400 the forward-reference will be altered into a real type. */
7402 ref
= make_node (code
);
7403 if (code
== ENUMERAL_TYPE
)
7405 /* Give the type a default layout like unsigned int
7406 to avoid crashing if it does not get defined. */
7407 SET_TYPE_MODE (ref
, TYPE_MODE (unsigned_type_node
));
7408 SET_TYPE_ALIGN (ref
, TYPE_ALIGN (unsigned_type_node
));
7409 TYPE_USER_ALIGN (ref
) = 0;
7410 TYPE_UNSIGNED (ref
) = 1;
7411 TYPE_PRECISION (ref
) = TYPE_PRECISION (unsigned_type_node
);
7412 TYPE_MIN_VALUE (ref
) = TYPE_MIN_VALUE (unsigned_type_node
);
7413 TYPE_MAX_VALUE (ref
) = TYPE_MAX_VALUE (unsigned_type_node
);
7416 pushtag (loc
, name
, ref
);
7422 /* Get the struct, enum or union (CODE says which) with tag NAME.
7423 Define the tag as a forward-reference if it is not defined.
7424 Return a tree for the type. */
7427 xref_tag (enum tree_code code
, tree name
)
7429 return parser_xref_tag (input_location
, code
, name
).spec
;
7432 /* Make sure that the tag NAME is defined *in the current scope*
7433 at least as a forward reference.
7434 LOC is the location of the struct's definition.
7435 CODE says which kind of tag NAME ought to be.
7437 This stores the current value of the file static STRUCT_PARSE_INFO
7438 in *ENCLOSING_STRUCT_PARSE_INFO, and points STRUCT_PARSE_INFO at a
7439 new c_struct_parse_info structure. The old value of
7440 STRUCT_PARSE_INFO is restored in finish_struct. */
7443 start_struct (location_t loc
, enum tree_code code
, tree name
,
7444 struct c_struct_parse_info
**enclosing_struct_parse_info
)
7446 /* If there is already a tag defined at this scope
7447 (as a forward reference), just return it. */
7449 tree ref
= NULL_TREE
;
7450 location_t refloc
= UNKNOWN_LOCATION
;
7452 if (name
!= NULL_TREE
)
7453 ref
= lookup_tag (code
, name
, true, &refloc
);
7454 if (ref
&& TREE_CODE (ref
) == code
)
7456 if (TYPE_STUB_DECL (ref
))
7457 refloc
= DECL_SOURCE_LOCATION (TYPE_STUB_DECL (ref
));
7459 if (TYPE_SIZE (ref
))
7461 if (code
== UNION_TYPE
)
7462 error_at (loc
, "redefinition of %<union %E%>", name
);
7464 error_at (loc
, "redefinition of %<struct %E%>", name
);
7465 if (refloc
!= UNKNOWN_LOCATION
)
7466 inform (refloc
, "originally defined here");
7467 /* Don't create structures using a name already in use. */
7470 else if (C_TYPE_BEING_DEFINED (ref
))
7472 if (code
== UNION_TYPE
)
7473 error_at (loc
, "nested redefinition of %<union %E%>", name
);
7475 error_at (loc
, "nested redefinition of %<struct %E%>", name
);
7476 /* Don't bother to report "originally defined here" for a
7477 nested redefinition; the original definition should be
7479 /* Don't create structures that contain themselves. */
7484 /* Otherwise create a forward-reference just so the tag is in scope. */
7486 if (ref
== NULL_TREE
|| TREE_CODE (ref
) != code
)
7488 ref
= make_node (code
);
7489 pushtag (loc
, name
, ref
);
7492 C_TYPE_BEING_DEFINED (ref
) = 1;
7493 for (tree v
= TYPE_MAIN_VARIANT (ref
); v
; v
= TYPE_NEXT_VARIANT (v
))
7494 TYPE_PACKED (v
) = flag_pack_struct
;
7496 *enclosing_struct_parse_info
= struct_parse_info
;
7497 struct_parse_info
= new c_struct_parse_info ();
7499 /* FIXME: This will issue a warning for a use of a type defined
7500 within a statement expr used within sizeof, et. al. This is not
7501 terribly serious as C++ doesn't permit statement exprs within
7503 if (warn_cxx_compat
&& (in_sizeof
|| in_typeof
|| in_alignof
))
7504 warning_at (loc
, OPT_Wc___compat
,
7505 "defining type in %qs expression is invalid in C++",
7508 : (in_typeof
? "typeof" : "alignof")));
7513 /* Process the specs, declarator and width (NULL if omitted)
7514 of a structure component, returning a FIELD_DECL node.
7515 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
7516 DECL_ATTRS is as for grokdeclarator.
7518 LOC is the location of the structure component.
7520 This is done during the parsing of the struct declaration.
7521 The FIELD_DECL nodes are chained together and the lot of them
7522 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
7525 grokfield (location_t loc
,
7526 struct c_declarator
*declarator
, struct c_declspecs
*declspecs
,
7527 tree width
, tree
*decl_attrs
)
7531 if (declarator
->kind
== cdk_id
&& declarator
->u
.id
== NULL_TREE
7532 && width
== NULL_TREE
)
7534 /* This is an unnamed decl.
7536 If we have something of the form "union { list } ;" then this
7537 is the anonymous union extension. Similarly for struct.
7539 If this is something of the form "struct foo;", then
7540 If MS or Plan 9 extensions are enabled, this is handled as
7541 an anonymous struct.
7542 Otherwise this is a forward declaration of a structure tag.
7544 If this is something of the form "foo;" and foo is a TYPE_DECL, then
7545 If foo names a structure or union without a tag, then this
7546 is an anonymous struct (this is permitted by C11).
7547 If MS or Plan 9 extensions are enabled and foo names a
7548 structure, then again this is an anonymous struct.
7549 Otherwise this is an error.
7551 Oh what a horrid tangled web we weave. I wonder if MS consciously
7552 took this from Plan 9 or if it was an accident of implementation
7553 that took root before someone noticed the bug... */
7555 tree type
= declspecs
->type
;
7556 bool type_ok
= RECORD_OR_UNION_TYPE_P (type
);
7560 && (flag_ms_extensions
7561 || flag_plan9_extensions
7562 || !declspecs
->typedef_p
))
7564 if (flag_ms_extensions
|| flag_plan9_extensions
)
7566 else if (TYPE_NAME (type
) == NULL
)
7573 pedwarn (loc
, 0, "declaration does not declare anything");
7577 pedwarn_c99 (loc
, OPT_Wpedantic
,
7578 "ISO C99 doesn%'t support unnamed structs/unions");
7580 pedwarn_c99 (loc
, OPT_Wpedantic
,
7581 "ISO C90 doesn%'t support unnamed structs/unions");
7584 value
= grokdeclarator (declarator
, declspecs
, FIELD
, false,
7585 width
? &width
: NULL
, decl_attrs
, NULL
, NULL
,
7588 finish_decl (value
, loc
, NULL_TREE
, NULL_TREE
, NULL_TREE
);
7589 DECL_INITIAL (value
) = width
;
7591 if (warn_cxx_compat
&& DECL_NAME (value
) != NULL_TREE
)
7593 /* If we currently have a binding for this field, set the
7594 in_struct field in the binding, so that we warn about lookups
7596 struct c_binding
*b
= I_SYMBOL_BINDING (DECL_NAME (value
));
7599 /* If the in_struct field is not yet set, push it on a list
7600 to be cleared when this struct is finished. */
7603 struct_parse_info
->fields
.safe_push (b
);
7612 /* Subroutine of detect_field_duplicates: return whether X and Y,
7613 which are both fields in the same struct, have duplicate field
7617 is_duplicate_field (tree x
, tree y
)
7619 if (DECL_NAME (x
) != NULL_TREE
&& DECL_NAME (x
) == DECL_NAME (y
))
7622 /* When using -fplan9-extensions, an anonymous field whose name is a
7623 typedef can duplicate a field name. */
7624 if (flag_plan9_extensions
7625 && (DECL_NAME (x
) == NULL_TREE
|| DECL_NAME (y
) == NULL_TREE
))
7627 tree xt
, xn
, yt
, yn
;
7630 if (DECL_NAME (x
) != NULL_TREE
)
7632 else if (RECORD_OR_UNION_TYPE_P (xt
)
7633 && TYPE_NAME (xt
) != NULL_TREE
7634 && TREE_CODE (TYPE_NAME (xt
)) == TYPE_DECL
)
7635 xn
= DECL_NAME (TYPE_NAME (xt
));
7640 if (DECL_NAME (y
) != NULL_TREE
)
7642 else if (RECORD_OR_UNION_TYPE_P (yt
)
7643 && TYPE_NAME (yt
) != NULL_TREE
7644 && TREE_CODE (TYPE_NAME (yt
)) == TYPE_DECL
)
7645 yn
= DECL_NAME (TYPE_NAME (yt
));
7649 if (xn
!= NULL_TREE
&& xn
== yn
)
7656 /* Subroutine of detect_field_duplicates: add the fields of FIELDLIST
7657 to HTAB, giving errors for any duplicates. */
7660 detect_field_duplicates_hash (tree fieldlist
,
7661 hash_table
<nofree_ptr_hash
<tree_node
> > *htab
)
7666 for (x
= fieldlist
; x
; x
= DECL_CHAIN (x
))
7667 if ((y
= DECL_NAME (x
)) != NULL_TREE
)
7669 slot
= htab
->find_slot (y
, INSERT
);
7672 error ("duplicate member %q+D", x
);
7673 DECL_NAME (x
) = NULL_TREE
;
7677 else if (RECORD_OR_UNION_TYPE_P (TREE_TYPE (x
)))
7679 detect_field_duplicates_hash (TYPE_FIELDS (TREE_TYPE (x
)), htab
);
7681 /* When using -fplan9-extensions, an anonymous field whose
7682 name is a typedef can duplicate a field name. */
7683 if (flag_plan9_extensions
7684 && TYPE_NAME (TREE_TYPE (x
)) != NULL_TREE
7685 && TREE_CODE (TYPE_NAME (TREE_TYPE (x
))) == TYPE_DECL
)
7687 tree xn
= DECL_NAME (TYPE_NAME (TREE_TYPE (x
)));
7688 slot
= htab
->find_slot (xn
, INSERT
);
7690 error ("duplicate member %q+D", TYPE_NAME (TREE_TYPE (x
)));
7696 /* Generate an error for any duplicate field names in FIELDLIST. Munge
7697 the list such that this does not present a problem later. */
7700 detect_field_duplicates (tree fieldlist
)
7705 /* If the struct is the list of instance variables of an Objective-C
7706 class, then we need to check all the instance variables of
7707 superclasses when checking for duplicates (since you can't have
7708 an instance variable in a subclass with the same name as an
7709 instance variable in a superclass). We pass on this job to the
7710 Objective-C compiler. objc_detect_field_duplicates() will return
7711 false if we are not checking the list of instance variables and
7712 the C frontend should proceed with the standard field duplicate
7713 checks. If we are checking the list of instance variables, the
7714 ObjC frontend will do the check, emit the errors if needed, and
7715 then return true. */
7716 if (c_dialect_objc ())
7717 if (objc_detect_field_duplicates (false))
7720 /* First, see if there are more than "a few" fields.
7721 This is trivially true if there are zero or one fields. */
7722 if (!fieldlist
|| !DECL_CHAIN (fieldlist
))
7727 if (DECL_NAME (x
) == NULL_TREE
7728 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (x
)))
7731 } while (timeout
> 0 && x
);
7733 /* If there were "few" fields and no anonymous structures or unions,
7734 avoid the overhead of allocating a hash table. Instead just do
7735 the nested traversal thing. */
7738 for (x
= DECL_CHAIN (fieldlist
); x
; x
= DECL_CHAIN (x
))
7739 /* When using -fplan9-extensions, we can have duplicates
7740 between typedef names and fields. */
7742 || (flag_plan9_extensions
7743 && DECL_NAME (x
) == NULL_TREE
7744 && RECORD_OR_UNION_TYPE_P (TREE_TYPE (x
))
7745 && TYPE_NAME (TREE_TYPE (x
)) != NULL_TREE
7746 && TREE_CODE (TYPE_NAME (TREE_TYPE (x
))) == TYPE_DECL
))
7748 for (y
= fieldlist
; y
!= x
; y
= TREE_CHAIN (y
))
7749 if (is_duplicate_field (y
, x
))
7751 error ("duplicate member %q+D", x
);
7752 DECL_NAME (x
) = NULL_TREE
;
7758 hash_table
<nofree_ptr_hash
<tree_node
> > htab (37);
7759 detect_field_duplicates_hash (fieldlist
, &htab
);
7763 /* Finish up struct info used by -Wc++-compat. */
7766 warn_cxx_compat_finish_struct (tree fieldlist
, enum tree_code code
,
7767 location_t record_loc
)
7771 struct c_binding
*b
;
7773 if (fieldlist
== NULL_TREE
)
7775 if (code
== RECORD_TYPE
)
7776 warning_at (record_loc
, OPT_Wc___compat
,
7777 "empty struct has size 0 in C, size 1 in C++");
7779 warning_at (record_loc
, OPT_Wc___compat
,
7780 "empty union has size 0 in C, size 1 in C++");
7783 /* Set the C_TYPE_DEFINED_IN_STRUCT flag for each type defined in
7784 the current struct. We do this now at the end of the struct
7785 because the flag is used to issue visibility warnings, and we
7786 only want to issue those warnings if the type is referenced
7787 outside of the struct declaration. */
7788 FOR_EACH_VEC_ELT (struct_parse_info
->struct_types
, ix
, x
)
7789 C_TYPE_DEFINED_IN_STRUCT (x
) = 1;
7791 /* The TYPEDEFS_SEEN field of STRUCT_PARSE_INFO is a list of
7792 typedefs used when declaring fields in this struct. If the name
7793 of any of the fields is also a typedef name then the struct would
7794 not parse in C++, because the C++ lookup rules say that the
7795 typedef name would be looked up in the context of the struct, and
7796 would thus be the field rather than the typedef. */
7797 if (!struct_parse_info
->typedefs_seen
.is_empty ()
7798 && fieldlist
!= NULL_TREE
)
7800 /* Use a hash_set<tree> using the name of the typedef. We can use
7801 a hash_set<tree> because identifiers are interned. */
7802 hash_set
<tree
> tset
;
7804 FOR_EACH_VEC_ELT (struct_parse_info
->typedefs_seen
, ix
, x
)
7805 tset
.add (DECL_NAME (x
));
7807 for (x
= fieldlist
; x
!= NULL_TREE
; x
= DECL_CHAIN (x
))
7809 if (DECL_NAME (x
) != NULL_TREE
7810 && tset
.contains (DECL_NAME (x
)))
7812 warning_at (DECL_SOURCE_LOCATION (x
), OPT_Wc___compat
,
7813 ("using %qD as both field and typedef name is "
7816 /* FIXME: It would be nice to report the location where
7817 the typedef name is used. */
7822 /* For each field which has a binding and which was not defined in
7823 an enclosing struct, clear the in_struct field. */
7824 FOR_EACH_VEC_ELT (struct_parse_info
->fields
, ix
, b
)
7828 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
7829 LOC is the location of the RECORD_TYPE or UNION_TYPE's definition.
7830 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
7831 ATTRIBUTES are attributes to be applied to the structure.
7833 ENCLOSING_STRUCT_PARSE_INFO is the value of STRUCT_PARSE_INFO when
7834 the struct was started. */
7837 finish_struct (location_t loc
, tree t
, tree fieldlist
, tree attributes
,
7838 struct c_struct_parse_info
*enclosing_struct_parse_info
)
7841 bool toplevel
= file_scope
== current_scope
;
7843 /* If this type was previously laid out as a forward reference,
7844 make sure we lay it out again. */
7846 TYPE_SIZE (t
) = NULL_TREE
;
7848 decl_attributes (&t
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
7852 for (x
= fieldlist
; x
; x
= DECL_CHAIN (x
))
7854 if (DECL_NAME (x
) != NULL_TREE
)
7856 if (flag_isoc11
&& RECORD_OR_UNION_TYPE_P (TREE_TYPE (x
)))
7862 if (TREE_CODE (t
) == UNION_TYPE
)
7865 pedwarn (loc
, OPT_Wpedantic
, "union has no named members");
7867 pedwarn (loc
, OPT_Wpedantic
, "union has no members");
7872 pedwarn (loc
, OPT_Wpedantic
, "struct has no named members");
7874 pedwarn (loc
, OPT_Wpedantic
, "struct has no members");
7879 /* Install struct as DECL_CONTEXT of each field decl.
7880 Also process specified field sizes, found in the DECL_INITIAL,
7881 storing 0 there after the type has been changed to precision equal
7882 to its width, rather than the precision of the specified standard
7883 type. (Correct layout requires the original type to have been preserved
7886 bool saw_named_field
= false;
7887 for (x
= fieldlist
; x
; x
= DECL_CHAIN (x
))
7889 if (TREE_TYPE (x
) == error_mark_node
)
7892 DECL_CONTEXT (x
) = t
;
7894 /* If any field is const, the structure type is pseudo-const. */
7895 if (TREE_READONLY (x
))
7896 C_TYPE_FIELDS_READONLY (t
) = 1;
7899 /* A field that is pseudo-const makes the structure likewise. */
7900 tree t1
= strip_array_types (TREE_TYPE (x
));
7901 if (RECORD_OR_UNION_TYPE_P (t1
) && C_TYPE_FIELDS_READONLY (t1
))
7902 C_TYPE_FIELDS_READONLY (t
) = 1;
7905 /* Any field that is volatile means variables of this type must be
7906 treated in some ways as volatile. */
7907 if (TREE_THIS_VOLATILE (x
))
7908 C_TYPE_FIELDS_VOLATILE (t
) = 1;
7910 /* Any field of nominal variable size implies structure is too. */
7911 if (C_DECL_VARIABLE_SIZE (x
))
7912 C_TYPE_VARIABLE_SIZE (t
) = 1;
7914 if (DECL_INITIAL (x
))
7916 unsigned HOST_WIDE_INT width
= tree_to_uhwi (DECL_INITIAL (x
));
7917 DECL_SIZE (x
) = bitsize_int (width
);
7918 DECL_BIT_FIELD (x
) = 1;
7919 SET_DECL_C_BIT_FIELD (x
);
7923 && (DECL_BIT_FIELD (x
)
7924 || TYPE_ALIGN (TREE_TYPE (x
)) > BITS_PER_UNIT
))
7925 DECL_PACKED (x
) = 1;
7927 /* Detect flexible array member in an invalid context. */
7928 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
7929 && TYPE_SIZE (TREE_TYPE (x
)) == NULL_TREE
7930 && TYPE_DOMAIN (TREE_TYPE (x
)) != NULL_TREE
7931 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x
))) == NULL_TREE
)
7933 if (TREE_CODE (t
) == UNION_TYPE
)
7935 error_at (DECL_SOURCE_LOCATION (x
),
7936 "flexible array member in union");
7937 TREE_TYPE (x
) = error_mark_node
;
7939 else if (DECL_CHAIN (x
) != NULL_TREE
)
7941 error_at (DECL_SOURCE_LOCATION (x
),
7942 "flexible array member not at end of struct");
7943 TREE_TYPE (x
) = error_mark_node
;
7945 else if (!saw_named_field
)
7947 error_at (DECL_SOURCE_LOCATION (x
),
7948 "flexible array member in a struct with no named "
7950 TREE_TYPE (x
) = error_mark_node
;
7954 if (pedantic
&& TREE_CODE (t
) == RECORD_TYPE
7955 && flexible_array_type_p (TREE_TYPE (x
)))
7956 pedwarn (DECL_SOURCE_LOCATION (x
), OPT_Wpedantic
,
7957 "invalid use of structure with flexible array member");
7960 || RECORD_OR_UNION_TYPE_P (TREE_TYPE (x
)))
7961 saw_named_field
= true;
7964 detect_field_duplicates (fieldlist
);
7966 /* Now we have the nearly final fieldlist. Record it,
7967 then lay out the structure or union (including the fields). */
7969 TYPE_FIELDS (t
) = fieldlist
;
7971 maybe_apply_pragma_scalar_storage_order (t
);
7975 if (TYPE_SIZE_UNIT (t
)
7976 && TREE_CODE (TYPE_SIZE_UNIT (t
)) == INTEGER_CST
7977 && !TREE_OVERFLOW (TYPE_SIZE_UNIT (t
))
7978 && !valid_constant_size_p (TYPE_SIZE_UNIT (t
)))
7979 error ("type %qT is too large", t
);
7981 /* Give bit-fields their proper types and rewrite the type of array fields
7982 with scalar component if the enclosing type has reverse storage order. */
7983 for (tree field
= fieldlist
; field
; field
= DECL_CHAIN (field
))
7985 if (TREE_CODE (field
) == FIELD_DECL
7986 && DECL_INITIAL (field
)
7987 && TREE_TYPE (field
) != error_mark_node
)
7989 unsigned HOST_WIDE_INT width
7990 = tree_to_uhwi (DECL_INITIAL (field
));
7991 tree type
= TREE_TYPE (field
);
7992 if (width
!= TYPE_PRECISION (type
))
7995 = c_build_bitfield_integer_type (width
, TYPE_UNSIGNED (type
));
7996 SET_DECL_MODE (field
, TYPE_MODE (TREE_TYPE (field
)));
7998 DECL_INITIAL (field
) = NULL_TREE
;
8000 else if (TYPE_REVERSE_STORAGE_ORDER (t
)
8001 && TREE_CODE (field
) == FIELD_DECL
8002 && TREE_CODE (TREE_TYPE (field
)) == ARRAY_TYPE
)
8004 tree ftype
= TREE_TYPE (field
);
8005 tree ctype
= strip_array_types (ftype
);
8006 if (!RECORD_OR_UNION_TYPE_P (ctype
) && TYPE_MODE (ctype
) != QImode
)
8008 tree fmain_type
= TYPE_MAIN_VARIANT (ftype
);
8009 tree
*typep
= &fmain_type
;
8011 *typep
= build_distinct_type_copy (*typep
);
8012 TYPE_REVERSE_STORAGE_ORDER (*typep
) = 1;
8013 typep
= &TREE_TYPE (*typep
);
8014 } while (TREE_CODE (*typep
) == ARRAY_TYPE
);
8016 = c_build_qualified_type (fmain_type
, TYPE_QUALS (ftype
));
8021 /* Now we have the truly final field list.
8022 Store it in this type and in the variants. */
8024 TYPE_FIELDS (t
) = fieldlist
;
8026 /* If there are lots of fields, sort so we can look through them fast.
8027 We arbitrarily consider 16 or more elts to be "a lot". */
8032 for (x
= fieldlist
; x
; x
= DECL_CHAIN (x
))
8034 if (len
> 15 || DECL_NAME (x
) == NULL
)
8042 struct lang_type
*space
;
8043 struct sorted_fields_type
*space2
;
8045 len
+= list_length (x
);
8047 /* Use the same allocation policy here that make_node uses, to
8048 ensure that this lives as long as the rest of the struct decl.
8049 All decls in an inline function need to be saved. */
8051 space
= ggc_cleared_alloc
<struct lang_type
> ();
8052 space2
= (sorted_fields_type
*) ggc_internal_alloc
8053 (sizeof (struct sorted_fields_type
) + len
* sizeof (tree
));
8057 field_array
= &space2
->elts
[0];
8058 for (x
= fieldlist
; x
; x
= DECL_CHAIN (x
))
8060 field_array
[len
++] = x
;
8062 /* If there is anonymous struct or union, break out of the loop. */
8063 if (DECL_NAME (x
) == NULL
)
8066 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
8069 TYPE_LANG_SPECIFIC (t
) = space
;
8070 TYPE_LANG_SPECIFIC (t
)->s
->len
= len
;
8071 field_array
= TYPE_LANG_SPECIFIC (t
)->s
->elts
;
8072 qsort (field_array
, len
, sizeof (tree
), field_decl_cmp
);
8077 /* Note: C_TYPE_INCOMPLETE_VARS overloads TYPE_VFIELD which is used
8078 in dwarf2out via rest_of_decl_compilation below and means
8079 something totally different. Since we will be clearing
8080 C_TYPE_INCOMPLETE_VARS shortly after we iterate through them,
8081 clear it ahead of time and avoid problems in dwarf2out. Ideally,
8082 C_TYPE_INCOMPLETE_VARS should use some language specific
8084 tree incomplete_vars
= C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t
));
8085 for (x
= TYPE_MAIN_VARIANT (t
); x
; x
= TYPE_NEXT_VARIANT (x
))
8087 TYPE_FIELDS (x
) = TYPE_FIELDS (t
);
8088 TYPE_LANG_SPECIFIC (x
) = TYPE_LANG_SPECIFIC (t
);
8089 C_TYPE_FIELDS_READONLY (x
) = C_TYPE_FIELDS_READONLY (t
);
8090 C_TYPE_FIELDS_VOLATILE (x
) = C_TYPE_FIELDS_VOLATILE (t
);
8091 C_TYPE_VARIABLE_SIZE (x
) = C_TYPE_VARIABLE_SIZE (t
);
8092 C_TYPE_INCOMPLETE_VARS (x
) = NULL_TREE
;
8095 /* If this was supposed to be a transparent union, but we can't
8096 make it one, warn and turn off the flag. */
8097 if (TREE_CODE (t
) == UNION_TYPE
8098 && TYPE_TRANSPARENT_AGGR (t
)
8099 && (!TYPE_FIELDS (t
) || TYPE_MODE (t
) != DECL_MODE (TYPE_FIELDS (t
))))
8101 TYPE_TRANSPARENT_AGGR (t
) = 0;
8102 warning_at (loc
, 0, "union cannot be made transparent");
8105 /* If this structure or union completes the type of any previous
8106 variable declaration, lay it out and output its rtl. */
8107 for (x
= incomplete_vars
; x
; x
= TREE_CHAIN (x
))
8109 tree decl
= TREE_VALUE (x
);
8110 if (TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
)
8111 layout_array_type (TREE_TYPE (decl
));
8112 if (TREE_CODE (decl
) != TYPE_DECL
)
8114 layout_decl (decl
, 0);
8115 if (c_dialect_objc ())
8116 objc_check_decl (decl
);
8117 rest_of_decl_compilation (decl
, toplevel
, 0);
8121 /* Update type location to the one of the definition, instead of e.g.
8122 a forward declaration. */
8123 if (TYPE_STUB_DECL (t
))
8124 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t
)) = loc
;
8126 /* Finish debugging output for this type. */
8127 rest_of_type_compilation (t
, toplevel
);
8129 /* If we're inside a function proper, i.e. not file-scope and not still
8130 parsing parameters, then arrange for the size of a variable sized type
8132 if (building_stmt_list_p () && variably_modified_type_p (t
, NULL_TREE
))
8133 add_stmt (build_stmt (loc
,
8134 DECL_EXPR
, build_decl (loc
, TYPE_DECL
, NULL
, t
)));
8136 if (warn_cxx_compat
)
8137 warn_cxx_compat_finish_struct (fieldlist
, TREE_CODE (t
), loc
);
8139 delete struct_parse_info
;
8141 struct_parse_info
= enclosing_struct_parse_info
;
8143 /* If this struct is defined inside a struct, add it to
8146 && struct_parse_info
!= NULL
8147 && !in_sizeof
&& !in_typeof
&& !in_alignof
)
8148 struct_parse_info
->struct_types
.safe_push (t
);
8153 /* Lay out the type T, and its element type, and so on. */
8156 layout_array_type (tree t
)
8158 if (TREE_CODE (TREE_TYPE (t
)) == ARRAY_TYPE
)
8159 layout_array_type (TREE_TYPE (t
));
8163 /* Begin compiling the definition of an enumeration type.
8164 NAME is its name (or null if anonymous).
8165 LOC is the enum's location.
8166 Returns the type object, as yet incomplete.
8167 Also records info about it so that build_enumerator
8168 may be used to declare the individual values as they are read. */
8171 start_enum (location_t loc
, struct c_enum_contents
*the_enum
, tree name
)
8173 tree enumtype
= NULL_TREE
;
8174 location_t enumloc
= UNKNOWN_LOCATION
;
8176 /* If this is the real definition for a previous forward reference,
8177 fill in the contents in the same object that used to be the
8178 forward reference. */
8180 if (name
!= NULL_TREE
)
8181 enumtype
= lookup_tag (ENUMERAL_TYPE
, name
, true, &enumloc
);
8183 if (enumtype
== NULL_TREE
|| TREE_CODE (enumtype
) != ENUMERAL_TYPE
)
8185 enumtype
= make_node (ENUMERAL_TYPE
);
8186 pushtag (loc
, name
, enumtype
);
8188 /* Update type location to the one of the definition, instead of e.g.
8189 a forward declaration. */
8190 else if (TYPE_STUB_DECL (enumtype
))
8192 enumloc
= DECL_SOURCE_LOCATION (TYPE_STUB_DECL (enumtype
));
8193 DECL_SOURCE_LOCATION (TYPE_STUB_DECL (enumtype
)) = loc
;
8196 if (C_TYPE_BEING_DEFINED (enumtype
))
8197 error_at (loc
, "nested redefinition of %<enum %E%>", name
);
8199 C_TYPE_BEING_DEFINED (enumtype
) = 1;
8201 if (TYPE_VALUES (enumtype
) != NULL_TREE
)
8203 /* This enum is a named one that has been declared already. */
8204 error_at (loc
, "redeclaration of %<enum %E%>", name
);
8205 if (enumloc
!= UNKNOWN_LOCATION
)
8206 inform (enumloc
, "originally defined here");
8208 /* Completely replace its old definition.
8209 The old enumerators remain defined, however. */
8210 TYPE_VALUES (enumtype
) = NULL_TREE
;
8213 the_enum
->enum_next_value
= integer_zero_node
;
8214 the_enum
->enum_overflow
= 0;
8216 if (flag_short_enums
)
8217 for (tree v
= TYPE_MAIN_VARIANT (enumtype
); v
; v
= TYPE_NEXT_VARIANT (v
))
8218 TYPE_PACKED (v
) = 1;
8220 /* FIXME: This will issue a warning for a use of a type defined
8221 within sizeof in a statement expr. This is not terribly serious
8222 as C++ doesn't permit statement exprs within sizeof anyhow. */
8223 if (warn_cxx_compat
&& (in_sizeof
|| in_typeof
|| in_alignof
))
8224 warning_at (loc
, OPT_Wc___compat
,
8225 "defining type in %qs expression is invalid in C++",
8228 : (in_typeof
? "typeof" : "alignof")));
8233 /* After processing and defining all the values of an enumeration type,
8234 install their decls in the enumeration type and finish it off.
8235 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
8236 and ATTRIBUTES are the specified attributes.
8237 Returns ENUMTYPE. */
8240 finish_enum (tree enumtype
, tree values
, tree attributes
)
8243 tree minnode
= NULL_TREE
, maxnode
= NULL_TREE
;
8246 bool toplevel
= (file_scope
== current_scope
);
8247 struct lang_type
*lt
;
8249 decl_attributes (&enumtype
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
8251 /* Calculate the maximum value of any enumerator in this type. */
8253 if (values
== error_mark_node
)
8254 minnode
= maxnode
= integer_zero_node
;
8257 minnode
= maxnode
= TREE_VALUE (values
);
8258 for (pair
= TREE_CHAIN (values
); pair
; pair
= TREE_CHAIN (pair
))
8260 tree value
= TREE_VALUE (pair
);
8261 if (tree_int_cst_lt (maxnode
, value
))
8263 if (tree_int_cst_lt (value
, minnode
))
8268 /* Construct the final type of this enumeration. It is the same
8269 as one of the integral types - the narrowest one that fits, except
8270 that normally we only go as narrow as int - and signed iff any of
8271 the values are negative. */
8272 sign
= (tree_int_cst_sgn (minnode
) >= 0) ? UNSIGNED
: SIGNED
;
8273 precision
= MAX (tree_int_cst_min_precision (minnode
, sign
),
8274 tree_int_cst_min_precision (maxnode
, sign
));
8276 /* If the precision of the type was specified with an attribute and it
8277 was too small, give an error. Otherwise, use it. */
8278 if (TYPE_PRECISION (enumtype
) && lookup_attribute ("mode", attributes
))
8280 if (precision
> TYPE_PRECISION (enumtype
))
8282 TYPE_PRECISION (enumtype
) = 0;
8283 error ("specified mode too small for enumeral values");
8286 precision
= TYPE_PRECISION (enumtype
);
8289 TYPE_PRECISION (enumtype
) = 0;
8291 if (TYPE_PACKED (enumtype
)
8292 || precision
> TYPE_PRECISION (integer_type_node
)
8293 || TYPE_PRECISION (enumtype
))
8295 tem
= c_common_type_for_size (precision
, sign
== UNSIGNED
? 1 : 0);
8298 warning (0, "enumeration values exceed range of largest integer");
8299 tem
= long_long_integer_type_node
;
8303 tem
= sign
== UNSIGNED
? unsigned_type_node
: integer_type_node
;
8305 TYPE_MIN_VALUE (enumtype
) = TYPE_MIN_VALUE (tem
);
8306 TYPE_MAX_VALUE (enumtype
) = TYPE_MAX_VALUE (tem
);
8307 TYPE_UNSIGNED (enumtype
) = TYPE_UNSIGNED (tem
);
8308 SET_TYPE_ALIGN (enumtype
, TYPE_ALIGN (tem
));
8309 TYPE_SIZE (enumtype
) = NULL_TREE
;
8310 TYPE_PRECISION (enumtype
) = TYPE_PRECISION (tem
);
8312 layout_type (enumtype
);
8314 if (values
!= error_mark_node
)
8316 /* Change the type of the enumerators to be the enum type. We
8317 need to do this irrespective of the size of the enum, for
8318 proper type checking. Replace the DECL_INITIALs of the
8319 enumerators, and the value slots of the list, with copies
8320 that have the enum type; they cannot be modified in place
8321 because they may be shared (e.g. integer_zero_node) Finally,
8322 change the purpose slots to point to the names of the decls. */
8323 for (pair
= values
; pair
; pair
= TREE_CHAIN (pair
))
8325 tree enu
= TREE_PURPOSE (pair
);
8326 tree ini
= DECL_INITIAL (enu
);
8328 TREE_TYPE (enu
) = enumtype
;
8330 /* The ISO C Standard mandates enumerators to have type int,
8331 even though the underlying type of an enum type is
8332 unspecified. However, GCC allows enumerators of any
8333 integer type as an extensions. build_enumerator()
8334 converts any enumerators that fit in an int to type int,
8335 to avoid promotions to unsigned types when comparing
8336 integers with enumerators that fit in the int range.
8337 When -pedantic is given, build_enumerator() would have
8338 already warned about those that don't fit. Here we
8339 convert the rest to the enumerator type. */
8340 if (TREE_TYPE (ini
) != integer_type_node
)
8341 ini
= convert (enumtype
, ini
);
8343 DECL_INITIAL (enu
) = ini
;
8344 TREE_PURPOSE (pair
) = DECL_NAME (enu
);
8345 TREE_VALUE (pair
) = ini
;
8348 TYPE_VALUES (enumtype
) = values
;
8351 /* Record the min/max values so that we can warn about bit-field
8352 enumerations that are too small for the values. */
8353 lt
= ggc_cleared_alloc
<struct lang_type
> ();
8354 lt
->enum_min
= minnode
;
8355 lt
->enum_max
= maxnode
;
8356 TYPE_LANG_SPECIFIC (enumtype
) = lt
;
8358 /* Fix up all variant types of this enum type. */
8359 for (tem
= TYPE_MAIN_VARIANT (enumtype
); tem
; tem
= TYPE_NEXT_VARIANT (tem
))
8361 if (tem
== enumtype
)
8363 TYPE_VALUES (tem
) = TYPE_VALUES (enumtype
);
8364 TYPE_MIN_VALUE (tem
) = TYPE_MIN_VALUE (enumtype
);
8365 TYPE_MAX_VALUE (tem
) = TYPE_MAX_VALUE (enumtype
);
8366 TYPE_SIZE (tem
) = TYPE_SIZE (enumtype
);
8367 TYPE_SIZE_UNIT (tem
) = TYPE_SIZE_UNIT (enumtype
);
8368 SET_TYPE_MODE (tem
, TYPE_MODE (enumtype
));
8369 TYPE_PRECISION (tem
) = TYPE_PRECISION (enumtype
);
8370 SET_TYPE_ALIGN (tem
, TYPE_ALIGN (enumtype
));
8371 TYPE_USER_ALIGN (tem
) = TYPE_USER_ALIGN (enumtype
);
8372 TYPE_UNSIGNED (tem
) = TYPE_UNSIGNED (enumtype
);
8373 TYPE_LANG_SPECIFIC (tem
) = TYPE_LANG_SPECIFIC (enumtype
);
8376 /* Finish debugging output for this type. */
8377 rest_of_type_compilation (enumtype
, toplevel
);
8379 /* If this enum is defined inside a struct, add it to
8382 && struct_parse_info
!= NULL
8383 && !in_sizeof
&& !in_typeof
&& !in_alignof
)
8384 struct_parse_info
->struct_types
.safe_push (enumtype
);
8389 /* Build and install a CONST_DECL for one value of the
8390 current enumeration type (one that was begun with start_enum).
8391 DECL_LOC is the location of the enumerator.
8392 LOC is the location of the '=' operator if any, DECL_LOC otherwise.
8393 Return a tree-list containing the CONST_DECL and its value.
8394 Assignment of sequential values by default is handled here. */
8397 build_enumerator (location_t decl_loc
, location_t loc
,
8398 struct c_enum_contents
*the_enum
, tree name
, tree value
)
8402 /* Validate and default VALUE. */
8404 if (value
!= NULL_TREE
)
8406 /* Don't issue more errors for error_mark_node (i.e. an
8407 undeclared identifier) - just ignore the value expression. */
8408 if (value
== error_mark_node
)
8410 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value
)))
8412 error_at (loc
, "enumerator value for %qE is not an integer constant",
8418 if (TREE_CODE (value
) != INTEGER_CST
)
8420 value
= c_fully_fold (value
, false, NULL
);
8421 if (TREE_CODE (value
) == INTEGER_CST
)
8422 pedwarn (loc
, OPT_Wpedantic
,
8423 "enumerator value for %qE is not an integer "
8424 "constant expression", name
);
8426 if (TREE_CODE (value
) != INTEGER_CST
)
8428 error ("enumerator value for %qE is not an integer constant",
8434 value
= default_conversion (value
);
8435 constant_expression_warning (value
);
8440 /* Default based on previous value. */
8441 /* It should no longer be possible to have NON_LVALUE_EXPR
8443 if (value
== NULL_TREE
)
8445 value
= the_enum
->enum_next_value
;
8446 if (the_enum
->enum_overflow
)
8447 error_at (loc
, "overflow in enumeration values");
8449 /* Even though the underlying type of an enum is unspecified, the
8450 type of enumeration constants is explicitly defined as int
8451 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
8453 else if (!int_fits_type_p (value
, integer_type_node
))
8454 pedwarn (loc
, OPT_Wpedantic
,
8455 "ISO C restricts enumerator values to range of %<int%>");
8457 /* The ISO C Standard mandates enumerators to have type int, even
8458 though the underlying type of an enum type is unspecified.
8459 However, GCC allows enumerators of any integer type as an
8460 extensions. Here we convert any enumerators that fit in an int
8461 to type int, to avoid promotions to unsigned types when comparing
8462 integers with enumerators that fit in the int range. When
8463 -pedantic is given, we would have already warned about those that
8464 don't fit. We have to do this here rather than in finish_enum
8465 because this value may be used to define more enumerators. */
8466 if (int_fits_type_p (value
, integer_type_node
))
8467 value
= convert (integer_type_node
, value
);
8469 /* Set basis for default for next value. */
8470 the_enum
->enum_next_value
8471 = build_binary_op (EXPR_LOC_OR_LOC (value
, input_location
),
8472 PLUS_EXPR
, value
, integer_one_node
, 0);
8473 the_enum
->enum_overflow
= tree_int_cst_lt (the_enum
->enum_next_value
, value
);
8475 /* Now create a declaration for the enum value name. */
8477 type
= TREE_TYPE (value
);
8478 type
= c_common_type_for_size (MAX (TYPE_PRECISION (type
),
8479 TYPE_PRECISION (integer_type_node
)),
8480 (TYPE_PRECISION (type
)
8481 >= TYPE_PRECISION (integer_type_node
)
8482 && TYPE_UNSIGNED (type
)));
8484 decl
= build_decl (decl_loc
, CONST_DECL
, name
, type
);
8485 DECL_INITIAL (decl
) = convert (type
, value
);
8488 return tree_cons (decl
, value
, NULL_TREE
);
8492 /* Create the FUNCTION_DECL for a function definition.
8493 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
8494 the declaration; they describe the function's name and the type it returns,
8495 but twisted together in a fashion that parallels the syntax of C.
8497 This function creates a binding context for the function body
8498 as well as setting up the FUNCTION_DECL in current_function_decl.
8500 Returns true on success. If the DECLARATOR is not suitable for a function
8501 (it defines a datum instead), we return false to report a parse error. */
8504 start_function (struct c_declspecs
*declspecs
, struct c_declarator
*declarator
,
8507 tree decl1
, old_decl
;
8508 tree restype
, resdecl
;
8511 current_function_returns_value
= 0; /* Assume, until we see it does. */
8512 current_function_returns_null
= 0;
8513 current_function_returns_abnormally
= 0;
8514 warn_about_return_type
= 0;
8515 c_switch_stack
= NULL
;
8517 /* Indicate no valid break/continue context by setting these variables
8518 to some non-null, non-label value. We'll notice and emit the proper
8519 error message in c_finish_bc_stmt. */
8520 c_break_label
= c_cont_label
= size_zero_node
;
8522 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, true, NULL
,
8523 &attributes
, NULL
, NULL
, DEPRECATED_NORMAL
);
8524 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION
, decl1
);
8526 /* If the declarator is not suitable for a function definition,
8527 cause a syntax error. */
8528 if (decl1
== NULL_TREE
8529 || TREE_CODE (decl1
) != FUNCTION_DECL
)
8532 loc
= DECL_SOURCE_LOCATION (decl1
);
8534 c_decl_attributes (&decl1
, attributes
, 0);
8536 if (DECL_DECLARED_INLINE_P (decl1
)
8537 && DECL_UNINLINABLE (decl1
)
8538 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1
)))
8539 warning_at (loc
, OPT_Wattributes
,
8540 "inline function %qD given attribute noinline",
8543 /* Handle gnu_inline attribute. */
8544 if (declspecs
->inline_p
8545 && !flag_gnu89_inline
8546 && TREE_CODE (decl1
) == FUNCTION_DECL
8547 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1
))
8548 || current_function_decl
))
8550 if (declspecs
->storage_class
!= csc_static
)
8551 DECL_EXTERNAL (decl1
) = !DECL_EXTERNAL (decl1
);
8554 announce_function (decl1
);
8556 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1
))))
8558 error_at (loc
, "return type is an incomplete type");
8559 /* Make it return void instead. */
8561 = build_function_type (void_type_node
,
8562 TYPE_ARG_TYPES (TREE_TYPE (decl1
)));
8565 if (warn_about_return_type
)
8566 warn_defaults_to (loc
, flag_isoc99
? OPT_Wimplicit_int
8567 : (warn_return_type
? OPT_Wreturn_type
8568 : OPT_Wimplicit_int
),
8569 "return type defaults to %<int%>");
8571 /* Make the init_value nonzero so pushdecl knows this is not tentative.
8572 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
8573 DECL_INITIAL (decl1
) = error_mark_node
;
8575 /* A nested function is not global. */
8576 if (current_function_decl
!= NULL_TREE
)
8577 TREE_PUBLIC (decl1
) = 0;
8579 /* If this definition isn't a prototype and we had a prototype declaration
8580 before, copy the arg type info from that prototype. */
8581 old_decl
= lookup_name_in_scope (DECL_NAME (decl1
), current_scope
);
8582 if (old_decl
&& TREE_CODE (old_decl
) != FUNCTION_DECL
)
8583 old_decl
= NULL_TREE
;
8584 current_function_prototype_locus
= UNKNOWN_LOCATION
;
8585 current_function_prototype_built_in
= false;
8586 current_function_prototype_arg_types
= NULL_TREE
;
8587 if (!prototype_p (TREE_TYPE (decl1
)))
8589 if (old_decl
!= NULL_TREE
8590 && TREE_CODE (TREE_TYPE (old_decl
)) == FUNCTION_TYPE
8591 && comptypes (TREE_TYPE (TREE_TYPE (decl1
)),
8592 TREE_TYPE (TREE_TYPE (old_decl
))))
8594 if (stdarg_p (TREE_TYPE (old_decl
)))
8596 warning_at (loc
, 0, "%q+D defined as variadic function "
8597 "without prototype", decl1
);
8598 locate_old_decl (old_decl
);
8600 TREE_TYPE (decl1
) = composite_type (TREE_TYPE (old_decl
),
8602 current_function_prototype_locus
= DECL_SOURCE_LOCATION (old_decl
);
8603 current_function_prototype_built_in
8604 = C_DECL_BUILTIN_PROTOTYPE (old_decl
);
8605 current_function_prototype_arg_types
8606 = TYPE_ARG_TYPES (TREE_TYPE (decl1
));
8608 if (TREE_PUBLIC (decl1
))
8610 /* If there is an external prototype declaration of this
8611 function, record its location but do not copy information
8612 to this decl. This may be an invisible declaration
8613 (built-in or in a scope which has finished) or simply
8614 have more refined argument types than any declaration
8616 struct c_binding
*b
;
8617 for (b
= I_SYMBOL_BINDING (DECL_NAME (decl1
)); b
; b
= b
->shadowed
)
8618 if (B_IN_SCOPE (b
, external_scope
))
8622 tree ext_decl
, ext_type
;
8624 ext_type
= b
->u
.type
? b
->u
.type
: TREE_TYPE (ext_decl
);
8625 if (TREE_CODE (ext_type
) == FUNCTION_TYPE
8626 && comptypes (TREE_TYPE (TREE_TYPE (decl1
)),
8627 TREE_TYPE (ext_type
)))
8629 current_function_prototype_locus
8630 = DECL_SOURCE_LOCATION (ext_decl
);
8631 current_function_prototype_built_in
8632 = C_DECL_BUILTIN_PROTOTYPE (ext_decl
);
8633 current_function_prototype_arg_types
8634 = TYPE_ARG_TYPES (ext_type
);
8640 /* Optionally warn of old-fashioned def with no previous prototype. */
8641 if (warn_strict_prototypes
8642 && old_decl
!= error_mark_node
8643 && !prototype_p (TREE_TYPE (decl1
))
8644 && C_DECL_ISNT_PROTOTYPE (old_decl
))
8645 warning_at (loc
, OPT_Wstrict_prototypes
,
8646 "function declaration isn%'t a prototype");
8647 /* Optionally warn of any global def with no previous prototype. */
8648 else if (warn_missing_prototypes
8649 && old_decl
!= error_mark_node
8650 && TREE_PUBLIC (decl1
)
8651 && !MAIN_NAME_P (DECL_NAME (decl1
))
8652 && C_DECL_ISNT_PROTOTYPE (old_decl
)
8653 && !DECL_DECLARED_INLINE_P (decl1
))
8654 warning_at (loc
, OPT_Wmissing_prototypes
,
8655 "no previous prototype for %qD", decl1
);
8656 /* Optionally warn of any def with no previous prototype
8657 if the function has already been used. */
8658 else if (warn_missing_prototypes
8659 && old_decl
!= NULL_TREE
8660 && old_decl
!= error_mark_node
8661 && TREE_USED (old_decl
)
8662 && !prototype_p (TREE_TYPE (old_decl
)))
8663 warning_at (loc
, OPT_Wmissing_prototypes
,
8664 "%qD was used with no prototype before its definition", decl1
);
8665 /* Optionally warn of any global def with no previous declaration. */
8666 else if (warn_missing_declarations
8667 && TREE_PUBLIC (decl1
)
8668 && old_decl
== NULL_TREE
8669 && !MAIN_NAME_P (DECL_NAME (decl1
))
8670 && !DECL_DECLARED_INLINE_P (decl1
))
8671 warning_at (loc
, OPT_Wmissing_declarations
,
8672 "no previous declaration for %qD",
8674 /* Optionally warn of any def with no previous declaration
8675 if the function has already been used. */
8676 else if (warn_missing_declarations
8677 && old_decl
!= NULL_TREE
8678 && old_decl
!= error_mark_node
8679 && TREE_USED (old_decl
)
8680 && C_DECL_IMPLICIT (old_decl
))
8681 warning_at (loc
, OPT_Wmissing_declarations
,
8682 "%qD was used with no declaration before its definition", decl1
);
8684 /* This function exists in static storage.
8685 (This does not mean `static' in the C sense!) */
8686 TREE_STATIC (decl1
) = 1;
8688 /* This is the earliest point at which we might know the assembler
8689 name of the function. Thus, if it's set before this, die horribly. */
8690 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1
));
8692 /* If #pragma weak was used, mark the decl weak now. */
8693 if (current_scope
== file_scope
)
8694 maybe_apply_pragma_weak (decl1
);
8696 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
8697 if (warn_main
&& MAIN_NAME_P (DECL_NAME (decl1
)))
8699 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1
)))
8700 != integer_type_node
)
8701 pedwarn (loc
, OPT_Wmain
, "return type of %qD is not %<int%>", decl1
);
8702 else if (TYPE_ATOMIC (TREE_TYPE (TREE_TYPE (decl1
))))
8703 pedwarn (loc
, OPT_Wmain
, "%<_Atomic%>-qualified return type of %qD",
8706 check_main_parameter_types (decl1
);
8708 if (!TREE_PUBLIC (decl1
))
8709 pedwarn (loc
, OPT_Wmain
,
8710 "%qD is normally a non-static function", decl1
);
8713 /* Record the decl so that the function name is defined.
8714 If we already have a decl for this name, and it is a FUNCTION_DECL,
8715 use the old decl. */
8717 current_function_decl
= pushdecl (decl1
);
8720 declare_parm_level ();
8722 restype
= TREE_TYPE (TREE_TYPE (current_function_decl
));
8723 resdecl
= build_decl (loc
, RESULT_DECL
, NULL_TREE
, restype
);
8724 DECL_ARTIFICIAL (resdecl
) = 1;
8725 DECL_IGNORED_P (resdecl
) = 1;
8726 DECL_RESULT (current_function_decl
) = resdecl
;
8728 start_fname_decls ();
8733 /* Subroutine of store_parm_decls which handles new-style function
8734 definitions (prototype format). The parms already have decls, so we
8735 need only record them as in effect and complain if any redundant
8736 old-style parm decls were written. */
8738 store_parm_decls_newstyle (tree fndecl
, const struct c_arg_info
*arg_info
)
8744 if (current_scope
->bindings
)
8746 error_at (DECL_SOURCE_LOCATION (fndecl
),
8747 "old-style parameter declarations in prototyped "
8748 "function definition");
8750 /* Get rid of the old-style declarations. */
8754 /* Don't issue this warning for nested functions, and don't issue this
8755 warning if we got here because ARG_INFO_TYPES was error_mark_node
8756 (this happens when a function definition has just an ellipsis in
8757 its parameter list). */
8758 else if (!in_system_header_at (input_location
)
8759 && !current_function_scope
8760 && arg_info
->types
!= error_mark_node
)
8761 warning_at (DECL_SOURCE_LOCATION (fndecl
), OPT_Wtraditional
,
8762 "traditional C rejects ISO C style function definitions");
8764 /* Now make all the parameter declarations visible in the function body.
8765 We can bypass most of the grunt work of pushdecl. */
8766 for (decl
= arg_info
->parms
; decl
; decl
= DECL_CHAIN (decl
))
8768 DECL_CONTEXT (decl
) = current_function_decl
;
8769 if (DECL_NAME (decl
))
8771 bind (DECL_NAME (decl
), decl
, current_scope
,
8772 /*invisible=*/false, /*nested=*/false,
8774 if (!TREE_USED (decl
))
8775 warn_if_shadowing (decl
);
8778 error_at (DECL_SOURCE_LOCATION (decl
), "parameter name omitted");
8781 /* Record the parameter list in the function declaration. */
8782 DECL_ARGUMENTS (fndecl
) = arg_info
->parms
;
8784 /* Now make all the ancillary declarations visible, likewise. */
8785 for (decl
= arg_info
->others
; decl
; decl
= DECL_CHAIN (decl
))
8787 DECL_CONTEXT (decl
) = current_function_decl
;
8788 if (DECL_NAME (decl
))
8789 bind (DECL_NAME (decl
), decl
, current_scope
,
8790 /*invisible=*/false,
8791 /*nested=*/(TREE_CODE (decl
) == FUNCTION_DECL
),
8795 /* And all the tag declarations. */
8796 FOR_EACH_VEC_SAFE_ELT_REVERSE (arg_info
->tags
, ix
, tag
)
8798 bind (tag
->id
, tag
->type
, current_scope
,
8799 /*invisible=*/false, /*nested=*/false, UNKNOWN_LOCATION
);
8802 /* Subroutine of store_parm_decls which handles old-style function
8803 definitions (separate parameter list and declarations). */
8806 store_parm_decls_oldstyle (tree fndecl
, const struct c_arg_info
*arg_info
)
8808 struct c_binding
*b
;
8809 tree parm
, decl
, last
;
8810 tree parmids
= arg_info
->parms
;
8811 hash_set
<tree
> seen_args
;
8813 if (!in_system_header_at (input_location
))
8814 warning_at (DECL_SOURCE_LOCATION (fndecl
),
8815 OPT_Wold_style_definition
, "old-style function definition");
8817 /* Match each formal parameter name with its declaration. Save each
8818 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
8819 for (parm
= parmids
; parm
; parm
= TREE_CHAIN (parm
))
8821 if (TREE_VALUE (parm
) == NULL_TREE
)
8823 error_at (DECL_SOURCE_LOCATION (fndecl
),
8824 "parameter name missing from parameter list");
8825 TREE_PURPOSE (parm
) = NULL_TREE
;
8829 b
= I_SYMBOL_BINDING (TREE_VALUE (parm
));
8830 if (b
&& B_IN_CURRENT_SCOPE (b
))
8833 /* Skip erroneous parameters. */
8834 if (decl
== error_mark_node
)
8836 /* If we got something other than a PARM_DECL it is an error. */
8837 if (TREE_CODE (decl
) != PARM_DECL
)
8839 error_at (DECL_SOURCE_LOCATION (decl
),
8840 "%qD declared as a non-parameter", decl
);
8843 /* If the declaration is already marked, we have a duplicate
8844 name. Complain and ignore the duplicate. */
8845 else if (seen_args
.contains (decl
))
8847 error_at (DECL_SOURCE_LOCATION (decl
),
8848 "multiple parameters named %qD", decl
);
8849 TREE_PURPOSE (parm
) = NULL_TREE
;
8852 /* If the declaration says "void", complain and turn it into
8854 else if (VOID_TYPE_P (TREE_TYPE (decl
)))
8856 error_at (DECL_SOURCE_LOCATION (decl
),
8857 "parameter %qD declared with void type", decl
);
8858 TREE_TYPE (decl
) = integer_type_node
;
8859 DECL_ARG_TYPE (decl
) = integer_type_node
;
8860 layout_decl (decl
, 0);
8862 warn_if_shadowing (decl
);
8864 /* If no declaration found, default to int. */
8867 /* FIXME diagnostics: This should be the location of the argument,
8868 not the FNDECL. E.g., for an old-style declaration
8870 int f10(v) { blah; }
8872 We should use the location of the V, not the F10.
8873 Unfortunately, the V is an IDENTIFIER_NODE which has no
8874 location. In the future we need locations for c_arg_info
8877 See gcc.dg/Wshadow-3.c for an example of this problem. */
8878 decl
= build_decl (DECL_SOURCE_LOCATION (fndecl
),
8879 PARM_DECL
, TREE_VALUE (parm
), integer_type_node
);
8880 DECL_ARG_TYPE (decl
) = TREE_TYPE (decl
);
8882 warn_if_shadowing (decl
);
8885 pedwarn (DECL_SOURCE_LOCATION (decl
),
8886 OPT_Wimplicit_int
, "type of %qD defaults to %<int%>",
8889 warning_at (DECL_SOURCE_LOCATION (decl
),
8890 OPT_Wmissing_parameter_type
,
8891 "type of %qD defaults to %<int%>", decl
);
8894 TREE_PURPOSE (parm
) = decl
;
8895 seen_args
.add (decl
);
8898 /* Now examine the parms chain for incomplete declarations
8899 and declarations with no corresponding names. */
8901 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
8904 if (TREE_CODE (parm
) != PARM_DECL
)
8907 if (TREE_TYPE (parm
) != error_mark_node
8908 && !COMPLETE_TYPE_P (TREE_TYPE (parm
)))
8910 error_at (DECL_SOURCE_LOCATION (parm
),
8911 "parameter %qD has incomplete type", parm
);
8912 TREE_TYPE (parm
) = error_mark_node
;
8915 if (!seen_args
.contains (parm
))
8917 error_at (DECL_SOURCE_LOCATION (parm
),
8918 "declaration for parameter %qD but no such parameter",
8921 /* Pretend the parameter was not missing.
8922 This gets us to a standard state and minimizes
8923 further error messages. */
8924 parmids
= chainon (parmids
, tree_cons (parm
, 0, 0));
8928 /* Chain the declarations together in the order of the list of
8929 names. Store that chain in the function decl, replacing the
8930 list of names. Update the current scope to match. */
8931 DECL_ARGUMENTS (fndecl
) = NULL_TREE
;
8933 for (parm
= parmids
; parm
; parm
= TREE_CHAIN (parm
))
8934 if (TREE_PURPOSE (parm
))
8936 if (parm
&& TREE_PURPOSE (parm
))
8938 last
= TREE_PURPOSE (parm
);
8939 DECL_ARGUMENTS (fndecl
) = last
;
8941 for (parm
= TREE_CHAIN (parm
); parm
; parm
= TREE_CHAIN (parm
))
8942 if (TREE_PURPOSE (parm
))
8944 DECL_CHAIN (last
) = TREE_PURPOSE (parm
);
8945 last
= TREE_PURPOSE (parm
);
8947 DECL_CHAIN (last
) = NULL_TREE
;
8950 /* If there was a previous prototype,
8951 set the DECL_ARG_TYPE of each argument according to
8952 the type previously specified, and report any mismatches. */
8954 if (current_function_prototype_arg_types
)
8957 for (parm
= DECL_ARGUMENTS (fndecl
),
8958 type
= current_function_prototype_arg_types
;
8959 parm
|| (type
!= NULL_TREE
8960 && TREE_VALUE (type
) != error_mark_node
8961 && TYPE_MAIN_VARIANT (TREE_VALUE (type
)) != void_type_node
);
8962 parm
= DECL_CHAIN (parm
), type
= TREE_CHAIN (type
))
8964 if (parm
== NULL_TREE
8965 || type
== NULL_TREE
8966 || (TREE_VALUE (type
) != error_mark_node
8967 && TYPE_MAIN_VARIANT (TREE_VALUE (type
)) == void_type_node
))
8969 if (current_function_prototype_built_in
)
8970 warning_at (DECL_SOURCE_LOCATION (fndecl
),
8971 0, "number of arguments doesn%'t match "
8972 "built-in prototype");
8975 /* FIXME diagnostics: This should be the location of
8976 FNDECL, but there is bug when a prototype is
8977 declared inside function context, but defined
8978 outside of it (e.g., gcc.dg/pr15698-2.c). In
8979 which case FNDECL gets the location of the
8980 prototype, not the definition. */
8981 error_at (input_location
,
8982 "number of arguments doesn%'t match prototype");
8984 error_at (current_function_prototype_locus
,
8985 "prototype declaration");
8989 /* Type for passing arg must be consistent with that
8990 declared for the arg. ISO C says we take the unqualified
8991 type for parameters declared with qualified type. */
8992 if (TREE_TYPE (parm
) != error_mark_node
8993 && TREE_VALUE (type
) != error_mark_node
8994 && ((TYPE_ATOMIC (DECL_ARG_TYPE (parm
))
8995 != TYPE_ATOMIC (TREE_VALUE (type
)))
8996 || !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm
)),
8997 TYPE_MAIN_VARIANT (TREE_VALUE (type
)))))
8999 if ((TYPE_ATOMIC (DECL_ARG_TYPE (parm
))
9000 == TYPE_ATOMIC (TREE_VALUE (type
)))
9001 && (TYPE_MAIN_VARIANT (TREE_TYPE (parm
))
9002 == TYPE_MAIN_VARIANT (TREE_VALUE (type
))))
9004 /* Adjust argument to match prototype. E.g. a previous
9005 `int foo(float);' prototype causes
9006 `int foo(x) float x; {...}' to be treated like
9007 `int foo(float x) {...}'. This is particularly
9008 useful for argument types like uid_t. */
9009 DECL_ARG_TYPE (parm
) = TREE_TYPE (parm
);
9011 if (targetm
.calls
.promote_prototypes (TREE_TYPE (current_function_decl
))
9012 && INTEGRAL_TYPE_P (TREE_TYPE (parm
))
9013 && (TYPE_PRECISION (TREE_TYPE (parm
))
9014 < TYPE_PRECISION (integer_type_node
)))
9015 DECL_ARG_TYPE (parm
)
9016 = c_type_promotes_to (TREE_TYPE (parm
));
9018 /* ??? Is it possible to get here with a
9019 built-in prototype or will it always have
9020 been diagnosed as conflicting with an
9021 old-style definition and discarded? */
9022 if (current_function_prototype_built_in
)
9023 warning_at (DECL_SOURCE_LOCATION (parm
),
9024 OPT_Wpedantic
, "promoted argument %qD "
9025 "doesn%'t match built-in prototype", parm
);
9028 pedwarn (DECL_SOURCE_LOCATION (parm
),
9029 OPT_Wpedantic
, "promoted argument %qD "
9030 "doesn%'t match prototype", parm
);
9031 pedwarn (current_function_prototype_locus
, OPT_Wpedantic
,
9032 "prototype declaration");
9037 if (current_function_prototype_built_in
)
9038 warning_at (DECL_SOURCE_LOCATION (parm
),
9039 0, "argument %qD doesn%'t match "
9040 "built-in prototype", parm
);
9043 error_at (DECL_SOURCE_LOCATION (parm
),
9044 "argument %qD doesn%'t match prototype", parm
);
9045 error_at (current_function_prototype_locus
,
9046 "prototype declaration");
9051 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl
)) = NULL_TREE
;
9054 /* Otherwise, create a prototype that would match. */
9058 tree actual
= NULL_TREE
, last
= NULL_TREE
, type
;
9060 for (parm
= DECL_ARGUMENTS (fndecl
); parm
; parm
= DECL_CHAIN (parm
))
9062 type
= tree_cons (NULL_TREE
, DECL_ARG_TYPE (parm
), NULL_TREE
);
9064 TREE_CHAIN (last
) = type
;
9069 type
= tree_cons (NULL_TREE
, void_type_node
, NULL_TREE
);
9071 TREE_CHAIN (last
) = type
;
9075 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
9076 of the type of this function, but we need to avoid having this
9077 affect the types of other similarly-typed functions, so we must
9078 first force the generation of an identical (but separate) type
9079 node for the relevant function type. The new node we create
9080 will be a variant of the main variant of the original function
9083 TREE_TYPE (fndecl
) = build_variant_type_copy (TREE_TYPE (fndecl
));
9085 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl
)) = actual
;
9089 /* Store parameter declarations passed in ARG_INFO into the current
9090 function declaration. */
9093 store_parm_decls_from (struct c_arg_info
*arg_info
)
9095 current_function_arg_info
= arg_info
;
9096 store_parm_decls ();
9099 /* Called by walk_tree to look for and update context-less labels. */
9102 set_labels_context_r (tree
*tp
, int *walk_subtrees
, void *data
)
9104 if (TREE_CODE (*tp
) == LABEL_EXPR
9105 && DECL_CONTEXT (LABEL_EXPR_LABEL (*tp
)) == NULL_TREE
)
9107 DECL_CONTEXT (LABEL_EXPR_LABEL (*tp
)) = static_cast<tree
>(data
);
9114 /* Store the parameter declarations into the current function declaration.
9115 This is called after parsing the parameter declarations, before
9116 digesting the body of the function.
9118 For an old-style definition, construct a prototype out of the old-style
9119 parameter declarations and inject it into the function's type. */
9122 store_parm_decls (void)
9124 tree fndecl
= current_function_decl
;
9127 /* The argument information block for FNDECL. */
9128 struct c_arg_info
*arg_info
= current_function_arg_info
;
9129 current_function_arg_info
= 0;
9131 /* True if this definition is written with a prototype. Note:
9132 despite C99 6.7.5.3p14, we can *not* treat an empty argument
9133 list in a function definition as equivalent to (void) -- an
9134 empty argument list specifies the function has no parameters,
9135 but only (void) sets up a prototype for future calls. */
9136 proto
= arg_info
->types
!= 0;
9139 store_parm_decls_newstyle (fndecl
, arg_info
);
9141 store_parm_decls_oldstyle (fndecl
, arg_info
);
9143 /* The next call to push_scope will be a function body. */
9145 next_is_function_body
= true;
9147 /* Write a record describing this function definition to the prototypes
9148 file (if requested). */
9150 gen_aux_info_record (fndecl
, 1, 0, proto
);
9152 /* Initialize the RTL code for the function. */
9153 allocate_struct_function (fndecl
, false);
9155 if (warn_unused_local_typedefs
)
9156 cfun
->language
= ggc_cleared_alloc
<language_function
> ();
9158 /* Begin the statement tree for this function. */
9159 DECL_SAVED_TREE (fndecl
) = push_stmt_list ();
9161 /* ??? Insert the contents of the pending sizes list into the function
9162 to be evaluated. The only reason left to have this is
9163 void foo(int n, int array[n++])
9164 because we throw away the array type in favor of a pointer type, and
9165 thus won't naturally see the SAVE_EXPR containing the increment. All
9166 other pending sizes would be handled by gimplify_parameters. */
9167 if (arg_info
->pending_sizes
)
9169 /* In very special circumstances, e.g. for code like
9171 void f (int a[i += 2]) {}
9172 we need to execute the atomic assignment on function entry.
9173 But in this case, it is not just a straight store, it has the
9174 op= form, which means that build_atomic_assign has generated
9175 gotos, labels, etc. Because at that time the function decl
9176 for F has not been created yet, those labels do not have any
9177 function context. But we have the fndecl now, so update the
9178 labels accordingly. gimplify_expr would crash otherwise. */
9179 walk_tree_without_duplicates (&arg_info
->pending_sizes
,
9180 set_labels_context_r
, fndecl
);
9181 add_stmt (arg_info
->pending_sizes
);
9185 /* Store PARM_DECLs in PARMS into scope temporarily. Used for
9186 c_finish_omp_declare_simd for function prototypes. No diagnostics
9190 temp_store_parm_decls (tree fndecl
, tree parms
)
9193 for (tree p
= parms
; p
; p
= DECL_CHAIN (p
))
9195 DECL_CONTEXT (p
) = fndecl
;
9197 bind (DECL_NAME (p
), p
, current_scope
,
9198 /*invisible=*/false, /*nested=*/false,
9203 /* Undo what temp_store_parm_decls did. */
9206 temp_pop_parm_decls (void)
9208 /* Clear all bindings in this temporary scope, so that
9209 pop_scope doesn't create a BLOCK. */
9210 struct c_binding
*b
= current_scope
->bindings
;
9211 current_scope
->bindings
= NULL
;
9212 for (; b
; b
= free_binding_and_advance (b
))
9214 gcc_assert (TREE_CODE (b
->decl
) == PARM_DECL
9215 || b
->decl
== error_mark_node
);
9216 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
9217 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
9218 if (b
->shadowed
&& b
->shadowed
->u
.type
)
9219 TREE_TYPE (b
->shadowed
->decl
) = b
->shadowed
->u
.type
;
9225 /* Finish up a function declaration and compile that function
9226 all the way to assembler language output. Then free the storage
9227 for the function definition.
9229 This is called after parsing the body of the function definition. */
9232 finish_function (void)
9234 tree fndecl
= current_function_decl
;
9236 if (c_dialect_objc ())
9237 objc_finish_function ();
9239 if (TREE_CODE (fndecl
) == FUNCTION_DECL
9240 && targetm
.calls
.promote_prototypes (TREE_TYPE (fndecl
)))
9242 tree args
= DECL_ARGUMENTS (fndecl
);
9243 for (; args
; args
= DECL_CHAIN (args
))
9245 tree type
= TREE_TYPE (args
);
9246 if (INTEGRAL_TYPE_P (type
)
9247 && TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
))
9248 DECL_ARG_TYPE (args
) = c_type_promotes_to (type
);
9252 if (DECL_INITIAL (fndecl
) && DECL_INITIAL (fndecl
) != error_mark_node
)
9253 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl
)) = fndecl
;
9255 /* Must mark the RESULT_DECL as being in this function. */
9257 if (DECL_RESULT (fndecl
) && DECL_RESULT (fndecl
) != error_mark_node
)
9258 DECL_CONTEXT (DECL_RESULT (fndecl
)) = fndecl
;
9260 if (MAIN_NAME_P (DECL_NAME (fndecl
)) && flag_hosted
9261 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl
)))
9262 == integer_type_node
&& flag_isoc99
)
9264 /* Hack. We don't want the middle-end to warn that this return
9265 is unreachable, so we mark its location as special. Using
9266 UNKNOWN_LOCATION has the problem that it gets clobbered in
9267 annotate_one_with_locus. A cleaner solution might be to
9268 ensure ! should_carry_locus_p (stmt), but that needs a flag.
9270 c_finish_return (BUILTINS_LOCATION
, integer_zero_node
, NULL_TREE
);
9273 /* Tie off the statement tree for this function. */
9274 DECL_SAVED_TREE (fndecl
) = pop_stmt_list (DECL_SAVED_TREE (fndecl
));
9276 /* If the function has _Cilk_spawn in front of a function call inside it
9277 i.e. it is a spawning function, then add the appropriate Cilk plus
9278 functions inside. */
9279 if (fn_contains_cilk_spawn_p (cfun
))
9280 cfun
->cilk_frame_decl
= insert_cilk_frame (fndecl
);
9282 finish_fname_decls ();
9284 /* Complain if there's just no return statement. */
9285 if (warn_return_type
9286 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl
))) != VOID_TYPE
9287 && !current_function_returns_value
&& !current_function_returns_null
9288 /* Don't complain if we are no-return. */
9289 && !current_function_returns_abnormally
9290 /* Don't complain if we are declared noreturn. */
9291 && !TREE_THIS_VOLATILE (fndecl
)
9292 /* Don't warn for main(). */
9293 && !MAIN_NAME_P (DECL_NAME (fndecl
))
9294 /* Or if they didn't actually specify a return type. */
9295 && !C_FUNCTION_IMPLICIT_INT (fndecl
)
9296 /* Normally, with -Wreturn-type, flow will complain, but we might
9297 optimize out static functions. */
9298 && !TREE_PUBLIC (fndecl
))
9300 warning (OPT_Wreturn_type
,
9301 "no return statement in function returning non-void");
9302 TREE_NO_WARNING (fndecl
) = 1;
9305 /* Complain about parameters that are only set, but never otherwise used. */
9306 if (warn_unused_but_set_parameter
)
9310 for (decl
= DECL_ARGUMENTS (fndecl
);
9312 decl
= DECL_CHAIN (decl
))
9313 if (TREE_USED (decl
)
9314 && TREE_CODE (decl
) == PARM_DECL
9315 && !DECL_READ_P (decl
)
9317 && !DECL_ARTIFICIAL (decl
)
9318 && !TREE_NO_WARNING (decl
))
9319 warning_at (DECL_SOURCE_LOCATION (decl
),
9320 OPT_Wunused_but_set_parameter
,
9321 "parameter %qD set but not used", decl
);
9324 /* Complain about locally defined typedefs that are not used in this
9326 maybe_warn_unused_local_typedefs ();
9328 /* Possibly warn about unused parameters. */
9329 if (warn_unused_parameter
)
9330 do_warn_unused_parameter (fndecl
);
9332 /* Store the end of the function, so that we get good line number
9333 info for the epilogue. */
9334 cfun
->function_end_locus
= input_location
;
9336 /* Finalize the ELF visibility for the function. */
9337 c_determine_visibility (fndecl
);
9339 /* For GNU C extern inline functions disregard inline limits. */
9340 if (DECL_EXTERNAL (fndecl
)
9341 && DECL_DECLARED_INLINE_P (fndecl
)
9342 && (flag_gnu89_inline
9343 || lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (fndecl
))))
9344 DECL_DISREGARD_INLINE_LIMITS (fndecl
) = 1;
9346 /* Genericize before inlining. Delay genericizing nested functions
9347 until their parent function is genericized. Since finalizing
9348 requires GENERIC, delay that as well. */
9350 if (DECL_INITIAL (fndecl
) && DECL_INITIAL (fndecl
) != error_mark_node
9351 && !undef_nested_function
)
9353 if (!decl_function_context (fndecl
))
9355 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE
, fndecl
);
9356 c_genericize (fndecl
);
9358 /* ??? Objc emits functions after finalizing the compilation unit.
9359 This should be cleaned up later and this conditional removed. */
9360 if (symtab
->global_info_ready
)
9362 cgraph_node::add_new_function (fndecl
, false);
9365 cgraph_node::finalize_function (fndecl
, false);
9369 /* Register this function with cgraph just far enough to get it
9370 added to our parent's nested function list. Handy, since the
9371 C front end doesn't have such a list. */
9372 (void) cgraph_node::get_create (fndecl
);
9376 if (!decl_function_context (fndecl
))
9377 undef_nested_function
= false;
9379 if (cfun
->language
!= NULL
)
9381 ggc_free (cfun
->language
);
9382 cfun
->language
= NULL
;
9385 /* We're leaving the context of this function, so zap cfun.
9386 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
9387 tree_rest_of_compilation. */
9389 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION
, current_function_decl
);
9390 current_function_decl
= NULL
;
9393 /* Check the declarations given in a for-loop for satisfying the C99
9394 constraints. If exactly one such decl is found, return it. LOC is
9395 the location of the opening parenthesis of the for loop. The last
9396 parameter allows you to control the "for loop initial declarations
9397 are only allowed in C99 mode". Normally, you should pass
9398 flag_isoc99 as that parameter. But in some cases (Objective-C
9399 foreach loop, for example) we want to run the checks in this
9400 function even if not in C99 mode, so we allow the caller to turn
9401 off the error about not being in C99 mode.
9405 check_for_loop_decls (location_t loc
, bool turn_off_iso_c99_error
)
9407 struct c_binding
*b
;
9408 tree one_decl
= NULL_TREE
;
9411 if (!turn_off_iso_c99_error
)
9413 static bool hint
= true;
9414 /* If we get here, declarations have been used in a for loop without
9415 the C99 for loop scope. This doesn't make much sense, so don't
9417 error_at (loc
, "%<for%> loop initial declarations "
9418 "are only allowed in C99 or C11 mode");
9422 "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 "
9423 "to compile your code");
9428 /* C99 subclause 6.8.5 paragraph 3:
9430 [#3] The declaration part of a for statement shall only
9431 declare identifiers for objects having storage class auto or
9434 It isn't clear whether, in this sentence, "identifiers" binds to
9435 "shall only declare" or to "objects" - that is, whether all identifiers
9436 declared must be identifiers for objects, or whether the restriction
9437 only applies to those that are. (A question on this in comp.std.c
9438 in November 2000 received no answer.) We implement the strictest
9439 interpretation, to avoid creating an extension which later causes
9442 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
9445 tree decl
= b
->decl
;
9450 switch (TREE_CODE (decl
))
9454 location_t decl_loc
= DECL_SOURCE_LOCATION (decl
);
9455 if (TREE_STATIC (decl
))
9457 "declaration of static variable %qD in %<for%> loop "
9458 "initial declaration", decl
);
9459 else if (DECL_EXTERNAL (decl
))
9461 "declaration of %<extern%> variable %qD in %<for%> loop "
9462 "initial declaration", decl
);
9468 "%<struct %E%> declared in %<for%> loop initial "
9473 "%<union %E%> declared in %<for%> loop initial declaration",
9477 error_at (loc
, "%<enum %E%> declared in %<for%> loop "
9478 "initial declaration", id
);
9481 error_at (loc
, "declaration of non-variable "
9482 "%qD in %<for%> loop initial declaration", decl
);
9489 return n_decls
== 1 ? one_decl
: NULL_TREE
;
9492 /* Save and reinitialize the variables
9493 used during compilation of a C function. */
9496 c_push_function_context (void)
9498 struct language_function
*p
= cfun
->language
;
9499 /* cfun->language might have been already allocated by the use of
9500 -Wunused-local-typedefs. In that case, just re-use it. */
9502 cfun
->language
= p
= ggc_cleared_alloc
<language_function
> ();
9504 p
->base
.x_stmt_tree
= c_stmt_tree
;
9505 c_stmt_tree
.x_cur_stmt_list
= vec_safe_copy (c_stmt_tree
.x_cur_stmt_list
);
9506 p
->x_break_label
= c_break_label
;
9507 p
->x_cont_label
= c_cont_label
;
9508 p
->x_switch_stack
= c_switch_stack
;
9509 p
->arg_info
= current_function_arg_info
;
9510 p
->returns_value
= current_function_returns_value
;
9511 p
->returns_null
= current_function_returns_null
;
9512 p
->returns_abnormally
= current_function_returns_abnormally
;
9513 p
->warn_about_return_type
= warn_about_return_type
;
9515 push_function_context ();
9518 /* Restore the variables used during compilation of a C function. */
9521 c_pop_function_context (void)
9523 struct language_function
*p
;
9525 pop_function_context ();
9528 /* When -Wunused-local-typedefs is in effect, cfun->languages is
9529 used to store data throughout the life time of the current cfun,
9530 So don't deallocate it. */
9531 if (!warn_unused_local_typedefs
)
9532 cfun
->language
= NULL
;
9534 if (DECL_STRUCT_FUNCTION (current_function_decl
) == 0
9535 && DECL_SAVED_TREE (current_function_decl
) == NULL_TREE
)
9537 /* Stop pointing to the local nodes about to be freed. */
9538 /* But DECL_INITIAL must remain nonzero so we know this
9539 was an actual function definition. */
9540 DECL_INITIAL (current_function_decl
) = error_mark_node
;
9541 DECL_ARGUMENTS (current_function_decl
) = NULL_TREE
;
9544 c_stmt_tree
= p
->base
.x_stmt_tree
;
9545 p
->base
.x_stmt_tree
.x_cur_stmt_list
= NULL
;
9546 c_break_label
= p
->x_break_label
;
9547 c_cont_label
= p
->x_cont_label
;
9548 c_switch_stack
= p
->x_switch_stack
;
9549 current_function_arg_info
= p
->arg_info
;
9550 current_function_returns_value
= p
->returns_value
;
9551 current_function_returns_null
= p
->returns_null
;
9552 current_function_returns_abnormally
= p
->returns_abnormally
;
9553 warn_about_return_type
= p
->warn_about_return_type
;
9556 /* The functions below are required for functionality of doing
9557 function at once processing in the C front end. Currently these
9558 functions are not called from anywhere in the C front end, but as
9559 these changes continue, that will change. */
9561 /* Returns the stmt_tree (if any) to which statements are currently
9562 being added. If there is no active statement-tree, NULL is
9566 current_stmt_tree (void)
9568 return &c_stmt_tree
;
9571 /* Return the global value of T as a symbol. */
9574 identifier_global_value (tree t
)
9576 struct c_binding
*b
;
9578 for (b
= I_SYMBOL_BINDING (t
); b
; b
= b
->shadowed
)
9579 if (B_IN_FILE_SCOPE (b
) || B_IN_EXTERNAL_SCOPE (b
))
9585 /* In C, the only C-linkage public declaration is at file scope. */
9588 c_linkage_bindings (tree name
)
9590 return identifier_global_value (name
);
9593 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
9594 otherwise the name is found in ridpointers from RID_INDEX. */
9597 record_builtin_type (enum rid rid_index
, const char *name
, tree type
)
9601 id
= ridpointers
[(int) rid_index
];
9603 id
= get_identifier (name
);
9604 decl
= build_decl (UNKNOWN_LOCATION
, TYPE_DECL
, id
, type
);
9606 if (debug_hooks
->type_decl
)
9607 debug_hooks
->type_decl (decl
, false);
9610 /* Build the void_list_node (void_type_node having been created). */
9612 build_void_list_node (void)
9614 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
9618 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
9621 build_c_parm (struct c_declspecs
*specs
, tree attrs
,
9622 struct c_declarator
*declarator
)
9624 struct c_parm
*ret
= XOBNEW (&parser_obstack
, struct c_parm
);
9627 ret
->declarator
= declarator
;
9631 /* Return a declarator with nested attributes. TARGET is the inner
9632 declarator to which these attributes apply. ATTRS are the
9635 struct c_declarator
*
9636 build_attrs_declarator (tree attrs
, struct c_declarator
*target
)
9638 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
9639 ret
->kind
= cdk_attrs
;
9640 ret
->declarator
= target
;
9641 ret
->u
.attrs
= attrs
;
9645 /* Return a declarator for a function with arguments specified by ARGS
9646 and return type specified by TARGET. */
9648 struct c_declarator
*
9649 build_function_declarator (struct c_arg_info
*args
,
9650 struct c_declarator
*target
)
9652 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
9653 ret
->kind
= cdk_function
;
9654 ret
->declarator
= target
;
9655 ret
->u
.arg_info
= args
;
9659 /* Return a declarator for the identifier IDENT (which may be
9660 NULL_TREE for an abstract declarator). */
9662 struct c_declarator
*
9663 build_id_declarator (tree ident
)
9665 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
9667 ret
->declarator
= 0;
9669 /* Default value - may get reset to a more precise location. */
9670 ret
->id_loc
= input_location
;
9674 /* Return something to represent absolute declarators containing a *.
9675 TARGET is the absolute declarator that the * contains.
9676 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
9677 to apply to the pointer type. */
9679 struct c_declarator
*
9680 make_pointer_declarator (struct c_declspecs
*type_quals_attrs
,
9681 struct c_declarator
*target
)
9685 struct c_declarator
*itarget
= target
;
9686 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
9687 if (type_quals_attrs
)
9689 attrs
= type_quals_attrs
->attrs
;
9690 quals
= quals_from_declspecs (type_quals_attrs
);
9691 if (attrs
!= NULL_TREE
)
9692 itarget
= build_attrs_declarator (attrs
, target
);
9694 ret
->kind
= cdk_pointer
;
9695 ret
->declarator
= itarget
;
9696 ret
->u
.pointer_quals
= quals
;
9700 /* Return a pointer to a structure for an empty list of declaration
9703 struct c_declspecs
*
9704 build_null_declspecs (void)
9706 struct c_declspecs
*ret
= XOBNEW (&parser_obstack
, struct c_declspecs
);
9707 memset (ret
, 0, sizeof *ret
);
9708 ret
->align_log
= -1;
9709 ret
->typespec_word
= cts_none
;
9710 ret
->storage_class
= csc_none
;
9711 ret
->expr_const_operands
= true;
9712 ret
->typespec_kind
= ctsk_none
;
9713 ret
->address_space
= ADDR_SPACE_GENERIC
;
9717 /* Add the address space ADDRSPACE to the declaration specifiers
9718 SPECS, returning SPECS. */
9720 struct c_declspecs
*
9721 declspecs_add_addrspace (source_location location
,
9722 struct c_declspecs
*specs
, addr_space_t as
)
9724 specs
->non_sc_seen_p
= true;
9725 specs
->declspecs_seen_p
= true;
9727 if (!ADDR_SPACE_GENERIC_P (specs
->address_space
)
9728 && specs
->address_space
!= as
)
9729 error ("incompatible address space qualifiers %qs and %qs",
9730 c_addr_space_name (as
),
9731 c_addr_space_name (specs
->address_space
));
9734 specs
->address_space
= as
;
9735 specs
->locations
[cdw_address_space
] = location
;
9740 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
9743 struct c_declspecs
*
9744 declspecs_add_qual (source_location loc
,
9745 struct c_declspecs
*specs
, tree qual
)
9749 specs
->non_sc_seen_p
= true;
9750 specs
->declspecs_seen_p
= true;
9751 gcc_assert (TREE_CODE (qual
) == IDENTIFIER_NODE
9752 && C_IS_RESERVED_WORD (qual
));
9753 i
= C_RID_CODE (qual
);
9754 location_t prev_loc
= UNKNOWN_LOCATION
;
9758 dupe
= specs
->const_p
;
9759 specs
->const_p
= true;
9760 prev_loc
= specs
->locations
[cdw_const
];
9761 specs
->locations
[cdw_const
] = loc
;
9764 dupe
= specs
->volatile_p
;
9765 specs
->volatile_p
= true;
9766 prev_loc
= specs
->locations
[cdw_volatile
];
9767 specs
->locations
[cdw_volatile
] = loc
;
9770 dupe
= specs
->restrict_p
;
9771 specs
->restrict_p
= true;
9772 prev_loc
= specs
->locations
[cdw_restrict
];
9773 specs
->locations
[cdw_restrict
] = loc
;
9776 dupe
= specs
->atomic_p
;
9777 specs
->atomic_p
= true;
9778 prev_loc
= specs
->locations
[cdw_atomic
];
9779 specs
->locations
[cdw_atomic
] = loc
;
9786 bool warned
= pedwarn_c90 (loc
, OPT_Wpedantic
,
9787 "duplicate %qE declaration specifier", qual
);
9789 && warn_duplicate_decl_specifier
9790 && prev_loc
>= RESERVED_LOCATION_COUNT
9791 && !from_macro_expansion_at (prev_loc
)
9792 && !from_macro_expansion_at (loc
))
9793 warning_at (loc
, OPT_Wduplicate_decl_specifier
,
9794 "duplicate %qE declaration specifier", qual
);
9799 /* Add the type specifier TYPE to the declaration specifiers SPECS,
9802 struct c_declspecs
*
9803 declspecs_add_type (location_t loc
, struct c_declspecs
*specs
,
9804 struct c_typespec spec
)
9806 tree type
= spec
.spec
;
9807 specs
->non_sc_seen_p
= true;
9808 specs
->declspecs_seen_p
= true;
9809 specs
->typespec_kind
= spec
.kind
;
9810 if (TREE_DEPRECATED (type
))
9811 specs
->deprecated_p
= true;
9813 /* Handle type specifier keywords. */
9814 if (TREE_CODE (type
) == IDENTIFIER_NODE
9815 && C_IS_RESERVED_WORD (type
)
9816 && C_RID_CODE (type
) != RID_CXX_COMPAT_WARN
)
9818 enum rid i
= C_RID_CODE (type
);
9821 error_at (loc
, "two or more data types in declaration specifiers");
9824 if ((int) i
<= (int) RID_LAST_MODIFIER
)
9826 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
9831 if (specs
->long_long_p
)
9833 error_at (loc
, "%<long long long%> is too long for GCC");
9838 if (specs
->typespec_word
== cts_double
)
9841 ("both %<long long%> and %<double%> in "
9842 "declaration specifiers"));
9845 pedwarn_c90 (loc
, OPT_Wlong_long
,
9846 "ISO C90 does not support %<long long%>");
9847 specs
->long_long_p
= 1;
9848 specs
->locations
[cdw_long_long
] = loc
;
9853 ("both %<long%> and %<short%> in "
9854 "declaration specifiers"));
9855 else if (specs
->typespec_word
== cts_auto_type
)
9857 ("both %<long%> and %<__auto_type%> in "
9858 "declaration specifiers"));
9859 else if (specs
->typespec_word
== cts_void
)
9861 ("both %<long%> and %<void%> in "
9862 "declaration specifiers"));
9863 else if (specs
->typespec_word
== cts_int_n
)
9865 ("both %<long%> and %<__int%d%> in "
9866 "declaration specifiers"),
9867 int_n_data
[specs
->int_n_idx
].bitsize
);
9868 else if (specs
->typespec_word
== cts_bool
)
9870 ("both %<long%> and %<_Bool%> in "
9871 "declaration specifiers"));
9872 else if (specs
->typespec_word
== cts_char
)
9874 ("both %<long%> and %<char%> in "
9875 "declaration specifiers"));
9876 else if (specs
->typespec_word
== cts_float
)
9878 ("both %<long%> and %<float%> in "
9879 "declaration specifiers"));
9880 else if (specs
->typespec_word
== cts_floatn_nx
)
9882 ("both %<long%> and %<_Float%d%s%> in "
9883 "declaration specifiers"),
9884 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
9885 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
9888 else if (specs
->typespec_word
== cts_dfloat32
)
9890 ("both %<long%> and %<_Decimal32%> in "
9891 "declaration specifiers"));
9892 else if (specs
->typespec_word
== cts_dfloat64
)
9894 ("both %<long%> and %<_Decimal64%> in "
9895 "declaration specifiers"));
9896 else if (specs
->typespec_word
== cts_dfloat128
)
9898 ("both %<long%> and %<_Decimal128%> in "
9899 "declaration specifiers"));
9902 specs
->long_p
= true;
9903 specs
->locations
[cdw_long
] = loc
;
9907 dupe
= specs
->short_p
;
9910 ("both %<long%> and %<short%> in "
9911 "declaration specifiers"));
9912 else if (specs
->typespec_word
== cts_auto_type
)
9914 ("both %<short%> and %<__auto_type%> in "
9915 "declaration specifiers"));
9916 else if (specs
->typespec_word
== cts_void
)
9918 ("both %<short%> and %<void%> in "
9919 "declaration specifiers"));
9920 else if (specs
->typespec_word
== cts_int_n
)
9922 ("both %<short%> and %<__int%d%> in "
9923 "declaration specifiers"),
9924 int_n_data
[specs
->int_n_idx
].bitsize
);
9925 else if (specs
->typespec_word
== cts_bool
)
9927 ("both %<short%> and %<_Bool%> in "
9928 "declaration specifiers"));
9929 else if (specs
->typespec_word
== cts_char
)
9931 ("both %<short%> and %<char%> in "
9932 "declaration specifiers"));
9933 else if (specs
->typespec_word
== cts_float
)
9935 ("both %<short%> and %<float%> in "
9936 "declaration specifiers"));
9937 else if (specs
->typespec_word
== cts_double
)
9939 ("both %<short%> and %<double%> in "
9940 "declaration specifiers"));
9941 else if (specs
->typespec_word
== cts_floatn_nx
)
9943 ("both %<short%> and %<_Float%d%s%> in "
9944 "declaration specifiers"),
9945 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
9946 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
9949 else if (specs
->typespec_word
== cts_dfloat32
)
9951 ("both %<short%> and %<_Decimal32%> in "
9952 "declaration specifiers"));
9953 else if (specs
->typespec_word
== cts_dfloat64
)
9955 ("both %<short%> and %<_Decimal64%> in "
9956 "declaration specifiers"));
9957 else if (specs
->typespec_word
== cts_dfloat128
)
9959 ("both %<short%> and %<_Decimal128%> in "
9960 "declaration specifiers"));
9963 specs
->short_p
= true;
9964 specs
->locations
[cdw_short
] = loc
;
9968 dupe
= specs
->signed_p
;
9969 if (specs
->unsigned_p
)
9971 ("both %<signed%> and %<unsigned%> in "
9972 "declaration specifiers"));
9973 else if (specs
->typespec_word
== cts_auto_type
)
9975 ("both %<signed%> and %<__auto_type%> in "
9976 "declaration specifiers"));
9977 else if (specs
->typespec_word
== cts_void
)
9979 ("both %<signed%> and %<void%> in "
9980 "declaration specifiers"));
9981 else if (specs
->typespec_word
== cts_bool
)
9983 ("both %<signed%> and %<_Bool%> in "
9984 "declaration specifiers"));
9985 else if (specs
->typespec_word
== cts_float
)
9987 ("both %<signed%> and %<float%> in "
9988 "declaration specifiers"));
9989 else if (specs
->typespec_word
== cts_double
)
9991 ("both %<signed%> and %<double%> in "
9992 "declaration specifiers"));
9993 else if (specs
->typespec_word
== cts_floatn_nx
)
9995 ("both %<signed%> and %<_Float%d%s%> in "
9996 "declaration specifiers"),
9997 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
9998 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10001 else if (specs
->typespec_word
== cts_dfloat32
)
10003 ("both %<signed%> and %<_Decimal32%> in "
10004 "declaration specifiers"));
10005 else if (specs
->typespec_word
== cts_dfloat64
)
10007 ("both %<signed%> and %<_Decimal64%> in "
10008 "declaration specifiers"));
10009 else if (specs
->typespec_word
== cts_dfloat128
)
10011 ("both %<signed%> and %<_Decimal128%> in "
10012 "declaration specifiers"));
10015 specs
->signed_p
= true;
10016 specs
->locations
[cdw_signed
] = loc
;
10020 dupe
= specs
->unsigned_p
;
10021 if (specs
->signed_p
)
10023 ("both %<signed%> and %<unsigned%> in "
10024 "declaration specifiers"));
10025 else if (specs
->typespec_word
== cts_auto_type
)
10027 ("both %<unsigned%> and %<__auto_type%> in "
10028 "declaration specifiers"));
10029 else if (specs
->typespec_word
== cts_void
)
10031 ("both %<unsigned%> and %<void%> in "
10032 "declaration specifiers"));
10033 else if (specs
->typespec_word
== cts_bool
)
10035 ("both %<unsigned%> and %<_Bool%> in "
10036 "declaration specifiers"));
10037 else if (specs
->typespec_word
== cts_float
)
10039 ("both %<unsigned%> and %<float%> in "
10040 "declaration specifiers"));
10041 else if (specs
->typespec_word
== cts_double
)
10043 ("both %<unsigned%> and %<double%> in "
10044 "declaration specifiers"));
10045 else if (specs
->typespec_word
== cts_floatn_nx
)
10047 ("both %<unsigned%> and %<_Float%d%s%> in "
10048 "declaration specifiers"),
10049 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10050 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10053 else if (specs
->typespec_word
== cts_dfloat32
)
10055 ("both %<unsigned%> and %<_Decimal32%> in "
10056 "declaration specifiers"));
10057 else if (specs
->typespec_word
== cts_dfloat64
)
10059 ("both %<unsigned%> and %<_Decimal64%> in "
10060 "declaration specifiers"));
10061 else if (specs
->typespec_word
== cts_dfloat128
)
10063 ("both %<unsigned%> and %<_Decimal128%> in "
10064 "declaration specifiers"));
10067 specs
->unsigned_p
= true;
10068 specs
->locations
[cdw_unsigned
] = loc
;
10072 dupe
= specs
->complex_p
;
10073 if (!in_system_header_at (loc
))
10074 pedwarn_c90 (loc
, OPT_Wpedantic
,
10075 "ISO C90 does not support complex types");
10076 if (specs
->typespec_word
== cts_auto_type
)
10078 ("both %<complex%> and %<__auto_type%> in "
10079 "declaration specifiers"));
10080 else if (specs
->typespec_word
== cts_void
)
10082 ("both %<complex%> and %<void%> in "
10083 "declaration specifiers"));
10084 else if (specs
->typespec_word
== cts_bool
)
10086 ("both %<complex%> and %<_Bool%> in "
10087 "declaration specifiers"));
10088 else if (specs
->typespec_word
== cts_dfloat32
)
10090 ("both %<complex%> and %<_Decimal32%> in "
10091 "declaration specifiers"));
10092 else if (specs
->typespec_word
== cts_dfloat64
)
10094 ("both %<complex%> and %<_Decimal64%> in "
10095 "declaration specifiers"));
10096 else if (specs
->typespec_word
== cts_dfloat128
)
10098 ("both %<complex%> and %<_Decimal128%> in "
10099 "declaration specifiers"));
10100 else if (specs
->typespec_word
== cts_fract
)
10102 ("both %<complex%> and %<_Fract%> in "
10103 "declaration specifiers"));
10104 else if (specs
->typespec_word
== cts_accum
)
10106 ("both %<complex%> and %<_Accum%> in "
10107 "declaration specifiers"));
10108 else if (specs
->saturating_p
)
10110 ("both %<complex%> and %<_Sat%> in "
10111 "declaration specifiers"));
10114 specs
->complex_p
= true;
10115 specs
->locations
[cdw_complex
] = loc
;
10119 dupe
= specs
->saturating_p
;
10120 pedwarn (loc
, OPT_Wpedantic
,
10121 "ISO C does not support saturating types");
10122 if (specs
->typespec_word
== cts_int_n
)
10125 ("both %<_Sat%> and %<__int%d%> in "
10126 "declaration specifiers"),
10127 int_n_data
[specs
->int_n_idx
].bitsize
);
10129 else if (specs
->typespec_word
== cts_auto_type
)
10131 ("both %<_Sat%> and %<__auto_type%> in "
10132 "declaration specifiers"));
10133 else if (specs
->typespec_word
== cts_void
)
10135 ("both %<_Sat%> and %<void%> in "
10136 "declaration specifiers"));
10137 else if (specs
->typespec_word
== cts_bool
)
10139 ("both %<_Sat%> and %<_Bool%> in "
10140 "declaration specifiers"));
10141 else if (specs
->typespec_word
== cts_char
)
10143 ("both %<_Sat%> and %<char%> in "
10144 "declaration specifiers"));
10145 else if (specs
->typespec_word
== cts_int
)
10147 ("both %<_Sat%> and %<int%> in "
10148 "declaration specifiers"));
10149 else if (specs
->typespec_word
== cts_float
)
10151 ("both %<_Sat%> and %<float%> in "
10152 "declaration specifiers"));
10153 else if (specs
->typespec_word
== cts_double
)
10155 ("both %<_Sat%> and %<double%> in "
10156 "declaration specifiers"));
10157 else if (specs
->typespec_word
== cts_floatn_nx
)
10159 ("both %<_Sat%> and %<_Float%d%s%> in "
10160 "declaration specifiers"),
10161 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10162 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10165 else if (specs
->typespec_word
== cts_dfloat32
)
10167 ("both %<_Sat%> and %<_Decimal32%> in "
10168 "declaration specifiers"));
10169 else if (specs
->typespec_word
== cts_dfloat64
)
10171 ("both %<_Sat%> and %<_Decimal64%> in "
10172 "declaration specifiers"));
10173 else if (specs
->typespec_word
== cts_dfloat128
)
10175 ("both %<_Sat%> and %<_Decimal128%> in "
10176 "declaration specifiers"));
10177 else if (specs
->complex_p
)
10179 ("both %<_Sat%> and %<complex%> in "
10180 "declaration specifiers"));
10183 specs
->saturating_p
= true;
10184 specs
->locations
[cdw_saturating
] = loc
;
10188 gcc_unreachable ();
10192 error_at (loc
, "duplicate %qE", type
);
10198 /* "void", "_Bool", "char", "int", "float", "double",
10199 "_FloatN", "_FloatNx", "_Decimal32", "__intN",
10200 "_Decimal64", "_Decimal128", "_Fract", "_Accum" or
10202 if (specs
->typespec_word
!= cts_none
)
10205 "two or more data types in declaration specifiers");
10210 case RID_AUTO_TYPE
:
10213 ("both %<long%> and %<__auto_type%> in "
10214 "declaration specifiers"));
10215 else if (specs
->short_p
)
10217 ("both %<short%> and %<__auto_type%> in "
10218 "declaration specifiers"));
10219 else if (specs
->signed_p
)
10221 ("both %<signed%> and %<__auto_type%> in "
10222 "declaration specifiers"));
10223 else if (specs
->unsigned_p
)
10225 ("both %<unsigned%> and %<__auto_type%> in "
10226 "declaration specifiers"));
10227 else if (specs
->complex_p
)
10229 ("both %<complex%> and %<__auto_type%> in "
10230 "declaration specifiers"));
10231 else if (specs
->saturating_p
)
10233 ("both %<_Sat%> and %<__auto_type%> in "
10234 "declaration specifiers"));
10237 specs
->typespec_word
= cts_auto_type
;
10238 specs
->locations
[cdw_typespec
] = loc
;
10245 specs
->int_n_idx
= i
- RID_INT_N_0
;
10246 if (!in_system_header_at (input_location
))
10247 pedwarn (loc
, OPT_Wpedantic
,
10248 "ISO C does not support %<__int%d%> types",
10249 int_n_data
[specs
->int_n_idx
].bitsize
);
10253 ("both %<__int%d%> and %<long%> in "
10254 "declaration specifiers"),
10255 int_n_data
[specs
->int_n_idx
].bitsize
);
10256 else if (specs
->saturating_p
)
10258 ("both %<_Sat%> and %<__int%d%> in "
10259 "declaration specifiers"),
10260 int_n_data
[specs
->int_n_idx
].bitsize
);
10261 else if (specs
->short_p
)
10263 ("both %<__int%d%> and %<short%> in "
10264 "declaration specifiers"),
10265 int_n_data
[specs
->int_n_idx
].bitsize
);
10266 else if (! int_n_enabled_p
[specs
->int_n_idx
])
10268 specs
->typespec_word
= cts_int_n
;
10270 "%<__int%d%> is not supported on this target",
10271 int_n_data
[specs
->int_n_idx
].bitsize
);
10275 specs
->typespec_word
= cts_int_n
;
10276 specs
->locations
[cdw_typespec
] = loc
;
10282 ("both %<long%> and %<void%> in "
10283 "declaration specifiers"));
10284 else if (specs
->short_p
)
10286 ("both %<short%> and %<void%> in "
10287 "declaration specifiers"));
10288 else if (specs
->signed_p
)
10290 ("both %<signed%> and %<void%> in "
10291 "declaration specifiers"));
10292 else if (specs
->unsigned_p
)
10294 ("both %<unsigned%> and %<void%> in "
10295 "declaration specifiers"));
10296 else if (specs
->complex_p
)
10298 ("both %<complex%> and %<void%> in "
10299 "declaration specifiers"));
10300 else if (specs
->saturating_p
)
10302 ("both %<_Sat%> and %<void%> in "
10303 "declaration specifiers"));
10306 specs
->typespec_word
= cts_void
;
10307 specs
->locations
[cdw_typespec
] = loc
;
10311 if (!in_system_header_at (loc
))
10312 pedwarn_c90 (loc
, OPT_Wpedantic
,
10313 "ISO C90 does not support boolean types");
10316 ("both %<long%> and %<_Bool%> in "
10317 "declaration specifiers"));
10318 else if (specs
->short_p
)
10320 ("both %<short%> and %<_Bool%> in "
10321 "declaration specifiers"));
10322 else if (specs
->signed_p
)
10324 ("both %<signed%> and %<_Bool%> in "
10325 "declaration specifiers"));
10326 else if (specs
->unsigned_p
)
10328 ("both %<unsigned%> and %<_Bool%> in "
10329 "declaration specifiers"));
10330 else if (specs
->complex_p
)
10332 ("both %<complex%> and %<_Bool%> in "
10333 "declaration specifiers"));
10334 else if (specs
->saturating_p
)
10336 ("both %<_Sat%> and %<_Bool%> in "
10337 "declaration specifiers"));
10340 specs
->typespec_word
= cts_bool
;
10341 specs
->locations
[cdw_typespec
] = loc
;
10347 ("both %<long%> and %<char%> in "
10348 "declaration specifiers"));
10349 else if (specs
->short_p
)
10351 ("both %<short%> and %<char%> in "
10352 "declaration specifiers"));
10353 else if (specs
->saturating_p
)
10355 ("both %<_Sat%> and %<char%> in "
10356 "declaration specifiers"));
10359 specs
->typespec_word
= cts_char
;
10360 specs
->locations
[cdw_typespec
] = loc
;
10364 if (specs
->saturating_p
)
10366 ("both %<_Sat%> and %<int%> in "
10367 "declaration specifiers"));
10370 specs
->typespec_word
= cts_int
;
10371 specs
->locations
[cdw_typespec
] = loc
;
10377 ("both %<long%> and %<float%> in "
10378 "declaration specifiers"));
10379 else if (specs
->short_p
)
10381 ("both %<short%> and %<float%> in "
10382 "declaration specifiers"));
10383 else if (specs
->signed_p
)
10385 ("both %<signed%> and %<float%> in "
10386 "declaration specifiers"));
10387 else if (specs
->unsigned_p
)
10389 ("both %<unsigned%> and %<float%> in "
10390 "declaration specifiers"));
10391 else if (specs
->saturating_p
)
10393 ("both %<_Sat%> and %<float%> in "
10394 "declaration specifiers"));
10397 specs
->typespec_word
= cts_float
;
10398 specs
->locations
[cdw_typespec
] = loc
;
10402 if (specs
->long_long_p
)
10404 ("both %<long long%> and %<double%> in "
10405 "declaration specifiers"));
10406 else if (specs
->short_p
)
10408 ("both %<short%> and %<double%> in "
10409 "declaration specifiers"));
10410 else if (specs
->signed_p
)
10412 ("both %<signed%> and %<double%> in "
10413 "declaration specifiers"));
10414 else if (specs
->unsigned_p
)
10416 ("both %<unsigned%> and %<double%> in "
10417 "declaration specifiers"));
10418 else if (specs
->saturating_p
)
10420 ("both %<_Sat%> and %<double%> in "
10421 "declaration specifiers"));
10424 specs
->typespec_word
= cts_double
;
10425 specs
->locations
[cdw_typespec
] = loc
;
10428 CASE_RID_FLOATN_NX
:
10429 specs
->floatn_nx_idx
= i
- RID_FLOATN_NX_FIRST
;
10430 if (!in_system_header_at (input_location
))
10431 pedwarn (loc
, OPT_Wpedantic
,
10432 "ISO C does not support the %<_Float%d%s%> type",
10433 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10434 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10440 ("both %<long%> and %<_Float%d%s%> in "
10441 "declaration specifiers"),
10442 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10443 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10446 else if (specs
->short_p
)
10448 ("both %<short%> and %<_Float%d%s%> in "
10449 "declaration specifiers"),
10450 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10451 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10454 else if (specs
->signed_p
)
10456 ("both %<signed%> and %<_Float%d%s%> in "
10457 "declaration specifiers"),
10458 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10459 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10462 else if (specs
->unsigned_p
)
10464 ("both %<unsigned%> and %<_Float%d%s%> in "
10465 "declaration specifiers"),
10466 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10467 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10470 else if (specs
->saturating_p
)
10472 ("both %<_Sat%> and %<_Float%d%s%> in "
10473 "declaration specifiers"),
10474 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10475 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10478 else if (FLOATN_NX_TYPE_NODE (specs
->floatn_nx_idx
) == NULL_TREE
)
10480 specs
->typespec_word
= cts_floatn_nx
;
10482 "%<_Float%d%s%> is not supported on this target",
10483 floatn_nx_types
[specs
->floatn_nx_idx
].n
,
10484 (floatn_nx_types
[specs
->floatn_nx_idx
].extended
10490 specs
->typespec_word
= cts_floatn_nx
;
10491 specs
->locations
[cdw_typespec
] = loc
;
10496 case RID_DFLOAT128
:
10499 if (i
== RID_DFLOAT32
)
10500 str
= "_Decimal32";
10501 else if (i
== RID_DFLOAT64
)
10502 str
= "_Decimal64";
10504 str
= "_Decimal128";
10505 if (specs
->long_long_p
)
10507 ("both %<long long%> and %qs in "
10508 "declaration specifiers"),
10512 ("both %<long%> and %qs in "
10513 "declaration specifiers"),
10515 else if (specs
->short_p
)
10517 ("both %<short%> and %qs in "
10518 "declaration specifiers"),
10520 else if (specs
->signed_p
)
10522 ("both %<signed%> and %qs in "
10523 "declaration specifiers"),
10525 else if (specs
->unsigned_p
)
10527 ("both %<unsigned%> and %qs in "
10528 "declaration specifiers"),
10530 else if (specs
->complex_p
)
10532 ("both %<complex%> and %qs in "
10533 "declaration specifiers"),
10535 else if (specs
->saturating_p
)
10537 ("both %<_Sat%> and %qs in "
10538 "declaration specifiers"),
10540 else if (i
== RID_DFLOAT32
)
10541 specs
->typespec_word
= cts_dfloat32
;
10542 else if (i
== RID_DFLOAT64
)
10543 specs
->typespec_word
= cts_dfloat64
;
10545 specs
->typespec_word
= cts_dfloat128
;
10546 specs
->locations
[cdw_typespec
] = loc
;
10548 if (!targetm
.decimal_float_supported_p ())
10550 ("decimal floating point not supported "
10551 "for this target"));
10552 pedwarn (loc
, OPT_Wpedantic
,
10553 "ISO C does not support decimal floating point");
10559 if (i
== RID_FRACT
)
10563 if (specs
->complex_p
)
10565 ("both %<complex%> and %qs in "
10566 "declaration specifiers"),
10568 else if (i
== RID_FRACT
)
10569 specs
->typespec_word
= cts_fract
;
10571 specs
->typespec_word
= cts_accum
;
10572 specs
->locations
[cdw_typespec
] = loc
;
10574 if (!targetm
.fixed_point_supported_p ())
10576 "fixed-point types not supported for this target");
10577 pedwarn (loc
, OPT_Wpedantic
,
10578 "ISO C does not support fixed-point types");
10581 /* ObjC reserved word "id", handled below. */
10587 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
10588 form of ObjC type, cases such as "int" and "long" being handled
10589 above), a TYPE (struct, union, enum and typeof specifiers) or an
10590 ERROR_MARK. In none of these cases may there have previously
10591 been any type specifiers. */
10592 if (specs
->type
|| specs
->typespec_word
!= cts_none
10593 || specs
->long_p
|| specs
->short_p
|| specs
->signed_p
10594 || specs
->unsigned_p
|| specs
->complex_p
)
10595 error_at (loc
, "two or more data types in declaration specifiers");
10596 else if (TREE_CODE (type
) == TYPE_DECL
)
10598 if (TREE_TYPE (type
) == error_mark_node
)
10599 ; /* Allow the type to default to int to avoid cascading errors. */
10602 specs
->type
= TREE_TYPE (type
);
10603 specs
->decl_attr
= DECL_ATTRIBUTES (type
);
10604 specs
->typedef_p
= true;
10605 specs
->explicit_signed_p
= C_TYPEDEF_EXPLICITLY_SIGNED (type
);
10606 specs
->locations
[cdw_typedef
] = loc
;
10608 /* If this typedef name is defined in a struct, then a C++
10609 lookup would return a different value. */
10610 if (warn_cxx_compat
10611 && I_SYMBOL_BINDING (DECL_NAME (type
))->in_struct
)
10612 warning_at (loc
, OPT_Wc___compat
,
10613 "C++ lookup of %qD would return a field, not a type",
10616 /* If we are parsing a struct, record that a struct field
10618 if (warn_cxx_compat
&& struct_parse_info
!= NULL
)
10619 struct_parse_info
->typedefs_seen
.safe_push (type
);
10622 else if (TREE_CODE (type
) == IDENTIFIER_NODE
)
10624 tree t
= lookup_name (type
);
10625 if (!t
|| TREE_CODE (t
) != TYPE_DECL
)
10626 error_at (loc
, "%qE fails to be a typedef or built in type", type
);
10627 else if (TREE_TYPE (t
) == error_mark_node
)
10631 specs
->type
= TREE_TYPE (t
);
10632 specs
->locations
[cdw_typespec
] = loc
;
10637 if (TREE_CODE (type
) != ERROR_MARK
&& spec
.kind
== ctsk_typeof
)
10639 specs
->typedef_p
= true;
10640 specs
->locations
[cdw_typedef
] = loc
;
10644 specs
->expr
= build2 (COMPOUND_EXPR
, TREE_TYPE (spec
.expr
),
10645 specs
->expr
, spec
.expr
);
10647 specs
->expr
= spec
.expr
;
10648 specs
->expr_const_operands
&= spec
.expr_const_operands
;
10651 specs
->type
= type
;
10657 /* Add the storage class specifier or function specifier SCSPEC to the
10658 declaration specifiers SPECS, returning SPECS. */
10660 struct c_declspecs
*
10661 declspecs_add_scspec (source_location loc
,
10662 struct c_declspecs
*specs
,
10666 enum c_storage_class n
= csc_none
;
10668 specs
->declspecs_seen_p
= true;
10669 gcc_assert (TREE_CODE (scspec
) == IDENTIFIER_NODE
10670 && C_IS_RESERVED_WORD (scspec
));
10671 i
= C_RID_CODE (scspec
);
10672 if (specs
->non_sc_seen_p
)
10673 warning (OPT_Wold_style_declaration
,
10674 "%qE is not at beginning of declaration", scspec
);
10678 /* C99 permits duplicate inline. Although of doubtful utility,
10679 it seems simplest to permit it in gnu89 mode as well, as
10680 there is also little utility in maintaining this as a
10681 difference between gnu89 and C99 inline. */
10683 specs
->inline_p
= true;
10684 specs
->locations
[cdw_inline
] = loc
;
10687 /* Duplicate _Noreturn is permitted. */
10689 specs
->noreturn_p
= true;
10690 specs
->locations
[cdw_noreturn
] = loc
;
10693 dupe
= specs
->thread_p
;
10694 if (specs
->storage_class
== csc_auto
)
10695 error ("%qE used with %<auto%>", scspec
);
10696 else if (specs
->storage_class
== csc_register
)
10697 error ("%qE used with %<register%>", scspec
);
10698 else if (specs
->storage_class
== csc_typedef
)
10699 error ("%qE used with %<typedef%>", scspec
);
10702 specs
->thread_p
= true;
10703 specs
->thread_gnu_p
= (strcmp (IDENTIFIER_POINTER (scspec
),
10705 /* A diagnostic is not required for the use of this
10706 identifier in the implementation namespace; only diagnose
10707 it for the C11 spelling because of existing code using
10708 the other spelling. */
10709 if (!specs
->thread_gnu_p
)
10712 pedwarn_c99 (loc
, OPT_Wpedantic
,
10713 "ISO C99 does not support %qE", scspec
);
10715 pedwarn_c99 (loc
, OPT_Wpedantic
,
10716 "ISO C90 does not support %qE", scspec
);
10718 specs
->locations
[cdw_thread
] = loc
;
10726 /* Diagnose "__thread extern". */
10727 if (specs
->thread_p
&& specs
->thread_gnu_p
)
10728 error ("%<__thread%> before %<extern%>");
10735 /* Diagnose "__thread static". */
10736 if (specs
->thread_p
&& specs
->thread_gnu_p
)
10737 error ("%<__thread%> before %<static%>");
10743 gcc_unreachable ();
10745 if (n
!= csc_none
&& n
== specs
->storage_class
)
10749 if (i
== RID_THREAD
)
10750 error ("duplicate %<_Thread_local%> or %<__thread%>");
10752 error ("duplicate %qE", scspec
);
10756 if (specs
->storage_class
!= csc_none
&& n
!= specs
->storage_class
)
10758 error ("multiple storage classes in declaration specifiers");
10762 specs
->storage_class
= n
;
10763 specs
->locations
[cdw_storage_class
] = loc
;
10764 if (n
!= csc_extern
&& n
!= csc_static
&& specs
->thread_p
)
10766 error ("%qs used with %qE",
10767 specs
->thread_gnu_p
? "__thread" : "_Thread_local",
10769 specs
->thread_p
= false;
10776 /* Add the attributes ATTRS to the declaration specifiers SPECS,
10777 returning SPECS. */
10779 struct c_declspecs
*
10780 declspecs_add_attrs (source_location loc
, struct c_declspecs
*specs
, tree attrs
)
10782 specs
->attrs
= chainon (attrs
, specs
->attrs
);
10783 specs
->locations
[cdw_attributes
] = loc
;
10784 specs
->declspecs_seen_p
= true;
10788 /* Add an _Alignas specifier (expression ALIGN, or type whose
10789 alignment is ALIGN) to the declaration specifiers SPECS, returning
10791 struct c_declspecs
*
10792 declspecs_add_alignas (source_location loc
,
10793 struct c_declspecs
*specs
, tree align
)
10796 specs
->alignas_p
= true;
10797 specs
->locations
[cdw_alignas
] = loc
;
10798 if (align
== error_mark_node
)
10800 align_log
= check_user_alignment (align
, true);
10801 if (align_log
> specs
->align_log
)
10802 specs
->align_log
= align_log
;
10806 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
10807 specifiers with any other type specifier to determine the resulting
10808 type. This is where ISO C checks on complex types are made, since
10809 "_Complex long" is a prefix of the valid ISO C type "_Complex long
10812 struct c_declspecs
*
10813 finish_declspecs (struct c_declspecs
*specs
)
10815 /* If a type was specified as a whole, we have no modifiers and are
10817 if (specs
->type
!= NULL_TREE
)
10819 gcc_assert (!specs
->long_p
&& !specs
->long_long_p
&& !specs
->short_p
10820 && !specs
->signed_p
&& !specs
->unsigned_p
10821 && !specs
->complex_p
);
10823 /* Set a dummy type. */
10824 if (TREE_CODE (specs
->type
) == ERROR_MARK
)
10825 specs
->type
= integer_type_node
;
10829 /* If none of "void", "_Bool", "char", "int", "float" or "double"
10830 has been specified, treat it as "int" unless "_Complex" is
10831 present and there are no other specifiers. If we just have
10832 "_Complex", it is equivalent to "_Complex double", but e.g.
10833 "_Complex short" is equivalent to "_Complex short int". */
10834 if (specs
->typespec_word
== cts_none
)
10836 if (specs
->saturating_p
)
10838 error_at (specs
->locations
[cdw_saturating
],
10839 "%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
10840 if (!targetm
.fixed_point_supported_p ())
10841 error_at (specs
->locations
[cdw_saturating
],
10842 "fixed-point types not supported for this target");
10843 specs
->typespec_word
= cts_fract
;
10845 else if (specs
->long_p
|| specs
->short_p
10846 || specs
->signed_p
|| specs
->unsigned_p
)
10848 specs
->typespec_word
= cts_int
;
10850 else if (specs
->complex_p
)
10852 specs
->typespec_word
= cts_double
;
10853 pedwarn (specs
->locations
[cdw_complex
], OPT_Wpedantic
,
10854 "ISO C does not support plain %<complex%> meaning "
10855 "%<double complex%>");
10859 specs
->typespec_word
= cts_int
;
10860 specs
->default_int_p
= true;
10861 /* We don't diagnose this here because grokdeclarator will
10862 give more specific diagnostics according to whether it is
10863 a function definition. */
10867 /* If "signed" was specified, record this to distinguish "int" and
10868 "signed int" in the case of a bit-field with
10869 -funsigned-bitfields. */
10870 specs
->explicit_signed_p
= specs
->signed_p
;
10872 /* Now compute the actual type. */
10873 switch (specs
->typespec_word
)
10875 case cts_auto_type
:
10876 gcc_assert (!specs
->long_p
&& !specs
->short_p
10877 && !specs
->signed_p
&& !specs
->unsigned_p
10878 && !specs
->complex_p
);
10879 /* Type to be filled in later. */
10882 gcc_assert (!specs
->long_p
&& !specs
->short_p
10883 && !specs
->signed_p
&& !specs
->unsigned_p
10884 && !specs
->complex_p
);
10885 specs
->type
= void_type_node
;
10888 gcc_assert (!specs
->long_p
&& !specs
->short_p
10889 && !specs
->signed_p
&& !specs
->unsigned_p
10890 && !specs
->complex_p
);
10891 specs
->type
= boolean_type_node
;
10894 gcc_assert (!specs
->long_p
&& !specs
->short_p
);
10895 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
10896 if (specs
->signed_p
)
10897 specs
->type
= signed_char_type_node
;
10898 else if (specs
->unsigned_p
)
10899 specs
->type
= unsigned_char_type_node
;
10901 specs
->type
= char_type_node
;
10902 if (specs
->complex_p
)
10904 pedwarn (specs
->locations
[cdw_complex
], OPT_Wpedantic
,
10905 "ISO C does not support complex integer types");
10906 specs
->type
= build_complex_type (specs
->type
);
10910 gcc_assert (!specs
->long_p
&& !specs
->short_p
&& !specs
->long_long_p
);
10911 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
10912 if (! int_n_enabled_p
[specs
->int_n_idx
])
10913 specs
->type
= integer_type_node
;
10915 specs
->type
= (specs
->unsigned_p
10916 ? int_n_trees
[specs
->int_n_idx
].unsigned_type
10917 : int_n_trees
[specs
->int_n_idx
].signed_type
);
10918 if (specs
->complex_p
)
10920 pedwarn (specs
->locations
[cdw_complex
], OPT_Wpedantic
,
10921 "ISO C does not support complex integer types");
10922 specs
->type
= build_complex_type (specs
->type
);
10926 gcc_assert (!(specs
->long_p
&& specs
->short_p
));
10927 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
10928 if (specs
->long_long_p
)
10929 specs
->type
= (specs
->unsigned_p
10930 ? long_long_unsigned_type_node
10931 : long_long_integer_type_node
);
10932 else if (specs
->long_p
)
10933 specs
->type
= (specs
->unsigned_p
10934 ? long_unsigned_type_node
10935 : long_integer_type_node
);
10936 else if (specs
->short_p
)
10937 specs
->type
= (specs
->unsigned_p
10938 ? short_unsigned_type_node
10939 : short_integer_type_node
);
10941 specs
->type
= (specs
->unsigned_p
10942 ? unsigned_type_node
10943 : integer_type_node
);
10944 if (specs
->complex_p
)
10946 pedwarn (specs
->locations
[cdw_complex
], OPT_Wpedantic
,
10947 "ISO C does not support complex integer types");
10948 specs
->type
= build_complex_type (specs
->type
);
10952 gcc_assert (!specs
->long_p
&& !specs
->short_p
10953 && !specs
->signed_p
&& !specs
->unsigned_p
);
10954 specs
->type
= (specs
->complex_p
10955 ? complex_float_type_node
10956 : float_type_node
);
10959 gcc_assert (!specs
->long_long_p
&& !specs
->short_p
10960 && !specs
->signed_p
&& !specs
->unsigned_p
);
10963 specs
->type
= (specs
->complex_p
10964 ? complex_long_double_type_node
10965 : long_double_type_node
);
10969 specs
->type
= (specs
->complex_p
10970 ? complex_double_type_node
10971 : double_type_node
);
10974 case cts_floatn_nx
:
10975 gcc_assert (!specs
->long_p
&& !specs
->short_p
10976 && !specs
->signed_p
&& !specs
->unsigned_p
);
10977 if (FLOATN_NX_TYPE_NODE (specs
->floatn_nx_idx
) == NULL_TREE
)
10978 specs
->type
= integer_type_node
;
10979 else if (specs
->complex_p
)
10980 specs
->type
= COMPLEX_FLOATN_NX_TYPE_NODE (specs
->floatn_nx_idx
);
10982 specs
->type
= FLOATN_NX_TYPE_NODE (specs
->floatn_nx_idx
);
10986 case cts_dfloat128
:
10987 gcc_assert (!specs
->long_p
&& !specs
->long_long_p
&& !specs
->short_p
10988 && !specs
->signed_p
&& !specs
->unsigned_p
&& !specs
->complex_p
);
10989 if (specs
->typespec_word
== cts_dfloat32
)
10990 specs
->type
= dfloat32_type_node
;
10991 else if (specs
->typespec_word
== cts_dfloat64
)
10992 specs
->type
= dfloat64_type_node
;
10994 specs
->type
= dfloat128_type_node
;
10997 gcc_assert (!specs
->complex_p
);
10998 if (!targetm
.fixed_point_supported_p ())
10999 specs
->type
= integer_type_node
;
11000 else if (specs
->saturating_p
)
11002 if (specs
->long_long_p
)
11003 specs
->type
= specs
->unsigned_p
11004 ? sat_unsigned_long_long_fract_type_node
11005 : sat_long_long_fract_type_node
;
11006 else if (specs
->long_p
)
11007 specs
->type
= specs
->unsigned_p
11008 ? sat_unsigned_long_fract_type_node
11009 : sat_long_fract_type_node
;
11010 else if (specs
->short_p
)
11011 specs
->type
= specs
->unsigned_p
11012 ? sat_unsigned_short_fract_type_node
11013 : sat_short_fract_type_node
;
11015 specs
->type
= specs
->unsigned_p
11016 ? sat_unsigned_fract_type_node
11017 : sat_fract_type_node
;
11021 if (specs
->long_long_p
)
11022 specs
->type
= specs
->unsigned_p
11023 ? unsigned_long_long_fract_type_node
11024 : long_long_fract_type_node
;
11025 else if (specs
->long_p
)
11026 specs
->type
= specs
->unsigned_p
11027 ? unsigned_long_fract_type_node
11028 : long_fract_type_node
;
11029 else if (specs
->short_p
)
11030 specs
->type
= specs
->unsigned_p
11031 ? unsigned_short_fract_type_node
11032 : short_fract_type_node
;
11034 specs
->type
= specs
->unsigned_p
11035 ? unsigned_fract_type_node
11040 gcc_assert (!specs
->complex_p
);
11041 if (!targetm
.fixed_point_supported_p ())
11042 specs
->type
= integer_type_node
;
11043 else if (specs
->saturating_p
)
11045 if (specs
->long_long_p
)
11046 specs
->type
= specs
->unsigned_p
11047 ? sat_unsigned_long_long_accum_type_node
11048 : sat_long_long_accum_type_node
;
11049 else if (specs
->long_p
)
11050 specs
->type
= specs
->unsigned_p
11051 ? sat_unsigned_long_accum_type_node
11052 : sat_long_accum_type_node
;
11053 else if (specs
->short_p
)
11054 specs
->type
= specs
->unsigned_p
11055 ? sat_unsigned_short_accum_type_node
11056 : sat_short_accum_type_node
;
11058 specs
->type
= specs
->unsigned_p
11059 ? sat_unsigned_accum_type_node
11060 : sat_accum_type_node
;
11064 if (specs
->long_long_p
)
11065 specs
->type
= specs
->unsigned_p
11066 ? unsigned_long_long_accum_type_node
11067 : long_long_accum_type_node
;
11068 else if (specs
->long_p
)
11069 specs
->type
= specs
->unsigned_p
11070 ? unsigned_long_accum_type_node
11071 : long_accum_type_node
;
11072 else if (specs
->short_p
)
11073 specs
->type
= specs
->unsigned_p
11074 ? unsigned_short_accum_type_node
11075 : short_accum_type_node
;
11077 specs
->type
= specs
->unsigned_p
11078 ? unsigned_accum_type_node
11083 gcc_unreachable ();
11089 /* Perform final processing on one file scope's declarations (or the
11090 external scope's declarations), GLOBALS. */
11093 c_write_global_declarations_1 (tree globals
)
11098 /* Process the decls in the order they were written. */
11099 for (decl
= globals
; decl
; decl
= DECL_CHAIN (decl
))
11101 /* Check for used but undefined static functions using the C
11102 standard's definition of "used", and set TREE_NO_WARNING so
11103 that check_global_declaration doesn't repeat the check. */
11104 if (TREE_CODE (decl
) == FUNCTION_DECL
11105 && DECL_INITIAL (decl
) == NULL_TREE
11106 && DECL_EXTERNAL (decl
)
11107 && !TREE_PUBLIC (decl
))
11109 if (C_DECL_USED (decl
))
11111 pedwarn (input_location
, 0, "%q+F used but never defined", decl
);
11112 TREE_NO_WARNING (decl
) = 1;
11114 /* For -Wunused-function warn about unused static prototypes. */
11115 else if (warn_unused_function
11116 && ! DECL_ARTIFICIAL (decl
)
11117 && ! TREE_NO_WARNING (decl
))
11119 warning (OPT_Wunused_function
,
11120 "%q+F declared %<static%> but never defined", decl
);
11121 TREE_NO_WARNING (decl
) = 1;
11125 wrapup_global_declaration_1 (decl
);
11130 reconsider
= false;
11131 for (decl
= globals
; decl
; decl
= DECL_CHAIN (decl
))
11132 reconsider
|= wrapup_global_declaration_2 (decl
);
11134 while (reconsider
);
11137 /* Callback to collect a source_ref from a DECL. */
11140 collect_source_ref_cb (tree decl
)
11142 if (!DECL_IS_BUILTIN (decl
))
11143 collect_source_ref (LOCATION_FILE (decl_sloc (decl
, false)));
11146 /* Preserve the external declarations scope across a garbage collect. */
11147 static GTY(()) tree ext_block
;
11149 /* Collect all references relevant to SOURCE_FILE. */
11152 collect_all_refs (const char *source_file
)
11157 FOR_EACH_VEC_ELT (*all_translation_units
, i
, t
)
11158 collect_ada_nodes (BLOCK_VARS (DECL_INITIAL (t
)), source_file
);
11160 collect_ada_nodes (BLOCK_VARS (ext_block
), source_file
);
11163 /* Iterate over all global declarations and call CALLBACK. */
11166 for_each_global_decl (void (*callback
) (tree decl
))
11173 FOR_EACH_VEC_ELT (*all_translation_units
, i
, t
)
11175 decls
= DECL_INITIAL (t
);
11176 for (decl
= BLOCK_VARS (decls
); decl
; decl
= TREE_CHAIN (decl
))
11180 for (decl
= BLOCK_VARS (ext_block
); decl
; decl
= TREE_CHAIN (decl
))
11184 /* Perform any final parser cleanups and generate initial debugging
11188 c_parse_final_cleanups (void)
11193 /* We don't want to do this if generating a PCH. */
11197 timevar_stop (TV_PHASE_PARSING
);
11198 timevar_start (TV_PHASE_DEFERRED
);
11200 /* Do the Objective-C stuff. This is where all the Objective-C
11201 module stuff gets generated (symtab, class/protocol/selector
11203 if (c_dialect_objc ())
11204 objc_write_global_declarations ();
11206 /* Close the external scope. */
11207 ext_block
= pop_scope ();
11208 external_scope
= 0;
11209 gcc_assert (!current_scope
);
11211 /* Handle -fdump-ada-spec[-slim]. */
11212 if (flag_dump_ada_spec
|| flag_dump_ada_spec_slim
)
11214 /* Build a table of files to generate specs for */
11215 if (flag_dump_ada_spec_slim
)
11216 collect_source_ref (main_input_filename
);
11218 for_each_global_decl (collect_source_ref_cb
);
11220 dump_ada_specs (collect_all_refs
, NULL
);
11223 /* Process all file scopes in this compilation, and the external_scope,
11224 through wrapup_global_declarations. */
11225 FOR_EACH_VEC_ELT (*all_translation_units
, i
, t
)
11226 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t
)));
11227 c_write_global_declarations_1 (BLOCK_VARS (ext_block
));
11229 timevar_stop (TV_PHASE_DEFERRED
);
11230 timevar_start (TV_PHASE_PARSING
);
11235 /* Register reserved keyword WORD as qualifier for address space AS. */
11238 c_register_addr_space (const char *word
, addr_space_t as
)
11240 int rid
= RID_FIRST_ADDR_SPACE
+ as
;
11243 /* Address space qualifiers are only supported
11244 in C with GNU extensions enabled. */
11245 if (c_dialect_objc () || flag_no_asm
)
11248 id
= get_identifier (word
);
11249 C_SET_RID_CODE (id
, rid
);
11250 C_IS_RESERVED_WORD (id
) = 1;
11251 ridpointers
[rid
] = id
;
11254 /* Return identifier to look up for omp declare reduction. */
11257 c_omp_reduction_id (enum tree_code reduction_code
, tree reduction_id
)
11259 const char *p
= NULL
;
11260 switch (reduction_code
)
11262 case PLUS_EXPR
: p
= "+"; break;
11263 case MULT_EXPR
: p
= "*"; break;
11264 case MINUS_EXPR
: p
= "-"; break;
11265 case BIT_AND_EXPR
: p
= "&"; break;
11266 case BIT_XOR_EXPR
: p
= "^"; break;
11267 case BIT_IOR_EXPR
: p
= "|"; break;
11268 case TRUTH_ANDIF_EXPR
: p
= "&&"; break;
11269 case TRUTH_ORIF_EXPR
: p
= "||"; break;
11270 case MIN_EXPR
: p
= "min"; break;
11271 case MAX_EXPR
: p
= "max"; break;
11278 if (TREE_CODE (reduction_id
) != IDENTIFIER_NODE
)
11279 return error_mark_node
;
11280 p
= IDENTIFIER_POINTER (reduction_id
);
11283 const char prefix
[] = "omp declare reduction ";
11284 size_t lenp
= sizeof (prefix
);
11285 size_t len
= strlen (p
);
11286 char *name
= XALLOCAVEC (char, lenp
+ len
);
11287 memcpy (name
, prefix
, lenp
- 1);
11288 memcpy (name
+ lenp
- 1, p
, len
+ 1);
11289 return get_identifier (name
);
11292 /* Lookup REDUCTION_ID in the current scope, or create an artificial
11293 VAR_DECL, bind it into the current scope and return it. */
11296 c_omp_reduction_decl (tree reduction_id
)
11298 struct c_binding
*b
= I_SYMBOL_BINDING (reduction_id
);
11299 if (b
!= NULL
&& B_IN_CURRENT_SCOPE (b
))
11302 tree decl
= build_decl (BUILTINS_LOCATION
, VAR_DECL
,
11303 reduction_id
, integer_type_node
);
11304 DECL_ARTIFICIAL (decl
) = 1;
11305 DECL_EXTERNAL (decl
) = 1;
11306 TREE_STATIC (decl
) = 1;
11307 TREE_PUBLIC (decl
) = 0;
11308 bind (reduction_id
, decl
, current_scope
, true, false, BUILTINS_LOCATION
);
11312 /* Lookup REDUCTION_ID in the first scope where it has entry for TYPE. */
11315 c_omp_reduction_lookup (tree reduction_id
, tree type
)
11317 struct c_binding
*b
= I_SYMBOL_BINDING (reduction_id
);
11321 for (t
= DECL_INITIAL (b
->decl
); t
; t
= TREE_CHAIN (t
))
11322 if (comptypes (TREE_PURPOSE (t
), type
))
11323 return TREE_VALUE (t
);
11326 return error_mark_node
;
11329 /* Helper function called via walk_tree, to diagnose invalid
11330 #pragma omp declare reduction combiners or initializers. */
11333 c_check_omp_declare_reduction_r (tree
*tp
, int *, void *data
)
11335 tree
*vars
= (tree
*) data
;
11336 if (SSA_VAR_P (*tp
)
11337 && !DECL_ARTIFICIAL (*tp
)
11341 location_t loc
= DECL_SOURCE_LOCATION (vars
[0]);
11342 if (strcmp (IDENTIFIER_POINTER (DECL_NAME (vars
[0])), "omp_out") == 0)
11343 error_at (loc
, "%<#pragma omp declare reduction%> combiner refers to "
11344 "variable %qD which is not %<omp_out%> nor %<omp_in%>",
11347 error_at (loc
, "%<#pragma omp declare reduction%> initializer refers "
11348 "to variable %qD which is not %<omp_priv%> nor "
11356 #include "gt-c-c-decl.h"