1 /* Process declarations and variables for C compiler.
2 Copyright (C) 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 /* Process declarations and symbol lookup for C front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
31 #include "coretypes.h"
36 #include "tree-inline.h"
53 #include "langhooks.h"
54 #include "tree-mudflap.h"
56 #include "tree-iterator.h"
57 #include "diagnostic.h"
58 #include "tree-dump.h"
63 #include "langhooks-def.h"
64 #include "pointer-set.h"
67 /* In grokdeclarator, distinguish syntactic contexts of declarators. */
69 { NORMAL
, /* Ordinary declaration */
70 FUNCDEF
, /* Function definition */
71 PARM
, /* Declaration of parm before function body */
72 FIELD
, /* Declaration inside struct or union */
73 TYPENAME
}; /* Typename (inside cast or sizeof) */
75 /* States indicating how grokdeclarator() should handle declspecs marked
76 with __attribute__((deprecated)). An object declared as
77 __attribute__((deprecated)) suppresses warnings of uses of other
80 enum deprecated_states
{
86 /* Nonzero if we have seen an invalid cross reference
87 to a struct, union, or enum, but not yet printed the message. */
88 tree pending_invalid_xref
;
90 /* File and line to appear in the eventual error message. */
91 location_t pending_invalid_xref_location
;
93 /* True means we've initialized exception handling. */
94 bool c_eh_initialized_p
;
96 /* The file and line that the prototype came from if this is an
97 old-style definition; used for diagnostics in
98 store_parm_decls_oldstyle. */
100 static location_t current_function_prototype_locus
;
102 /* Whether this prototype was built-in. */
104 static bool current_function_prototype_built_in
;
106 /* The argument type information of this prototype. */
108 static tree current_function_prototype_arg_types
;
110 /* The argument information structure for the function currently being
113 static struct c_arg_info
*current_function_arg_info
;
115 /* The obstack on which parser and related data structures, which are
116 not live beyond their top-level declaration or definition, are
118 struct obstack parser_obstack
;
120 /* The current statement tree. */
122 static GTY(()) struct stmt_tree_s c_stmt_tree
;
124 /* State saving variables. */
128 /* Linked list of TRANSLATION_UNIT_DECLS for the translation units
129 included in this invocation. Note that the current translation
130 unit is not included in this list. */
132 static GTY(()) tree all_translation_units
;
134 /* A list of decls to be made automatically visible in each file scope. */
135 static GTY(()) tree visible_builtins
;
137 /* Set to 0 at beginning of a function definition, set to 1 if
138 a return statement that specifies a return value is seen. */
140 int current_function_returns_value
;
142 /* Set to 0 at beginning of a function definition, set to 1 if
143 a return statement with no argument is seen. */
145 int current_function_returns_null
;
147 /* Set to 0 at beginning of a function definition, set to 1 if
148 a call to a noreturn function is seen. */
150 int current_function_returns_abnormally
;
152 /* Set to nonzero by `grokdeclarator' for a function
153 whose return type is defaulted, if warnings for this are desired. */
155 static int warn_about_return_type
;
157 /* Nonzero when the current toplevel function contains a declaration
158 of a nested function which is never defined. */
160 static bool undef_nested_function
;
162 /* True means global_bindings_p should return false even if the scope stack
163 says we are in file scope. */
164 bool c_override_global_bindings_to_false
;
167 /* Each c_binding structure describes one binding of an identifier to
168 a decl. All the decls in a scope - irrespective of namespace - are
169 chained together by the ->prev field, which (as the name implies)
170 runs in reverse order. All the decls in a given namespace bound to
171 a given identifier are chained by the ->shadowed field, which runs
172 from inner to outer scopes.
174 The ->decl field usually points to a DECL node, but there are two
175 exceptions. In the namespace of type tags, the bound entity is a
176 RECORD_TYPE, UNION_TYPE, or ENUMERAL_TYPE node. If an undeclared
177 identifier is encountered, it is bound to error_mark_node to
178 suppress further errors about that identifier in the current
181 The ->type field stores the type of the declaration in this scope;
182 if NULL, the type is the type of the ->decl field. This is only of
183 relevance for objects with external or internal linkage which may
184 be redeclared in inner scopes, forming composite types that only
185 persist for the duration of those scopes. In the external scope,
186 this stores the composite of all the types declared for this
187 object, visible or not. The ->inner_comp field (used only at file
188 scope) stores whether an incomplete array type at file scope was
189 completed at an inner scope to an array size other than 1.
191 The depth field is copied from the scope structure that holds this
192 decl. It is used to preserve the proper ordering of the ->shadowed
193 field (see bind()) and also for a handful of special-case checks.
194 Finally, the invisible bit is true for a decl which should be
195 ignored for purposes of normal name lookup, and the nested bit is
196 true for a decl that's been bound a second time in an inner scope;
197 in all such cases, the binding in the outer scope will have its
198 invisible bit true. */
200 struct c_binding
GTY((chain_next ("%h.prev")))
202 tree decl
; /* the decl bound */
203 tree type
; /* the type in this scope */
204 tree id
; /* the identifier it's bound to */
205 struct c_binding
*prev
; /* the previous decl in this scope */
206 struct c_binding
*shadowed
; /* the innermost decl shadowed by this one */
207 unsigned int depth
: 28; /* depth of this scope */
208 BOOL_BITFIELD invisible
: 1; /* normal lookup should ignore this binding */
209 BOOL_BITFIELD nested
: 1; /* do not set DECL_CONTEXT when popping */
210 BOOL_BITFIELD inner_comp
: 1; /* incomplete array completed in inner scope */
213 #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
214 #define B_IN_CURRENT_SCOPE(b) ((b)->depth == current_scope->depth)
215 #define B_IN_FILE_SCOPE(b) ((b)->depth == 1 /*file_scope->depth*/)
216 #define B_IN_EXTERNAL_SCOPE(b) ((b)->depth == 0 /*external_scope->depth*/)
218 #define I_SYMBOL_BINDING(node) \
219 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->symbol_binding)
220 #define I_SYMBOL_DECL(node) \
221 (I_SYMBOL_BINDING(node) ? I_SYMBOL_BINDING(node)->decl : 0)
223 #define I_TAG_BINDING(node) \
224 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->tag_binding)
225 #define I_TAG_DECL(node) \
226 (I_TAG_BINDING(node) ? I_TAG_BINDING(node)->decl : 0)
228 #define I_LABEL_BINDING(node) \
229 (((struct lang_identifier *) IDENTIFIER_NODE_CHECK(node))->label_binding)
230 #define I_LABEL_DECL(node) \
231 (I_LABEL_BINDING(node) ? I_LABEL_BINDING(node)->decl : 0)
233 /* Each C symbol points to three linked lists of c_binding structures.
234 These describe the values of the identifier in the three different
235 namespaces defined by the language. */
237 struct lang_identifier
GTY(())
239 struct c_common_identifier common_id
;
240 struct c_binding
*symbol_binding
; /* vars, funcs, constants, typedefs */
241 struct c_binding
*tag_binding
; /* struct/union/enum tags */
242 struct c_binding
*label_binding
; /* labels */
245 /* Validate c-lang.c's assumptions. */
246 extern char C_SIZEOF_STRUCT_LANG_IDENTIFIER_isnt_accurate
247 [(sizeof(struct lang_identifier
) == C_SIZEOF_STRUCT_LANG_IDENTIFIER
) ? 1 : -1];
249 /* The resulting tree type. */
252 GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
253 chain_next ("TREE_CODE (&%h.generic) == INTEGER_TYPE ? (union lang_tree_node *) TYPE_NEXT_VARIANT (&%h.generic) : ((union lang_tree_node *) TREE_CHAIN (&%h.generic))")))
255 union tree_node
GTY ((tag ("0"),
256 desc ("tree_node_structure (&%h)")))
258 struct lang_identifier
GTY ((tag ("1"))) identifier
;
261 /* Each c_scope structure describes the complete contents of one
262 scope. Four scopes are distinguished specially: the innermost or
263 current scope, the innermost function scope, the file scope (always
264 the second to outermost) and the outermost or external scope.
266 Most declarations are recorded in the current scope.
268 All normal label declarations are recorded in the innermost
269 function scope, as are bindings of undeclared identifiers to
270 error_mark_node. (GCC permits nested functions as an extension,
271 hence the 'innermost' qualifier.) Explicitly declared labels
272 (using the __label__ extension) appear in the current scope.
274 Being in the file scope (current_scope == file_scope) causes
275 special behavior in several places below. Also, under some
276 conditions the Objective-C front end records declarations in the
277 file scope even though that isn't the current scope.
279 All declarations with external linkage are recorded in the external
280 scope, even if they aren't visible there; this models the fact that
281 such declarations are visible to the entire program, and (with a
282 bit of cleverness, see pushdecl) allows diagnosis of some violations
283 of C99 6.2.2p7 and 6.2.7p2:
285 If, within the same translation unit, the same identifier appears
286 with both internal and external linkage, the behavior is
289 All declarations that refer to the same object or function shall
290 have compatible type; otherwise, the behavior is undefined.
292 Initially only the built-in declarations, which describe compiler
293 intrinsic functions plus a subset of the standard library, are in
296 The order of the blocks list matters, and it is frequently appended
297 to. To avoid having to walk all the way to the end of the list on
298 each insertion, or reverse the list later, we maintain a pointer to
299 the last list entry. (FIXME: It should be feasible to use a reversed
302 The bindings list is strictly in reverse order of declarations;
303 pop_scope relies on this. */
306 struct c_scope
GTY((chain_next ("%h.outer")))
308 /* The scope containing this one. */
309 struct c_scope
*outer
;
311 /* The next outermost function scope. */
312 struct c_scope
*outer_function
;
314 /* All bindings in this scope. */
315 struct c_binding
*bindings
;
317 /* For each scope (except the global one), a chain of BLOCK nodes
318 for all the scopes that were entered and exited one level down. */
322 /* The depth of this scope. Used to keep the ->shadowed chain of
323 bindings sorted innermost to outermost. */
324 unsigned int depth
: 28;
326 /* True if we are currently filling this scope with parameter
328 BOOL_BITFIELD parm_flag
: 1;
330 /* True if we saw [*] in this scope. Used to give an error messages
331 if these appears in a function definition. */
332 BOOL_BITFIELD had_vla_unspec
: 1;
334 /* True if we already complained about forward parameter decls
335 in this scope. This prevents double warnings on
336 foo (int a; int b; ...) */
337 BOOL_BITFIELD warned_forward_parm_decls
: 1;
339 /* True if this is the outermost block scope of a function body.
340 This scope contains the parameters, the local variables declared
341 in the outermost block, and all the labels (except those in
342 nested functions, or declared at block scope with __label__). */
343 BOOL_BITFIELD function_body
: 1;
345 /* True means make a BLOCK for this scope no matter what. */
346 BOOL_BITFIELD keep
: 1;
349 /* The scope currently in effect. */
351 static GTY(()) struct c_scope
*current_scope
;
353 /* The innermost function scope. Ordinary (not explicitly declared)
354 labels, bindings to error_mark_node, and the lazily-created
355 bindings of __func__ and its friends get this scope. */
357 static GTY(()) struct c_scope
*current_function_scope
;
359 /* The C file scope. This is reset for each input translation unit. */
361 static GTY(()) struct c_scope
*file_scope
;
363 /* The outermost scope. This is used for all declarations with
364 external linkage, and only these, hence the name. */
366 static GTY(()) struct c_scope
*external_scope
;
368 /* A chain of c_scope structures awaiting reuse. */
370 static GTY((deletable
)) struct c_scope
*scope_freelist
;
372 /* A chain of c_binding structures awaiting reuse. */
374 static GTY((deletable
)) struct c_binding
*binding_freelist
;
376 /* Append VAR to LIST in scope SCOPE. */
377 #define SCOPE_LIST_APPEND(scope, list, decl) do { \
378 struct c_scope *s_ = (scope); \
380 if (s_->list##_last) \
381 BLOCK_CHAIN (s_->list##_last) = d_; \
384 s_->list##_last = d_; \
387 /* Concatenate FROM in scope FSCOPE onto TO in scope TSCOPE. */
388 #define SCOPE_LIST_CONCAT(tscope, to, fscope, from) do { \
389 struct c_scope *t_ = (tscope); \
390 struct c_scope *f_ = (fscope); \
392 BLOCK_CHAIN (t_->to##_last) = f_->from; \
395 t_->to##_last = f_->from##_last; \
398 /* True means unconditionally make a BLOCK for the next scope pushed. */
400 static bool keep_next_level_flag
;
402 /* True means the next call to push_scope will be the outermost scope
403 of a function body, so do not push a new scope, merely cease
404 expecting parameter decls. */
406 static bool next_is_function_body
;
408 /* Forward declarations. */
409 static tree
lookup_name_in_scope (tree
, struct c_scope
*);
410 static tree
c_make_fname_decl (tree
, int);
411 static tree
grokdeclarator (const struct c_declarator
*,
412 struct c_declspecs
*,
413 enum decl_context
, bool, tree
*, tree
*,
414 enum deprecated_states
);
415 static tree
grokparms (struct c_arg_info
*, bool);
416 static void layout_array_type (tree
);
418 /* T is a statement. Add it to the statement-tree. This is the
419 C/ObjC version--C++ has a slightly different version of this
425 enum tree_code code
= TREE_CODE (t
);
427 if (CAN_HAVE_LOCATION_P (t
) && code
!= LABEL_EXPR
)
429 if (!EXPR_HAS_LOCATION (t
))
430 SET_EXPR_LOCATION (t
, input_location
);
433 if (code
== LABEL_EXPR
|| code
== CASE_LABEL_EXPR
)
434 STATEMENT_LIST_HAS_LABEL (cur_stmt_list
) = 1;
436 /* Add T to the statement-tree. Non-side-effect statements need to be
437 recorded during statement expressions. */
438 append_to_statement_list_force (t
, &cur_stmt_list
);
445 c_print_identifier (FILE *file
, tree node
, int indent
)
447 print_node (file
, "symbol", I_SYMBOL_DECL (node
), indent
+ 4);
448 print_node (file
, "tag", I_TAG_DECL (node
), indent
+ 4);
449 print_node (file
, "label", I_LABEL_DECL (node
), indent
+ 4);
450 if (C_IS_RESERVED_WORD (node
) && C_RID_CODE (node
) != RID_CXX_COMPAT_WARN
)
452 tree rid
= ridpointers
[C_RID_CODE (node
)];
453 indent_to (file
, indent
+ 4);
454 fprintf (file
, "rid %p \"%s\"",
455 (void *) rid
, IDENTIFIER_POINTER (rid
));
459 /* Establish a binding between NAME, an IDENTIFIER_NODE, and DECL,
460 which may be any of several kinds of DECL or TYPE or error_mark_node,
461 in the scope SCOPE. */
463 bind (tree name
, tree decl
, struct c_scope
*scope
, bool invisible
, bool nested
)
465 struct c_binding
*b
, **here
;
467 if (binding_freelist
)
469 b
= binding_freelist
;
470 binding_freelist
= b
->prev
;
473 b
= GGC_NEW (struct c_binding
);
478 b
->depth
= scope
->depth
;
479 b
->invisible
= invisible
;
485 b
->prev
= scope
->bindings
;
491 switch (TREE_CODE (decl
))
493 case LABEL_DECL
: here
= &I_LABEL_BINDING (name
); break;
496 case RECORD_TYPE
: here
= &I_TAG_BINDING (name
); break;
502 case ERROR_MARK
: here
= &I_SYMBOL_BINDING (name
); break;
508 /* Locate the appropriate place in the chain of shadowed decls
509 to insert this binding. Normally, scope == current_scope and
510 this does nothing. */
511 while (*here
&& (*here
)->depth
> scope
->depth
)
512 here
= &(*here
)->shadowed
;
518 /* Clear the binding structure B, stick it on the binding_freelist,
519 and return the former value of b->prev. This is used by pop_scope
520 and get_parm_info to iterate destructively over all the bindings
521 from a given scope. */
522 static struct c_binding
*
523 free_binding_and_advance (struct c_binding
*b
)
525 struct c_binding
*prev
= b
->prev
;
527 memset (b
, 0, sizeof (struct c_binding
));
528 b
->prev
= binding_freelist
;
529 binding_freelist
= b
;
535 /* Hook called at end of compilation to assume 1 elt
536 for a file-scope tentative array defn that wasn't complete before. */
539 c_finish_incomplete_decl (tree decl
)
541 if (TREE_CODE (decl
) == VAR_DECL
)
543 tree type
= TREE_TYPE (decl
);
544 if (type
!= error_mark_node
545 && TREE_CODE (type
) == ARRAY_TYPE
546 && !DECL_EXTERNAL (decl
)
547 && TYPE_DOMAIN (type
) == 0)
549 warning (0, "array %q+D assumed to have one element", decl
);
551 complete_array_type (&TREE_TYPE (decl
), NULL_TREE
, true);
553 layout_decl (decl
, 0);
558 /* The Objective-C front-end often needs to determine the current scope. */
561 objc_get_current_scope (void)
563 return current_scope
;
566 /* The following function is used only by Objective-C. It needs to live here
567 because it accesses the innards of c_scope. */
570 objc_mark_locals_volatile (void *enclosing_blk
)
572 struct c_scope
*scope
;
575 for (scope
= current_scope
;
576 scope
&& scope
!= enclosing_blk
;
577 scope
= scope
->outer
)
579 for (b
= scope
->bindings
; b
; b
= b
->prev
)
580 objc_volatilize_decl (b
->decl
);
582 /* Do not climb up past the current function. */
583 if (scope
->function_body
)
588 /* Nonzero if we are currently in file scope. */
591 global_bindings_p (void)
593 return current_scope
== file_scope
&& !c_override_global_bindings_to_false
;
597 keep_next_level (void)
599 keep_next_level_flag
= true;
602 /* Identify this scope as currently being filled with parameters. */
605 declare_parm_level (void)
607 current_scope
->parm_flag
= true;
613 if (next_is_function_body
)
615 /* This is the transition from the parameters to the top level
616 of the function body. These are the same scope
617 (C99 6.2.1p4,6) so we do not push another scope structure.
618 next_is_function_body is set only by store_parm_decls, which
619 in turn is called when and only when we are about to
620 encounter the opening curly brace for the function body.
622 The outermost block of a function always gets a BLOCK node,
623 because the debugging output routines expect that each
624 function has at least one BLOCK. */
625 current_scope
->parm_flag
= false;
626 current_scope
->function_body
= true;
627 current_scope
->keep
= true;
628 current_scope
->outer_function
= current_function_scope
;
629 current_function_scope
= current_scope
;
631 keep_next_level_flag
= false;
632 next_is_function_body
= false;
636 struct c_scope
*scope
;
639 scope
= scope_freelist
;
640 scope_freelist
= scope
->outer
;
643 scope
= GGC_CNEW (struct c_scope
);
645 scope
->keep
= keep_next_level_flag
;
646 scope
->outer
= current_scope
;
647 scope
->depth
= current_scope
? (current_scope
->depth
+ 1) : 0;
649 /* Check for scope depth overflow. Unlikely (2^28 == 268,435,456) but
651 if (current_scope
&& scope
->depth
== 0)
654 sorry ("GCC supports only %u nested scopes", scope
->depth
);
657 current_scope
= scope
;
658 keep_next_level_flag
= false;
662 /* Set the TYPE_CONTEXT of all of TYPE's variants to CONTEXT. */
665 set_type_context (tree type
, tree context
)
667 for (type
= TYPE_MAIN_VARIANT (type
); type
;
668 type
= TYPE_NEXT_VARIANT (type
))
669 TYPE_CONTEXT (type
) = context
;
672 /* Exit a scope. Restore the state of the identifier-decl mappings
673 that were in effect when this scope was entered. Return a BLOCK
674 node containing all the DECLs in this scope that are of interest
675 to debug info generation. */
680 struct c_scope
*scope
= current_scope
;
681 tree block
, context
, p
;
684 bool functionbody
= scope
->function_body
;
685 bool keep
= functionbody
|| scope
->keep
|| scope
->bindings
;
687 c_end_vm_scope (scope
->depth
);
689 /* If appropriate, create a BLOCK to record the decls for the life
694 block
= make_node (BLOCK
);
695 BLOCK_SUBBLOCKS (block
) = scope
->blocks
;
696 TREE_USED (block
) = 1;
698 /* In each subblock, record that this is its superior. */
699 for (p
= scope
->blocks
; p
; p
= BLOCK_CHAIN (p
))
700 BLOCK_SUPERCONTEXT (p
) = block
;
702 BLOCK_VARS (block
) = 0;
705 /* The TYPE_CONTEXTs for all of the tagged types belonging to this
706 scope must be set so that they point to the appropriate
707 construct, i.e. either to the current FUNCTION_DECL node, or
708 else to the BLOCK node we just constructed.
710 Note that for tagged types whose scope is just the formal
711 parameter list for some function type specification, we can't
712 properly set their TYPE_CONTEXTs here, because we don't have a
713 pointer to the appropriate FUNCTION_TYPE node readily available
714 to us. For those cases, the TYPE_CONTEXTs of the relevant tagged
715 type nodes get set in `grokdeclarator' as soon as we have created
716 the FUNCTION_TYPE node which will represent the "scope" for these
717 "parameter list local" tagged types. */
718 if (scope
->function_body
)
719 context
= current_function_decl
;
720 else if (scope
== file_scope
)
722 tree file_decl
= build_decl (TRANSLATION_UNIT_DECL
, 0, 0);
723 TREE_CHAIN (file_decl
) = all_translation_units
;
724 all_translation_units
= file_decl
;
730 /* Clear all bindings in this scope. */
731 for (b
= scope
->bindings
; b
; b
= free_binding_and_advance (b
))
734 switch (TREE_CODE (p
))
737 /* Warnings for unused labels, errors for undefined labels. */
738 if (TREE_USED (p
) && !DECL_INITIAL (p
))
740 error ("label %q+D used but not defined", p
);
741 DECL_INITIAL (p
) = error_mark_node
;
744 warn_for_unused_label (p
);
746 /* Labels go in BLOCK_VARS. */
747 TREE_CHAIN (p
) = BLOCK_VARS (block
);
748 BLOCK_VARS (block
) = p
;
749 gcc_assert (I_LABEL_BINDING (b
->id
) == b
);
750 I_LABEL_BINDING (b
->id
) = b
->shadowed
;
756 set_type_context (p
, context
);
758 /* Types may not have tag-names, in which case the type
759 appears in the bindings list with b->id NULL. */
762 gcc_assert (I_TAG_BINDING (b
->id
) == b
);
763 I_TAG_BINDING (b
->id
) = b
->shadowed
;
768 /* Propagate TREE_ADDRESSABLE from nested functions to their
769 containing functions. */
770 if (!TREE_ASM_WRITTEN (p
)
771 && DECL_INITIAL (p
) != 0
772 && TREE_ADDRESSABLE (p
)
773 && DECL_ABSTRACT_ORIGIN (p
) != 0
774 && DECL_ABSTRACT_ORIGIN (p
) != p
)
775 TREE_ADDRESSABLE (DECL_ABSTRACT_ORIGIN (p
)) = 1;
776 if (!DECL_EXTERNAL (p
)
778 && scope
!= file_scope
779 && scope
!= external_scope
)
781 error ("nested function %q+D declared but never defined", p
);
782 undef_nested_function
= true;
784 /* C99 6.7.4p6: "a function with external linkage... declared
785 with an inline function specifier ... shall also be defined in the
786 same translation unit." */
787 else if (DECL_DECLARED_INLINE_P (p
)
790 && !flag_gnu89_inline
)
791 pedwarn (input_location
, 0, "inline function %q+D declared but never defined", p
);
796 /* Warnings for unused variables. */
798 && !TREE_NO_WARNING (p
)
799 && !DECL_IN_SYSTEM_HEADER (p
)
801 && !DECL_ARTIFICIAL (p
)
802 && scope
!= file_scope
803 && scope
!= external_scope
)
804 warning (OPT_Wunused_variable
, "unused variable %q+D", p
);
808 error ("type of array %q+D completed incompatibly with"
809 " implicit initialization", p
);
816 /* All of these go in BLOCK_VARS, but only if this is the
817 binding in the home scope. */
820 TREE_CHAIN (p
) = BLOCK_VARS (block
);
821 BLOCK_VARS (block
) = p
;
823 /* If this is the file scope, and we are processing more
824 than one translation unit in this compilation, set
825 DECL_CONTEXT of each decl to the TRANSLATION_UNIT_DECL.
826 This makes same_translation_unit_p work, and causes
827 static declarations to be given disambiguating suffixes. */
828 if (scope
== file_scope
&& num_in_fnames
> 1)
830 DECL_CONTEXT (p
) = context
;
831 if (TREE_CODE (p
) == TYPE_DECL
)
832 set_type_context (TREE_TYPE (p
), context
);
836 /* Parameters go in DECL_ARGUMENTS, not BLOCK_VARS, and have
837 already been put there by store_parm_decls. Unused-
838 parameter warnings are handled by function.c.
839 error_mark_node obviously does not go in BLOCK_VARS and
840 does not get unused-variable warnings. */
843 /* It is possible for a decl not to have a name. We get
844 here with b->id NULL in this case. */
847 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
848 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
849 if (b
->shadowed
&& b
->shadowed
->type
)
850 TREE_TYPE (b
->shadowed
->decl
) = b
->shadowed
->type
;
860 /* Dispose of the block that we just made inside some higher level. */
861 if ((scope
->function_body
|| scope
== file_scope
) && context
)
863 DECL_INITIAL (context
) = block
;
864 BLOCK_SUPERCONTEXT (block
) = context
;
866 else if (scope
->outer
)
869 SCOPE_LIST_APPEND (scope
->outer
, blocks
, block
);
870 /* If we did not make a block for the scope just exited, any
871 blocks made for inner scopes must be carried forward so they
872 will later become subblocks of something else. */
873 else if (scope
->blocks
)
874 SCOPE_LIST_CONCAT (scope
->outer
, blocks
, scope
, blocks
);
877 /* Pop the current scope, and free the structure for reuse. */
878 current_scope
= scope
->outer
;
879 if (scope
->function_body
)
880 current_function_scope
= scope
->outer_function
;
882 memset (scope
, 0, sizeof (struct c_scope
));
883 scope
->outer
= scope_freelist
;
884 scope_freelist
= scope
;
890 push_file_scope (void)
898 file_scope
= current_scope
;
900 start_fname_decls ();
902 for (decl
= visible_builtins
; decl
; decl
= TREE_CHAIN (decl
))
903 bind (DECL_NAME (decl
), decl
, file_scope
,
904 /*invisible=*/false, /*nested=*/true);
908 pop_file_scope (void)
910 /* In case there were missing closebraces, get us back to the global
912 while (current_scope
!= file_scope
)
915 /* __FUNCTION__ is defined at file scope (""). This
916 call may not be necessary as my tests indicate it
917 still works without it. */
918 finish_fname_decls ();
920 /* This is the point to write out a PCH if we're doing that.
921 In that case we do not want to do anything else. */
924 c_common_write_pch ();
928 /* Pop off the file scope and close this translation unit. */
932 maybe_apply_pending_pragma_weaks ();
933 cgraph_finalize_compilation_unit ();
937 /* Push a definition or a declaration of struct, union or enum tag "name".
938 "type" should be the type node.
939 We assume that the tag "name" is not already defined.
941 Note that the definition may really be just a forward reference.
942 In that case, the TYPE_SIZE will be zero. */
945 pushtag (tree name
, tree type
)
947 /* Record the identifier as the type's name if it has none. */
948 if (name
&& !TYPE_NAME (type
))
949 TYPE_NAME (type
) = name
;
950 bind (name
, type
, current_scope
, /*invisible=*/false, /*nested=*/false);
952 /* Create a fake NULL-named TYPE_DECL node whose TREE_TYPE will be the
953 tagged type we just added to the current scope. This fake
954 NULL-named TYPE_DECL node helps dwarfout.c to know when it needs
955 to output a representation of a tagged type, and it also gives
956 us a convenient place to record the "scope start" address for the
959 TYPE_STUB_DECL (type
) = pushdecl (build_decl (TYPE_DECL
, NULL_TREE
, type
));
961 /* An approximation for now, so we can tell this is a function-scope tag.
962 This will be updated in pop_scope. */
963 TYPE_CONTEXT (type
) = DECL_CONTEXT (TYPE_STUB_DECL (type
));
966 /* Subroutine of compare_decls. Allow harmless mismatches in return
967 and argument types provided that the type modes match. This function
968 return a unified type given a suitable match, and 0 otherwise. */
971 match_builtin_function_types (tree newtype
, tree oldtype
)
973 tree newrettype
, oldrettype
;
974 tree newargs
, oldargs
;
975 tree trytype
, tryargs
;
977 /* Accept the return type of the new declaration if same modes. */
978 oldrettype
= TREE_TYPE (oldtype
);
979 newrettype
= TREE_TYPE (newtype
);
981 if (TYPE_MODE (oldrettype
) != TYPE_MODE (newrettype
))
984 oldargs
= TYPE_ARG_TYPES (oldtype
);
985 newargs
= TYPE_ARG_TYPES (newtype
);
988 while (oldargs
|| newargs
)
992 || !TREE_VALUE (oldargs
)
993 || !TREE_VALUE (newargs
)
994 || TYPE_MODE (TREE_VALUE (oldargs
))
995 != TYPE_MODE (TREE_VALUE (newargs
)))
998 oldargs
= TREE_CHAIN (oldargs
);
999 newargs
= TREE_CHAIN (newargs
);
1002 trytype
= build_function_type (newrettype
, tryargs
);
1003 return build_type_attribute_variant (trytype
, TYPE_ATTRIBUTES (oldtype
));
1006 /* Subroutine of diagnose_mismatched_decls. Check for function type
1007 mismatch involving an empty arglist vs a nonempty one and give clearer
1010 diagnose_arglist_conflict (tree newdecl
, tree olddecl
,
1011 tree newtype
, tree oldtype
)
1015 if (TREE_CODE (olddecl
) != FUNCTION_DECL
1016 || !comptypes (TREE_TYPE (oldtype
), TREE_TYPE (newtype
))
1017 || !((TYPE_ARG_TYPES (oldtype
) == 0 && DECL_INITIAL (olddecl
) == 0)
1019 (TYPE_ARG_TYPES (newtype
) == 0 && DECL_INITIAL (newdecl
) == 0)))
1022 t
= TYPE_ARG_TYPES (oldtype
);
1024 t
= TYPE_ARG_TYPES (newtype
);
1025 for (; t
; t
= TREE_CHAIN (t
))
1027 tree type
= TREE_VALUE (t
);
1029 if (TREE_CHAIN (t
) == 0
1030 && TYPE_MAIN_VARIANT (type
) != void_type_node
)
1032 inform (input_location
, "a parameter list with an ellipsis can%'t match "
1033 "an empty parameter name list declaration");
1037 if (c_type_promotes_to (type
) != type
)
1039 inform (input_location
, "an argument type that has a default promotion can%'t match "
1040 "an empty parameter name list declaration");
1046 /* Another subroutine of diagnose_mismatched_decls. OLDDECL is an
1047 old-style function definition, NEWDECL is a prototype declaration.
1048 Diagnose inconsistencies in the argument list. Returns TRUE if
1049 the prototype is compatible, FALSE if not. */
1051 validate_proto_after_old_defn (tree newdecl
, tree newtype
, tree oldtype
)
1053 tree newargs
, oldargs
;
1056 #define END_OF_ARGLIST(t) ((t) == void_type_node)
1058 oldargs
= TYPE_ACTUAL_ARG_TYPES (oldtype
);
1059 newargs
= TYPE_ARG_TYPES (newtype
);
1064 tree oldargtype
= TREE_VALUE (oldargs
);
1065 tree newargtype
= TREE_VALUE (newargs
);
1067 if (oldargtype
== error_mark_node
|| newargtype
== error_mark_node
)
1070 oldargtype
= TYPE_MAIN_VARIANT (oldargtype
);
1071 newargtype
= TYPE_MAIN_VARIANT (newargtype
);
1073 if (END_OF_ARGLIST (oldargtype
) && END_OF_ARGLIST (newargtype
))
1076 /* Reaching the end of just one list means the two decls don't
1077 agree on the number of arguments. */
1078 if (END_OF_ARGLIST (oldargtype
))
1080 error ("prototype for %q+D declares more arguments "
1081 "than previous old-style definition", newdecl
);
1084 else if (END_OF_ARGLIST (newargtype
))
1086 error ("prototype for %q+D declares fewer arguments "
1087 "than previous old-style definition", newdecl
);
1091 /* Type for passing arg must be consistent with that declared
1093 else if (!comptypes (oldargtype
, newargtype
))
1095 error ("prototype for %q+D declares argument %d"
1096 " with incompatible type",
1101 oldargs
= TREE_CHAIN (oldargs
);
1102 newargs
= TREE_CHAIN (newargs
);
1106 /* If we get here, no errors were found, but do issue a warning
1107 for this poor-style construct. */
1108 warning (0, "prototype for %q+D follows non-prototype definition",
1111 #undef END_OF_ARGLIST
1114 /* Subroutine of diagnose_mismatched_decls. Report the location of DECL,
1115 first in a pair of mismatched declarations, using the diagnostic
1118 locate_old_decl (tree decl
)
1120 if (TREE_CODE (decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (decl
))
1122 else if (DECL_INITIAL (decl
))
1123 inform (input_location
, "previous definition of %q+D was here", decl
);
1124 else if (C_DECL_IMPLICIT (decl
))
1125 inform (input_location
, "previous implicit declaration of %q+D was here", decl
);
1127 inform (input_location
, "previous declaration of %q+D was here", decl
);
1130 /* Subroutine of duplicate_decls. Compare NEWDECL to OLDDECL.
1131 Returns true if the caller should proceed to merge the two, false
1132 if OLDDECL should simply be discarded. As a side effect, issues
1133 all necessary diagnostics for invalid or poor-style combinations.
1134 If it returns true, writes the types of NEWDECL and OLDDECL to
1135 *NEWTYPEP and *OLDTYPEP - these may have been adjusted from
1136 TREE_TYPE (NEWDECL, OLDDECL) respectively. */
1139 diagnose_mismatched_decls (tree newdecl
, tree olddecl
,
1140 tree
*newtypep
, tree
*oldtypep
)
1142 tree newtype
, oldtype
;
1143 bool pedwarned
= false;
1144 bool warned
= false;
1147 #define DECL_EXTERN_INLINE(DECL) (DECL_DECLARED_INLINE_P (DECL) \
1148 && DECL_EXTERNAL (DECL))
1150 /* If we have error_mark_node for either decl or type, just discard
1151 the previous decl - we're in an error cascade already. */
1152 if (olddecl
== error_mark_node
|| newdecl
== error_mark_node
)
1154 *oldtypep
= oldtype
= TREE_TYPE (olddecl
);
1155 *newtypep
= newtype
= TREE_TYPE (newdecl
);
1156 if (oldtype
== error_mark_node
|| newtype
== error_mark_node
)
1159 /* Two different categories of symbol altogether. This is an error
1160 unless OLDDECL is a builtin. OLDDECL will be discarded in any case. */
1161 if (TREE_CODE (olddecl
) != TREE_CODE (newdecl
))
1163 if (!(TREE_CODE (olddecl
) == FUNCTION_DECL
1164 && DECL_BUILT_IN (olddecl
)
1165 && !C_DECL_DECLARED_BUILTIN (olddecl
)))
1167 error ("%q+D redeclared as different kind of symbol", newdecl
);
1168 locate_old_decl (olddecl
);
1170 else if (TREE_PUBLIC (newdecl
))
1171 warning (0, "built-in function %q+D declared as non-function",
1174 warning (OPT_Wshadow
, "declaration of %q+D shadows "
1175 "a built-in function", newdecl
);
1179 /* Enumerators have no linkage, so may only be declared once in a
1181 if (TREE_CODE (olddecl
) == CONST_DECL
)
1183 error ("redeclaration of enumerator %q+D", newdecl
);
1184 locate_old_decl (olddecl
);
1188 if (!comptypes (oldtype
, newtype
))
1190 if (TREE_CODE (olddecl
) == FUNCTION_DECL
1191 && DECL_BUILT_IN (olddecl
) && !C_DECL_DECLARED_BUILTIN (olddecl
))
1193 /* Accept harmless mismatch in function types.
1194 This is for the ffs and fprintf builtins. */
1195 tree trytype
= match_builtin_function_types (newtype
, oldtype
);
1197 if (trytype
&& comptypes (newtype
, trytype
))
1198 *oldtypep
= oldtype
= trytype
;
1201 /* If types don't match for a built-in, throw away the
1202 built-in. No point in calling locate_old_decl here, it
1203 won't print anything. */
1204 warning (0, "conflicting types for built-in function %q+D",
1209 else if (TREE_CODE (olddecl
) == FUNCTION_DECL
1210 && DECL_IS_BUILTIN (olddecl
))
1212 /* A conflicting function declaration for a predeclared
1213 function that isn't actually built in. Objective C uses
1214 these. The new declaration silently overrides everything
1215 but the volatility (i.e. noreturn) indication. See also
1216 below. FIXME: Make Objective C use normal builtins. */
1217 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
1220 /* Permit void foo (...) to match int foo (...) if the latter is
1221 the definition and implicit int was used. See
1222 c-torture/compile/920625-2.c. */
1223 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
&& DECL_INITIAL (newdecl
)
1224 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype
)) == void_type_node
1225 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype
)) == integer_type_node
1226 && C_FUNCTION_IMPLICIT_INT (newdecl
) && !DECL_INITIAL (olddecl
))
1228 pedwarned
= pedwarn (input_location
, 0,
1229 "conflicting types for %q+D", newdecl
);
1230 /* Make sure we keep void as the return type. */
1231 TREE_TYPE (newdecl
) = *newtypep
= newtype
= oldtype
;
1232 C_FUNCTION_IMPLICIT_INT (newdecl
) = 0;
1234 /* Permit void foo (...) to match an earlier call to foo (...) with
1235 no declared type (thus, implicitly int). */
1236 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
1237 && TYPE_MAIN_VARIANT (TREE_TYPE (newtype
)) == void_type_node
1238 && TYPE_MAIN_VARIANT (TREE_TYPE (oldtype
)) == integer_type_node
1239 && C_DECL_IMPLICIT (olddecl
) && !DECL_INITIAL (olddecl
))
1241 pedwarned
= pedwarn (input_location
, 0,
1242 "conflicting types for %q+D", newdecl
);
1243 /* Make sure we keep void as the return type. */
1244 TREE_TYPE (olddecl
) = *oldtypep
= oldtype
= newtype
;
1248 if (TYPE_QUALS (newtype
) != TYPE_QUALS (oldtype
))
1249 error ("conflicting type qualifiers for %q+D", newdecl
);
1251 error ("conflicting types for %q+D", newdecl
);
1252 diagnose_arglist_conflict (newdecl
, olddecl
, newtype
, oldtype
);
1253 locate_old_decl (olddecl
);
1258 /* Redeclaration of a type is a constraint violation (6.7.2.3p1),
1259 but silently ignore the redeclaration if either is in a system
1260 header. (Conflicting redeclarations were handled above.) */
1261 if (TREE_CODE (newdecl
) == TYPE_DECL
)
1263 if (DECL_IN_SYSTEM_HEADER (newdecl
)
1264 || DECL_IN_SYSTEM_HEADER (olddecl
)
1265 || TREE_NO_WARNING (newdecl
)
1266 || TREE_NO_WARNING (olddecl
))
1267 return true; /* Allow OLDDECL to continue in use. */
1269 error ("redefinition of typedef %q+D", newdecl
);
1270 locate_old_decl (olddecl
);
1274 /* Function declarations can either be 'static' or 'extern' (no
1275 qualifier is equivalent to 'extern' - C99 6.2.2p5) and therefore
1276 can never conflict with each other on account of linkage
1277 (6.2.2p4). Multiple definitions are not allowed (6.9p3,5) but
1278 gnu89 mode permits two definitions if one is 'extern inline' and
1279 one is not. The non- extern-inline definition supersedes the
1280 extern-inline definition. */
1282 else if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1284 /* If you declare a built-in function name as static, or
1285 define the built-in with an old-style definition (so we
1286 can't validate the argument list) the built-in definition is
1287 overridden, but optionally warn this was a bad choice of name. */
1288 if (DECL_BUILT_IN (olddecl
)
1289 && !C_DECL_DECLARED_BUILTIN (olddecl
)
1290 && (!TREE_PUBLIC (newdecl
)
1291 || (DECL_INITIAL (newdecl
)
1292 && !TYPE_ARG_TYPES (TREE_TYPE (newdecl
)))))
1294 warning (OPT_Wshadow
, "declaration of %q+D shadows "
1295 "a built-in function", newdecl
);
1296 /* Discard the old built-in function. */
1300 if (DECL_INITIAL (newdecl
))
1302 if (DECL_INITIAL (olddecl
))
1304 /* If both decls are in the same TU and the new declaration
1305 isn't overriding an extern inline reject the new decl.
1306 In c99, no overriding is allowed in the same translation
1308 if ((!DECL_EXTERN_INLINE (olddecl
)
1309 || DECL_EXTERN_INLINE (newdecl
)
1310 || (!flag_gnu89_inline
1311 && (!DECL_DECLARED_INLINE_P (olddecl
)
1312 || !lookup_attribute ("gnu_inline",
1313 DECL_ATTRIBUTES (olddecl
)))
1314 && (!DECL_DECLARED_INLINE_P (newdecl
)
1315 || !lookup_attribute ("gnu_inline",
1316 DECL_ATTRIBUTES (newdecl
))))
1318 && same_translation_unit_p (newdecl
, olddecl
))
1320 error ("redefinition of %q+D", newdecl
);
1321 locate_old_decl (olddecl
);
1326 /* If we have a prototype after an old-style function definition,
1327 the argument types must be checked specially. */
1328 else if (DECL_INITIAL (olddecl
)
1329 && !TYPE_ARG_TYPES (oldtype
) && TYPE_ARG_TYPES (newtype
)
1330 && TYPE_ACTUAL_ARG_TYPES (oldtype
)
1331 && !validate_proto_after_old_defn (newdecl
, newtype
, oldtype
))
1333 locate_old_decl (olddecl
);
1336 /* A non-static declaration (even an "extern") followed by a
1337 static declaration is undefined behavior per C99 6.2.2p3-5,7.
1338 The same is true for a static forward declaration at block
1339 scope followed by a non-static declaration/definition at file
1340 scope. Static followed by non-static at the same scope is
1341 not undefined behavior, and is the most convenient way to get
1342 some effects (see e.g. what unwind-dw2-fde-glibc.c does to
1343 the definition of _Unwind_Find_FDE in unwind-dw2-fde.c), but
1344 we do diagnose it if -Wtraditional. */
1345 if (TREE_PUBLIC (olddecl
) && !TREE_PUBLIC (newdecl
))
1347 /* Two exceptions to the rule. If olddecl is an extern
1348 inline, or a predeclared function that isn't actually
1349 built in, newdecl silently overrides olddecl. The latter
1350 occur only in Objective C; see also above. (FIXME: Make
1351 Objective C use normal builtins.) */
1352 if (!DECL_IS_BUILTIN (olddecl
)
1353 && !DECL_EXTERN_INLINE (olddecl
))
1355 error ("static declaration of %q+D follows "
1356 "non-static declaration", newdecl
);
1357 locate_old_decl (olddecl
);
1361 else if (TREE_PUBLIC (newdecl
) && !TREE_PUBLIC (olddecl
))
1363 if (DECL_CONTEXT (olddecl
))
1365 error ("non-static declaration of %q+D follows "
1366 "static declaration", newdecl
);
1367 locate_old_decl (olddecl
);
1370 else if (warn_traditional
)
1372 warned
|= warning (OPT_Wtraditional
,
1373 "non-static declaration of %q+D "
1374 "follows static declaration", newdecl
);
1378 /* Make sure gnu_inline attribute is either not present, or
1379 present on all inline decls. */
1380 if (DECL_DECLARED_INLINE_P (olddecl
)
1381 && DECL_DECLARED_INLINE_P (newdecl
))
1383 bool newa
= lookup_attribute ("gnu_inline",
1384 DECL_ATTRIBUTES (newdecl
)) != NULL
;
1385 bool olda
= lookup_attribute ("gnu_inline",
1386 DECL_ATTRIBUTES (olddecl
)) != NULL
;
1389 error ("%<gnu_inline%> attribute present on %q+D",
1390 newa
? newdecl
: olddecl
);
1391 error ("%Jbut not here", newa
? olddecl
: newdecl
);
1395 else if (TREE_CODE (newdecl
) == VAR_DECL
)
1397 /* Only variables can be thread-local, and all declarations must
1398 agree on this property. */
1399 if (C_DECL_THREADPRIVATE_P (olddecl
) && !DECL_THREAD_LOCAL_P (newdecl
))
1401 /* Nothing to check. Since OLDDECL is marked threadprivate
1402 and NEWDECL does not have a thread-local attribute, we
1403 will merge the threadprivate attribute into NEWDECL. */
1406 else if (DECL_THREAD_LOCAL_P (newdecl
) != DECL_THREAD_LOCAL_P (olddecl
))
1408 if (DECL_THREAD_LOCAL_P (newdecl
))
1409 error ("thread-local declaration of %q+D follows "
1410 "non-thread-local declaration", newdecl
);
1412 error ("non-thread-local declaration of %q+D follows "
1413 "thread-local declaration", newdecl
);
1415 locate_old_decl (olddecl
);
1419 /* Multiple initialized definitions are not allowed (6.9p3,5). */
1420 if (DECL_INITIAL (newdecl
) && DECL_INITIAL (olddecl
))
1422 error ("redefinition of %q+D", newdecl
);
1423 locate_old_decl (olddecl
);
1427 /* Objects declared at file scope: if the first declaration had
1428 external linkage (even if it was an external reference) the
1429 second must have external linkage as well, or the behavior is
1430 undefined. If the first declaration had internal linkage, then
1431 the second must too, or else be an external reference (in which
1432 case the composite declaration still has internal linkage).
1433 As for function declarations, we warn about the static-then-
1434 extern case only for -Wtraditional. See generally 6.2.2p3-5,7. */
1435 if (DECL_FILE_SCOPE_P (newdecl
)
1436 && TREE_PUBLIC (newdecl
) != TREE_PUBLIC (olddecl
))
1438 if (DECL_EXTERNAL (newdecl
))
1440 if (!DECL_FILE_SCOPE_P (olddecl
))
1442 error ("extern declaration of %q+D follows "
1443 "declaration with no linkage", newdecl
);
1444 locate_old_decl (olddecl
);
1447 else if (warn_traditional
)
1449 warned
|= warning (OPT_Wtraditional
,
1450 "non-static declaration of %q+D "
1451 "follows static declaration", newdecl
);
1456 if (TREE_PUBLIC (newdecl
))
1457 error ("non-static declaration of %q+D follows "
1458 "static declaration", newdecl
);
1460 error ("static declaration of %q+D follows "
1461 "non-static declaration", newdecl
);
1463 locate_old_decl (olddecl
);
1467 /* Two objects with the same name declared at the same block
1468 scope must both be external references (6.7p3). */
1469 else if (!DECL_FILE_SCOPE_P (newdecl
))
1471 if (DECL_EXTERNAL (newdecl
))
1473 /* Extern with initializer at block scope, which will
1474 already have received an error. */
1476 else if (DECL_EXTERNAL (olddecl
))
1478 error ("declaration of %q+D with no linkage follows "
1479 "extern declaration", newdecl
);
1480 locate_old_decl (olddecl
);
1484 error ("redeclaration of %q+D with no linkage", newdecl
);
1485 locate_old_decl (olddecl
);
1493 /* All decls must agree on a visibility. */
1494 if (CODE_CONTAINS_STRUCT (TREE_CODE (newdecl
), TS_DECL_WITH_VIS
)
1495 && DECL_VISIBILITY_SPECIFIED (newdecl
) && DECL_VISIBILITY_SPECIFIED (olddecl
)
1496 && DECL_VISIBILITY (newdecl
) != DECL_VISIBILITY (olddecl
))
1498 warned
|= warning (0, "redeclaration of %q+D with different visibility "
1499 "(old visibility preserved)", newdecl
);
1502 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1504 /* Diagnose inline __attribute__ ((noinline)) which is silly. */
1505 if (DECL_DECLARED_INLINE_P (newdecl
)
1506 && lookup_attribute ("noinline", DECL_ATTRIBUTES (olddecl
)))
1508 warned
|= warning (OPT_Wattributes
,
1509 "inline declaration of %qD follows "
1510 "declaration with attribute noinline", newdecl
);
1512 else if (DECL_DECLARED_INLINE_P (olddecl
)
1513 && lookup_attribute ("noinline", DECL_ATTRIBUTES (newdecl
)))
1515 warned
|= warning (OPT_Wattributes
,
1516 "declaration of %q+D with attribute "
1517 "noinline follows inline declaration ", newdecl
);
1520 else /* PARM_DECL, VAR_DECL */
1522 /* Redeclaration of a parameter is a constraint violation (this is
1523 not explicitly stated, but follows from C99 6.7p3 [no more than
1524 one declaration of the same identifier with no linkage in the
1525 same scope, except type tags] and 6.2.2p6 [parameters have no
1526 linkage]). We must check for a forward parameter declaration,
1527 indicated by TREE_ASM_WRITTEN on the old declaration - this is
1528 an extension, the mandatory diagnostic for which is handled by
1529 mark_forward_parm_decls. */
1531 if (TREE_CODE (newdecl
) == PARM_DECL
1532 && (!TREE_ASM_WRITTEN (olddecl
) || TREE_ASM_WRITTEN (newdecl
)))
1534 error ("redefinition of parameter %q+D", newdecl
);
1535 locate_old_decl (olddecl
);
1540 /* Optional warning for completely redundant decls. */
1541 if (!warned
&& !pedwarned
1542 && warn_redundant_decls
1543 /* Don't warn about a function declaration followed by a
1545 && !(TREE_CODE (newdecl
) == FUNCTION_DECL
1546 && DECL_INITIAL (newdecl
) && !DECL_INITIAL (olddecl
))
1547 /* Don't warn about redundant redeclarations of builtins. */
1548 && !(TREE_CODE (newdecl
) == FUNCTION_DECL
1549 && !DECL_BUILT_IN (newdecl
)
1550 && DECL_BUILT_IN (olddecl
)
1551 && !C_DECL_DECLARED_BUILTIN (olddecl
))
1552 /* Don't warn about an extern followed by a definition. */
1553 && !(DECL_EXTERNAL (olddecl
) && !DECL_EXTERNAL (newdecl
))
1554 /* Don't warn about forward parameter decls. */
1555 && !(TREE_CODE (newdecl
) == PARM_DECL
1556 && TREE_ASM_WRITTEN (olddecl
) && !TREE_ASM_WRITTEN (newdecl
))
1557 /* Don't warn about a variable definition following a declaration. */
1558 && !(TREE_CODE (newdecl
) == VAR_DECL
1559 && DECL_INITIAL (newdecl
) && !DECL_INITIAL (olddecl
)))
1561 warned
= warning (OPT_Wredundant_decls
, "redundant redeclaration of %q+D",
1565 /* Report location of previous decl/defn. */
1566 if (warned
|| pedwarned
)
1567 locate_old_decl (olddecl
);
1569 #undef DECL_EXTERN_INLINE
1574 /* Subroutine of duplicate_decls. NEWDECL has been found to be
1575 consistent with OLDDECL, but carries new information. Merge the
1576 new information into OLDDECL. This function issues no
1580 merge_decls (tree newdecl
, tree olddecl
, tree newtype
, tree oldtype
)
1582 bool new_is_definition
= (TREE_CODE (newdecl
) == FUNCTION_DECL
1583 && DECL_INITIAL (newdecl
) != 0);
1584 bool new_is_prototype
= (TREE_CODE (newdecl
) == FUNCTION_DECL
1585 && TYPE_ARG_TYPES (TREE_TYPE (newdecl
)) != 0);
1586 bool old_is_prototype
= (TREE_CODE (olddecl
) == FUNCTION_DECL
1587 && TYPE_ARG_TYPES (TREE_TYPE (olddecl
)) != 0);
1588 bool extern_changed
= false;
1590 /* For real parm decl following a forward decl, rechain the old decl
1591 in its new location and clear TREE_ASM_WRITTEN (it's not a
1592 forward decl anymore). */
1593 if (TREE_CODE (newdecl
) == PARM_DECL
1594 && TREE_ASM_WRITTEN (olddecl
) && !TREE_ASM_WRITTEN (newdecl
))
1596 struct c_binding
*b
, **here
;
1598 for (here
= ¤t_scope
->bindings
; *here
; here
= &(*here
)->prev
)
1599 if ((*here
)->decl
== olddecl
)
1606 b
->prev
= current_scope
->bindings
;
1607 current_scope
->bindings
= b
;
1609 TREE_ASM_WRITTEN (olddecl
) = 0;
1612 DECL_ATTRIBUTES (newdecl
)
1613 = targetm
.merge_decl_attributes (olddecl
, newdecl
);
1615 /* Merge the data types specified in the two decls. */
1617 = TREE_TYPE (olddecl
)
1618 = composite_type (newtype
, oldtype
);
1620 /* Lay the type out, unless already done. */
1621 if (!comptypes (oldtype
, TREE_TYPE (newdecl
)))
1623 if (TREE_TYPE (newdecl
) != error_mark_node
)
1624 layout_type (TREE_TYPE (newdecl
));
1625 if (TREE_CODE (newdecl
) != FUNCTION_DECL
1626 && TREE_CODE (newdecl
) != TYPE_DECL
1627 && TREE_CODE (newdecl
) != CONST_DECL
)
1628 layout_decl (newdecl
, 0);
1632 /* Since the type is OLDDECL's, make OLDDECL's size go with. */
1633 DECL_SIZE (newdecl
) = DECL_SIZE (olddecl
);
1634 DECL_SIZE_UNIT (newdecl
) = DECL_SIZE_UNIT (olddecl
);
1635 DECL_MODE (newdecl
) = DECL_MODE (olddecl
);
1636 if (DECL_ALIGN (olddecl
) > DECL_ALIGN (newdecl
))
1638 DECL_ALIGN (newdecl
) = DECL_ALIGN (olddecl
);
1639 DECL_USER_ALIGN (newdecl
) |= DECL_USER_ALIGN (olddecl
);
1643 /* Keep the old rtl since we can safely use it. */
1644 if (HAS_RTL_P (olddecl
))
1645 COPY_DECL_RTL (olddecl
, newdecl
);
1647 /* Merge the type qualifiers. */
1648 if (TREE_READONLY (newdecl
))
1649 TREE_READONLY (olddecl
) = 1;
1651 if (TREE_THIS_VOLATILE (newdecl
))
1652 TREE_THIS_VOLATILE (olddecl
) = 1;
1654 /* Merge deprecatedness. */
1655 if (TREE_DEPRECATED (newdecl
))
1656 TREE_DEPRECATED (olddecl
) = 1;
1658 /* If a decl is in a system header and the other isn't, keep the one on the
1659 system header. Otherwise, keep source location of definition rather than
1660 declaration and of prototype rather than non-prototype unless that
1661 prototype is built-in. */
1662 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
)
1663 && DECL_IN_SYSTEM_HEADER (olddecl
)
1664 && !DECL_IN_SYSTEM_HEADER (newdecl
) )
1665 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
1666 else if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
)
1667 && DECL_IN_SYSTEM_HEADER (newdecl
)
1668 && !DECL_IN_SYSTEM_HEADER (olddecl
))
1669 DECL_SOURCE_LOCATION (olddecl
) = DECL_SOURCE_LOCATION (newdecl
);
1670 else if ((DECL_INITIAL (newdecl
) == 0 && DECL_INITIAL (olddecl
) != 0)
1671 || (old_is_prototype
&& !new_is_prototype
1672 && !C_DECL_BUILTIN_PROTOTYPE (olddecl
)))
1673 DECL_SOURCE_LOCATION (newdecl
) = DECL_SOURCE_LOCATION (olddecl
);
1675 /* Merge the initialization information. */
1676 if (DECL_INITIAL (newdecl
) == 0)
1677 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
1679 /* Merge the threadprivate attribute. */
1680 if (TREE_CODE (olddecl
) == VAR_DECL
&& C_DECL_THREADPRIVATE_P (olddecl
))
1682 DECL_TLS_MODEL (newdecl
) = DECL_TLS_MODEL (olddecl
);
1683 C_DECL_THREADPRIVATE_P (newdecl
) = 1;
1686 if (CODE_CONTAINS_STRUCT (TREE_CODE (olddecl
), TS_DECL_WITH_VIS
))
1688 /* Merge the section attribute.
1689 We want to issue an error if the sections conflict but that
1690 must be done later in decl_attributes since we are called
1691 before attributes are assigned. */
1692 if (DECL_SECTION_NAME (newdecl
) == NULL_TREE
)
1693 DECL_SECTION_NAME (newdecl
) = DECL_SECTION_NAME (olddecl
);
1695 /* Copy the assembler name.
1696 Currently, it can only be defined in the prototype. */
1697 COPY_DECL_ASSEMBLER_NAME (olddecl
, newdecl
);
1699 /* Use visibility of whichever declaration had it specified */
1700 if (DECL_VISIBILITY_SPECIFIED (olddecl
))
1702 DECL_VISIBILITY (newdecl
) = DECL_VISIBILITY (olddecl
);
1703 DECL_VISIBILITY_SPECIFIED (newdecl
) = 1;
1706 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1708 DECL_STATIC_CONSTRUCTOR(newdecl
) |= DECL_STATIC_CONSTRUCTOR(olddecl
);
1709 DECL_STATIC_DESTRUCTOR (newdecl
) |= DECL_STATIC_DESTRUCTOR (olddecl
);
1710 DECL_NO_LIMIT_STACK (newdecl
) |= DECL_NO_LIMIT_STACK (olddecl
);
1711 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl
)
1712 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl
);
1713 TREE_THIS_VOLATILE (newdecl
) |= TREE_THIS_VOLATILE (olddecl
);
1714 DECL_IS_MALLOC (newdecl
) |= DECL_IS_MALLOC (olddecl
);
1715 DECL_IS_OPERATOR_NEW (newdecl
) |= DECL_IS_OPERATOR_NEW (olddecl
);
1716 TREE_READONLY (newdecl
) |= TREE_READONLY (olddecl
);
1717 DECL_PURE_P (newdecl
) |= DECL_PURE_P (olddecl
);
1718 DECL_IS_NOVOPS (newdecl
) |= DECL_IS_NOVOPS (olddecl
);
1721 /* Merge the storage class information. */
1722 merge_weak (newdecl
, olddecl
);
1724 /* For functions, static overrides non-static. */
1725 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1727 TREE_PUBLIC (newdecl
) &= TREE_PUBLIC (olddecl
);
1728 /* This is since we don't automatically
1729 copy the attributes of NEWDECL into OLDDECL. */
1730 TREE_PUBLIC (olddecl
) = TREE_PUBLIC (newdecl
);
1731 /* If this clears `static', clear it in the identifier too. */
1732 if (!TREE_PUBLIC (olddecl
))
1733 TREE_PUBLIC (DECL_NAME (olddecl
)) = 0;
1737 /* In c99, 'extern' declaration before (or after) 'inline' means this
1738 function is not DECL_EXTERNAL, unless 'gnu_inline' attribute
1740 if (TREE_CODE (newdecl
) == FUNCTION_DECL
1741 && !flag_gnu89_inline
1742 && (DECL_DECLARED_INLINE_P (newdecl
)
1743 || DECL_DECLARED_INLINE_P (olddecl
))
1744 && (!DECL_DECLARED_INLINE_P (newdecl
)
1745 || !DECL_DECLARED_INLINE_P (olddecl
)
1746 || !DECL_EXTERNAL (olddecl
))
1747 && DECL_EXTERNAL (newdecl
)
1748 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl
))
1749 && !current_function_decl
)
1750 DECL_EXTERNAL (newdecl
) = 0;
1752 if (DECL_EXTERNAL (newdecl
))
1754 TREE_STATIC (newdecl
) = TREE_STATIC (olddecl
);
1755 DECL_EXTERNAL (newdecl
) = DECL_EXTERNAL (olddecl
);
1757 /* An extern decl does not override previous storage class. */
1758 TREE_PUBLIC (newdecl
) = TREE_PUBLIC (olddecl
);
1759 if (!DECL_EXTERNAL (newdecl
))
1761 DECL_CONTEXT (newdecl
) = DECL_CONTEXT (olddecl
);
1762 DECL_COMMON (newdecl
) = DECL_COMMON (olddecl
);
1767 TREE_STATIC (olddecl
) = TREE_STATIC (newdecl
);
1768 TREE_PUBLIC (olddecl
) = TREE_PUBLIC (newdecl
);
1771 if (TREE_CODE (newdecl
) == FUNCTION_DECL
)
1773 /* If we're redefining a function previously defined as extern
1774 inline, make sure we emit debug info for the inline before we
1775 throw it away, in case it was inlined into a function that
1776 hasn't been written out yet. */
1777 if (new_is_definition
&& DECL_INITIAL (olddecl
))
1779 if (TREE_USED (olddecl
)
1780 /* We never inline re-defined extern inline functions.
1781 FIXME: This would be better handled by keeping both functions
1782 as separate declarations. */
1783 && cgraph_function_possibly_inlined_p (olddecl
))
1784 (*debug_hooks
->outlining_inline_function
) (olddecl
);
1786 /* The new defn must not be inline. */
1787 DECL_UNINLINABLE (newdecl
) = 1;
1791 /* If either decl says `inline', this fn is inline, unless
1792 its definition was passed already. */
1793 if (DECL_DECLARED_INLINE_P (newdecl
)
1794 || DECL_DECLARED_INLINE_P (olddecl
))
1795 DECL_DECLARED_INLINE_P (newdecl
) = 1;
1797 DECL_UNINLINABLE (newdecl
) = DECL_UNINLINABLE (olddecl
)
1798 = (DECL_UNINLINABLE (newdecl
) || DECL_UNINLINABLE (olddecl
));
1800 DECL_DISREGARD_INLINE_LIMITS (newdecl
)
1801 = DECL_DISREGARD_INLINE_LIMITS (olddecl
)
1802 = (DECL_DISREGARD_INLINE_LIMITS (newdecl
)
1803 || DECL_DISREGARD_INLINE_LIMITS (olddecl
));
1806 if (DECL_BUILT_IN (olddecl
))
1808 /* If redeclaring a builtin function, it stays built in.
1809 But it gets tagged as having been declared. */
1810 DECL_BUILT_IN_CLASS (newdecl
) = DECL_BUILT_IN_CLASS (olddecl
);
1811 DECL_FUNCTION_CODE (newdecl
) = DECL_FUNCTION_CODE (olddecl
);
1812 C_DECL_DECLARED_BUILTIN (newdecl
) = 1;
1813 if (new_is_prototype
)
1814 C_DECL_BUILTIN_PROTOTYPE (newdecl
) = 0;
1816 C_DECL_BUILTIN_PROTOTYPE (newdecl
)
1817 = C_DECL_BUILTIN_PROTOTYPE (olddecl
);
1820 /* Preserve function specific target and optimization options */
1821 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl
)
1822 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl
))
1823 DECL_FUNCTION_SPECIFIC_TARGET (newdecl
)
1824 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl
);
1826 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
)
1827 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
))
1828 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl
)
1829 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl
);
1831 /* Also preserve various other info from the definition. */
1832 if (!new_is_definition
)
1834 DECL_RESULT (newdecl
) = DECL_RESULT (olddecl
);
1835 DECL_INITIAL (newdecl
) = DECL_INITIAL (olddecl
);
1836 DECL_STRUCT_FUNCTION (newdecl
) = DECL_STRUCT_FUNCTION (olddecl
);
1837 DECL_SAVED_TREE (newdecl
) = DECL_SAVED_TREE (olddecl
);
1838 gimple_set_body (newdecl
, gimple_body (olddecl
));
1839 DECL_ARGUMENTS (newdecl
) = DECL_ARGUMENTS (olddecl
);
1841 /* See if we've got a function to instantiate from. */
1842 if (DECL_SAVED_TREE (olddecl
))
1843 DECL_ABSTRACT_ORIGIN (newdecl
)
1844 = DECL_ABSTRACT_ORIGIN (olddecl
);
1848 extern_changed
= DECL_EXTERNAL (olddecl
) && !DECL_EXTERNAL (newdecl
);
1850 /* Merge the USED information. */
1851 if (TREE_USED (olddecl
))
1852 TREE_USED (newdecl
) = 1;
1853 else if (TREE_USED (newdecl
))
1854 TREE_USED (olddecl
) = 1;
1856 /* Copy most of the decl-specific fields of NEWDECL into OLDDECL.
1857 But preserve OLDDECL's DECL_UID and DECL_CONTEXT. */
1859 unsigned olddecl_uid
= DECL_UID (olddecl
);
1860 tree olddecl_context
= DECL_CONTEXT (olddecl
);
1862 memcpy ((char *) olddecl
+ sizeof (struct tree_common
),
1863 (char *) newdecl
+ sizeof (struct tree_common
),
1864 sizeof (struct tree_decl_common
) - sizeof (struct tree_common
));
1865 switch (TREE_CODE (olddecl
))
1868 gimple_set_body (olddecl
, gimple_body (newdecl
));
1878 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
1879 (char *) newdecl
+ sizeof (struct tree_decl_common
),
1880 tree_code_size (TREE_CODE (olddecl
)) - sizeof (struct tree_decl_common
));
1885 memcpy ((char *) olddecl
+ sizeof (struct tree_decl_common
),
1886 (char *) newdecl
+ sizeof (struct tree_decl_common
),
1887 sizeof (struct tree_decl_non_common
) - sizeof (struct tree_decl_common
));
1889 DECL_UID (olddecl
) = olddecl_uid
;
1890 DECL_CONTEXT (olddecl
) = olddecl_context
;
1893 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
1894 so that encode_section_info has a chance to look at the new decl
1895 flags and attributes. */
1896 if (DECL_RTL_SET_P (olddecl
)
1897 && (TREE_CODE (olddecl
) == FUNCTION_DECL
1898 || (TREE_CODE (olddecl
) == VAR_DECL
1899 && TREE_STATIC (olddecl
))))
1900 make_decl_rtl (olddecl
);
1902 /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
1903 and the definition is coming from the old version, cgraph needs
1904 to be called again. */
1905 if (extern_changed
&& !new_is_definition
1906 && TREE_CODE (olddecl
) == FUNCTION_DECL
&& DECL_INITIAL (olddecl
))
1907 cgraph_mark_if_needed (olddecl
);
1910 /* Handle when a new declaration NEWDECL has the same name as an old
1911 one OLDDECL in the same binding contour. Prints an error message
1914 If safely possible, alter OLDDECL to look like NEWDECL, and return
1915 true. Otherwise, return false. */
1918 duplicate_decls (tree newdecl
, tree olddecl
)
1920 tree newtype
= NULL
, oldtype
= NULL
;
1922 if (!diagnose_mismatched_decls (newdecl
, olddecl
, &newtype
, &oldtype
))
1924 /* Avoid `unused variable' and other warnings for OLDDECL. */
1925 TREE_NO_WARNING (olddecl
) = 1;
1929 merge_decls (newdecl
, olddecl
, newtype
, oldtype
);
1934 /* Check whether decl-node NEW_DECL shadows an existing declaration. */
1936 warn_if_shadowing (tree new_decl
)
1938 struct c_binding
*b
;
1940 /* Shadow warnings wanted? */
1942 /* No shadow warnings for internally generated vars. */
1943 || DECL_IS_BUILTIN (new_decl
)
1944 /* No shadow warnings for vars made for inlining. */
1945 || DECL_FROM_INLINE (new_decl
))
1948 /* Is anything being shadowed? Invisible decls do not count. */
1949 for (b
= I_SYMBOL_BINDING (DECL_NAME (new_decl
)); b
; b
= b
->shadowed
)
1950 if (b
->decl
&& b
->decl
!= new_decl
&& !b
->invisible
)
1952 tree old_decl
= b
->decl
;
1954 if (old_decl
== error_mark_node
)
1956 warning (OPT_Wshadow
, "declaration of %q+D shadows previous "
1957 "non-variable", new_decl
);
1960 else if (TREE_CODE (old_decl
) == PARM_DECL
)
1961 warning (OPT_Wshadow
, "declaration of %q+D shadows a parameter",
1963 else if (DECL_FILE_SCOPE_P (old_decl
))
1964 warning (OPT_Wshadow
, "declaration of %q+D shadows a global "
1965 "declaration", new_decl
);
1966 else if (TREE_CODE (old_decl
) == FUNCTION_DECL
1967 && DECL_BUILT_IN (old_decl
))
1969 warning (OPT_Wshadow
, "declaration of %q+D shadows "
1970 "a built-in function", new_decl
);
1974 warning (OPT_Wshadow
, "declaration of %q+D shadows a previous local",
1977 warning (OPT_Wshadow
, "%Jshadowed declaration is here", old_decl
);
1984 /* Subroutine of pushdecl.
1986 X is a TYPE_DECL for a typedef statement. Create a brand new
1987 ..._TYPE node (which will be just a variant of the existing
1988 ..._TYPE node with identical properties) and then install X
1989 as the TYPE_NAME of this brand new (duplicate) ..._TYPE node.
1991 The whole point here is to end up with a situation where each
1992 and every ..._TYPE node the compiler creates will be uniquely
1993 associated with AT MOST one node representing a typedef name.
1994 This way, even though the compiler substitutes corresponding
1995 ..._TYPE nodes for TYPE_DECL (i.e. "typedef name") nodes very
1996 early on, later parts of the compiler can always do the reverse
1997 translation and get back the corresponding typedef name. For
2000 typedef struct S MY_TYPE;
2003 Later parts of the compiler might only know that `object' was of
2004 type `struct S' if it were not for code just below. With this
2005 code however, later parts of the compiler see something like:
2007 struct S' == struct S
2008 typedef struct S' MY_TYPE;
2011 And they can then deduce (from the node for type struct S') that
2012 the original object declaration was:
2016 Being able to do this is important for proper support of protoize,
2017 and also for generating precise symbolic debugging information
2018 which takes full account of the programmer's (typedef) vocabulary.
2020 Obviously, we don't want to generate a duplicate ..._TYPE node if
2021 the TYPE_DECL node that we are now processing really represents a
2022 standard built-in type. */
2025 clone_underlying_type (tree x
)
2027 if (DECL_IS_BUILTIN (x
))
2029 if (TYPE_NAME (TREE_TYPE (x
)) == 0)
2030 TYPE_NAME (TREE_TYPE (x
)) = x
;
2032 else if (TREE_TYPE (x
) != error_mark_node
2033 && DECL_ORIGINAL_TYPE (x
) == NULL_TREE
)
2035 tree tt
= TREE_TYPE (x
);
2036 DECL_ORIGINAL_TYPE (x
) = tt
;
2037 tt
= build_variant_type_copy (tt
);
2039 TREE_USED (tt
) = TREE_USED (x
);
2044 /* Record a decl-node X as belonging to the current lexical scope.
2045 Check for errors (such as an incompatible declaration for the same
2046 name already seen in the same scope).
2048 Returns either X or an old decl for the same name.
2049 If an old decl is returned, it may have been smashed
2050 to agree with what X says. */
2055 tree name
= DECL_NAME (x
);
2056 struct c_scope
*scope
= current_scope
;
2057 struct c_binding
*b
;
2058 bool nested
= false;
2060 /* Must set DECL_CONTEXT for everything not at file scope or
2061 DECL_FILE_SCOPE_P won't work. Local externs don't count
2062 unless they have initializers (which generate code). */
2063 if (current_function_decl
2064 && ((TREE_CODE (x
) != FUNCTION_DECL
&& TREE_CODE (x
) != VAR_DECL
)
2065 || DECL_INITIAL (x
) || !DECL_EXTERNAL (x
)))
2066 DECL_CONTEXT (x
) = current_function_decl
;
2068 /* If this is of variably modified type, prevent jumping into its
2070 if ((TREE_CODE (x
) == VAR_DECL
|| TREE_CODE (x
) == TYPE_DECL
)
2071 && variably_modified_type_p (TREE_TYPE (x
), NULL_TREE
))
2072 c_begin_vm_scope (scope
->depth
);
2074 /* Anonymous decls are just inserted in the scope. */
2077 bind (name
, x
, scope
, /*invisible=*/false, /*nested=*/false);
2081 /* First, see if there is another declaration with the same name in
2082 the current scope. If there is, duplicate_decls may do all the
2083 work for us. If duplicate_decls returns false, that indicates
2084 two incompatible decls in the same scope; we are to silently
2085 replace the old one (duplicate_decls has issued all appropriate
2086 diagnostics). In particular, we should not consider possible
2087 duplicates in the external scope, or shadowing. */
2088 b
= I_SYMBOL_BINDING (name
);
2089 if (b
&& B_IN_SCOPE (b
, scope
))
2091 struct c_binding
*b_ext
, *b_use
;
2092 tree type
= TREE_TYPE (x
);
2093 tree visdecl
= b
->decl
;
2094 tree vistype
= TREE_TYPE (visdecl
);
2095 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
2096 && COMPLETE_TYPE_P (TREE_TYPE (x
)))
2097 b
->inner_comp
= false;
2100 /* If this is an external linkage declaration, we should check
2101 for compatibility with the type in the external scope before
2102 setting the type at this scope based on the visible
2103 information only. */
2104 if (TREE_PUBLIC (x
) && TREE_PUBLIC (visdecl
))
2106 while (b_ext
&& !B_IN_EXTERNAL_SCOPE (b_ext
))
2107 b_ext
= b_ext
->shadowed
;
2112 TREE_TYPE (b_use
->decl
) = b_use
->type
;
2115 if (duplicate_decls (x
, b_use
->decl
))
2119 /* Save the updated type in the external scope and
2120 restore the proper type for this scope. */
2122 if (comptypes (vistype
, type
))
2123 thistype
= composite_type (vistype
, type
);
2125 thistype
= TREE_TYPE (b_use
->decl
);
2126 b_use
->type
= TREE_TYPE (b_use
->decl
);
2127 if (TREE_CODE (b_use
->decl
) == FUNCTION_DECL
2128 && DECL_BUILT_IN (b_use
->decl
))
2130 = build_type_attribute_variant (thistype
,
2133 TREE_TYPE (b_use
->decl
) = thistype
;
2138 goto skip_external_and_shadow_checks
;
2141 /* All declarations with external linkage, and all external
2142 references, go in the external scope, no matter what scope is
2143 current. However, the binding in that scope is ignored for
2144 purposes of normal name lookup. A separate binding structure is
2145 created in the requested scope; this governs the normal
2146 visibility of the symbol.
2148 The binding in the externals scope is used exclusively for
2149 detecting duplicate declarations of the same object, no matter
2150 what scope they are in; this is what we do here. (C99 6.2.7p2:
2151 All declarations that refer to the same object or function shall
2152 have compatible type; otherwise, the behavior is undefined.) */
2153 if (DECL_EXTERNAL (x
) || scope
== file_scope
)
2155 tree type
= TREE_TYPE (x
);
2158 bool type_saved
= false;
2159 if (b
&& !B_IN_EXTERNAL_SCOPE (b
)
2160 && (TREE_CODE (b
->decl
) == FUNCTION_DECL
2161 || TREE_CODE (b
->decl
) == VAR_DECL
)
2162 && DECL_FILE_SCOPE_P (b
->decl
))
2165 vistype
= TREE_TYPE (visdecl
);
2167 if (scope
!= file_scope
2168 && !DECL_IN_SYSTEM_HEADER (x
))
2169 warning (OPT_Wnested_externs
, "nested extern declaration of %qD", x
);
2171 while (b
&& !B_IN_EXTERNAL_SCOPE (b
))
2173 /* If this decl might be modified, save its type. This is
2174 done here rather than when the decl is first bound
2175 because the type may change after first binding, through
2176 being completed or through attributes being added. If we
2177 encounter multiple such decls, only the first should have
2178 its type saved; the others will already have had their
2179 proper types saved and the types will not have changed as
2180 their scopes will not have been re-entered. */
2181 if (DECL_P (b
->decl
) && DECL_FILE_SCOPE_P (b
->decl
) && !type_saved
)
2183 b
->type
= TREE_TYPE (b
->decl
);
2186 if (B_IN_FILE_SCOPE (b
)
2187 && TREE_CODE (b
->decl
) == VAR_DECL
2188 && TREE_STATIC (b
->decl
)
2189 && TREE_CODE (TREE_TYPE (b
->decl
)) == ARRAY_TYPE
2190 && !TYPE_DOMAIN (TREE_TYPE (b
->decl
))
2191 && TREE_CODE (type
) == ARRAY_TYPE
2192 && TYPE_DOMAIN (type
)
2193 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
))
2194 && !integer_zerop (TYPE_MAX_VALUE (TYPE_DOMAIN (type
))))
2196 /* Array type completed in inner scope, which should be
2197 diagnosed if the completion does not have size 1 and
2198 it does not get completed in the file scope. */
2199 b
->inner_comp
= true;
2204 /* If a matching external declaration has been found, set its
2205 type to the composite of all the types of that declaration.
2206 After the consistency checks, it will be reset to the
2207 composite of the visible types only. */
2208 if (b
&& (TREE_PUBLIC (x
) || same_translation_unit_p (x
, b
->decl
))
2210 TREE_TYPE (b
->decl
) = b
->type
;
2212 /* The point of the same_translation_unit_p check here is,
2213 we want to detect a duplicate decl for a construct like
2214 foo() { extern bar(); } ... static bar(); but not if
2215 they are in different translation units. In any case,
2216 the static does not go in the externals scope. */
2218 && (TREE_PUBLIC (x
) || same_translation_unit_p (x
, b
->decl
))
2219 && duplicate_decls (x
, b
->decl
))
2224 if (comptypes (vistype
, type
))
2225 thistype
= composite_type (vistype
, type
);
2227 thistype
= TREE_TYPE (b
->decl
);
2231 b
->type
= TREE_TYPE (b
->decl
);
2232 if (TREE_CODE (b
->decl
) == FUNCTION_DECL
&& DECL_BUILT_IN (b
->decl
))
2234 = build_type_attribute_variant (thistype
,
2235 TYPE_ATTRIBUTES (b
->type
));
2236 TREE_TYPE (b
->decl
) = thistype
;
2237 bind (name
, b
->decl
, scope
, /*invisible=*/false, /*nested=*/true);
2240 else if (TREE_PUBLIC (x
))
2242 if (visdecl
&& !b
&& duplicate_decls (x
, visdecl
))
2244 /* An external declaration at block scope referring to a
2245 visible entity with internal linkage. The composite
2246 type will already be correct for this scope, so we
2247 just need to fall through to make the declaration in
2254 bind (name
, x
, external_scope
, /*invisible=*/true,
2261 if (TREE_CODE (x
) != PARM_DECL
)
2262 warn_if_shadowing (x
);
2264 skip_external_and_shadow_checks
:
2265 if (TREE_CODE (x
) == TYPE_DECL
)
2266 clone_underlying_type (x
);
2268 bind (name
, x
, scope
, /*invisible=*/false, nested
);
2270 /* If x's type is incomplete because it's based on a
2271 structure or union which has not yet been fully declared,
2272 attach it to that structure or union type, so we can go
2273 back and complete the variable declaration later, if the
2274 structure or union gets fully declared.
2276 If the input is erroneous, we can have error_mark in the type
2277 slot (e.g. "f(void a, ...)") - that doesn't count as an
2279 if (TREE_TYPE (x
) != error_mark_node
2280 && !COMPLETE_TYPE_P (TREE_TYPE (x
)))
2282 tree element
= TREE_TYPE (x
);
2284 while (TREE_CODE (element
) == ARRAY_TYPE
)
2285 element
= TREE_TYPE (element
);
2286 element
= TYPE_MAIN_VARIANT (element
);
2288 if ((TREE_CODE (element
) == RECORD_TYPE
2289 || TREE_CODE (element
) == UNION_TYPE
)
2290 && (TREE_CODE (x
) != TYPE_DECL
2291 || TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
)
2292 && !COMPLETE_TYPE_P (element
))
2293 C_TYPE_INCOMPLETE_VARS (element
)
2294 = tree_cons (NULL_TREE
, x
, C_TYPE_INCOMPLETE_VARS (element
));
2299 /* Record X as belonging to file scope.
2300 This is used only internally by the Objective-C front end,
2301 and is limited to its needs. duplicate_decls is not called;
2302 if there is any preexisting decl for this identifier, it is an ICE. */
2305 pushdecl_top_level (tree x
)
2308 bool nested
= false;
2309 gcc_assert (TREE_CODE (x
) == VAR_DECL
|| TREE_CODE (x
) == CONST_DECL
);
2311 name
= DECL_NAME (x
);
2313 gcc_assert (TREE_CODE (x
) == CONST_DECL
|| !I_SYMBOL_BINDING (name
));
2315 if (TREE_PUBLIC (x
))
2317 bind (name
, x
, external_scope
, /*invisible=*/true, /*nested=*/false);
2321 bind (name
, x
, file_scope
, /*invisible=*/false, nested
);
2327 implicit_decl_warning (tree id
, tree olddecl
)
2329 if (warn_implicit_function_declaration
)
2334 warned
= pedwarn (input_location
, OPT_Wimplicit_function_declaration
,
2335 "implicit declaration of function %qE", id
);
2337 warned
= warning (OPT_Wimplicit_function_declaration
,
2338 G_("implicit declaration of function %qE"), id
);
2339 if (olddecl
&& warned
)
2340 locate_old_decl (olddecl
);
2344 /* Generate an implicit declaration for identifier FUNCTIONID as a
2345 function of type int (). */
2348 implicitly_declare (tree functionid
)
2350 struct c_binding
*b
;
2354 for (b
= I_SYMBOL_BINDING (functionid
); b
; b
= b
->shadowed
)
2356 if (B_IN_SCOPE (b
, external_scope
))
2365 if (decl
== error_mark_node
)
2368 /* FIXME: Objective-C has weird not-really-builtin functions
2369 which are supposed to be visible automatically. They wind up
2370 in the external scope because they're pushed before the file
2371 scope gets created. Catch this here and rebind them into the
2373 if (!DECL_BUILT_IN (decl
) && DECL_IS_BUILTIN (decl
))
2375 bind (functionid
, decl
, file_scope
,
2376 /*invisible=*/false, /*nested=*/true);
2381 tree newtype
= default_function_type
;
2383 TREE_TYPE (decl
) = b
->type
;
2384 /* Implicit declaration of a function already declared
2385 (somehow) in a different scope, or as a built-in.
2386 If this is the first time this has happened, warn;
2387 then recycle the old declaration but with the new type. */
2388 if (!C_DECL_IMPLICIT (decl
))
2390 implicit_decl_warning (functionid
, decl
);
2391 C_DECL_IMPLICIT (decl
) = 1;
2393 if (DECL_BUILT_IN (decl
))
2395 newtype
= build_type_attribute_variant (newtype
,
2397 (TREE_TYPE (decl
)));
2398 if (!comptypes (newtype
, TREE_TYPE (decl
)))
2400 warning (0, "incompatible implicit declaration of built-in"
2401 " function %qD", decl
);
2402 newtype
= TREE_TYPE (decl
);
2407 if (!comptypes (newtype
, TREE_TYPE (decl
)))
2409 error ("incompatible implicit declaration of function %qD",
2411 locate_old_decl (decl
);
2414 b
->type
= TREE_TYPE (decl
);
2415 TREE_TYPE (decl
) = newtype
;
2416 bind (functionid
, decl
, current_scope
,
2417 /*invisible=*/false, /*nested=*/true);
2422 /* Not seen before. */
2423 decl
= build_decl (FUNCTION_DECL
, functionid
, default_function_type
);
2424 DECL_EXTERNAL (decl
) = 1;
2425 TREE_PUBLIC (decl
) = 1;
2426 C_DECL_IMPLICIT (decl
) = 1;
2427 implicit_decl_warning (functionid
, 0);
2428 asmspec_tree
= maybe_apply_renaming_pragma (decl
, /*asmname=*/NULL
);
2430 set_user_assembler_name (decl
, TREE_STRING_POINTER (asmspec_tree
));
2432 /* C89 says implicit declarations are in the innermost block.
2433 So we record the decl in the standard fashion. */
2434 decl
= pushdecl (decl
);
2436 /* No need to call objc_check_decl here - it's a function type. */
2437 rest_of_decl_compilation (decl
, 0, 0);
2439 /* Write a record describing this implicit function declaration
2440 to the prototypes file (if requested). */
2441 gen_aux_info_record (decl
, 0, 1, 0);
2443 /* Possibly apply some default attributes to this implicit declaration. */
2444 decl_attributes (&decl
, NULL_TREE
, 0);
2449 /* Issue an error message for a reference to an undeclared variable
2450 ID, including a reference to a builtin outside of function-call
2451 context. Establish a binding of the identifier to error_mark_node
2452 in an appropriate scope, which will suppress further errors for the
2453 same identifier. The error message should be given location LOC. */
2455 undeclared_variable (tree id
, location_t loc
)
2457 static bool already
= false;
2458 struct c_scope
*scope
;
2460 if (current_function_decl
== 0)
2462 error ("%H%qE undeclared here (not in a function)", &loc
, id
);
2463 scope
= current_scope
;
2467 error ("%H%qE undeclared (first use in this function)", &loc
, id
);
2471 error ("%H(Each undeclared identifier is reported only once", &loc
);
2472 error ("%Hfor each function it appears in.)", &loc
);
2476 /* If we are parsing old-style parameter decls, current_function_decl
2477 will be nonnull but current_function_scope will be null. */
2478 scope
= current_function_scope
? current_function_scope
: current_scope
;
2480 bind (id
, error_mark_node
, scope
, /*invisible=*/false, /*nested=*/false);
2483 /* Subroutine of lookup_label, declare_label, define_label: construct a
2484 LABEL_DECL with all the proper frills. */
2487 make_label (tree name
, location_t location
)
2489 tree label
= build_decl (LABEL_DECL
, name
, void_type_node
);
2491 DECL_CONTEXT (label
) = current_function_decl
;
2492 DECL_MODE (label
) = VOIDmode
;
2493 DECL_SOURCE_LOCATION (label
) = location
;
2498 /* Get the LABEL_DECL corresponding to identifier NAME as a label.
2499 Create one if none exists so far for the current function.
2500 This is called when a label is used in a goto expression or
2501 has its address taken. */
2504 lookup_label (tree name
)
2508 if (current_function_decl
== 0)
2510 error ("label %qE referenced outside of any function", name
);
2514 /* Use a label already defined or ref'd with this name, but not if
2515 it is inherited from a containing function and wasn't declared
2517 label
= I_LABEL_DECL (name
);
2518 if (label
&& (DECL_CONTEXT (label
) == current_function_decl
2519 || C_DECLARED_LABEL_FLAG (label
)))
2521 /* If the label has only been declared, update its apparent
2522 location to point here, for better diagnostics if it
2523 turns out not to have been defined. */
2524 if (!TREE_USED (label
))
2525 DECL_SOURCE_LOCATION (label
) = input_location
;
2529 /* No label binding for that identifier; make one. */
2530 label
= make_label (name
, input_location
);
2532 /* Ordinary labels go in the current function scope. */
2533 bind (name
, label
, current_function_scope
,
2534 /*invisible=*/false, /*nested=*/false);
2538 /* Make a label named NAME in the current function, shadowing silently
2539 any that may be inherited from containing functions or containing
2540 scopes. This is called for __label__ declarations. */
2543 declare_label (tree name
)
2545 struct c_binding
*b
= I_LABEL_BINDING (name
);
2548 /* Check to make sure that the label hasn't already been declared
2550 if (b
&& B_IN_CURRENT_SCOPE (b
))
2552 error ("duplicate label declaration %qE", name
);
2553 locate_old_decl (b
->decl
);
2555 /* Just use the previous declaration. */
2559 label
= make_label (name
, input_location
);
2560 C_DECLARED_LABEL_FLAG (label
) = 1;
2562 /* Declared labels go in the current scope. */
2563 bind (name
, label
, current_scope
,
2564 /*invisible=*/false, /*nested=*/false);
2568 /* Define a label, specifying the location in the source file.
2569 Return the LABEL_DECL node for the label, if the definition is valid.
2570 Otherwise return 0. */
2573 define_label (location_t location
, tree name
)
2575 /* Find any preexisting label with this name. It is an error
2576 if that label has already been defined in this function, or
2577 if there is a containing function with a declared label with
2579 tree label
= I_LABEL_DECL (name
);
2580 struct c_label_list
*nlist_se
, *nlist_vm
;
2583 && ((DECL_CONTEXT (label
) == current_function_decl
2584 && DECL_INITIAL (label
) != 0)
2585 || (DECL_CONTEXT (label
) != current_function_decl
2586 && C_DECLARED_LABEL_FLAG (label
))))
2588 error ("%Hduplicate label %qD", &location
, label
);
2589 locate_old_decl (label
);
2592 else if (label
&& DECL_CONTEXT (label
) == current_function_decl
)
2594 /* The label has been used or declared already in this function,
2595 but not defined. Update its location to point to this
2597 if (C_DECL_UNDEFINABLE_STMT_EXPR (label
))
2598 error ("%Jjump into statement expression", label
);
2599 if (C_DECL_UNDEFINABLE_VM (label
))
2600 error ("%Jjump into scope of identifier with variably modified type",
2602 DECL_SOURCE_LOCATION (label
) = location
;
2606 /* No label binding for that identifier; make one. */
2607 label
= make_label (name
, location
);
2609 /* Ordinary labels go in the current function scope. */
2610 bind (name
, label
, current_function_scope
,
2611 /*invisible=*/false, /*nested=*/false);
2614 if (!in_system_header
&& lookup_name (name
))
2615 warning (OPT_Wtraditional
, "%Htraditional C lacks a separate namespace "
2616 "for labels, identifier %qE conflicts", &location
, name
);
2618 nlist_se
= XOBNEW (&parser_obstack
, struct c_label_list
);
2619 nlist_se
->next
= label_context_stack_se
->labels_def
;
2620 nlist_se
->label
= label
;
2621 label_context_stack_se
->labels_def
= nlist_se
;
2623 nlist_vm
= XOBNEW (&parser_obstack
, struct c_label_list
);
2624 nlist_vm
->next
= label_context_stack_vm
->labels_def
;
2625 nlist_vm
->label
= label
;
2626 label_context_stack_vm
->labels_def
= nlist_vm
;
2628 /* Mark label as having been defined. */
2629 DECL_INITIAL (label
) = error_mark_node
;
2633 /* Given NAME, an IDENTIFIER_NODE,
2634 return the structure (or union or enum) definition for that name.
2635 If THISLEVEL_ONLY is nonzero, searches only the current_scope.
2636 CODE says which kind of type the caller wants;
2637 it is RECORD_TYPE or UNION_TYPE or ENUMERAL_TYPE.
2638 If the wrong kind of type is found, an error is reported. */
2641 lookup_tag (enum tree_code code
, tree name
, int thislevel_only
)
2643 struct c_binding
*b
= I_TAG_BINDING (name
);
2649 /* We only care about whether it's in this level if
2650 thislevel_only was set or it might be a type clash. */
2651 if (thislevel_only
|| TREE_CODE (b
->decl
) != code
)
2653 /* For our purposes, a tag in the external scope is the same as
2654 a tag in the file scope. (Primarily relevant to Objective-C
2655 and its builtin structure tags, which get pushed before the
2656 file scope is created.) */
2657 if (B_IN_CURRENT_SCOPE (b
)
2658 || (current_scope
== file_scope
&& B_IN_EXTERNAL_SCOPE (b
)))
2662 if (thislevel_only
&& !thislevel
)
2665 if (TREE_CODE (b
->decl
) != code
)
2667 /* Definition isn't the kind we were looking for. */
2668 pending_invalid_xref
= name
;
2669 pending_invalid_xref_location
= input_location
;
2671 /* If in the same binding level as a declaration as a tag
2672 of a different type, this must not be allowed to
2673 shadow that tag, so give the error immediately.
2674 (For example, "struct foo; union foo;" is invalid.) */
2676 pending_xref_error ();
2681 /* Print an error message now
2682 for a recent invalid struct, union or enum cross reference.
2683 We don't print them immediately because they are not invalid
2684 when used in the `struct foo;' construct for shadowing. */
2687 pending_xref_error (void)
2689 if (pending_invalid_xref
!= 0)
2690 error ("%H%qE defined as wrong kind of tag",
2691 &pending_invalid_xref_location
, pending_invalid_xref
);
2692 pending_invalid_xref
= 0;
2696 /* Look up NAME in the current scope and its superiors
2697 in the namespace of variables, functions and typedefs.
2698 Return a ..._DECL node of some kind representing its definition,
2699 or return 0 if it is undefined. */
2702 lookup_name (tree name
)
2704 struct c_binding
*b
= I_SYMBOL_BINDING (name
);
2705 if (b
&& !b
->invisible
)
2710 /* Similar to `lookup_name' but look only at the indicated scope. */
2713 lookup_name_in_scope (tree name
, struct c_scope
*scope
)
2715 struct c_binding
*b
;
2717 for (b
= I_SYMBOL_BINDING (name
); b
; b
= b
->shadowed
)
2718 if (B_IN_SCOPE (b
, scope
))
2723 /* Create the predefined scalar types of C,
2724 and some nodes representing standard constants (0, 1, (void *) 0).
2725 Initialize the global scope.
2726 Make definitions for built-in primitive functions. */
2729 c_init_decl_processing (void)
2731 location_t save_loc
= input_location
;
2733 /* Initialize reserved words for parser. */
2736 current_function_decl
= 0;
2738 gcc_obstack_init (&parser_obstack
);
2740 /* Make the externals scope. */
2742 external_scope
= current_scope
;
2744 /* Declarations from c_common_nodes_and_builtins must not be associated
2745 with this input file, lest we get differences between using and not
2746 using preprocessed headers. */
2747 input_location
= BUILTINS_LOCATION
;
2749 build_common_tree_nodes (flag_signed_char
, false);
2751 c_common_nodes_and_builtins ();
2753 /* In C, comparisons and TRUTH_* expressions have type int. */
2754 truthvalue_type_node
= integer_type_node
;
2755 truthvalue_true_node
= integer_one_node
;
2756 truthvalue_false_node
= integer_zero_node
;
2758 /* Even in C99, which has a real boolean type. */
2759 pushdecl (build_decl (TYPE_DECL
, get_identifier ("_Bool"),
2760 boolean_type_node
));
2762 input_location
= save_loc
;
2764 pedantic_lvalues
= true;
2766 make_fname_decl
= c_make_fname_decl
;
2767 start_fname_decls ();
2770 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give the
2771 decl, NAME is the initialization string and TYPE_DEP indicates whether
2772 NAME depended on the type of the function. As we don't yet implement
2773 delayed emission of static data, we mark the decl as emitted
2774 so it is not placed in the output. Anything using it must therefore pull
2775 out the STRING_CST initializer directly. FIXME. */
2778 c_make_fname_decl (tree id
, int type_dep
)
2780 const char *name
= fname_as_string (type_dep
);
2781 tree decl
, type
, init
;
2782 size_t length
= strlen (name
);
2784 type
= build_array_type (char_type_node
,
2785 build_index_type (size_int (length
)));
2786 type
= c_build_qualified_type (type
, TYPE_QUAL_CONST
);
2788 decl
= build_decl (VAR_DECL
, id
, type
);
2790 TREE_STATIC (decl
) = 1;
2791 TREE_READONLY (decl
) = 1;
2792 DECL_ARTIFICIAL (decl
) = 1;
2794 init
= build_string (length
+ 1, name
);
2795 free (CONST_CAST (char *, name
));
2796 TREE_TYPE (init
) = type
;
2797 DECL_INITIAL (decl
) = init
;
2799 TREE_USED (decl
) = 1;
2801 if (current_function_decl
2802 /* For invalid programs like this:
2805 const char* p = __FUNCTION__;
2807 the __FUNCTION__ is believed to appear in K&R style function
2808 parameter declarator. In that case we still don't have
2810 && (!errorcount
|| current_function_scope
))
2812 DECL_CONTEXT (decl
) = current_function_decl
;
2813 bind (id
, decl
, current_function_scope
,
2814 /*invisible=*/false, /*nested=*/false);
2817 finish_decl (decl
, init
, NULL_TREE
);
2823 c_builtin_function (tree decl
)
2825 tree type
= TREE_TYPE (decl
);
2826 tree id
= DECL_NAME (decl
);
2828 const char *name
= IDENTIFIER_POINTER (id
);
2829 C_DECL_BUILTIN_PROTOTYPE (decl
) = (TYPE_ARG_TYPES (type
) != 0);
2831 /* Should never be called on a symbol with a preexisting meaning. */
2832 gcc_assert (!I_SYMBOL_BINDING (id
));
2834 bind (id
, decl
, external_scope
, /*invisible=*/true, /*nested=*/false);
2836 /* Builtins in the implementation namespace are made visible without
2837 needing to be explicitly declared. See push_file_scope. */
2838 if (name
[0] == '_' && (name
[1] == '_' || ISUPPER (name
[1])))
2840 TREE_CHAIN (decl
) = visible_builtins
;
2841 visible_builtins
= decl
;
2847 /* Called when a declaration is seen that contains no names to declare.
2848 If its type is a reference to a structure, union or enum inherited
2849 from a containing scope, shadow that tag name for the current scope
2850 with a forward reference.
2851 If its type defines a new named structure or union
2852 or defines an enum, it is valid but we need not do anything here.
2853 Otherwise, it is an error. */
2856 shadow_tag (const struct c_declspecs
*declspecs
)
2858 shadow_tag_warned (declspecs
, 0);
2861 /* WARNED is 1 if we have done a pedwarn, 2 if we have done a warning,
2864 shadow_tag_warned (const struct c_declspecs
*declspecs
, int warned
)
2866 bool found_tag
= false;
2868 if (declspecs
->type
&& !declspecs
->default_int_p
&& !declspecs
->typedef_p
)
2870 tree value
= declspecs
->type
;
2871 enum tree_code code
= TREE_CODE (value
);
2873 if (code
== RECORD_TYPE
|| code
== UNION_TYPE
|| code
== ENUMERAL_TYPE
)
2874 /* Used to test also that TYPE_SIZE (value) != 0.
2875 That caused warning for `struct foo;' at top level in the file. */
2877 tree name
= TYPE_NAME (value
);
2884 if (warned
!= 1 && code
!= ENUMERAL_TYPE
)
2885 /* Empty unnamed enum OK */
2887 pedwarn (input_location
, 0,
2888 "unnamed struct/union that defines no instances");
2892 else if (!declspecs
->tag_defined_p
2893 && declspecs
->storage_class
!= csc_none
)
2896 pedwarn (input_location
, 0,
2897 "empty declaration with storage class specifier "
2898 "does not redeclare tag");
2900 pending_xref_error ();
2902 else if (!declspecs
->tag_defined_p
2903 && (declspecs
->const_p
2904 || declspecs
->volatile_p
2905 || declspecs
->restrict_p
))
2908 pedwarn (input_location
, 0,
2909 "empty declaration with type qualifier "
2910 "does not redeclare tag");
2912 pending_xref_error ();
2916 pending_invalid_xref
= 0;
2917 t
= lookup_tag (code
, name
, 1);
2921 t
= make_node (code
);
2928 if (warned
!= 1 && !in_system_header
)
2930 pedwarn (input_location
, 0,
2931 "useless type name in empty declaration");
2936 else if (warned
!= 1 && !in_system_header
&& declspecs
->typedef_p
)
2938 pedwarn (input_location
, 0, "useless type name in empty declaration");
2942 pending_invalid_xref
= 0;
2944 if (declspecs
->inline_p
)
2946 error ("%<inline%> in empty declaration");
2950 if (current_scope
== file_scope
&& declspecs
->storage_class
== csc_auto
)
2952 error ("%<auto%> in file-scope empty declaration");
2956 if (current_scope
== file_scope
&& declspecs
->storage_class
== csc_register
)
2958 error ("%<register%> in file-scope empty declaration");
2962 if (!warned
&& !in_system_header
&& declspecs
->storage_class
!= csc_none
)
2964 warning (0, "useless storage class specifier in empty declaration");
2968 if (!warned
&& !in_system_header
&& declspecs
->thread_p
)
2970 warning (0, "useless %<__thread%> in empty declaration");
2974 if (!warned
&& !in_system_header
&& (declspecs
->const_p
2975 || declspecs
->volatile_p
2976 || declspecs
->restrict_p
))
2978 warning (0, "useless type qualifier in empty declaration");
2985 pedwarn (input_location
, 0, "empty declaration");
2990 /* Return the qualifiers from SPECS as a bitwise OR of TYPE_QUAL_*
2991 bits. SPECS represents declaration specifiers that the grammar
2992 only permits to contain type qualifiers and attributes. */
2995 quals_from_declspecs (const struct c_declspecs
*specs
)
2997 int quals
= ((specs
->const_p
? TYPE_QUAL_CONST
: 0)
2998 | (specs
->volatile_p
? TYPE_QUAL_VOLATILE
: 0)
2999 | (specs
->restrict_p
? TYPE_QUAL_RESTRICT
: 0));
3000 gcc_assert (!specs
->type
3001 && !specs
->decl_attr
3002 && specs
->typespec_word
== cts_none
3003 && specs
->storage_class
== csc_none
3004 && !specs
->typedef_p
3005 && !specs
->explicit_signed_p
3006 && !specs
->deprecated_p
3008 && !specs
->long_long_p
3011 && !specs
->unsigned_p
3012 && !specs
->complex_p
3014 && !specs
->thread_p
);
3018 /* Construct an array declarator. EXPR is the expression inside [],
3019 or NULL_TREE. QUALS are the type qualifiers inside the [] (to be
3020 applied to the pointer to which a parameter array is converted).
3021 STATIC_P is true if "static" is inside the [], false otherwise.
3022 VLA_UNSPEC_P is true if the array is [*], a VLA of unspecified
3023 length which is nevertheless a complete type, false otherwise. The
3024 field for the contained declarator is left to be filled in by
3025 set_array_declarator_inner. */
3027 struct c_declarator
*
3028 build_array_declarator (tree expr
, struct c_declspecs
*quals
, bool static_p
,
3031 struct c_declarator
*declarator
= XOBNEW (&parser_obstack
,
3032 struct c_declarator
);
3033 declarator
->kind
= cdk_array
;
3034 declarator
->declarator
= 0;
3035 declarator
->u
.array
.dimen
= expr
;
3038 declarator
->u
.array
.attrs
= quals
->attrs
;
3039 declarator
->u
.array
.quals
= quals_from_declspecs (quals
);
3043 declarator
->u
.array
.attrs
= NULL_TREE
;
3044 declarator
->u
.array
.quals
= 0;
3046 declarator
->u
.array
.static_p
= static_p
;
3047 declarator
->u
.array
.vla_unspec_p
= vla_unspec_p
;
3050 if (static_p
|| quals
!= NULL
)
3051 pedwarn (input_location
, OPT_pedantic
,
3052 "ISO C90 does not support %<static%> or type "
3053 "qualifiers in parameter array declarators");
3055 pedwarn (input_location
, OPT_pedantic
,
3056 "ISO C90 does not support %<[*]%> array declarators");
3060 if (!current_scope
->parm_flag
)
3063 error ("%<[*]%> not allowed in other than function prototype scope");
3064 declarator
->u
.array
.vla_unspec_p
= false;
3067 current_scope
->had_vla_unspec
= true;
3072 /* Set the contained declarator of an array declarator. DECL is the
3073 declarator, as constructed by build_array_declarator; INNER is what
3074 appears on the left of the []. */
3076 struct c_declarator
*
3077 set_array_declarator_inner (struct c_declarator
*decl
,
3078 struct c_declarator
*inner
)
3080 decl
->declarator
= inner
;
3084 /* INIT is a constructor that forms DECL's initializer. If the final
3085 element initializes a flexible array field, add the size of that
3086 initializer to DECL's size. */
3089 add_flexible_array_elts_to_size (tree decl
, tree init
)
3093 if (VEC_empty (constructor_elt
, CONSTRUCTOR_ELTS (init
)))
3096 elt
= VEC_last (constructor_elt
, CONSTRUCTOR_ELTS (init
))->value
;
3097 type
= TREE_TYPE (elt
);
3098 if (TREE_CODE (type
) == ARRAY_TYPE
3099 && TYPE_SIZE (type
) == NULL_TREE
3100 && TYPE_DOMAIN (type
) != NULL_TREE
3101 && TYPE_MAX_VALUE (TYPE_DOMAIN (type
)) == NULL_TREE
)
3103 complete_array_type (&type
, elt
, false);
3105 = size_binop (PLUS_EXPR
, DECL_SIZE (decl
), TYPE_SIZE (type
));
3106 DECL_SIZE_UNIT (decl
)
3107 = size_binop (PLUS_EXPR
, DECL_SIZE_UNIT (decl
), TYPE_SIZE_UNIT (type
));
3111 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
3114 groktypename (struct c_type_name
*type_name
)
3117 tree attrs
= type_name
->specs
->attrs
;
3119 type_name
->specs
->attrs
= NULL_TREE
;
3121 type
= grokdeclarator (type_name
->declarator
, type_name
->specs
, TYPENAME
,
3122 false, NULL
, &attrs
, DEPRECATED_NORMAL
);
3124 /* Apply attributes. */
3125 decl_attributes (&type
, attrs
, 0);
3130 /* Decode a declarator in an ordinary declaration or data definition.
3131 This is called as soon as the type information and variable name
3132 have been parsed, before parsing the initializer if any.
3133 Here we create the ..._DECL node, fill in its type,
3134 and put it on the list of decls for the current context.
3135 The ..._DECL node is returned as the value.
3137 Exception: for arrays where the length is not specified,
3138 the type is left null, to be filled in by `finish_decl'.
3140 Function definitions do not come here; they go to start_function
3141 instead. However, external and forward declarations of functions
3142 do go through here. Structure field declarations are done by
3143 grokfield and not through here. */
3146 start_decl (struct c_declarator
*declarator
, struct c_declspecs
*declspecs
,
3147 bool initialized
, tree attributes
)
3151 enum deprecated_states deprecated_state
= DEPRECATED_NORMAL
;
3153 /* An object declared as __attribute__((deprecated)) suppresses
3154 warnings of uses of other deprecated items. */
3155 if (lookup_attribute ("deprecated", attributes
))
3156 deprecated_state
= DEPRECATED_SUPPRESS
;
3158 decl
= grokdeclarator (declarator
, declspecs
,
3159 NORMAL
, initialized
, NULL
, &attributes
,
3164 if (TREE_CODE (decl
) != FUNCTION_DECL
&& MAIN_NAME_P (DECL_NAME (decl
)))
3165 warning (OPT_Wmain
, "%q+D is usually a function", decl
);
3168 /* Is it valid for this decl to have an initializer at all?
3169 If not, set INITIALIZED to zero, which will indirectly
3170 tell 'finish_decl' to ignore the initializer once it is parsed. */
3171 switch (TREE_CODE (decl
))
3174 error ("typedef %qD is initialized (use __typeof__ instead)", decl
);
3179 error ("function %qD is initialized like a variable", decl
);
3184 /* DECL_INITIAL in a PARM_DECL is really DECL_ARG_TYPE. */
3185 error ("parameter %qD is initialized", decl
);
3190 /* Don't allow initializations for incomplete types except for
3191 arrays which might be completed by the initialization. */
3193 /* This can happen if the array size is an undefined macro.
3194 We already gave a warning, so we don't need another one. */
3195 if (TREE_TYPE (decl
) == error_mark_node
)
3197 else if (COMPLETE_TYPE_P (TREE_TYPE (decl
)))
3199 /* A complete type is ok if size is fixed. */
3201 if (TREE_CODE (TYPE_SIZE (TREE_TYPE (decl
))) != INTEGER_CST
3202 || C_DECL_VARIABLE_SIZE (decl
))
3204 error ("variable-sized object may not be initialized");
3208 else if (TREE_CODE (TREE_TYPE (decl
)) != ARRAY_TYPE
)
3210 error ("variable %qD has initializer but incomplete type", decl
);
3213 else if (C_DECL_VARIABLE_SIZE (decl
))
3215 /* Although C99 is unclear about whether incomplete arrays
3216 of VLAs themselves count as VLAs, it does not make
3217 sense to permit them to be initialized given that
3218 ordinary VLAs may not be initialized. */
3219 error ("variable-sized object may not be initialized");
3226 if (current_scope
== file_scope
)
3227 TREE_STATIC (decl
) = 1;
3229 /* Tell 'pushdecl' this is an initialized decl
3230 even though we don't yet have the initializer expression.
3231 Also tell 'finish_decl' it may store the real initializer. */
3232 DECL_INITIAL (decl
) = error_mark_node
;
3235 /* If this is a function declaration, write a record describing it to the
3236 prototypes file (if requested). */
3238 if (TREE_CODE (decl
) == FUNCTION_DECL
)
3239 gen_aux_info_record (decl
, 0, 0, TYPE_ARG_TYPES (TREE_TYPE (decl
)) != 0);
3241 /* ANSI specifies that a tentative definition which is not merged with
3242 a non-tentative definition behaves exactly like a definition with an
3243 initializer equal to zero. (Section 3.7.2)
3245 -fno-common gives strict ANSI behavior, though this tends to break
3246 a large body of code that grew up without this rule.
3248 Thread-local variables are never common, since there's no entrenched
3249 body of code to break, and it allows more efficient variable references
3250 in the presence of dynamic linking. */
3252 if (TREE_CODE (decl
) == VAR_DECL
3254 && TREE_PUBLIC (decl
)
3255 && !DECL_THREAD_LOCAL_P (decl
)
3257 DECL_COMMON (decl
) = 1;
3259 /* Set attributes here so if duplicate decl, will have proper attributes. */
3260 decl_attributes (&decl
, attributes
, 0);
3262 /* Handle gnu_inline attribute. */
3263 if (declspecs
->inline_p
3264 && !flag_gnu89_inline
3265 && TREE_CODE (decl
) == FUNCTION_DECL
3266 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl
))
3267 || current_function_decl
))
3269 if (declspecs
->storage_class
== csc_auto
&& current_scope
!= file_scope
)
3271 else if (declspecs
->storage_class
!= csc_static
)
3272 DECL_EXTERNAL (decl
) = !DECL_EXTERNAL (decl
);
3275 if (TREE_CODE (decl
) == FUNCTION_DECL
3276 && targetm
.calls
.promote_prototypes (TREE_TYPE (decl
)))
3278 struct c_declarator
*ce
= declarator
;
3280 if (ce
->kind
== cdk_pointer
)
3281 ce
= declarator
->declarator
;
3282 if (ce
->kind
== cdk_function
)
3284 tree args
= ce
->u
.arg_info
->parms
;
3285 for (; args
; args
= TREE_CHAIN (args
))
3287 tree type
= TREE_TYPE (args
);
3288 if (type
&& INTEGRAL_TYPE_P (type
)
3289 && TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
))
3290 DECL_ARG_TYPE (args
) = integer_type_node
;
3295 if (TREE_CODE (decl
) == FUNCTION_DECL
3296 && DECL_DECLARED_INLINE_P (decl
)
3297 && DECL_UNINLINABLE (decl
)
3298 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl
)))
3299 warning (OPT_Wattributes
, "inline function %q+D given attribute noinline",
3302 /* C99 6.7.4p3: An inline definition of a function with external
3303 linkage shall not contain a definition of a modifiable object
3304 with static storage duration... */
3305 if (TREE_CODE (decl
) == VAR_DECL
3306 && current_scope
!= file_scope
3307 && TREE_STATIC (decl
)
3308 && !TREE_READONLY (decl
)
3309 && DECL_DECLARED_INLINE_P (current_function_decl
)
3310 && DECL_EXTERNAL (current_function_decl
))
3311 pedwarn (input_location
, 0,
3312 "%q+D is static but declared in inline function %qD "
3313 "which is not static", decl
, current_function_decl
);
3315 /* Add this decl to the current scope.
3316 TEM may equal DECL or it may be a previous decl of the same name. */
3317 tem
= pushdecl (decl
);
3319 if (initialized
&& DECL_EXTERNAL (tem
))
3321 DECL_EXTERNAL (tem
) = 0;
3322 TREE_STATIC (tem
) = 1;
3328 /* Initialize EH if not initialized yet and exceptions are enabled. */
3331 c_maybe_initialize_eh (void)
3333 if (!flag_exceptions
|| c_eh_initialized_p
)
3336 c_eh_initialized_p
= true;
3337 eh_personality_libfunc
3338 = init_one_libfunc (USING_SJLJ_EXCEPTIONS
3339 ? "__gcc_personality_sj0"
3340 : "__gcc_personality_v0");
3341 default_init_unwind_resume_libfunc ();
3342 using_eh_for_cleanups ();
3345 /* Finish processing of a declaration;
3346 install its initial value.
3347 If the length of an array type is not known before,
3348 it must be determined now, from the initial value, or it is an error. */
3351 finish_decl (tree decl
, tree init
, tree asmspec_tree
)
3354 int was_incomplete
= (DECL_SIZE (decl
) == 0);
3355 const char *asmspec
= 0;
3357 /* If a name was specified, get the string. */
3358 if ((TREE_CODE (decl
) == FUNCTION_DECL
|| TREE_CODE (decl
) == VAR_DECL
)
3359 && DECL_FILE_SCOPE_P (decl
))
3360 asmspec_tree
= maybe_apply_renaming_pragma (decl
, asmspec_tree
);
3362 asmspec
= TREE_STRING_POINTER (asmspec_tree
);
3364 /* If `start_decl' didn't like having an initialization, ignore it now. */
3365 if (init
!= 0 && DECL_INITIAL (decl
) == 0)
3368 /* Don't crash if parm is initialized. */
3369 if (TREE_CODE (decl
) == PARM_DECL
)
3373 store_init_value (decl
, init
);
3375 if (c_dialect_objc () && (TREE_CODE (decl
) == VAR_DECL
3376 || TREE_CODE (decl
) == FUNCTION_DECL
3377 || TREE_CODE (decl
) == FIELD_DECL
))
3378 objc_check_decl (decl
);
3380 type
= TREE_TYPE (decl
);
3382 /* Deduce size of array from initialization, if not already known. */
3383 if (TREE_CODE (type
) == ARRAY_TYPE
3384 && TYPE_DOMAIN (type
) == 0
3385 && TREE_CODE (decl
) != TYPE_DECL
)
3388 = (TREE_STATIC (decl
)
3389 /* Even if pedantic, an external linkage array
3390 may have incomplete type at first. */
3391 ? pedantic
&& !TREE_PUBLIC (decl
)
3392 : !DECL_EXTERNAL (decl
));
3394 = complete_array_type (&TREE_TYPE (decl
), DECL_INITIAL (decl
),
3397 /* Get the completed type made by complete_array_type. */
3398 type
= TREE_TYPE (decl
);
3403 error ("initializer fails to determine size of %q+D", decl
);
3408 error ("array size missing in %q+D", decl
);
3409 /* If a `static' var's size isn't known,
3410 make it extern as well as static, so it does not get
3412 If it is not `static', then do not mark extern;
3413 finish_incomplete_decl will give it a default size
3414 and it will get allocated. */
3415 else if (!pedantic
&& TREE_STATIC (decl
) && !TREE_PUBLIC (decl
))
3416 DECL_EXTERNAL (decl
) = 1;
3420 error ("zero or negative size array %q+D", decl
);
3424 /* For global variables, update the copy of the type that
3425 exists in the binding. */
3426 if (TREE_PUBLIC (decl
))
3428 struct c_binding
*b_ext
= I_SYMBOL_BINDING (DECL_NAME (decl
));
3429 while (b_ext
&& !B_IN_EXTERNAL_SCOPE (b_ext
))
3430 b_ext
= b_ext
->shadowed
;
3434 b_ext
->type
= composite_type (b_ext
->type
, type
);
3445 if (DECL_INITIAL (decl
))
3446 TREE_TYPE (DECL_INITIAL (decl
)) = type
;
3448 layout_decl (decl
, 0);
3451 if (TREE_CODE (decl
) == VAR_DECL
)
3453 if (init
&& TREE_CODE (init
) == CONSTRUCTOR
)
3454 add_flexible_array_elts_to_size (decl
, init
);
3456 if (DECL_SIZE (decl
) == 0 && TREE_TYPE (decl
) != error_mark_node
3457 && COMPLETE_TYPE_P (TREE_TYPE (decl
)))
3458 layout_decl (decl
, 0);
3460 if (DECL_SIZE (decl
) == 0
3461 /* Don't give an error if we already gave one earlier. */
3462 && TREE_TYPE (decl
) != error_mark_node
3463 && (TREE_STATIC (decl
)
3464 /* A static variable with an incomplete type
3465 is an error if it is initialized.
3466 Also if it is not file scope.
3467 Otherwise, let it through, but if it is not `extern'
3468 then it may cause an error message later. */
3469 ? (DECL_INITIAL (decl
) != 0
3470 || !DECL_FILE_SCOPE_P (decl
))
3471 /* An automatic variable with an incomplete type
3473 : !DECL_EXTERNAL (decl
)))
3475 error ("storage size of %q+D isn%'t known", decl
);
3476 TREE_TYPE (decl
) = error_mark_node
;
3479 if ((DECL_EXTERNAL (decl
) || TREE_STATIC (decl
))
3480 && DECL_SIZE (decl
) != 0)
3482 if (TREE_CODE (DECL_SIZE (decl
)) == INTEGER_CST
)
3483 constant_expression_warning (DECL_SIZE (decl
));
3486 error ("storage size of %q+D isn%'t constant", decl
);
3487 TREE_TYPE (decl
) = error_mark_node
;
3491 if (TREE_USED (type
))
3492 TREE_USED (decl
) = 1;
3495 /* If this is a function and an assembler name is specified, reset DECL_RTL
3496 so we can give it its new name. Also, update built_in_decls if it
3497 was a normal built-in. */
3498 if (TREE_CODE (decl
) == FUNCTION_DECL
&& asmspec
)
3500 if (DECL_BUILT_IN_CLASS (decl
) == BUILT_IN_NORMAL
)
3501 set_builtin_user_assembler_name (decl
, asmspec
);
3502 set_user_assembler_name (decl
, asmspec
);
3505 /* If #pragma weak was used, mark the decl weak now. */
3506 maybe_apply_pragma_weak (decl
);
3508 /* Output the assembler code and/or RTL code for variables and functions,
3509 unless the type is an undefined structure or union.
3510 If not, it will get done when the type is completed. */
3512 if (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == FUNCTION_DECL
)
3514 /* Determine the ELF visibility. */
3515 if (TREE_PUBLIC (decl
))
3516 c_determine_visibility (decl
);
3518 /* This is a no-op in c-lang.c or something real in objc-act.c. */
3519 if (c_dialect_objc ())
3520 objc_check_decl (decl
);
3524 /* If this is not a static variable, issue a warning.
3525 It doesn't make any sense to give an ASMSPEC for an
3526 ordinary, non-register local variable. Historically,
3527 GCC has accepted -- but ignored -- the ASMSPEC in
3529 if (!DECL_FILE_SCOPE_P (decl
)
3530 && TREE_CODE (decl
) == VAR_DECL
3531 && !C_DECL_REGISTER (decl
)
3532 && !TREE_STATIC (decl
))
3533 warning (0, "ignoring asm-specifier for non-static local "
3534 "variable %q+D", decl
);
3536 set_user_assembler_name (decl
, asmspec
);
3539 if (DECL_FILE_SCOPE_P (decl
))
3541 if (DECL_INITIAL (decl
) == NULL_TREE
3542 || DECL_INITIAL (decl
) == error_mark_node
)
3543 /* Don't output anything
3544 when a tentative file-scope definition is seen.
3545 But at end of compilation, do output code for them. */
3546 DECL_DEFER_OUTPUT (decl
) = 1;
3547 rest_of_decl_compilation (decl
, true, 0);
3551 /* In conjunction with an ASMSPEC, the `register'
3552 keyword indicates that we should place the variable
3553 in a particular register. */
3554 if (asmspec
&& C_DECL_REGISTER (decl
))
3556 DECL_HARD_REGISTER (decl
) = 1;
3557 /* This cannot be done for a structure with volatile
3558 fields, on which DECL_REGISTER will have been
3560 if (!DECL_REGISTER (decl
))
3561 error ("cannot put object with volatile field into register");
3564 if (TREE_CODE (decl
) != FUNCTION_DECL
)
3566 /* If we're building a variable sized type, and we might be
3567 reachable other than via the top of the current binding
3568 level, then create a new BIND_EXPR so that we deallocate
3569 the object at the right time. */
3570 /* Note that DECL_SIZE can be null due to errors. */
3571 if (DECL_SIZE (decl
)
3572 && !TREE_CONSTANT (DECL_SIZE (decl
))
3573 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list
))
3576 bind
= build3 (BIND_EXPR
, void_type_node
, NULL
, NULL
, NULL
);
3577 TREE_SIDE_EFFECTS (bind
) = 1;
3579 BIND_EXPR_BODY (bind
) = push_stmt_list ();
3581 add_stmt (build_stmt (DECL_EXPR
, decl
));
3586 if (!DECL_FILE_SCOPE_P (decl
))
3588 /* Recompute the RTL of a local array now
3589 if it used to be an incomplete type. */
3591 && !TREE_STATIC (decl
) && !DECL_EXTERNAL (decl
))
3593 /* If we used it already as memory, it must stay in memory. */
3594 TREE_ADDRESSABLE (decl
) = TREE_USED (decl
);
3595 /* If it's still incomplete now, no init will save it. */
3596 if (DECL_SIZE (decl
) == 0)
3597 DECL_INITIAL (decl
) = 0;
3602 if (TREE_CODE (decl
) == TYPE_DECL
)
3604 if (!DECL_FILE_SCOPE_P (decl
)
3605 && variably_modified_type_p (TREE_TYPE (decl
), NULL_TREE
))
3606 add_stmt (build_stmt (DECL_EXPR
, decl
));
3608 rest_of_decl_compilation (decl
, DECL_FILE_SCOPE_P (decl
), 0);
3611 /* At the end of a declaration, throw away any variable type sizes
3612 of types defined inside that declaration. There is no use
3613 computing them in the following function definition. */
3614 if (current_scope
== file_scope
)
3615 get_pending_sizes ();
3617 /* Install a cleanup (aka destructor) if one was given. */
3618 if (TREE_CODE (decl
) == VAR_DECL
&& !TREE_STATIC (decl
))
3620 tree attr
= lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl
));
3623 tree cleanup_id
= TREE_VALUE (TREE_VALUE (attr
));
3624 tree cleanup_decl
= lookup_name (cleanup_id
);
3627 /* Build "cleanup(&decl)" for the destructor. */
3628 cleanup
= build_unary_op (ADDR_EXPR
, decl
, 0);
3629 cleanup
= build_tree_list (NULL_TREE
, cleanup
);
3630 cleanup
= build_function_call (cleanup_decl
, cleanup
);
3632 /* Don't warn about decl unused; the cleanup uses it. */
3633 TREE_USED (decl
) = 1;
3634 TREE_USED (cleanup_decl
) = 1;
3636 /* Initialize EH, if we've been told to do so. */
3637 c_maybe_initialize_eh ();
3639 push_cleanup (decl
, cleanup
, false);
3644 /* Given a parsed parameter declaration, decode it into a PARM_DECL. */
3647 grokparm (const struct c_parm
*parm
)
3649 tree attrs
= parm
->attrs
;
3650 tree decl
= grokdeclarator (parm
->declarator
, parm
->specs
, PARM
, false,
3651 NULL
, &attrs
, DEPRECATED_NORMAL
);
3653 decl_attributes (&decl
, attrs
, 0);
3658 /* Given a parsed parameter declaration, decode it into a PARM_DECL
3659 and push that on the current scope. */
3662 push_parm_decl (const struct c_parm
*parm
)
3664 tree attrs
= parm
->attrs
;
3667 decl
= grokdeclarator (parm
->declarator
, parm
->specs
, PARM
, false, NULL
,
3668 &attrs
, DEPRECATED_NORMAL
);
3669 decl_attributes (&decl
, attrs
, 0);
3671 decl
= pushdecl (decl
);
3673 finish_decl (decl
, NULL_TREE
, NULL_TREE
);
3676 /* Mark all the parameter declarations to date as forward decls.
3677 Also diagnose use of this extension. */
3680 mark_forward_parm_decls (void)
3682 struct c_binding
*b
;
3684 if (pedantic
&& !current_scope
->warned_forward_parm_decls
)
3686 pedwarn (input_location
, OPT_pedantic
,
3687 "ISO C forbids forward parameter declarations");
3688 current_scope
->warned_forward_parm_decls
= true;
3691 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
3692 if (TREE_CODE (b
->decl
) == PARM_DECL
)
3693 TREE_ASM_WRITTEN (b
->decl
) = 1;
3696 /* Build a COMPOUND_LITERAL_EXPR. TYPE is the type given in the compound
3697 literal, which may be an incomplete array type completed by the
3698 initializer; INIT is a CONSTRUCTOR that initializes the compound
3702 build_compound_literal (tree type
, tree init
)
3704 /* We do not use start_decl here because we have a type, not a declarator;
3705 and do not use finish_decl because the decl should be stored inside
3706 the COMPOUND_LITERAL_EXPR rather than added elsewhere as a DECL_EXPR. */
3711 if (type
== error_mark_node
)
3712 return error_mark_node
;
3714 decl
= build_decl (VAR_DECL
, NULL_TREE
, type
);
3715 DECL_EXTERNAL (decl
) = 0;
3716 TREE_PUBLIC (decl
) = 0;
3717 TREE_STATIC (decl
) = (current_scope
== file_scope
);
3718 DECL_CONTEXT (decl
) = current_function_decl
;
3719 TREE_USED (decl
) = 1;
3720 TREE_TYPE (decl
) = type
;
3721 TREE_READONLY (decl
) = TYPE_READONLY (type
);
3722 store_init_value (decl
, init
);
3724 if (TREE_CODE (type
) == ARRAY_TYPE
&& !COMPLETE_TYPE_P (type
))
3726 int failure
= complete_array_type (&TREE_TYPE (decl
),
3727 DECL_INITIAL (decl
), true);
3728 gcc_assert (!failure
);
3730 type
= TREE_TYPE (decl
);
3731 TREE_TYPE (DECL_INITIAL (decl
)) = type
;
3734 if (type
== error_mark_node
|| !COMPLETE_TYPE_P (type
))
3735 return error_mark_node
;
3737 stmt
= build_stmt (DECL_EXPR
, decl
);
3738 complit
= build1 (COMPOUND_LITERAL_EXPR
, type
, stmt
);
3739 TREE_SIDE_EFFECTS (complit
) = 1;
3741 layout_decl (decl
, 0);
3743 if (TREE_STATIC (decl
))
3745 /* This decl needs a name for the assembler output. */
3746 set_compound_literal_name (decl
);
3747 DECL_DEFER_OUTPUT (decl
) = 1;
3748 DECL_COMDAT (decl
) = 1;
3749 DECL_ARTIFICIAL (decl
) = 1;
3750 DECL_IGNORED_P (decl
) = 1;
3752 rest_of_decl_compilation (decl
, 1, 0);
3758 /* Determine whether TYPE is a structure with a flexible array member,
3759 or a union containing such a structure (possibly recursively). */
3762 flexible_array_type_p (tree type
)
3765 switch (TREE_CODE (type
))
3768 x
= TYPE_FIELDS (type
);
3771 while (TREE_CHAIN (x
) != NULL_TREE
)
3773 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
3774 && TYPE_SIZE (TREE_TYPE (x
)) == NULL_TREE
3775 && TYPE_DOMAIN (TREE_TYPE (x
)) != NULL_TREE
3776 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x
))) == NULL_TREE
)
3780 for (x
= TYPE_FIELDS (type
); x
!= NULL_TREE
; x
= TREE_CHAIN (x
))
3782 if (flexible_array_type_p (TREE_TYPE (x
)))
3791 /* Performs sanity checks on the TYPE and WIDTH of the bit-field NAME,
3792 replacing with appropriate values if they are invalid. */
3794 check_bitfield_type_and_width (tree
*type
, tree
*width
, const char *orig_name
)
3797 unsigned int max_width
;
3798 unsigned HOST_WIDE_INT w
;
3799 const char *name
= orig_name
? orig_name
: _("<anonymous>");
3801 /* Detect and ignore out of range field width and process valid
3803 if (!INTEGRAL_TYPE_P (TREE_TYPE (*width
))
3804 || TREE_CODE (*width
) != INTEGER_CST
)
3806 error ("bit-field %qs width not an integer constant", name
);
3807 *width
= integer_one_node
;
3811 constant_expression_warning (*width
);
3812 if (tree_int_cst_sgn (*width
) < 0)
3814 error ("negative width in bit-field %qs", name
);
3815 *width
= integer_one_node
;
3817 else if (integer_zerop (*width
) && orig_name
)
3819 error ("zero width for bit-field %qs", name
);
3820 *width
= integer_one_node
;
3824 /* Detect invalid bit-field type. */
3825 if (TREE_CODE (*type
) != INTEGER_TYPE
3826 && TREE_CODE (*type
) != BOOLEAN_TYPE
3827 && TREE_CODE (*type
) != ENUMERAL_TYPE
)
3829 error ("bit-field %qs has invalid type", name
);
3830 *type
= unsigned_type_node
;
3833 type_mv
= TYPE_MAIN_VARIANT (*type
);
3834 if (!in_system_header
3835 && type_mv
!= integer_type_node
3836 && type_mv
!= unsigned_type_node
3837 && type_mv
!= boolean_type_node
)
3838 pedwarn (input_location
, OPT_pedantic
,
3839 "type of bit-field %qs is a GCC extension", name
);
3841 max_width
= TYPE_PRECISION (*type
);
3843 if (0 < compare_tree_int (*width
, max_width
))
3845 error ("width of %qs exceeds its type", name
);
3847 *width
= build_int_cst (NULL_TREE
, w
);
3850 w
= tree_low_cst (*width
, 1);
3852 if (TREE_CODE (*type
) == ENUMERAL_TYPE
)
3854 struct lang_type
*lt
= TYPE_LANG_SPECIFIC (*type
);
3856 || w
< min_precision (lt
->enum_min
, TYPE_UNSIGNED (*type
))
3857 || w
< min_precision (lt
->enum_max
, TYPE_UNSIGNED (*type
)))
3858 warning (0, "%qs is narrower than values of its type", name
);
3864 /* Print warning about variable length array if necessary. */
3867 warn_variable_length_array (const char *name
, tree size
)
3869 int const_size
= TREE_CONSTANT (size
);
3871 if (!flag_isoc99
&& pedantic
&& warn_vla
!= 0)
3876 pedwarn (input_location
, OPT_Wvla
, "ISO C90 forbids array %qs whose size "
3877 "can%'t be evaluated",
3880 pedwarn (input_location
, OPT_Wvla
, "ISO C90 forbids array whose size "
3881 "can%'t be evaluated");
3886 pedwarn (input_location
, OPT_Wvla
, "ISO C90 forbids variable length array %qs",
3889 pedwarn (input_location
, OPT_Wvla
, "ISO C90 forbids variable length array");
3892 else if (warn_vla
> 0)
3898 "the size of array %qs can"
3899 "%'t be evaluated", name
);
3902 "the size of array can %'t be evaluated");
3908 "variable length array %qs is used",
3912 "variable length array is used");
3917 /* Given declspecs and a declarator,
3918 determine the name and type of the object declared
3919 and construct a ..._DECL node for it.
3920 (In one case we can return a ..._TYPE node instead.
3921 For invalid input we sometimes return 0.)
3923 DECLSPECS is a c_declspecs structure for the declaration specifiers.
3925 DECL_CONTEXT says which syntactic context this declaration is in:
3926 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
3927 FUNCDEF for a function definition. Like NORMAL but a few different
3928 error messages in each case. Return value may be zero meaning
3929 this definition is too screwy to try to parse.
3930 PARM for a parameter declaration (either within a function prototype
3931 or before a function body). Make a PARM_DECL, or return void_type_node.
3932 TYPENAME if for a typename (in a cast or sizeof).
3933 Don't make a DECL node; just return the ..._TYPE node.
3934 FIELD for a struct or union field; make a FIELD_DECL.
3935 INITIALIZED is true if the decl has an initializer.
3936 WIDTH is non-NULL for bit-fields, and is a pointer to an INTEGER_CST node
3937 representing the width of the bit-field.
3938 DECL_ATTRS points to the list of attributes that should be added to this
3939 decl. Any nested attributes that belong on the decl itself will be
3941 DEPRECATED_STATE is a deprecated_states value indicating whether
3942 deprecation warnings should be suppressed.
3944 In the TYPENAME case, DECLARATOR is really an absolute declarator.
3945 It may also be so in the PARM case, for a prototype where the
3946 argument type is specified but not the name.
3948 This function is where the complicated C meanings of `static'
3949 and `extern' are interpreted. */
3952 grokdeclarator (const struct c_declarator
*declarator
,
3953 struct c_declspecs
*declspecs
,
3954 enum decl_context decl_context
, bool initialized
, tree
*width
,
3955 tree
*decl_attrs
, enum deprecated_states deprecated_state
)
3957 tree type
= declspecs
->type
;
3958 bool threadp
= declspecs
->thread_p
;
3959 enum c_storage_class storage_class
= declspecs
->storage_class
;
3963 int type_quals
= TYPE_UNQUALIFIED
;
3964 const char *name
, *orig_name
;
3965 bool funcdef_flag
= false;
3966 bool funcdef_syntax
= false;
3967 int size_varies
= 0;
3968 tree decl_attr
= declspecs
->decl_attr
;
3969 int array_ptr_quals
= TYPE_UNQUALIFIED
;
3970 tree array_ptr_attrs
= NULL_TREE
;
3971 int array_parm_static
= 0;
3972 bool array_parm_vla_unspec_p
= false;
3973 tree returned_attrs
= NULL_TREE
;
3974 bool bitfield
= width
!= NULL
;
3976 struct c_arg_info
*arg_info
= 0;
3978 if (decl_context
== FUNCDEF
)
3979 funcdef_flag
= true, decl_context
= NORMAL
;
3981 /* Look inside a declarator for the name being declared
3982 and get it as a string, for an error message. */
3984 const struct c_declarator
*decl
= declarator
;
3993 funcdef_syntax
= (decl
->kind
== cdk_function
);
3994 decl
= decl
->declarator
;
3998 decl
= decl
->declarator
;
4003 name
= IDENTIFIER_POINTER (decl
->u
.id
);
4015 /* A function definition's declarator must have the form of
4016 a function declarator. */
4018 if (funcdef_flag
&& !funcdef_syntax
)
4021 /* If this looks like a function definition, make it one,
4022 even if it occurs where parms are expected.
4023 Then store_parm_decls will reject it and not use it as a parm. */
4024 if (decl_context
== NORMAL
&& !funcdef_flag
&& current_scope
->parm_flag
)
4025 decl_context
= PARM
;
4027 if (declspecs
->deprecated_p
&& deprecated_state
!= DEPRECATED_SUPPRESS
)
4028 warn_deprecated_use (declspecs
->type
);
4030 if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
4031 && current_scope
== file_scope
4032 && variably_modified_type_p (type
, NULL_TREE
))
4034 error ("variably modified %qs at file scope", name
);
4035 type
= integer_type_node
;
4038 size_varies
= C_TYPE_VARIABLE_SIZE (type
);
4040 /* Diagnose defaulting to "int". */
4042 if (declspecs
->default_int_p
&& !in_system_header
)
4044 /* Issue a warning if this is an ISO C 99 program or if
4045 -Wreturn-type and this is a function, or if -Wimplicit;
4046 prefer the former warning since it is more explicit. */
4047 if ((warn_implicit_int
|| warn_return_type
|| flag_isoc99
)
4049 warn_about_return_type
= 1;
4051 pedwarn_c99 (input_location
, flag_isoc99
? 0 : OPT_Wimplicit_int
,
4052 "type defaults to %<int%> in declaration of %qs", name
);
4055 /* Adjust the type if a bit-field is being declared,
4056 -funsigned-bitfields applied and the type is not explicitly
4058 if (bitfield
&& !flag_signed_bitfields
&& !declspecs
->explicit_signed_p
4059 && TREE_CODE (type
) == INTEGER_TYPE
)
4060 type
= unsigned_type_for (type
);
4062 /* Figure out the type qualifiers for the declaration. There are
4063 two ways a declaration can become qualified. One is something
4064 like `const int i' where the `const' is explicit. Another is
4065 something like `typedef const int CI; CI i' where the type of the
4066 declaration contains the `const'. A third possibility is that
4067 there is a type qualifier on the element type of a typedefed
4068 array type, in which case we should extract that qualifier so
4069 that c_apply_type_quals_to_decl receives the full list of
4070 qualifiers to work with (C90 is not entirely clear about whether
4071 duplicate qualifiers should be diagnosed in this case, but it
4072 seems most appropriate to do so). */
4073 element_type
= strip_array_types (type
);
4074 constp
= declspecs
->const_p
+ TYPE_READONLY (element_type
);
4075 restrictp
= declspecs
->restrict_p
+ TYPE_RESTRICT (element_type
);
4076 volatilep
= declspecs
->volatile_p
+ TYPE_VOLATILE (element_type
);
4077 if (pedantic
&& !flag_isoc99
)
4080 pedwarn (input_location
, OPT_pedantic
, "duplicate %<const%>");
4082 pedwarn (input_location
, OPT_pedantic
, "duplicate %<restrict%>");
4084 pedwarn (input_location
, OPT_pedantic
, "duplicate %<volatile%>");
4086 if (!flag_gen_aux_info
&& (TYPE_QUALS (element_type
)))
4087 type
= TYPE_MAIN_VARIANT (type
);
4088 type_quals
= ((constp
? TYPE_QUAL_CONST
: 0)
4089 | (restrictp
? TYPE_QUAL_RESTRICT
: 0)
4090 | (volatilep
? TYPE_QUAL_VOLATILE
: 0));
4092 /* Warn about storage classes that are invalid for certain
4093 kinds of declarations (parameters, typenames, etc.). */
4097 || storage_class
== csc_auto
4098 || storage_class
== csc_register
4099 || storage_class
== csc_typedef
))
4101 if (storage_class
== csc_auto
)
4102 pedwarn (input_location
,
4103 (current_scope
== file_scope
) ? 0 : OPT_pedantic
,
4104 "function definition declared %<auto%>");
4105 if (storage_class
== csc_register
)
4106 error ("function definition declared %<register%>");
4107 if (storage_class
== csc_typedef
)
4108 error ("function definition declared %<typedef%>");
4110 error ("function definition declared %<__thread%>");
4112 if (storage_class
== csc_auto
4113 || storage_class
== csc_register
4114 || storage_class
== csc_typedef
)
4115 storage_class
= csc_none
;
4117 else if (decl_context
!= NORMAL
&& (storage_class
!= csc_none
|| threadp
))
4119 if (decl_context
== PARM
&& storage_class
== csc_register
)
4123 switch (decl_context
)
4126 error ("storage class specified for structure field %qs",
4130 error ("storage class specified for parameter %qs", name
);
4133 error ("storage class specified for typename");
4136 storage_class
= csc_none
;
4140 else if (storage_class
== csc_extern
4144 /* 'extern' with initialization is invalid if not at file scope. */
4145 if (current_scope
== file_scope
)
4147 /* It is fine to have 'extern const' when compiling at C
4148 and C++ intersection. */
4149 if (!(warn_cxx_compat
&& constp
))
4150 warning (0, "%qs initialized and declared %<extern%>", name
);
4153 error ("%qs has both %<extern%> and initializer", name
);
4155 else if (current_scope
== file_scope
)
4157 if (storage_class
== csc_auto
)
4158 error ("file-scope declaration of %qs specifies %<auto%>", name
);
4159 if (pedantic
&& storage_class
== csc_register
)
4160 pedwarn (input_location
, OPT_pedantic
,
4161 "file-scope declaration of %qs specifies %<register%>", name
);
4165 if (storage_class
== csc_extern
&& funcdef_flag
)
4166 error ("nested function %qs declared %<extern%>", name
);
4167 else if (threadp
&& storage_class
== csc_none
)
4169 error ("function-scope %qs implicitly auto and declared "
4176 /* Now figure out the structure of the declarator proper.
4177 Descend through it, creating more complex types, until we reach
4178 the declared identifier (or NULL_TREE, in an absolute declarator).
4179 At each stage we maintain an unqualified version of the type
4180 together with any qualifiers that should be applied to it with
4181 c_build_qualified_type; this way, array types including
4182 multidimensional array types are first built up in unqualified
4183 form and then the qualified form is created with
4184 TYPE_MAIN_VARIANT pointing to the unqualified form. */
4186 while (declarator
&& declarator
->kind
!= cdk_id
)
4188 if (type
== error_mark_node
)
4190 declarator
= declarator
->declarator
;
4194 /* Each level of DECLARATOR is either a cdk_array (for ...[..]),
4195 a cdk_pointer (for *...),
4196 a cdk_function (for ...(...)),
4197 a cdk_attrs (for nested attributes),
4198 or a cdk_id (for the name being declared
4199 or the place in an absolute declarator
4200 where the name was omitted).
4201 For the last case, we have just exited the loop.
4203 At this point, TYPE is the type of elements of an array,
4204 or for a function to return, or for a pointer to point to.
4205 After this sequence of ifs, TYPE is the type of the
4206 array or function or pointer, and DECLARATOR has had its
4207 outermost layer removed. */
4209 if (array_ptr_quals
!= TYPE_UNQUALIFIED
4210 || array_ptr_attrs
!= NULL_TREE
4211 || array_parm_static
)
4213 /* Only the innermost declarator (making a parameter be of
4214 array type which is converted to pointer type)
4215 may have static or type qualifiers. */
4216 error ("static or type qualifiers in non-parameter array declarator");
4217 array_ptr_quals
= TYPE_UNQUALIFIED
;
4218 array_ptr_attrs
= NULL_TREE
;
4219 array_parm_static
= 0;
4222 switch (declarator
->kind
)
4226 /* A declarator with embedded attributes. */
4227 tree attrs
= declarator
->u
.attrs
;
4228 const struct c_declarator
*inner_decl
;
4230 declarator
= declarator
->declarator
;
4231 inner_decl
= declarator
;
4232 while (inner_decl
->kind
== cdk_attrs
)
4233 inner_decl
= inner_decl
->declarator
;
4234 if (inner_decl
->kind
== cdk_id
)
4235 attr_flags
|= (int) ATTR_FLAG_DECL_NEXT
;
4236 else if (inner_decl
->kind
== cdk_function
)
4237 attr_flags
|= (int) ATTR_FLAG_FUNCTION_NEXT
;
4238 else if (inner_decl
->kind
== cdk_array
)
4239 attr_flags
|= (int) ATTR_FLAG_ARRAY_NEXT
;
4240 returned_attrs
= decl_attributes (&type
,
4241 chainon (returned_attrs
, attrs
),
4247 tree itype
= NULL_TREE
;
4248 tree size
= declarator
->u
.array
.dimen
;
4249 /* The index is a signed object `sizetype' bits wide. */
4250 tree index_type
= c_common_signed_type (sizetype
);
4252 array_ptr_quals
= declarator
->u
.array
.quals
;
4253 array_ptr_attrs
= declarator
->u
.array
.attrs
;
4254 array_parm_static
= declarator
->u
.array
.static_p
;
4255 array_parm_vla_unspec_p
= declarator
->u
.array
.vla_unspec_p
;
4257 declarator
= declarator
->declarator
;
4259 /* Check for some types that there cannot be arrays of. */
4261 if (VOID_TYPE_P (type
))
4263 error ("declaration of %qs as array of voids", name
);
4264 type
= error_mark_node
;
4267 if (TREE_CODE (type
) == FUNCTION_TYPE
)
4269 error ("declaration of %qs as array of functions", name
);
4270 type
= error_mark_node
;
4273 if (pedantic
&& !in_system_header
&& flexible_array_type_p (type
))
4274 pedwarn (input_location
, OPT_pedantic
,
4275 "invalid use of structure with flexible array member");
4277 if (size
== error_mark_node
)
4278 type
= error_mark_node
;
4280 if (type
== error_mark_node
)
4283 /* If size was specified, set ITYPE to a range-type for
4284 that size. Otherwise, ITYPE remains null. finish_decl
4285 may figure it out from an initial value. */
4289 /* Strip NON_LVALUE_EXPRs since we aren't using as an
4291 STRIP_TYPE_NOPS (size
);
4293 if (!INTEGRAL_TYPE_P (TREE_TYPE (size
)))
4295 error ("size of array %qs has non-integer type", name
);
4296 size
= integer_one_node
;
4299 if (pedantic
&& integer_zerop (size
))
4300 pedwarn (input_location
, OPT_pedantic
,
4301 "ISO C forbids zero-size array %qs", name
);
4303 if (TREE_CODE (size
) == INTEGER_CST
)
4305 constant_expression_warning (size
);
4306 if (tree_int_cst_sgn (size
) < 0)
4308 error ("size of array %qs is negative", name
);
4309 size
= integer_one_node
;
4312 else if ((decl_context
== NORMAL
|| decl_context
== FIELD
)
4313 && current_scope
== file_scope
)
4315 error ("variably modified %qs at file scope", name
);
4316 size
= integer_one_node
;
4320 /* Make sure the array size remains visibly
4321 nonconstant even if it is (eg) a const variable
4322 with known value. */
4324 warn_variable_length_array (orig_name
, size
);
4327 if (integer_zerop (size
))
4329 /* A zero-length array cannot be represented with
4330 an unsigned index type, which is what we'll
4331 get with build_index_type. Create an
4332 open-ended range instead. */
4333 itype
= build_range_type (sizetype
, size
, NULL_TREE
);
4337 /* Arrange for the SAVE_EXPR on the inside of the
4338 MINUS_EXPR, which allows the -1 to get folded
4339 with the +1 that happens when building TYPE_SIZE. */
4341 size
= variable_size (size
);
4343 /* Compute the maximum valid index, that is, size
4344 - 1. Do the calculation in index_type, so that
4345 if it is a variable the computations will be
4346 done in the proper mode. */
4347 itype
= fold_build2 (MINUS_EXPR
, index_type
,
4348 convert (index_type
, size
),
4349 convert (index_type
,
4352 /* If that overflowed, the array is too big. ???
4353 While a size of INT_MAX+1 technically shouldn't
4354 cause an overflow (because we subtract 1), the
4355 overflow is recorded during the conversion to
4356 index_type, before the subtraction. Handling
4357 this case seems like an unnecessary
4359 if (TREE_CODE (itype
) == INTEGER_CST
4360 && TREE_OVERFLOW (itype
))
4362 error ("size of array %qs is too large", name
);
4363 type
= error_mark_node
;
4367 itype
= build_index_type (itype
);
4370 else if (decl_context
== FIELD
)
4372 if (pedantic
&& !flag_isoc99
&& !in_system_header
)
4373 pedwarn (input_location
, OPT_pedantic
,
4374 "ISO C90 does not support flexible array members");
4376 /* ISO C99 Flexible array members are effectively
4377 identical to GCC's zero-length array extension. */
4378 itype
= build_range_type (sizetype
, size_zero_node
, NULL_TREE
);
4380 else if (decl_context
== PARM
)
4382 if (array_parm_vla_unspec_p
)
4387 error ("%<[*]%> not allowed in other than a declaration");
4390 itype
= build_range_type (sizetype
, size_zero_node
, NULL_TREE
);
4394 else if (decl_context
== TYPENAME
)
4396 if (array_parm_vla_unspec_p
)
4398 /* The error is printed elsewhere. We use this to
4399 avoid messing up with incomplete array types of
4400 the same type, that would otherwise be modified
4402 itype
= build_range_type (sizetype
, size_zero_node
,
4407 /* Complain about arrays of incomplete types. */
4408 if (!COMPLETE_TYPE_P (type
))
4410 error ("array type has incomplete element type");
4411 type
= error_mark_node
;
4414 /* When itype is NULL, a shared incomplete array type is
4415 returned for all array of a given type. Elsewhere we
4416 make sure we don't complete that type before copying
4417 it, but here we want to make sure we don't ever
4418 modify the shared type, so we gcc_assert (itype)
4420 type
= build_array_type (type
, itype
);
4422 if (type
!= error_mark_node
)
4426 /* It is ok to modify type here even if itype is
4427 NULL: if size_varies, we're in a
4428 multi-dimensional array and the inner type has
4429 variable size, so the enclosing shared array type
4431 if (size
&& TREE_CODE (size
) == INTEGER_CST
)
4433 = build_distinct_type_copy (TYPE_MAIN_VARIANT (type
));
4434 C_TYPE_VARIABLE_SIZE (type
) = 1;
4437 /* The GCC extension for zero-length arrays differs from
4438 ISO flexible array members in that sizeof yields
4440 if (size
&& integer_zerop (size
))
4443 TYPE_SIZE (type
) = bitsize_zero_node
;
4444 TYPE_SIZE_UNIT (type
) = size_zero_node
;
4446 if (array_parm_vla_unspec_p
)
4449 /* The type is complete. C99 6.7.5.2p4 */
4450 TYPE_SIZE (type
) = bitsize_zero_node
;
4451 TYPE_SIZE_UNIT (type
) = size_zero_node
;
4455 if (decl_context
!= PARM
4456 && (array_ptr_quals
!= TYPE_UNQUALIFIED
4457 || array_ptr_attrs
!= NULL_TREE
4458 || array_parm_static
))
4460 error ("static or type qualifiers in non-parameter array declarator");
4461 array_ptr_quals
= TYPE_UNQUALIFIED
;
4462 array_ptr_attrs
= NULL_TREE
;
4463 array_parm_static
= 0;
4469 /* Say it's a definition only for the declarator closest
4470 to the identifier, apart possibly from some
4472 bool really_funcdef
= false;
4476 const struct c_declarator
*t
= declarator
->declarator
;
4477 while (t
->kind
== cdk_attrs
)
4479 really_funcdef
= (t
->kind
== cdk_id
);
4482 /* Declaring a function type. Make sure we have a valid
4483 type for the function to return. */
4484 if (type
== error_mark_node
)
4489 /* Warn about some types functions can't return. */
4490 if (TREE_CODE (type
) == FUNCTION_TYPE
)
4492 error ("%qs declared as function returning a function", name
);
4493 type
= integer_type_node
;
4495 if (TREE_CODE (type
) == ARRAY_TYPE
)
4497 error ("%qs declared as function returning an array", name
);
4498 type
= integer_type_node
;
4501 /* Construct the function type and go to the next
4502 inner layer of declarator. */
4503 arg_info
= declarator
->u
.arg_info
;
4504 arg_types
= grokparms (arg_info
, really_funcdef
);
4506 put_pending_sizes (arg_info
->pending_sizes
);
4508 /* Type qualifiers before the return type of the function
4509 qualify the return type, not the function type. */
4512 /* Type qualifiers on a function return type are
4513 normally permitted by the standard but have no
4514 effect, so give a warning at -Wreturn-type.
4515 Qualifiers on a void return type are banned on
4516 function definitions in ISO C; GCC used to used
4517 them for noreturn functions. */
4518 if (VOID_TYPE_P (type
) && really_funcdef
)
4519 pedwarn (input_location
, 0,
4520 "function definition has qualified void return type");
4522 warning (OPT_Wignored_qualifiers
,
4523 "type qualifiers ignored on function return type");
4525 type
= c_build_qualified_type (type
, type_quals
);
4527 type_quals
= TYPE_UNQUALIFIED
;
4529 type
= build_function_type (type
, arg_types
);
4530 declarator
= declarator
->declarator
;
4532 /* Set the TYPE_CONTEXTs for each tagged type which is local to
4533 the formal parameter list of this FUNCTION_TYPE to point to
4534 the FUNCTION_TYPE node itself. */
4538 for (link
= arg_info
->tags
;
4540 link
= TREE_CHAIN (link
))
4541 TYPE_CONTEXT (TREE_VALUE (link
)) = type
;
4547 /* Merge any constancy or volatility into the target type
4550 if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
4552 pedwarn (input_location
, OPT_pedantic
,
4553 "ISO C forbids qualified function types");
4555 type
= c_build_qualified_type (type
, type_quals
);
4558 /* When the pointed-to type involves components of variable size,
4559 care must be taken to ensure that the size evaluation code is
4560 emitted early enough to dominate all the possible later uses
4561 and late enough for the variables on which it depends to have
4564 This is expected to happen automatically when the pointed-to
4565 type has a name/declaration of it's own, but special attention
4566 is required if the type is anonymous.
4568 We handle the NORMAL and FIELD contexts here by attaching an
4569 artificial TYPE_DECL to such pointed-to type. This forces the
4570 sizes evaluation at a safe point and ensures it is not deferred
4571 until e.g. within a deeper conditional context.
4573 We expect nothing to be needed here for PARM or TYPENAME.
4574 Pushing a TYPE_DECL at this point for TYPENAME would actually
4575 be incorrect, as we might be in the middle of an expression
4576 with side effects on the pointed-to type size "arguments" prior
4577 to the pointer declaration point and the fake TYPE_DECL in the
4578 enclosing context would force the size evaluation prior to the
4581 if (!TYPE_NAME (type
)
4582 && (decl_context
== NORMAL
|| decl_context
== FIELD
)
4583 && variably_modified_type_p (type
, NULL_TREE
))
4585 tree decl
= build_decl (TYPE_DECL
, NULL_TREE
, type
);
4586 DECL_ARTIFICIAL (decl
) = 1;
4588 finish_decl (decl
, NULL_TREE
, NULL_TREE
);
4589 TYPE_NAME (type
) = decl
;
4592 type
= build_pointer_type (type
);
4594 /* Process type qualifiers (such as const or volatile)
4595 that were given inside the `*'. */
4596 type_quals
= declarator
->u
.pointer_quals
;
4598 declarator
= declarator
->declarator
;
4605 *decl_attrs
= chainon (returned_attrs
, *decl_attrs
);
4607 /* Now TYPE has the actual type, apart from any qualifiers in
4610 /* Check the type and width of a bit-field. */
4612 check_bitfield_type_and_width (&type
, width
, orig_name
);
4614 /* Did array size calculations overflow? */
4616 if (TREE_CODE (type
) == ARRAY_TYPE
4617 && COMPLETE_TYPE_P (type
)
4618 && TREE_CODE (TYPE_SIZE_UNIT (type
)) == INTEGER_CST
4619 && TREE_OVERFLOW (TYPE_SIZE_UNIT (type
)))
4621 error ("size of array %qs is too large", name
);
4622 /* If we proceed with the array type as it is, we'll eventually
4623 crash in tree_low_cst(). */
4624 type
= error_mark_node
;
4627 /* If this is declaring a typedef name, return a TYPE_DECL. */
4629 if (storage_class
== csc_typedef
)
4632 if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
4634 pedwarn (input_location
, OPT_pedantic
,
4635 "ISO C forbids qualified function types");
4637 type
= c_build_qualified_type (type
, type_quals
);
4638 decl
= build_decl (TYPE_DECL
, declarator
->u
.id
, type
);
4639 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
4640 if (declspecs
->explicit_signed_p
)
4641 C_TYPEDEF_EXPLICITLY_SIGNED (decl
) = 1;
4642 if (declspecs
->inline_p
)
4643 pedwarn (input_location
, 0,"typedef %q+D declared %<inline%>", decl
);
4647 /* If this is a type name (such as, in a cast or sizeof),
4648 compute the type and return it now. */
4650 if (decl_context
== TYPENAME
)
4652 /* Note that the grammar rejects storage classes in typenames
4654 gcc_assert (storage_class
== csc_none
&& !threadp
4655 && !declspecs
->inline_p
);
4656 if (pedantic
&& TREE_CODE (type
) == FUNCTION_TYPE
4658 pedwarn (input_location
, OPT_pedantic
,
4659 "ISO C forbids const or volatile function types");
4661 type
= c_build_qualified_type (type
, type_quals
);
4665 if (pedantic
&& decl_context
== FIELD
4666 && variably_modified_type_p (type
, NULL_TREE
))
4669 pedwarn (input_location
, OPT_pedantic
,
4670 "a member of a structure or union cannot have a variably modified type");
4673 /* Aside from typedefs and type names (handle above),
4674 `void' at top level (not within pointer)
4675 is allowed only in public variables.
4676 We don't complain about parms either, but that is because
4677 a better error message can be made later. */
4679 if (VOID_TYPE_P (type
) && decl_context
!= PARM
4680 && !((decl_context
!= FIELD
&& TREE_CODE (type
) != FUNCTION_TYPE
)
4681 && (storage_class
== csc_extern
4682 || (current_scope
== file_scope
4683 && !(storage_class
== csc_static
4684 || storage_class
== csc_register
)))))
4686 error ("variable or field %qs declared void", name
);
4687 type
= integer_type_node
;
4690 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
4691 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
4696 if (decl_context
== PARM
)
4700 /* A parameter declared as an array of T is really a pointer to T.
4701 One declared as a function is really a pointer to a function. */
4703 if (TREE_CODE (type
) == ARRAY_TYPE
)
4705 /* Transfer const-ness of array into that of type pointed to. */
4706 type
= TREE_TYPE (type
);
4708 type
= c_build_qualified_type (type
, type_quals
);
4709 type
= build_pointer_type (type
);
4710 type_quals
= array_ptr_quals
;
4712 type
= c_build_qualified_type (type
, type_quals
);
4714 /* We don't yet implement attributes in this context. */
4715 if (array_ptr_attrs
!= NULL_TREE
)
4716 warning (OPT_Wattributes
,
4717 "attributes in parameter array declarator ignored");
4721 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
4724 pedwarn (input_location
, OPT_pedantic
,
4725 "ISO C forbids qualified function types");
4727 type
= c_build_qualified_type (type
, type_quals
);
4728 type
= build_pointer_type (type
);
4729 type_quals
= TYPE_UNQUALIFIED
;
4731 else if (type_quals
)
4732 type
= c_build_qualified_type (type
, type_quals
);
4734 decl
= build_decl (PARM_DECL
, declarator
->u
.id
, type
);
4735 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
4737 C_DECL_VARIABLE_SIZE (decl
) = 1;
4739 /* Compute the type actually passed in the parmlist,
4740 for the case where there is no prototype.
4741 (For example, shorts and chars are passed as ints.)
4742 When there is a prototype, this is overridden later. */
4744 if (type
== error_mark_node
)
4745 promoted_type
= type
;
4747 promoted_type
= c_type_promotes_to (type
);
4749 DECL_ARG_TYPE (decl
) = promoted_type
;
4750 if (declspecs
->inline_p
)
4751 pedwarn (input_location
, 0, "parameter %q+D declared %<inline%>", decl
);
4753 else if (decl_context
== FIELD
)
4755 /* Note that the grammar rejects storage classes in typenames
4757 gcc_assert (storage_class
== csc_none
&& !threadp
4758 && !declspecs
->inline_p
);
4760 /* Structure field. It may not be a function. */
4762 if (TREE_CODE (type
) == FUNCTION_TYPE
)
4764 error ("field %qs declared as a function", name
);
4765 type
= build_pointer_type (type
);
4767 else if (TREE_CODE (type
) != ERROR_MARK
4768 && !COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (type
))
4770 error ("field %qs has incomplete type", name
);
4771 type
= error_mark_node
;
4773 type
= c_build_qualified_type (type
, type_quals
);
4774 decl
= build_decl (FIELD_DECL
, declarator
->u
.id
, type
);
4775 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
4776 DECL_NONADDRESSABLE_P (decl
) = bitfield
;
4777 if (bitfield
&& !declarator
->u
.id
)
4778 TREE_NO_WARNING (decl
) = 1;
4781 C_DECL_VARIABLE_SIZE (decl
) = 1;
4783 else if (TREE_CODE (type
) == FUNCTION_TYPE
)
4785 if (storage_class
== csc_register
|| threadp
)
4787 error ("invalid storage class for function %qs", name
);
4789 else if (current_scope
!= file_scope
)
4791 /* Function declaration not at file scope. Storage
4792 classes other than `extern' are not allowed, C99
4793 6.7.1p5, and `extern' makes no difference. However,
4794 GCC allows 'auto', perhaps with 'inline', to support
4795 nested functions. */
4796 if (storage_class
== csc_auto
)
4797 pedwarn (input_location
, OPT_pedantic
, "invalid storage class for function %qs", name
);
4798 else if (storage_class
== csc_static
)
4800 error ("invalid storage class for function %qs", name
);
4802 storage_class
= declspecs
->storage_class
= csc_none
;
4808 decl
= build_decl (FUNCTION_DECL
, declarator
->u
.id
, type
);
4809 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
4810 decl
= build_decl_attribute_variant (decl
, decl_attr
);
4812 if (pedantic
&& type_quals
&& !DECL_IN_SYSTEM_HEADER (decl
))
4813 pedwarn (input_location
, OPT_pedantic
,
4814 "ISO C forbids qualified function types");
4816 /* GNU C interprets a volatile-qualified function type to indicate
4817 that the function does not return. */
4818 if ((type_quals
& TYPE_QUAL_VOLATILE
)
4819 && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl
))))
4820 warning (0, "%<noreturn%> function returns non-void value");
4822 /* Every function declaration is an external reference
4823 (DECL_EXTERNAL) except for those which are not at file
4824 scope and are explicitly declared "auto". This is
4825 forbidden by standard C (C99 6.7.1p5) and is interpreted by
4826 GCC to signify a forward declaration of a nested function. */
4827 if (storage_class
== csc_auto
&& current_scope
!= file_scope
)
4828 DECL_EXTERNAL (decl
) = 0;
4829 /* In C99, a function which is declared 'inline' with 'extern'
4830 is not an external reference (which is confusing). It
4831 means that the later definition of the function must be output
4832 in this file, C99 6.7.4p6. In GNU C89, a function declared
4833 'extern inline' is an external reference. */
4834 else if (declspecs
->inline_p
&& storage_class
!= csc_static
)
4835 DECL_EXTERNAL (decl
) = ((storage_class
== csc_extern
)
4836 == flag_gnu89_inline
);
4838 DECL_EXTERNAL (decl
) = !initialized
;
4840 /* Record absence of global scope for `static' or `auto'. */
4842 = !(storage_class
== csc_static
|| storage_class
== csc_auto
);
4844 /* For a function definition, record the argument information
4845 block where store_parm_decls will look for it. */
4847 current_function_arg_info
= arg_info
;
4849 if (declspecs
->default_int_p
)
4850 C_FUNCTION_IMPLICIT_INT (decl
) = 1;
4852 /* Record presence of `inline', if it is reasonable. */
4853 if (flag_hosted
&& MAIN_NAME_P (declarator
->u
.id
))
4855 if (declspecs
->inline_p
)
4856 pedwarn (input_location
, 0, "cannot inline function %<main%>");
4858 else if (declspecs
->inline_p
)
4859 /* Record that the function is declared `inline'. */
4860 DECL_DECLARED_INLINE_P (decl
) = 1;
4864 /* It's a variable. */
4865 /* An uninitialized decl with `extern' is a reference. */
4866 int extern_ref
= !initialized
&& storage_class
== csc_extern
;
4868 type
= c_build_qualified_type (type
, type_quals
);
4870 /* C99 6.2.2p7: It is invalid (compile-time undefined
4871 behavior) to create an 'extern' declaration for a
4872 variable if there is a global declaration that is
4873 'static' and the global declaration is not visible.
4874 (If the static declaration _is_ currently visible,
4875 the 'extern' declaration is taken to refer to that decl.) */
4876 if (extern_ref
&& current_scope
!= file_scope
)
4878 tree global_decl
= identifier_global_value (declarator
->u
.id
);
4879 tree visible_decl
= lookup_name (declarator
->u
.id
);
4882 && global_decl
!= visible_decl
4883 && TREE_CODE (global_decl
) == VAR_DECL
4884 && !TREE_PUBLIC (global_decl
))
4885 error ("variable previously declared %<static%> redeclared "
4889 decl
= build_decl (VAR_DECL
, declarator
->u
.id
, type
);
4890 DECL_SOURCE_LOCATION (decl
) = declarator
->id_loc
;
4892 C_DECL_VARIABLE_SIZE (decl
) = 1;
4894 if (declspecs
->inline_p
)
4895 pedwarn (input_location
, 0, "variable %q+D declared %<inline%>", decl
);
4897 /* At file scope, an initialized extern declaration may follow
4898 a static declaration. In that case, DECL_EXTERNAL will be
4899 reset later in start_decl. */
4900 DECL_EXTERNAL (decl
) = (storage_class
== csc_extern
);
4902 /* At file scope, the presence of a `static' or `register' storage
4903 class specifier, or the absence of all storage class specifiers
4904 makes this declaration a definition (perhaps tentative). Also,
4905 the absence of `static' makes it public. */
4906 if (current_scope
== file_scope
)
4908 TREE_PUBLIC (decl
) = storage_class
!= csc_static
;
4909 TREE_STATIC (decl
) = !extern_ref
;
4911 /* Not at file scope, only `static' makes a static definition. */
4914 TREE_STATIC (decl
) = (storage_class
== csc_static
);
4915 TREE_PUBLIC (decl
) = extern_ref
;
4919 DECL_TLS_MODEL (decl
) = decl_default_tls_model (decl
);
4922 if (storage_class
== csc_extern
4923 && variably_modified_type_p (type
, NULL_TREE
))
4926 error ("object with variably modified type must have no linkage");
4929 /* Record `register' declaration for warnings on &
4930 and in case doing stupid register allocation. */
4932 if (storage_class
== csc_register
)
4934 C_DECL_REGISTER (decl
) = 1;
4935 DECL_REGISTER (decl
) = 1;
4938 /* Record constancy and volatility. */
4939 c_apply_type_quals_to_decl (type_quals
, decl
);
4941 /* If a type has volatile components, it should be stored in memory.
4942 Otherwise, the fact that those components are volatile
4943 will be ignored, and would even crash the compiler.
4944 Of course, this only makes sense on VAR,PARM, and RESULT decl's. */
4945 if (C_TYPE_FIELDS_VOLATILE (TREE_TYPE (decl
))
4946 && (TREE_CODE (decl
) == VAR_DECL
|| TREE_CODE (decl
) == PARM_DECL
4947 || TREE_CODE (decl
) == RESULT_DECL
))
4949 /* It is not an error for a structure with volatile fields to
4950 be declared register, but reset DECL_REGISTER since it
4951 cannot actually go in a register. */
4952 int was_reg
= C_DECL_REGISTER (decl
);
4953 C_DECL_REGISTER (decl
) = 0;
4954 DECL_REGISTER (decl
) = 0;
4955 c_mark_addressable (decl
);
4956 C_DECL_REGISTER (decl
) = was_reg
;
4959 /* This is the earliest point at which we might know the assembler
4960 name of a variable. Thus, if it's known before this, die horribly. */
4961 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl
));
4967 /* Decode the parameter-list info for a function type or function definition.
4968 The argument is the value returned by `get_parm_info' (or made in c-parse.c
4969 if there is an identifier list instead of a parameter decl list).
4970 These two functions are separate because when a function returns
4971 or receives functions then each is called multiple times but the order
4972 of calls is different. The last call to `grokparms' is always the one
4973 that contains the formal parameter names of a function definition.
4975 Return a list of arg types to use in the FUNCTION_TYPE for this function.
4977 FUNCDEF_FLAG is true for a function definition, false for
4978 a mere declaration. A nonempty identifier-list gets an error message
4979 when FUNCDEF_FLAG is false. */
4982 grokparms (struct c_arg_info
*arg_info
, bool funcdef_flag
)
4984 tree arg_types
= arg_info
->types
;
4986 if (funcdef_flag
&& arg_info
->had_vla_unspec
)
4988 /* A function definition isn't function prototype scope C99 6.2.1p4. */
4990 error ("%<[*]%> not allowed in other than function prototype scope");
4993 if (arg_types
== 0 && !funcdef_flag
&& !in_system_header
)
4994 warning (OPT_Wstrict_prototypes
,
4995 "function declaration isn%'t a prototype");
4997 if (arg_types
== error_mark_node
)
4998 return 0; /* don't set TYPE_ARG_TYPES in this case */
5000 else if (arg_types
&& TREE_CODE (TREE_VALUE (arg_types
)) == IDENTIFIER_NODE
)
5003 pedwarn (input_location
, 0, "parameter names (without types) in function declaration");
5005 arg_info
->parms
= arg_info
->types
;
5006 arg_info
->types
= 0;
5011 tree parm
, type
, typelt
;
5012 unsigned int parmno
;
5014 /* If there is a parameter of incomplete type in a definition,
5015 this is an error. In a declaration this is valid, and a
5016 struct or union type may be completed later, before any calls
5017 or definition of the function. In the case where the tag was
5018 first declared within the parameter list, a warning has
5019 already been given. If a parameter has void type, then
5020 however the function cannot be defined or called, so
5023 for (parm
= arg_info
->parms
, typelt
= arg_types
, parmno
= 1;
5025 parm
= TREE_CHAIN (parm
), typelt
= TREE_CHAIN (typelt
), parmno
++)
5027 type
= TREE_VALUE (typelt
);
5028 if (type
== error_mark_node
)
5031 if (!COMPLETE_TYPE_P (type
))
5035 if (DECL_NAME (parm
))
5036 error ("parameter %u (%q+D) has incomplete type",
5039 error ("%Jparameter %u has incomplete type",
5042 TREE_VALUE (typelt
) = error_mark_node
;
5043 TREE_TYPE (parm
) = error_mark_node
;
5045 else if (VOID_TYPE_P (type
))
5047 if (DECL_NAME (parm
))
5048 warning (0, "parameter %u (%q+D) has void type",
5051 warning (0, "%Jparameter %u has void type",
5056 if (DECL_NAME (parm
) && TREE_USED (parm
))
5057 warn_if_shadowing (parm
);
5063 /* Take apart the current scope and return a c_arg_info structure with
5064 info on a parameter list just parsed.
5066 This structure is later fed to 'grokparms' and 'store_parm_decls'.
5068 ELLIPSIS being true means the argument list ended in '...' so don't
5069 append a sentinel (void_list_node) to the end of the type-list. */
5072 get_parm_info (bool ellipsis
)
5074 struct c_binding
*b
= current_scope
->bindings
;
5075 struct c_arg_info
*arg_info
= XOBNEW (&parser_obstack
,
5082 static bool explained_incomplete_types
= false;
5083 bool gave_void_only_once_err
= false;
5085 arg_info
->parms
= 0;
5087 arg_info
->types
= 0;
5088 arg_info
->others
= 0;
5089 arg_info
->pending_sizes
= 0;
5090 arg_info
->had_vla_unspec
= current_scope
->had_vla_unspec
;
5092 /* The bindings in this scope must not get put into a block.
5093 We will take care of deleting the binding nodes. */
5094 current_scope
->bindings
= 0;
5096 /* This function is only called if there was *something* on the
5100 /* A parameter list consisting solely of 'void' indicates that the
5101 function takes no arguments. But if the 'void' is qualified
5102 (by 'const' or 'volatile'), or has a storage class specifier
5103 ('register'), then the behavior is undefined; issue an error.
5104 Typedefs for 'void' are OK (see DR#157). */
5105 if (b
->prev
== 0 /* one binding */
5106 && TREE_CODE (b
->decl
) == PARM_DECL
/* which is a parameter */
5107 && !DECL_NAME (b
->decl
) /* anonymous */
5108 && VOID_TYPE_P (TREE_TYPE (b
->decl
))) /* of void type */
5110 if (TREE_THIS_VOLATILE (b
->decl
)
5111 || TREE_READONLY (b
->decl
)
5112 || C_DECL_REGISTER (b
->decl
))
5113 error ("%<void%> as only parameter may not be qualified");
5115 /* There cannot be an ellipsis. */
5117 error ("%<void%> must be the only parameter");
5119 arg_info
->types
= void_list_node
;
5124 types
= void_list_node
;
5126 /* Break up the bindings list into parms, tags, types, and others;
5127 apply sanity checks; purge the name-to-decl bindings. */
5130 tree decl
= b
->decl
;
5131 tree type
= TREE_TYPE (decl
);
5132 const char *keyword
;
5134 switch (TREE_CODE (decl
))
5139 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
5140 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
5143 /* Check for forward decls that never got their actual decl. */
5144 if (TREE_ASM_WRITTEN (decl
))
5145 error ("parameter %q+D has just a forward declaration", decl
);
5146 /* Check for (..., void, ...) and issue an error. */
5147 else if (VOID_TYPE_P (type
) && !DECL_NAME (decl
))
5149 if (!gave_void_only_once_err
)
5151 error ("%<void%> must be the only parameter");
5152 gave_void_only_once_err
= true;
5157 /* Valid parameter, add it to the list. */
5158 TREE_CHAIN (decl
) = parms
;
5161 /* Since there is a prototype, args are passed in their
5162 declared types. The back end may override this later. */
5163 DECL_ARG_TYPE (decl
) = type
;
5164 types
= tree_cons (0, type
, types
);
5168 case ENUMERAL_TYPE
: keyword
= "enum"; goto tag
;
5169 case UNION_TYPE
: keyword
= "union"; goto tag
;
5170 case RECORD_TYPE
: keyword
= "struct"; goto tag
;
5172 /* Types may not have tag-names, in which case the type
5173 appears in the bindings list with b->id NULL. */
5176 gcc_assert (I_TAG_BINDING (b
->id
) == b
);
5177 I_TAG_BINDING (b
->id
) = b
->shadowed
;
5180 /* Warn about any struct, union or enum tags defined in a
5181 parameter list. The scope of such types is limited to
5182 the parameter list, which is rarely if ever desirable
5183 (it's impossible to call such a function with type-
5184 correct arguments). An anonymous union parm type is
5185 meaningful as a GNU extension, so don't warn for that. */
5186 if (TREE_CODE (decl
) != UNION_TYPE
|| b
->id
!= 0)
5189 /* The %s will be one of 'struct', 'union', or 'enum'. */
5190 warning (0, "%<%s %E%> declared inside parameter list",
5193 /* The %s will be one of 'struct', 'union', or 'enum'. */
5194 warning (0, "anonymous %s declared inside parameter list",
5197 if (!explained_incomplete_types
)
5199 warning (0, "its scope is only this definition or declaration,"
5200 " which is probably not what you want");
5201 explained_incomplete_types
= true;
5205 tags
= tree_cons (b
->id
, decl
, tags
);
5211 /* CONST_DECLs appear here when we have an embedded enum,
5212 and TYPE_DECLs appear here when we have an embedded struct
5213 or union. No warnings for this - we already warned about the
5214 type itself. FUNCTION_DECLs appear when there is an implicit
5215 function declaration in the parameter list. */
5217 TREE_CHAIN (decl
) = others
;
5222 /* error_mark_node appears here when we have an undeclared
5223 variable. Just throw it away. */
5226 gcc_assert (I_SYMBOL_BINDING (b
->id
) == b
);
5227 I_SYMBOL_BINDING (b
->id
) = b
->shadowed
;
5231 /* Other things that might be encountered. */
5238 b
= free_binding_and_advance (b
);
5241 arg_info
->parms
= parms
;
5242 arg_info
->tags
= tags
;
5243 arg_info
->types
= types
;
5244 arg_info
->others
= others
;
5245 arg_info
->pending_sizes
= get_pending_sizes ();
5249 /* Get the struct, enum or union (CODE says which) with tag NAME.
5250 Define the tag as a forward-reference if it is not defined.
5251 Return a c_typespec structure for the type specifier. */
5254 parser_xref_tag (enum tree_code code
, tree name
)
5256 struct c_typespec ret
;
5257 /* If a cross reference is requested, look up the type
5258 already defined for this tag and return it. */
5260 tree ref
= lookup_tag (code
, name
, 0);
5261 /* If this is the right type of tag, return what we found.
5262 (This reference will be shadowed by shadow_tag later if appropriate.)
5263 If this is the wrong type of tag, do not return it. If it was the
5264 wrong type in the same scope, we will have had an error
5265 message already; if in a different scope and declaring
5266 a name, pending_xref_error will give an error message; but if in a
5267 different scope and not declaring a name, this tag should
5268 shadow the previous declaration of a different type of tag, and
5269 this would not work properly if we return the reference found.
5270 (For example, with "struct foo" in an outer scope, "union foo;"
5271 must shadow that tag with a new one of union type.) */
5272 ret
.kind
= (ref
? ctsk_tagref
: ctsk_tagfirstref
);
5273 if (ref
&& TREE_CODE (ref
) == code
)
5279 /* If no such tag is yet defined, create a forward-reference node
5280 and record it as the "definition".
5281 When a real declaration of this type is found,
5282 the forward-reference will be altered into a real type. */
5284 ref
= make_node (code
);
5285 if (code
== ENUMERAL_TYPE
)
5287 /* Give the type a default layout like unsigned int
5288 to avoid crashing if it does not get defined. */
5289 TYPE_MODE (ref
) = TYPE_MODE (unsigned_type_node
);
5290 TYPE_ALIGN (ref
) = TYPE_ALIGN (unsigned_type_node
);
5291 TYPE_USER_ALIGN (ref
) = 0;
5292 TYPE_UNSIGNED (ref
) = 1;
5293 TYPE_PRECISION (ref
) = TYPE_PRECISION (unsigned_type_node
);
5294 TYPE_MIN_VALUE (ref
) = TYPE_MIN_VALUE (unsigned_type_node
);
5295 TYPE_MAX_VALUE (ref
) = TYPE_MAX_VALUE (unsigned_type_node
);
5298 pushtag (name
, ref
);
5304 /* Get the struct, enum or union (CODE says which) with tag NAME.
5305 Define the tag as a forward-reference if it is not defined.
5306 Return a tree for the type. */
5309 xref_tag (enum tree_code code
, tree name
)
5311 return parser_xref_tag (code
, name
).spec
;
5314 /* Make sure that the tag NAME is defined *in the current scope*
5315 at least as a forward reference.
5316 CODE says which kind of tag NAME ought to be. */
5319 start_struct (enum tree_code code
, tree name
)
5321 /* If there is already a tag defined at this scope
5322 (as a forward reference), just return it. */
5327 ref
= lookup_tag (code
, name
, 1);
5328 if (ref
&& TREE_CODE (ref
) == code
)
5330 if (TYPE_SIZE (ref
))
5332 if (code
== UNION_TYPE
)
5333 error ("redefinition of %<union %E%>", name
);
5335 error ("redefinition of %<struct %E%>", name
);
5337 else if (C_TYPE_BEING_DEFINED (ref
))
5339 if (code
== UNION_TYPE
)
5340 error ("nested redefinition of %<union %E%>", name
);
5342 error ("nested redefinition of %<struct %E%>", name
);
5343 /* Don't create structures that contain themselves. */
5348 /* Otherwise create a forward-reference just so the tag is in scope. */
5350 if (ref
== NULL_TREE
|| TREE_CODE (ref
) != code
)
5352 ref
= make_node (code
);
5353 pushtag (name
, ref
);
5356 C_TYPE_BEING_DEFINED (ref
) = 1;
5357 TYPE_PACKED (ref
) = flag_pack_struct
;
5361 /* Process the specs, declarator and width (NULL if omitted)
5362 of a structure component, returning a FIELD_DECL node.
5363 WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node.
5364 DECL_ATTRS is as for grokdeclarator.
5366 LOC is the location of the structure component.
5368 This is done during the parsing of the struct declaration.
5369 The FIELD_DECL nodes are chained together and the lot of them
5370 are ultimately passed to `build_struct' to make the RECORD_TYPE node. */
5373 grokfield (location_t loc
,
5374 struct c_declarator
*declarator
, struct c_declspecs
*declspecs
,
5375 tree width
, tree
*decl_attrs
)
5379 if (declarator
->kind
== cdk_id
&& declarator
->u
.id
== NULL_TREE
5380 && width
== NULL_TREE
)
5382 /* This is an unnamed decl.
5384 If we have something of the form "union { list } ;" then this
5385 is the anonymous union extension. Similarly for struct.
5387 If this is something of the form "struct foo;", then
5388 If MS extensions are enabled, this is handled as an
5390 Otherwise this is a forward declaration of a structure tag.
5392 If this is something of the form "foo;" and foo is a TYPE_DECL, then
5393 If MS extensions are enabled and foo names a structure, then
5394 again this is an anonymous struct.
5395 Otherwise this is an error.
5397 Oh what a horrid tangled web we weave. I wonder if MS consciously
5398 took this from Plan 9 or if it was an accident of implementation
5399 that took root before someone noticed the bug... */
5401 tree type
= declspecs
->type
;
5402 bool type_ok
= (TREE_CODE (type
) == RECORD_TYPE
5403 || TREE_CODE (type
) == UNION_TYPE
);
5407 && (flag_ms_extensions
|| !declspecs
->typedef_p
))
5409 if (flag_ms_extensions
)
5413 else if (TYPE_NAME (type
) == NULL
)
5420 pedwarn (loc
, 0, "declaration does not declare anything");
5423 pedwarn (loc
, OPT_pedantic
, "ISO C doesn%'t support unnamed structs/unions");
5426 value
= grokdeclarator (declarator
, declspecs
, FIELD
, false,
5427 width
? &width
: NULL
, decl_attrs
,
5430 finish_decl (value
, NULL_TREE
, NULL_TREE
);
5431 DECL_INITIAL (value
) = width
;
5436 /* Generate an error for any duplicate field names in FIELDLIST. Munge
5437 the list such that this does not present a problem later. */
5440 detect_field_duplicates (tree fieldlist
)
5445 /* First, see if there are more than "a few" fields.
5446 This is trivially true if there are zero or one fields. */
5449 x
= TREE_CHAIN (fieldlist
);
5455 } while (timeout
> 0 && x
);
5457 /* If there were "few" fields, avoid the overhead of allocating
5458 a hash table. Instead just do the nested traversal thing. */
5461 for (x
= TREE_CHAIN (fieldlist
); x
; x
= TREE_CHAIN (x
))
5464 for (y
= fieldlist
; y
!= x
; y
= TREE_CHAIN (y
))
5465 if (DECL_NAME (y
) == DECL_NAME (x
))
5467 error ("duplicate member %q+D", x
);
5468 DECL_NAME (x
) = NULL_TREE
;
5474 htab_t htab
= htab_create (37, htab_hash_pointer
, htab_eq_pointer
, NULL
);
5477 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
5478 if ((y
= DECL_NAME (x
)) != 0)
5480 slot
= htab_find_slot (htab
, y
, INSERT
);
5483 error ("duplicate member %q+D", x
);
5484 DECL_NAME (x
) = NULL_TREE
;
5493 /* Fill in the fields of a RECORD_TYPE or UNION_TYPE node, T.
5494 FIELDLIST is a chain of FIELD_DECL nodes for the fields.
5495 ATTRIBUTES are attributes to be applied to the structure. */
5498 finish_struct (tree t
, tree fieldlist
, tree attributes
)
5501 bool toplevel
= file_scope
== current_scope
;
5502 int saw_named_field
;
5504 /* If this type was previously laid out as a forward reference,
5505 make sure we lay it out again. */
5509 decl_attributes (&t
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
5513 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
5514 if (DECL_NAME (x
) != 0)
5519 if (TREE_CODE (t
) == UNION_TYPE
)
5522 pedwarn (input_location
, OPT_pedantic
, "union has no named members");
5524 pedwarn (input_location
, OPT_pedantic
, "union has no members");
5529 pedwarn (input_location
, OPT_pedantic
, "struct has no named members");
5531 pedwarn (input_location
, OPT_pedantic
, "struct has no members");
5536 /* Install struct as DECL_CONTEXT of each field decl.
5537 Also process specified field sizes, found in the DECL_INITIAL,
5538 storing 0 there after the type has been changed to precision equal
5539 to its width, rather than the precision of the specified standard
5540 type. (Correct layout requires the original type to have been preserved
5543 saw_named_field
= 0;
5544 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
5546 if (TREE_TYPE (x
) == error_mark_node
)
5549 DECL_CONTEXT (x
) = t
;
5551 if (TYPE_PACKED (t
) && TYPE_ALIGN (TREE_TYPE (x
)) > BITS_PER_UNIT
)
5552 DECL_PACKED (x
) = 1;
5554 /* If any field is const, the structure type is pseudo-const. */
5555 if (TREE_READONLY (x
))
5556 C_TYPE_FIELDS_READONLY (t
) = 1;
5559 /* A field that is pseudo-const makes the structure likewise. */
5560 tree t1
= TREE_TYPE (x
);
5561 while (TREE_CODE (t1
) == ARRAY_TYPE
)
5562 t1
= TREE_TYPE (t1
);
5563 if ((TREE_CODE (t1
) == RECORD_TYPE
|| TREE_CODE (t1
) == UNION_TYPE
)
5564 && C_TYPE_FIELDS_READONLY (t1
))
5565 C_TYPE_FIELDS_READONLY (t
) = 1;
5568 /* Any field that is volatile means variables of this type must be
5569 treated in some ways as volatile. */
5570 if (TREE_THIS_VOLATILE (x
))
5571 C_TYPE_FIELDS_VOLATILE (t
) = 1;
5573 /* Any field of nominal variable size implies structure is too. */
5574 if (C_DECL_VARIABLE_SIZE (x
))
5575 C_TYPE_VARIABLE_SIZE (t
) = 1;
5577 if (DECL_INITIAL (x
))
5579 unsigned HOST_WIDE_INT width
= tree_low_cst (DECL_INITIAL (x
), 1);
5580 DECL_SIZE (x
) = bitsize_int (width
);
5581 DECL_BIT_FIELD (x
) = 1;
5582 SET_DECL_C_BIT_FIELD (x
);
5585 /* Detect flexible array member in an invalid context. */
5586 if (TREE_CODE (TREE_TYPE (x
)) == ARRAY_TYPE
5587 && TYPE_SIZE (TREE_TYPE (x
)) == NULL_TREE
5588 && TYPE_DOMAIN (TREE_TYPE (x
)) != NULL_TREE
5589 && TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (x
))) == NULL_TREE
)
5591 if (TREE_CODE (t
) == UNION_TYPE
)
5593 error ("%Jflexible array member in union", x
);
5594 TREE_TYPE (x
) = error_mark_node
;
5596 else if (TREE_CHAIN (x
) != NULL_TREE
)
5598 error ("%Jflexible array member not at end of struct", x
);
5599 TREE_TYPE (x
) = error_mark_node
;
5601 else if (!saw_named_field
)
5603 error ("%Jflexible array member in otherwise empty struct", x
);
5604 TREE_TYPE (x
) = error_mark_node
;
5608 if (pedantic
&& !in_system_header
&& TREE_CODE (t
) == RECORD_TYPE
5609 && flexible_array_type_p (TREE_TYPE (x
)))
5610 pedwarn (input_location
, OPT_pedantic
,
5611 "%Jinvalid use of structure with flexible array member", x
);
5614 saw_named_field
= 1;
5617 detect_field_duplicates (fieldlist
);
5619 /* Now we have the nearly final fieldlist. Record it,
5620 then lay out the structure or union (including the fields). */
5622 TYPE_FIELDS (t
) = fieldlist
;
5626 /* Give bit-fields their proper types. */
5628 tree
*fieldlistp
= &fieldlist
;
5630 if (TREE_CODE (*fieldlistp
) == FIELD_DECL
&& DECL_INITIAL (*fieldlistp
)
5631 && TREE_TYPE (*fieldlistp
) != error_mark_node
)
5633 unsigned HOST_WIDE_INT width
5634 = tree_low_cst (DECL_INITIAL (*fieldlistp
), 1);
5635 tree type
= TREE_TYPE (*fieldlistp
);
5636 if (width
!= TYPE_PRECISION (type
))
5638 TREE_TYPE (*fieldlistp
)
5639 = c_build_bitfield_integer_type (width
, TYPE_UNSIGNED (type
));
5640 DECL_MODE (*fieldlistp
) = TYPE_MODE (TREE_TYPE (*fieldlistp
));
5642 DECL_INITIAL (*fieldlistp
) = 0;
5645 fieldlistp
= &TREE_CHAIN (*fieldlistp
);
5648 /* Now we have the truly final field list.
5649 Store it in this type and in the variants. */
5651 TYPE_FIELDS (t
) = fieldlist
;
5653 /* If there are lots of fields, sort so we can look through them fast.
5654 We arbitrarily consider 16 or more elts to be "a lot". */
5659 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
5661 if (len
> 15 || DECL_NAME (x
) == NULL
)
5669 struct lang_type
*space
;
5670 struct sorted_fields_type
*space2
;
5672 len
+= list_length (x
);
5674 /* Use the same allocation policy here that make_node uses, to
5675 ensure that this lives as long as the rest of the struct decl.
5676 All decls in an inline function need to be saved. */
5678 space
= GGC_CNEW (struct lang_type
);
5679 space2
= GGC_NEWVAR (struct sorted_fields_type
,
5680 sizeof (struct sorted_fields_type
) + len
* sizeof (tree
));
5684 field_array
= &space2
->elts
[0];
5685 for (x
= fieldlist
; x
; x
= TREE_CHAIN (x
))
5687 field_array
[len
++] = x
;
5689 /* If there is anonymous struct or union, break out of the loop. */
5690 if (DECL_NAME (x
) == NULL
)
5693 /* Found no anonymous struct/union. Add the TYPE_LANG_SPECIFIC. */
5696 TYPE_LANG_SPECIFIC (t
) = space
;
5697 TYPE_LANG_SPECIFIC (t
)->s
->len
= len
;
5698 field_array
= TYPE_LANG_SPECIFIC (t
)->s
->elts
;
5699 qsort (field_array
, len
, sizeof (tree
), field_decl_cmp
);
5704 for (x
= TYPE_MAIN_VARIANT (t
); x
; x
= TYPE_NEXT_VARIANT (x
))
5706 TYPE_FIELDS (x
) = TYPE_FIELDS (t
);
5707 TYPE_LANG_SPECIFIC (x
) = TYPE_LANG_SPECIFIC (t
);
5708 C_TYPE_FIELDS_READONLY (x
) = C_TYPE_FIELDS_READONLY (t
);
5709 C_TYPE_FIELDS_VOLATILE (x
) = C_TYPE_FIELDS_VOLATILE (t
);
5710 C_TYPE_VARIABLE_SIZE (x
) = C_TYPE_VARIABLE_SIZE (t
);
5713 /* If this was supposed to be a transparent union, but we can't
5714 make it one, warn and turn off the flag. */
5715 if (TREE_CODE (t
) == UNION_TYPE
5716 && TYPE_TRANSPARENT_UNION (t
)
5717 && (!TYPE_FIELDS (t
) || TYPE_MODE (t
) != DECL_MODE (TYPE_FIELDS (t
))))
5719 TYPE_TRANSPARENT_UNION (t
) = 0;
5720 warning (0, "union cannot be made transparent");
5723 /* If this structure or union completes the type of any previous
5724 variable declaration, lay it out and output its rtl. */
5725 for (x
= C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t
));
5729 tree decl
= TREE_VALUE (x
);
5730 if (TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
)
5731 layout_array_type (TREE_TYPE (decl
));
5732 if (TREE_CODE (decl
) != TYPE_DECL
)
5734 layout_decl (decl
, 0);
5735 if (c_dialect_objc ())
5736 objc_check_decl (decl
);
5737 rest_of_decl_compilation (decl
, toplevel
, 0);
5742 C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t
)) = 0;
5744 /* Finish debugging output for this type. */
5745 rest_of_type_compilation (t
, toplevel
);
5747 /* If we're inside a function proper, i.e. not file-scope and not still
5748 parsing parameters, then arrange for the size of a variable sized type
5750 if (cur_stmt_list
&& variably_modified_type_p (t
, NULL_TREE
))
5751 add_stmt (build_stmt (DECL_EXPR
, build_decl (TYPE_DECL
, NULL
, t
)));
5756 /* Lay out the type T, and its element type, and so on. */
5759 layout_array_type (tree t
)
5761 if (TREE_CODE (TREE_TYPE (t
)) == ARRAY_TYPE
)
5762 layout_array_type (TREE_TYPE (t
));
5766 /* Begin compiling the definition of an enumeration type.
5767 NAME is its name (or null if anonymous).
5768 Returns the type object, as yet incomplete.
5769 Also records info about it so that build_enumerator
5770 may be used to declare the individual values as they are read. */
5773 start_enum (struct c_enum_contents
*the_enum
, tree name
)
5777 /* If this is the real definition for a previous forward reference,
5778 fill in the contents in the same object that used to be the
5779 forward reference. */
5782 enumtype
= lookup_tag (ENUMERAL_TYPE
, name
, 1);
5784 if (enumtype
== 0 || TREE_CODE (enumtype
) != ENUMERAL_TYPE
)
5786 enumtype
= make_node (ENUMERAL_TYPE
);
5787 pushtag (name
, enumtype
);
5790 if (C_TYPE_BEING_DEFINED (enumtype
))
5791 error ("nested redefinition of %<enum %E%>", name
);
5793 C_TYPE_BEING_DEFINED (enumtype
) = 1;
5795 if (TYPE_VALUES (enumtype
) != 0)
5797 /* This enum is a named one that has been declared already. */
5798 error ("redeclaration of %<enum %E%>", name
);
5800 /* Completely replace its old definition.
5801 The old enumerators remain defined, however. */
5802 TYPE_VALUES (enumtype
) = 0;
5805 the_enum
->enum_next_value
= integer_zero_node
;
5806 the_enum
->enum_overflow
= 0;
5808 if (flag_short_enums
)
5809 TYPE_PACKED (enumtype
) = 1;
5814 /* After processing and defining all the values of an enumeration type,
5815 install their decls in the enumeration type and finish it off.
5816 ENUMTYPE is the type object, VALUES a list of decl-value pairs,
5817 and ATTRIBUTES are the specified attributes.
5818 Returns ENUMTYPE. */
5821 finish_enum (tree enumtype
, tree values
, tree attributes
)
5824 tree minnode
= 0, maxnode
= 0;
5825 int precision
, unsign
;
5826 bool toplevel
= (file_scope
== current_scope
);
5827 struct lang_type
*lt
;
5829 decl_attributes (&enumtype
, attributes
, (int) ATTR_FLAG_TYPE_IN_PLACE
);
5831 /* Calculate the maximum value of any enumerator in this type. */
5833 if (values
== error_mark_node
)
5834 minnode
= maxnode
= integer_zero_node
;
5837 minnode
= maxnode
= TREE_VALUE (values
);
5838 for (pair
= TREE_CHAIN (values
); pair
; pair
= TREE_CHAIN (pair
))
5840 tree value
= TREE_VALUE (pair
);
5841 if (tree_int_cst_lt (maxnode
, value
))
5843 if (tree_int_cst_lt (value
, minnode
))
5848 /* Construct the final type of this enumeration. It is the same
5849 as one of the integral types - the narrowest one that fits, except
5850 that normally we only go as narrow as int - and signed iff any of
5851 the values are negative. */
5852 unsign
= (tree_int_cst_sgn (minnode
) >= 0);
5853 precision
= MAX (min_precision (minnode
, unsign
),
5854 min_precision (maxnode
, unsign
));
5856 if (TYPE_PACKED (enumtype
) || precision
> TYPE_PRECISION (integer_type_node
))
5858 tem
= c_common_type_for_size (precision
, unsign
);
5861 warning (0, "enumeration values exceed range of largest integer");
5862 tem
= long_long_integer_type_node
;
5866 tem
= unsign
? unsigned_type_node
: integer_type_node
;
5868 TYPE_MIN_VALUE (enumtype
) = TYPE_MIN_VALUE (tem
);
5869 TYPE_MAX_VALUE (enumtype
) = TYPE_MAX_VALUE (tem
);
5870 TYPE_UNSIGNED (enumtype
) = TYPE_UNSIGNED (tem
);
5871 TYPE_SIZE (enumtype
) = 0;
5873 /* If the precision of the type was specific with an attribute and it
5874 was too small, give an error. Otherwise, use it. */
5875 if (TYPE_PRECISION (enumtype
))
5877 if (precision
> TYPE_PRECISION (enumtype
))
5878 error ("specified mode too small for enumeral values");
5881 TYPE_PRECISION (enumtype
) = TYPE_PRECISION (tem
);
5883 layout_type (enumtype
);
5885 if (values
!= error_mark_node
)
5887 /* Change the type of the enumerators to be the enum type. We
5888 need to do this irrespective of the size of the enum, for
5889 proper type checking. Replace the DECL_INITIALs of the
5890 enumerators, and the value slots of the list, with copies
5891 that have the enum type; they cannot be modified in place
5892 because they may be shared (e.g. integer_zero_node) Finally,
5893 change the purpose slots to point to the names of the decls. */
5894 for (pair
= values
; pair
; pair
= TREE_CHAIN (pair
))
5896 tree enu
= TREE_PURPOSE (pair
);
5897 tree ini
= DECL_INITIAL (enu
);
5899 TREE_TYPE (enu
) = enumtype
;
5901 /* The ISO C Standard mandates enumerators to have type int,
5902 even though the underlying type of an enum type is
5903 unspecified. However, GCC allows enumerators of any
5904 integer type as an extensions. Here we convert any
5905 enumerators that fit in an int to type int, to avoid
5906 promotions to unsigned types when comparing integers with
5907 enumerators that fit in the int range. When -pedantic is
5908 given, build_enumerator() would have already warned about
5909 those that don't fit. */
5910 if (int_fits_type_p (ini
, integer_type_node
))
5911 tem
= integer_type_node
;
5914 ini
= convert (tem
, ini
);
5916 DECL_INITIAL (enu
) = ini
;
5917 TREE_PURPOSE (pair
) = DECL_NAME (enu
);
5918 TREE_VALUE (pair
) = ini
;
5921 TYPE_VALUES (enumtype
) = values
;
5924 /* Record the min/max values so that we can warn about bit-field
5925 enumerations that are too small for the values. */
5926 lt
= GGC_CNEW (struct lang_type
);
5927 lt
->enum_min
= minnode
;
5928 lt
->enum_max
= maxnode
;
5929 TYPE_LANG_SPECIFIC (enumtype
) = lt
;
5931 /* Fix up all variant types of this enum type. */
5932 for (tem
= TYPE_MAIN_VARIANT (enumtype
); tem
; tem
= TYPE_NEXT_VARIANT (tem
))
5934 if (tem
== enumtype
)
5936 TYPE_VALUES (tem
) = TYPE_VALUES (enumtype
);
5937 TYPE_MIN_VALUE (tem
) = TYPE_MIN_VALUE (enumtype
);
5938 TYPE_MAX_VALUE (tem
) = TYPE_MAX_VALUE (enumtype
);
5939 TYPE_SIZE (tem
) = TYPE_SIZE (enumtype
);
5940 TYPE_SIZE_UNIT (tem
) = TYPE_SIZE_UNIT (enumtype
);
5941 TYPE_MODE (tem
) = TYPE_MODE (enumtype
);
5942 TYPE_PRECISION (tem
) = TYPE_PRECISION (enumtype
);
5943 TYPE_ALIGN (tem
) = TYPE_ALIGN (enumtype
);
5944 TYPE_USER_ALIGN (tem
) = TYPE_USER_ALIGN (enumtype
);
5945 TYPE_UNSIGNED (tem
) = TYPE_UNSIGNED (enumtype
);
5946 TYPE_LANG_SPECIFIC (tem
) = TYPE_LANG_SPECIFIC (enumtype
);
5949 /* Finish debugging output for this type. */
5950 rest_of_type_compilation (enumtype
, toplevel
);
5955 /* Build and install a CONST_DECL for one value of the
5956 current enumeration type (one that was begun with start_enum).
5957 Return a tree-list containing the CONST_DECL and its value.
5958 Assignment of sequential values by default is handled here. */
5961 build_enumerator (struct c_enum_contents
*the_enum
, tree name
, tree value
,
5962 location_t value_loc
)
5966 /* Validate and default VALUE. */
5970 /* Don't issue more errors for error_mark_node (i.e. an
5971 undeclared identifier) - just ignore the value expression. */
5972 if (value
== error_mark_node
)
5974 else if (!INTEGRAL_TYPE_P (TREE_TYPE (value
))
5975 || TREE_CODE (value
) != INTEGER_CST
)
5977 error ("enumerator value for %qE is not an integer constant", name
);
5982 value
= default_conversion (value
);
5983 constant_expression_warning (value
);
5987 /* Default based on previous value. */
5988 /* It should no longer be possible to have NON_LVALUE_EXPR
5992 value
= the_enum
->enum_next_value
;
5993 if (the_enum
->enum_overflow
)
5994 error ("overflow in enumeration values");
5996 /* Even though the underlying type of an enum is unspecified, the
5997 type of enumeration constants is explicitly defined as int
5998 (6.4.4.3/2 in the C99 Standard). GCC allows any integer type as
6000 else if (!int_fits_type_p (value
, integer_type_node
))
6001 pedwarn (value_loc
, OPT_pedantic
,
6002 "ISO C restricts enumerator values to range of %<int%>");
6004 /* Set basis for default for next value. */
6005 the_enum
->enum_next_value
= build_binary_op (PLUS_EXPR
, value
,
6006 integer_one_node
, 0);
6007 the_enum
->enum_overflow
= tree_int_cst_lt (the_enum
->enum_next_value
, value
);
6009 /* Now create a declaration for the enum value name. */
6011 type
= TREE_TYPE (value
);
6012 type
= c_common_type_for_size (MAX (TYPE_PRECISION (type
),
6013 TYPE_PRECISION (integer_type_node
)),
6014 (TYPE_PRECISION (type
)
6015 >= TYPE_PRECISION (integer_type_node
)
6016 && TYPE_UNSIGNED (type
)));
6018 decl
= build_decl (CONST_DECL
, name
, type
);
6019 DECL_INITIAL (decl
) = convert (type
, value
);
6022 return tree_cons (decl
, value
, NULL_TREE
);
6026 /* Create the FUNCTION_DECL for a function definition.
6027 DECLSPECS, DECLARATOR and ATTRIBUTES are the parts of
6028 the declaration; they describe the function's name and the type it returns,
6029 but twisted together in a fashion that parallels the syntax of C.
6031 This function creates a binding context for the function body
6032 as well as setting up the FUNCTION_DECL in current_function_decl.
6034 Returns 1 on success. If the DECLARATOR is not suitable for a function
6035 (it defines a datum instead), we return 0, which tells
6036 yyparse to report a parse error. */
6039 start_function (struct c_declspecs
*declspecs
, struct c_declarator
*declarator
,
6042 tree decl1
, old_decl
;
6043 tree restype
, resdecl
;
6044 struct c_label_context_se
*nstack_se
;
6045 struct c_label_context_vm
*nstack_vm
;
6047 current_function_returns_value
= 0; /* Assume, until we see it does. */
6048 current_function_returns_null
= 0;
6049 current_function_returns_abnormally
= 0;
6050 warn_about_return_type
= 0;
6051 c_switch_stack
= NULL
;
6053 nstack_se
= XOBNEW (&parser_obstack
, struct c_label_context_se
);
6054 nstack_se
->labels_def
= NULL
;
6055 nstack_se
->labels_used
= NULL
;
6056 nstack_se
->next
= label_context_stack_se
;
6057 label_context_stack_se
= nstack_se
;
6059 nstack_vm
= XOBNEW (&parser_obstack
, struct c_label_context_vm
);
6060 nstack_vm
->labels_def
= NULL
;
6061 nstack_vm
->labels_used
= NULL
;
6062 nstack_vm
->scope
= 0;
6063 nstack_vm
->next
= label_context_stack_vm
;
6064 label_context_stack_vm
= nstack_vm
;
6066 /* Indicate no valid break/continue context by setting these variables
6067 to some non-null, non-label value. We'll notice and emit the proper
6068 error message in c_finish_bc_stmt. */
6069 c_break_label
= c_cont_label
= size_zero_node
;
6071 decl1
= grokdeclarator (declarator
, declspecs
, FUNCDEF
, true, NULL
,
6072 &attributes
, DEPRECATED_NORMAL
);
6074 /* If the declarator is not suitable for a function definition,
6075 cause a syntax error. */
6078 label_context_stack_se
= label_context_stack_se
->next
;
6079 label_context_stack_vm
= label_context_stack_vm
->next
;
6083 decl_attributes (&decl1
, attributes
, 0);
6085 if (DECL_DECLARED_INLINE_P (decl1
)
6086 && DECL_UNINLINABLE (decl1
)
6087 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl1
)))
6088 warning (OPT_Wattributes
, "inline function %q+D given attribute noinline",
6091 /* Handle gnu_inline attribute. */
6092 if (declspecs
->inline_p
6093 && !flag_gnu89_inline
6094 && TREE_CODE (decl1
) == FUNCTION_DECL
6095 && (lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (decl1
))
6096 || current_function_decl
))
6098 if (declspecs
->storage_class
!= csc_static
)
6099 DECL_EXTERNAL (decl1
) = !DECL_EXTERNAL (decl1
);
6102 announce_function (decl1
);
6104 if (!COMPLETE_OR_VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl1
))))
6106 error ("return type is an incomplete type");
6107 /* Make it return void instead. */
6109 = build_function_type (void_type_node
,
6110 TYPE_ARG_TYPES (TREE_TYPE (decl1
)));
6113 if (warn_about_return_type
)
6114 pedwarn_c99 (input_location
, flag_isoc99
? 0
6115 : (warn_return_type
? OPT_Wreturn_type
: OPT_Wimplicit_int
),
6116 "return type defaults to %<int%>");
6118 /* Make the init_value nonzero so pushdecl knows this is not tentative.
6119 error_mark_node is replaced below (in pop_scope) with the BLOCK. */
6120 DECL_INITIAL (decl1
) = error_mark_node
;
6122 /* If this definition isn't a prototype and we had a prototype declaration
6123 before, copy the arg type info from that prototype. */
6124 old_decl
= lookup_name_in_scope (DECL_NAME (decl1
), current_scope
);
6125 if (old_decl
&& TREE_CODE (old_decl
) != FUNCTION_DECL
)
6127 current_function_prototype_locus
= UNKNOWN_LOCATION
;
6128 current_function_prototype_built_in
= false;
6129 current_function_prototype_arg_types
= NULL_TREE
;
6130 if (TYPE_ARG_TYPES (TREE_TYPE (decl1
)) == 0)
6132 if (old_decl
!= 0 && TREE_CODE (TREE_TYPE (old_decl
)) == FUNCTION_TYPE
6133 && comptypes (TREE_TYPE (TREE_TYPE (decl1
)),
6134 TREE_TYPE (TREE_TYPE (old_decl
))))
6136 TREE_TYPE (decl1
) = composite_type (TREE_TYPE (old_decl
),
6138 current_function_prototype_locus
= DECL_SOURCE_LOCATION (old_decl
);
6139 current_function_prototype_built_in
6140 = C_DECL_BUILTIN_PROTOTYPE (old_decl
);
6141 current_function_prototype_arg_types
6142 = TYPE_ARG_TYPES (TREE_TYPE (decl1
));
6144 if (TREE_PUBLIC (decl1
))
6146 /* If there is an external prototype declaration of this
6147 function, record its location but do not copy information
6148 to this decl. This may be an invisible declaration
6149 (built-in or in a scope which has finished) or simply
6150 have more refined argument types than any declaration
6152 struct c_binding
*b
;
6153 for (b
= I_SYMBOL_BINDING (DECL_NAME (decl1
)); b
; b
= b
->shadowed
)
6154 if (B_IN_SCOPE (b
, external_scope
))
6158 tree ext_decl
, ext_type
;
6160 ext_type
= b
->type
? b
->type
: TREE_TYPE (ext_decl
);
6161 if (TREE_CODE (ext_type
) == FUNCTION_TYPE
6162 && comptypes (TREE_TYPE (TREE_TYPE (decl1
)),
6163 TREE_TYPE (ext_type
)))
6165 current_function_prototype_locus
6166 = DECL_SOURCE_LOCATION (ext_decl
);
6167 current_function_prototype_built_in
6168 = C_DECL_BUILTIN_PROTOTYPE (ext_decl
);
6169 current_function_prototype_arg_types
6170 = TYPE_ARG_TYPES (ext_type
);
6176 /* Optionally warn of old-fashioned def with no previous prototype. */
6177 if (warn_strict_prototypes
6178 && old_decl
!= error_mark_node
6179 && TYPE_ARG_TYPES (TREE_TYPE (decl1
)) == 0
6180 && C_DECL_ISNT_PROTOTYPE (old_decl
))
6181 warning (OPT_Wstrict_prototypes
,
6182 "function declaration isn%'t a prototype");
6183 /* Optionally warn of any global def with no previous prototype. */
6184 else if (warn_missing_prototypes
6185 && old_decl
!= error_mark_node
6186 && TREE_PUBLIC (decl1
)
6187 && !MAIN_NAME_P (DECL_NAME (decl1
))
6188 && C_DECL_ISNT_PROTOTYPE (old_decl
))
6189 warning (OPT_Wmissing_prototypes
, "no previous prototype for %q+D", decl1
);
6190 /* Optionally warn of any def with no previous prototype
6191 if the function has already been used. */
6192 else if (warn_missing_prototypes
6194 && old_decl
!= error_mark_node
6195 && TREE_USED (old_decl
)
6196 && TYPE_ARG_TYPES (TREE_TYPE (old_decl
)) == 0)
6197 warning (OPT_Wmissing_prototypes
,
6198 "%q+D was used with no prototype before its definition", decl1
);
6199 /* Optionally warn of any global def with no previous declaration. */
6200 else if (warn_missing_declarations
6201 && TREE_PUBLIC (decl1
)
6203 && !MAIN_NAME_P (DECL_NAME (decl1
)))
6204 warning (OPT_Wmissing_declarations
, "no previous declaration for %q+D",
6206 /* Optionally warn of any def with no previous declaration
6207 if the function has already been used. */
6208 else if (warn_missing_declarations
6210 && old_decl
!= error_mark_node
6211 && TREE_USED (old_decl
)
6212 && C_DECL_IMPLICIT (old_decl
))
6213 warning (OPT_Wmissing_declarations
,
6214 "%q+D was used with no declaration before its definition", decl1
);
6216 /* This function exists in static storage.
6217 (This does not mean `static' in the C sense!) */
6218 TREE_STATIC (decl1
) = 1;
6220 /* A nested function is not global. */
6221 if (current_function_decl
!= 0)
6222 TREE_PUBLIC (decl1
) = 0;
6224 /* This is the earliest point at which we might know the assembler
6225 name of the function. Thus, if it's set before this, die horribly. */
6226 gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl1
));
6228 /* If #pragma weak was used, mark the decl weak now. */
6229 if (current_scope
== file_scope
)
6230 maybe_apply_pragma_weak (decl1
);
6232 /* Warn for unlikely, improbable, or stupid declarations of `main'. */
6233 if (warn_main
&& MAIN_NAME_P (DECL_NAME (decl1
)))
6235 if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (decl1
)))
6236 != integer_type_node
)
6237 pedwarn (input_location
, OPT_Wmain
, "return type of %q+D is not %<int%>", decl1
);
6239 check_main_parameter_types (decl1
);
6241 if (!TREE_PUBLIC (decl1
))
6242 pedwarn (input_location
, OPT_Wmain
, "%q+D is normally a non-static function", decl1
);
6245 /* Record the decl so that the function name is defined.
6246 If we already have a decl for this name, and it is a FUNCTION_DECL,
6247 use the old decl. */
6249 current_function_decl
= pushdecl (decl1
);
6252 declare_parm_level ();
6254 restype
= TREE_TYPE (TREE_TYPE (current_function_decl
));
6255 resdecl
= build_decl (RESULT_DECL
, NULL_TREE
, restype
);
6256 DECL_ARTIFICIAL (resdecl
) = 1;
6257 DECL_IGNORED_P (resdecl
) = 1;
6258 DECL_RESULT (current_function_decl
) = resdecl
;
6260 start_fname_decls ();
6265 /* Subroutine of store_parm_decls which handles new-style function
6266 definitions (prototype format). The parms already have decls, so we
6267 need only record them as in effect and complain if any redundant
6268 old-style parm decls were written. */
6270 store_parm_decls_newstyle (tree fndecl
, const struct c_arg_info
*arg_info
)
6274 if (current_scope
->bindings
)
6276 error ("%Jold-style parameter declarations in prototyped "
6277 "function definition", fndecl
);
6279 /* Get rid of the old-style declarations. */
6283 /* Don't issue this warning for nested functions, and don't issue this
6284 warning if we got here because ARG_INFO_TYPES was error_mark_node
6285 (this happens when a function definition has just an ellipsis in
6286 its parameter list). */
6287 else if (!in_system_header
&& !current_function_scope
6288 && arg_info
->types
!= error_mark_node
)
6289 warning (OPT_Wtraditional
,
6290 "%Jtraditional C rejects ISO C style function definitions",
6293 /* Now make all the parameter declarations visible in the function body.
6294 We can bypass most of the grunt work of pushdecl. */
6295 for (decl
= arg_info
->parms
; decl
; decl
= TREE_CHAIN (decl
))
6297 DECL_CONTEXT (decl
) = current_function_decl
;
6298 if (DECL_NAME (decl
))
6300 bind (DECL_NAME (decl
), decl
, current_scope
,
6301 /*invisible=*/false, /*nested=*/false);
6302 if (!TREE_USED (decl
))
6303 warn_if_shadowing (decl
);
6306 error ("%Jparameter name omitted", decl
);
6309 /* Record the parameter list in the function declaration. */
6310 DECL_ARGUMENTS (fndecl
) = arg_info
->parms
;
6312 /* Now make all the ancillary declarations visible, likewise. */
6313 for (decl
= arg_info
->others
; decl
; decl
= TREE_CHAIN (decl
))
6315 DECL_CONTEXT (decl
) = current_function_decl
;
6316 if (DECL_NAME (decl
))
6317 bind (DECL_NAME (decl
), decl
, current_scope
,
6318 /*invisible=*/false, /*nested=*/false);
6321 /* And all the tag declarations. */
6322 for (decl
= arg_info
->tags
; decl
; decl
= TREE_CHAIN (decl
))
6323 if (TREE_PURPOSE (decl
))
6324 bind (TREE_PURPOSE (decl
), TREE_VALUE (decl
), current_scope
,
6325 /*invisible=*/false, /*nested=*/false);
6328 /* Subroutine of store_parm_decls which handles old-style function
6329 definitions (separate parameter list and declarations). */
6332 store_parm_decls_oldstyle (tree fndecl
, const struct c_arg_info
*arg_info
)
6334 struct c_binding
*b
;
6335 tree parm
, decl
, last
;
6336 tree parmids
= arg_info
->parms
;
6337 struct pointer_set_t
*seen_args
= pointer_set_create ();
6339 if (!in_system_header
)
6340 warning (OPT_Wold_style_definition
, "%Jold-style function definition",
6343 /* Match each formal parameter name with its declaration. Save each
6344 decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
6345 for (parm
= parmids
; parm
; parm
= TREE_CHAIN (parm
))
6347 if (TREE_VALUE (parm
) == 0)
6349 error ("%Jparameter name missing from parameter list", fndecl
);
6350 TREE_PURPOSE (parm
) = 0;
6354 b
= I_SYMBOL_BINDING (TREE_VALUE (parm
));
6355 if (b
&& B_IN_CURRENT_SCOPE (b
))
6358 /* If we got something other than a PARM_DECL it is an error. */
6359 if (TREE_CODE (decl
) != PARM_DECL
)
6360 error ("%q+D declared as a non-parameter", decl
);
6361 /* If the declaration is already marked, we have a duplicate
6362 name. Complain and ignore the duplicate. */
6363 else if (pointer_set_contains (seen_args
, decl
))
6365 error ("multiple parameters named %q+D", decl
);
6366 TREE_PURPOSE (parm
) = 0;
6369 /* If the declaration says "void", complain and turn it into
6371 else if (VOID_TYPE_P (TREE_TYPE (decl
)))
6373 error ("parameter %q+D declared with void type", decl
);
6374 TREE_TYPE (decl
) = integer_type_node
;
6375 DECL_ARG_TYPE (decl
) = integer_type_node
;
6376 layout_decl (decl
, 0);
6378 warn_if_shadowing (decl
);
6380 /* If no declaration found, default to int. */
6383 decl
= build_decl (PARM_DECL
, TREE_VALUE (parm
), integer_type_node
);
6384 DECL_ARG_TYPE (decl
) = TREE_TYPE (decl
);
6385 DECL_SOURCE_LOCATION (decl
) = DECL_SOURCE_LOCATION (fndecl
);
6387 warn_if_shadowing (decl
);
6390 pedwarn (input_location
, 0, "type of %q+D defaults to %<int%>", decl
);
6392 warning (OPT_Wmissing_parameter_type
, "type of %q+D defaults to %<int%>", decl
);
6395 TREE_PURPOSE (parm
) = decl
;
6396 pointer_set_insert (seen_args
, decl
);
6399 /* Now examine the parms chain for incomplete declarations
6400 and declarations with no corresponding names. */
6402 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
6405 if (TREE_CODE (parm
) != PARM_DECL
)
6408 if (TREE_TYPE (parm
) != error_mark_node
6409 && !COMPLETE_TYPE_P (TREE_TYPE (parm
)))
6411 error ("parameter %q+D has incomplete type", parm
);
6412 TREE_TYPE (parm
) = error_mark_node
;
6415 if (!pointer_set_contains (seen_args
, parm
))
6417 error ("declaration for parameter %q+D but no such parameter", parm
);
6419 /* Pretend the parameter was not missing.
6420 This gets us to a standard state and minimizes
6421 further error messages. */
6422 parmids
= chainon (parmids
, tree_cons (parm
, 0, 0));
6426 /* Chain the declarations together in the order of the list of
6427 names. Store that chain in the function decl, replacing the
6428 list of names. Update the current scope to match. */
6429 DECL_ARGUMENTS (fndecl
) = 0;
6431 for (parm
= parmids
; parm
; parm
= TREE_CHAIN (parm
))
6432 if (TREE_PURPOSE (parm
))
6434 if (parm
&& TREE_PURPOSE (parm
))
6436 last
= TREE_PURPOSE (parm
);
6437 DECL_ARGUMENTS (fndecl
) = last
;
6439 for (parm
= TREE_CHAIN (parm
); parm
; parm
= TREE_CHAIN (parm
))
6440 if (TREE_PURPOSE (parm
))
6442 TREE_CHAIN (last
) = TREE_PURPOSE (parm
);
6443 last
= TREE_PURPOSE (parm
);
6445 TREE_CHAIN (last
) = 0;
6448 pointer_set_destroy (seen_args
);
6450 /* If there was a previous prototype,
6451 set the DECL_ARG_TYPE of each argument according to
6452 the type previously specified, and report any mismatches. */
6454 if (current_function_prototype_arg_types
)
6457 for (parm
= DECL_ARGUMENTS (fndecl
),
6458 type
= current_function_prototype_arg_types
;
6459 parm
|| (type
&& TREE_VALUE (type
) != error_mark_node
6460 && (TYPE_MAIN_VARIANT (TREE_VALUE (type
)) != void_type_node
));
6461 parm
= TREE_CHAIN (parm
), type
= TREE_CHAIN (type
))
6463 if (parm
== 0 || type
== 0
6464 || TYPE_MAIN_VARIANT (TREE_VALUE (type
)) == void_type_node
)
6466 if (current_function_prototype_built_in
)
6467 warning (0, "number of arguments doesn%'t match "
6468 "built-in prototype");
6471 error ("number of arguments doesn%'t match prototype");
6472 error ("%Hprototype declaration",
6473 ¤t_function_prototype_locus
);
6477 /* Type for passing arg must be consistent with that
6478 declared for the arg. ISO C says we take the unqualified
6479 type for parameters declared with qualified type. */
6480 if (TREE_TYPE (parm
) != error_mark_node
6481 && TREE_TYPE (type
) != error_mark_node
6482 && !comptypes (TYPE_MAIN_VARIANT (DECL_ARG_TYPE (parm
)),
6483 TYPE_MAIN_VARIANT (TREE_VALUE (type
))))
6485 if (TYPE_MAIN_VARIANT (TREE_TYPE (parm
))
6486 == TYPE_MAIN_VARIANT (TREE_VALUE (type
)))
6488 /* Adjust argument to match prototype. E.g. a previous
6489 `int foo(float);' prototype causes
6490 `int foo(x) float x; {...}' to be treated like
6491 `int foo(float x) {...}'. This is particularly
6492 useful for argument types like uid_t. */
6493 DECL_ARG_TYPE (parm
) = TREE_TYPE (parm
);
6495 if (targetm
.calls
.promote_prototypes (TREE_TYPE (current_function_decl
))
6496 && INTEGRAL_TYPE_P (TREE_TYPE (parm
))
6497 && TYPE_PRECISION (TREE_TYPE (parm
))
6498 < TYPE_PRECISION (integer_type_node
))
6499 DECL_ARG_TYPE (parm
) = integer_type_node
;
6501 /* ??? Is it possible to get here with a
6502 built-in prototype or will it always have
6503 been diagnosed as conflicting with an
6504 old-style definition and discarded? */
6505 if (current_function_prototype_built_in
)
6506 warning (OPT_pedantic
, "promoted argument %qD "
6507 "doesn%'t match built-in prototype", parm
);
6510 pedwarn (input_location
, OPT_pedantic
, "promoted argument %qD "
6511 "doesn%'t match prototype", parm
);
6512 pedwarn (current_function_prototype_locus
, OPT_pedantic
,
6513 "prototype declaration");
6518 if (current_function_prototype_built_in
)
6519 warning (0, "argument %qD doesn%'t match "
6520 "built-in prototype", parm
);
6523 error ("argument %qD doesn%'t match prototype", parm
);
6524 error ("%Hprototype declaration",
6525 ¤t_function_prototype_locus
);
6530 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl
)) = 0;
6533 /* Otherwise, create a prototype that would match. */
6537 tree actual
= 0, last
= 0, type
;
6539 for (parm
= DECL_ARGUMENTS (fndecl
); parm
; parm
= TREE_CHAIN (parm
))
6541 type
= tree_cons (NULL_TREE
, DECL_ARG_TYPE (parm
), NULL_TREE
);
6543 TREE_CHAIN (last
) = type
;
6548 type
= tree_cons (NULL_TREE
, void_type_node
, NULL_TREE
);
6550 TREE_CHAIN (last
) = type
;
6554 /* We are going to assign a new value for the TYPE_ACTUAL_ARG_TYPES
6555 of the type of this function, but we need to avoid having this
6556 affect the types of other similarly-typed functions, so we must
6557 first force the generation of an identical (but separate) type
6558 node for the relevant function type. The new node we create
6559 will be a variant of the main variant of the original function
6562 TREE_TYPE (fndecl
) = build_variant_type_copy (TREE_TYPE (fndecl
));
6564 TYPE_ACTUAL_ARG_TYPES (TREE_TYPE (fndecl
)) = actual
;
6568 /* Store parameter declarations passed in ARG_INFO into the current
6569 function declaration. */
6572 store_parm_decls_from (struct c_arg_info
*arg_info
)
6574 current_function_arg_info
= arg_info
;
6575 store_parm_decls ();
6578 /* Store the parameter declarations into the current function declaration.
6579 This is called after parsing the parameter declarations, before
6580 digesting the body of the function.
6582 For an old-style definition, construct a prototype out of the old-style
6583 parameter declarations and inject it into the function's type. */
6586 store_parm_decls (void)
6588 tree fndecl
= current_function_decl
;
6591 /* The argument information block for FNDECL. */
6592 struct c_arg_info
*arg_info
= current_function_arg_info
;
6593 current_function_arg_info
= 0;
6595 /* True if this definition is written with a prototype. Note:
6596 despite C99 6.7.5.3p14, we can *not* treat an empty argument
6597 list in a function definition as equivalent to (void) -- an
6598 empty argument list specifies the function has no parameters,
6599 but only (void) sets up a prototype for future calls. */
6600 proto
= arg_info
->types
!= 0;
6603 store_parm_decls_newstyle (fndecl
, arg_info
);
6605 store_parm_decls_oldstyle (fndecl
, arg_info
);
6607 /* The next call to push_scope will be a function body. */
6609 next_is_function_body
= true;
6611 /* Write a record describing this function definition to the prototypes
6612 file (if requested). */
6614 gen_aux_info_record (fndecl
, 1, 0, proto
);
6616 /* Initialize the RTL code for the function. */
6617 allocate_struct_function (fndecl
, false);
6619 /* Begin the statement tree for this function. */
6620 DECL_SAVED_TREE (fndecl
) = push_stmt_list ();
6622 /* ??? Insert the contents of the pending sizes list into the function
6623 to be evaluated. The only reason left to have this is
6624 void foo(int n, int array[n++])
6625 because we throw away the array type in favor of a pointer type, and
6626 thus won't naturally see the SAVE_EXPR containing the increment. All
6627 other pending sizes would be handled by gimplify_parameters. */
6630 for (t
= nreverse (get_pending_sizes ()); t
; t
= TREE_CHAIN (t
))
6631 add_stmt (TREE_VALUE (t
));
6634 /* Even though we're inside a function body, we still don't want to
6635 call expand_expr to calculate the size of a variable-sized array.
6636 We haven't necessarily assigned RTL to all variables yet, so it's
6637 not safe to try to expand expressions involving them. */
6638 cfun
->dont_save_pending_sizes_p
= 1;
6641 /* Emit diagnostics that require gimple input for detection. Operate on
6642 FNDECL and all its nested functions. */
6645 c_gimple_diagnostics_recursively (tree fndecl
)
6647 struct cgraph_node
*cgn
;
6648 gimple_seq body
= gimple_body (fndecl
);
6650 /* Handle attribute((warn_unused_result)). Relies on gimple input. */
6651 c_warn_unused_result (body
);
6653 /* Notice when OpenMP structured block constraints are violated. */
6655 diagnose_omp_structured_block_errors (fndecl
);
6657 /* Finalize all nested functions now. */
6658 cgn
= cgraph_node (fndecl
);
6659 for (cgn
= cgn
->nested
; cgn
; cgn
= cgn
->next_nested
)
6660 c_gimple_diagnostics_recursively (cgn
->decl
);
6663 /* Finish up a function declaration and compile that function
6664 all the way to assembler language output. The free the storage
6665 for the function definition.
6667 This is called after parsing the body of the function definition. */
6670 finish_function (void)
6672 tree fndecl
= current_function_decl
;
6674 label_context_stack_se
= label_context_stack_se
->next
;
6675 label_context_stack_vm
= label_context_stack_vm
->next
;
6677 if (TREE_CODE (fndecl
) == FUNCTION_DECL
6678 && targetm
.calls
.promote_prototypes (TREE_TYPE (fndecl
)))
6680 tree args
= DECL_ARGUMENTS (fndecl
);
6681 for (; args
; args
= TREE_CHAIN (args
))
6683 tree type
= TREE_TYPE (args
);
6684 if (INTEGRAL_TYPE_P (type
)
6685 && TYPE_PRECISION (type
) < TYPE_PRECISION (integer_type_node
))
6686 DECL_ARG_TYPE (args
) = integer_type_node
;
6690 if (DECL_INITIAL (fndecl
) && DECL_INITIAL (fndecl
) != error_mark_node
)
6691 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl
)) = fndecl
;
6693 /* Must mark the RESULT_DECL as being in this function. */
6695 if (DECL_RESULT (fndecl
) && DECL_RESULT (fndecl
) != error_mark_node
)
6696 DECL_CONTEXT (DECL_RESULT (fndecl
)) = fndecl
;
6698 if (MAIN_NAME_P (DECL_NAME (fndecl
)) && flag_hosted
6699 && TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (fndecl
)))
6700 == integer_type_node
&& flag_isoc99
)
6702 tree stmt
= c_finish_return (integer_zero_node
);
6703 /* Hack. We don't want the middle-end to warn that this return
6704 is unreachable, so we mark its location as special. Using
6705 UNKNOWN_LOCATION has the problem that it gets clobbered in
6706 annotate_one_with_locus. A cleaner solution might be to
6707 ensure ! should_carry_locus_p (stmt), but that needs a flag.
6709 SET_EXPR_LOCATION (stmt
, BUILTINS_LOCATION
);
6712 /* Tie off the statement tree for this function. */
6713 DECL_SAVED_TREE (fndecl
) = pop_stmt_list (DECL_SAVED_TREE (fndecl
));
6715 finish_fname_decls ();
6717 /* Complain if there's just no return statement. */
6718 if (warn_return_type
6719 && TREE_CODE (TREE_TYPE (TREE_TYPE (fndecl
))) != VOID_TYPE
6720 && !current_function_returns_value
&& !current_function_returns_null
6721 /* Don't complain if we are no-return. */
6722 && !current_function_returns_abnormally
6723 /* Don't warn for main(). */
6724 && !MAIN_NAME_P (DECL_NAME (fndecl
))
6725 /* Or if they didn't actually specify a return type. */
6726 && !C_FUNCTION_IMPLICIT_INT (fndecl
)
6727 /* Normally, with -Wreturn-type, flow will complain, but we might
6728 optimize out static functions. */
6729 && !TREE_PUBLIC (fndecl
))
6731 warning (OPT_Wreturn_type
,
6732 "no return statement in function returning non-void");
6733 TREE_NO_WARNING (fndecl
) = 1;
6736 /* Store the end of the function, so that we get good line number
6737 info for the epilogue. */
6738 cfun
->function_end_locus
= input_location
;
6740 /* Finalize the ELF visibility for the function. */
6741 c_determine_visibility (fndecl
);
6743 /* For GNU C extern inline functions disregard inline limits. */
6744 if (DECL_EXTERNAL (fndecl
)
6745 && DECL_DECLARED_INLINE_P (fndecl
))
6746 DECL_DISREGARD_INLINE_LIMITS (fndecl
) = 1;
6748 /* Genericize before inlining. Delay genericizing nested functions
6749 until their parent function is genericized. Since finalizing
6750 requires GENERIC, delay that as well. */
6752 if (DECL_INITIAL (fndecl
) && DECL_INITIAL (fndecl
) != error_mark_node
6753 && !undef_nested_function
)
6755 if (!decl_function_context (fndecl
))
6757 c_genericize (fndecl
);
6758 c_gimple_diagnostics_recursively (fndecl
);
6760 /* ??? Objc emits functions after finalizing the compilation unit.
6761 This should be cleaned up later and this conditional removed. */
6762 if (cgraph_global_info_ready
)
6764 cgraph_add_new_function (fndecl
, false);
6768 cgraph_finalize_function (fndecl
, false);
6772 /* Register this function with cgraph just far enough to get it
6773 added to our parent's nested function list. Handy, since the
6774 C front end doesn't have such a list. */
6775 (void) cgraph_node (fndecl
);
6779 if (!decl_function_context (fndecl
))
6780 undef_nested_function
= false;
6782 /* We're leaving the context of this function, so zap cfun.
6783 It's still in DECL_STRUCT_FUNCTION, and we'll restore it in
6784 tree_rest_of_compilation. */
6786 current_function_decl
= NULL
;
6789 /* Check the declarations given in a for-loop for satisfying the C99
6790 constraints. If exactly one such decl is found, return it. */
6793 check_for_loop_decls (void)
6795 struct c_binding
*b
;
6796 tree one_decl
= NULL_TREE
;
6802 /* If we get here, declarations have been used in a for loop without
6803 the C99 for loop scope. This doesn't make much sense, so don't
6805 error ("%<for%> loop initial declaration used outside C99 mode");
6808 /* C99 subclause 6.8.5 paragraph 3:
6810 [#3] The declaration part of a for statement shall only
6811 declare identifiers for objects having storage class auto or
6814 It isn't clear whether, in this sentence, "identifiers" binds to
6815 "shall only declare" or to "objects" - that is, whether all identifiers
6816 declared must be identifiers for objects, or whether the restriction
6817 only applies to those that are. (A question on this in comp.std.c
6818 in November 2000 received no answer.) We implement the strictest
6819 interpretation, to avoid creating an extension which later causes
6822 for (b
= current_scope
->bindings
; b
; b
= b
->prev
)
6825 tree decl
= b
->decl
;
6830 switch (TREE_CODE (decl
))
6833 if (TREE_STATIC (decl
))
6834 error ("declaration of static variable %q+D in %<for%> loop "
6835 "initial declaration", decl
);
6836 else if (DECL_EXTERNAL (decl
))
6837 error ("declaration of %<extern%> variable %q+D in %<for%> loop "
6838 "initial declaration", decl
);
6842 error ("%<struct %E%> declared in %<for%> loop initial declaration",
6846 error ("%<union %E%> declared in %<for%> loop initial declaration",
6850 error ("%<enum %E%> declared in %<for%> loop initial declaration",
6854 error ("declaration of non-variable %q+D in %<for%> loop "
6855 "initial declaration", decl
);
6862 return n_decls
== 1 ? one_decl
: NULL_TREE
;
6865 /* Save and reinitialize the variables
6866 used during compilation of a C function. */
6869 c_push_function_context (void)
6871 struct language_function
*p
;
6872 p
= GGC_NEW (struct language_function
);
6875 p
->base
.x_stmt_tree
= c_stmt_tree
;
6876 p
->x_break_label
= c_break_label
;
6877 p
->x_cont_label
= c_cont_label
;
6878 p
->x_switch_stack
= c_switch_stack
;
6879 p
->arg_info
= current_function_arg_info
;
6880 p
->returns_value
= current_function_returns_value
;
6881 p
->returns_null
= current_function_returns_null
;
6882 p
->returns_abnormally
= current_function_returns_abnormally
;
6883 p
->warn_about_return_type
= warn_about_return_type
;
6885 push_function_context ();
6888 /* Restore the variables used during compilation of a C function. */
6891 c_pop_function_context (void)
6893 struct language_function
*p
;
6895 pop_function_context ();
6897 cfun
->language
= NULL
;
6899 if (DECL_STRUCT_FUNCTION (current_function_decl
) == 0
6900 && DECL_SAVED_TREE (current_function_decl
) == NULL_TREE
)
6902 /* Stop pointing to the local nodes about to be freed. */
6903 /* But DECL_INITIAL must remain nonzero so we know this
6904 was an actual function definition. */
6905 DECL_INITIAL (current_function_decl
) = error_mark_node
;
6906 DECL_ARGUMENTS (current_function_decl
) = 0;
6909 c_stmt_tree
= p
->base
.x_stmt_tree
;
6910 c_break_label
= p
->x_break_label
;
6911 c_cont_label
= p
->x_cont_label
;
6912 c_switch_stack
= p
->x_switch_stack
;
6913 current_function_arg_info
= p
->arg_info
;
6914 current_function_returns_value
= p
->returns_value
;
6915 current_function_returns_null
= p
->returns_null
;
6916 current_function_returns_abnormally
= p
->returns_abnormally
;
6917 warn_about_return_type
= p
->warn_about_return_type
;
6920 /* Copy the DECL_LANG_SPECIFIC data associated with DECL. */
6923 c_dup_lang_specific_decl (tree decl
)
6925 struct lang_decl
*ld
;
6927 if (!DECL_LANG_SPECIFIC (decl
))
6930 ld
= GGC_NEW (struct lang_decl
);
6931 memcpy (ld
, DECL_LANG_SPECIFIC (decl
), sizeof (struct lang_decl
));
6932 DECL_LANG_SPECIFIC (decl
) = ld
;
6935 /* The functions below are required for functionality of doing
6936 function at once processing in the C front end. Currently these
6937 functions are not called from anywhere in the C front end, but as
6938 these changes continue, that will change. */
6940 /* Returns the stmt_tree (if any) to which statements are currently
6941 being added. If there is no active statement-tree, NULL is
6945 current_stmt_tree (void)
6947 return &c_stmt_tree
;
6950 /* Nonzero if TYPE is an anonymous union or struct type. Always 0 in
6954 anon_aggr_type_p (const_tree
ARG_UNUSED (node
))
6959 /* Return the global value of T as a symbol. */
6962 identifier_global_value (tree t
)
6964 struct c_binding
*b
;
6966 for (b
= I_SYMBOL_BINDING (t
); b
; b
= b
->shadowed
)
6967 if (B_IN_FILE_SCOPE (b
) || B_IN_EXTERNAL_SCOPE (b
))
6973 /* Record a builtin type for C. If NAME is non-NULL, it is the name used;
6974 otherwise the name is found in ridpointers from RID_INDEX. */
6977 record_builtin_type (enum rid rid_index
, const char *name
, tree type
)
6981 id
= ridpointers
[(int) rid_index
];
6983 id
= get_identifier (name
);
6984 decl
= build_decl (TYPE_DECL
, id
, type
);
6986 if (debug_hooks
->type_decl
)
6987 debug_hooks
->type_decl (decl
, false);
6990 /* Build the void_list_node (void_type_node having been created). */
6992 build_void_list_node (void)
6994 tree t
= build_tree_list (NULL_TREE
, void_type_node
);
6998 /* Return a c_parm structure with the given SPECS, ATTRS and DECLARATOR. */
7001 build_c_parm (struct c_declspecs
*specs
, tree attrs
,
7002 struct c_declarator
*declarator
)
7004 struct c_parm
*ret
= XOBNEW (&parser_obstack
, struct c_parm
);
7007 ret
->declarator
= declarator
;
7011 /* Return a declarator with nested attributes. TARGET is the inner
7012 declarator to which these attributes apply. ATTRS are the
7015 struct c_declarator
*
7016 build_attrs_declarator (tree attrs
, struct c_declarator
*target
)
7018 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
7019 ret
->kind
= cdk_attrs
;
7020 ret
->declarator
= target
;
7021 ret
->u
.attrs
= attrs
;
7025 /* Return a declarator for a function with arguments specified by ARGS
7026 and return type specified by TARGET. */
7028 struct c_declarator
*
7029 build_function_declarator (struct c_arg_info
*args
,
7030 struct c_declarator
*target
)
7032 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
7033 ret
->kind
= cdk_function
;
7034 ret
->declarator
= target
;
7035 ret
->u
.arg_info
= args
;
7039 /* Return a declarator for the identifier IDENT (which may be
7040 NULL_TREE for an abstract declarator). */
7042 struct c_declarator
*
7043 build_id_declarator (tree ident
)
7045 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
7047 ret
->declarator
= 0;
7049 /* Default value - may get reset to a more precise location. */
7050 ret
->id_loc
= input_location
;
7054 /* Return something to represent absolute declarators containing a *.
7055 TARGET is the absolute declarator that the * contains.
7056 TYPE_QUALS_ATTRS is a structure for type qualifiers and attributes
7057 to apply to the pointer type. */
7059 struct c_declarator
*
7060 make_pointer_declarator (struct c_declspecs
*type_quals_attrs
,
7061 struct c_declarator
*target
)
7065 struct c_declarator
*itarget
= target
;
7066 struct c_declarator
*ret
= XOBNEW (&parser_obstack
, struct c_declarator
);
7067 if (type_quals_attrs
)
7069 attrs
= type_quals_attrs
->attrs
;
7070 quals
= quals_from_declspecs (type_quals_attrs
);
7071 if (attrs
!= NULL_TREE
)
7072 itarget
= build_attrs_declarator (attrs
, target
);
7074 ret
->kind
= cdk_pointer
;
7075 ret
->declarator
= itarget
;
7076 ret
->u
.pointer_quals
= quals
;
7080 /* Return a pointer to a structure for an empty list of declaration
7083 struct c_declspecs
*
7084 build_null_declspecs (void)
7086 struct c_declspecs
*ret
= XOBNEW (&parser_obstack
, struct c_declspecs
);
7090 ret
->typespec_word
= cts_none
;
7091 ret
->storage_class
= csc_none
;
7092 ret
->declspecs_seen_p
= false;
7093 ret
->type_seen_p
= false;
7094 ret
->non_sc_seen_p
= false;
7095 ret
->typedef_p
= false;
7096 ret
->tag_defined_p
= false;
7097 ret
->explicit_signed_p
= false;
7098 ret
->deprecated_p
= false;
7099 ret
->default_int_p
= false;
7100 ret
->long_p
= false;
7101 ret
->long_long_p
= false;
7102 ret
->short_p
= false;
7103 ret
->signed_p
= false;
7104 ret
->unsigned_p
= false;
7105 ret
->complex_p
= false;
7106 ret
->inline_p
= false;
7107 ret
->thread_p
= false;
7108 ret
->const_p
= false;
7109 ret
->volatile_p
= false;
7110 ret
->restrict_p
= false;
7111 ret
->saturating_p
= false;
7115 /* Add the type qualifier QUAL to the declaration specifiers SPECS,
7118 struct c_declspecs
*
7119 declspecs_add_qual (struct c_declspecs
*specs
, tree qual
)
7123 specs
->non_sc_seen_p
= true;
7124 specs
->declspecs_seen_p
= true;
7125 gcc_assert (TREE_CODE (qual
) == IDENTIFIER_NODE
7126 && C_IS_RESERVED_WORD (qual
));
7127 i
= C_RID_CODE (qual
);
7131 dupe
= specs
->const_p
;
7132 specs
->const_p
= true;
7135 dupe
= specs
->volatile_p
;
7136 specs
->volatile_p
= true;
7139 dupe
= specs
->restrict_p
;
7140 specs
->restrict_p
= true;
7145 if (dupe
&& !flag_isoc99
)
7146 pedwarn (input_location
, OPT_pedantic
, "duplicate %qE", qual
);
7150 /* Add the type specifier TYPE to the declaration specifiers SPECS,
7153 struct c_declspecs
*
7154 declspecs_add_type (struct c_declspecs
*specs
, struct c_typespec spec
)
7156 tree type
= spec
.spec
;
7157 specs
->non_sc_seen_p
= true;
7158 specs
->declspecs_seen_p
= true;
7159 specs
->type_seen_p
= true;
7160 if (TREE_DEPRECATED (type
))
7161 specs
->deprecated_p
= true;
7163 /* Handle type specifier keywords. */
7164 if (TREE_CODE (type
) == IDENTIFIER_NODE
7165 && C_IS_RESERVED_WORD (type
)
7166 && C_RID_CODE (type
) != RID_CXX_COMPAT_WARN
)
7168 enum rid i
= C_RID_CODE (type
);
7171 error ("two or more data types in declaration specifiers");
7174 if ((int) i
<= (int) RID_LAST_MODIFIER
)
7176 /* "long", "short", "signed", "unsigned", "_Complex" or "_Sat". */
7181 if (specs
->long_long_p
)
7183 error ("%<long long long%> is too long for GCC");
7188 if (specs
->typespec_word
== cts_double
)
7190 error ("both %<long long%> and %<double%> in "
7191 "declaration specifiers");
7194 if (pedantic
&& !flag_isoc99
&& !in_system_header
)
7195 pedwarn (input_location
, OPT_Wlong_long
, "ISO C90 does not support %<long long%>");
7196 specs
->long_long_p
= 1;
7200 error ("both %<long%> and %<short%> in "
7201 "declaration specifiers");
7202 else if (specs
->typespec_word
== cts_void
)
7203 error ("both %<long%> and %<void%> in "
7204 "declaration specifiers");
7205 else if (specs
->typespec_word
== cts_bool
)
7206 error ("both %<long%> and %<_Bool%> in "
7207 "declaration specifiers");
7208 else if (specs
->typespec_word
== cts_char
)
7209 error ("both %<long%> and %<char%> in "
7210 "declaration specifiers");
7211 else if (specs
->typespec_word
== cts_float
)
7212 error ("both %<long%> and %<float%> in "
7213 "declaration specifiers");
7214 else if (specs
->typespec_word
== cts_dfloat32
)
7215 error ("both %<long%> and %<_Decimal32%> in "
7216 "declaration specifiers");
7217 else if (specs
->typespec_word
== cts_dfloat64
)
7218 error ("both %<long%> and %<_Decimal64%> in "
7219 "declaration specifiers");
7220 else if (specs
->typespec_word
== cts_dfloat128
)
7221 error ("both %<long%> and %<_Decimal128%> in "
7222 "declaration specifiers");
7224 specs
->long_p
= true;
7227 dupe
= specs
->short_p
;
7229 error ("both %<long%> and %<short%> in "
7230 "declaration specifiers");
7231 else if (specs
->typespec_word
== cts_void
)
7232 error ("both %<short%> and %<void%> in "
7233 "declaration specifiers");
7234 else if (specs
->typespec_word
== cts_bool
)
7235 error ("both %<short%> and %<_Bool%> in "
7236 "declaration specifiers");
7237 else if (specs
->typespec_word
== cts_char
)
7238 error ("both %<short%> and %<char%> in "
7239 "declaration specifiers");
7240 else if (specs
->typespec_word
== cts_float
)
7241 error ("both %<short%> and %<float%> in "
7242 "declaration specifiers");
7243 else if (specs
->typespec_word
== cts_double
)
7244 error ("both %<short%> and %<double%> in "
7245 "declaration specifiers");
7246 else if (specs
->typespec_word
== cts_dfloat32
)
7247 error ("both %<short%> and %<_Decimal32%> in "
7248 "declaration specifiers");
7249 else if (specs
->typespec_word
== cts_dfloat64
)
7250 error ("both %<short%> and %<_Decimal64%> in "
7251 "declaration specifiers");
7252 else if (specs
->typespec_word
== cts_dfloat128
)
7253 error ("both %<short%> and %<_Decimal128%> in "
7254 "declaration specifiers");
7256 specs
->short_p
= true;
7259 dupe
= specs
->signed_p
;
7260 if (specs
->unsigned_p
)
7261 error ("both %<signed%> and %<unsigned%> in "
7262 "declaration specifiers");
7263 else if (specs
->typespec_word
== cts_void
)
7264 error ("both %<signed%> and %<void%> in "
7265 "declaration specifiers");
7266 else if (specs
->typespec_word
== cts_bool
)
7267 error ("both %<signed%> and %<_Bool%> in "
7268 "declaration specifiers");
7269 else if (specs
->typespec_word
== cts_float
)
7270 error ("both %<signed%> and %<float%> in "
7271 "declaration specifiers");
7272 else if (specs
->typespec_word
== cts_double
)
7273 error ("both %<signed%> and %<double%> in "
7274 "declaration specifiers");
7275 else if (specs
->typespec_word
== cts_dfloat32
)
7276 error ("both %<signed%> and %<_Decimal32%> in "
7277 "declaration specifiers");
7278 else if (specs
->typespec_word
== cts_dfloat64
)
7279 error ("both %<signed%> and %<_Decimal64%> in "
7280 "declaration specifiers");
7281 else if (specs
->typespec_word
== cts_dfloat128
)
7282 error ("both %<signed%> and %<_Decimal128%> in "
7283 "declaration specifiers");
7285 specs
->signed_p
= true;
7288 dupe
= specs
->unsigned_p
;
7289 if (specs
->signed_p
)
7290 error ("both %<signed%> and %<unsigned%> in "
7291 "declaration specifiers");
7292 else if (specs
->typespec_word
== cts_void
)
7293 error ("both %<unsigned%> and %<void%> in "
7294 "declaration specifiers");
7295 else if (specs
->typespec_word
== cts_bool
)
7296 error ("both %<unsigned%> and %<_Bool%> in "
7297 "declaration specifiers");
7298 else if (specs
->typespec_word
== cts_float
)
7299 error ("both %<unsigned%> and %<float%> in "
7300 "declaration specifiers");
7301 else if (specs
->typespec_word
== cts_double
)
7302 error ("both %<unsigned%> and %<double%> in "
7303 "declaration specifiers");
7304 else if (specs
->typespec_word
== cts_dfloat32
)
7305 error ("both %<unsigned%> and %<_Decimal32%> in "
7306 "declaration specifiers");
7307 else if (specs
->typespec_word
== cts_dfloat64
)
7308 error ("both %<unsigned%> and %<_Decimal64%> in "
7309 "declaration specifiers");
7310 else if (specs
->typespec_word
== cts_dfloat128
)
7311 error ("both %<unsigned%> and %<_Decimal128%> in "
7312 "declaration specifiers");
7314 specs
->unsigned_p
= true;
7317 dupe
= specs
->complex_p
;
7318 if (!flag_isoc99
&& !in_system_header
)
7319 pedwarn (input_location
, OPT_pedantic
, "ISO C90 does not support complex types");
7320 if (specs
->typespec_word
== cts_void
)
7321 error ("both %<complex%> and %<void%> in "
7322 "declaration specifiers");
7323 else if (specs
->typespec_word
== cts_bool
)
7324 error ("both %<complex%> and %<_Bool%> in "
7325 "declaration specifiers");
7326 else if (specs
->typespec_word
== cts_dfloat32
)
7327 error ("both %<complex%> and %<_Decimal32%> in "
7328 "declaration specifiers");
7329 else if (specs
->typespec_word
== cts_dfloat64
)
7330 error ("both %<complex%> and %<_Decimal64%> in "
7331 "declaration specifiers");
7332 else if (specs
->typespec_word
== cts_dfloat128
)
7333 error ("both %<complex%> and %<_Decimal128%> in "
7334 "declaration specifiers");
7335 else if (specs
->typespec_word
== cts_fract
)
7336 error ("both %<complex%> and %<_Fract%> in "
7337 "declaration specifiers");
7338 else if (specs
->typespec_word
== cts_accum
)
7339 error ("both %<complex%> and %<_Accum%> in "
7340 "declaration specifiers");
7341 else if (specs
->saturating_p
)
7342 error ("both %<complex%> and %<_Sat%> in "
7343 "declaration specifiers");
7345 specs
->complex_p
= true;
7348 dupe
= specs
->saturating_p
;
7349 pedwarn (input_location
, OPT_pedantic
, "ISO C does not support saturating types");
7350 if (specs
->typespec_word
== cts_void
)
7351 error ("both %<_Sat%> and %<void%> in "
7352 "declaration specifiers");
7353 else if (specs
->typespec_word
== cts_bool
)
7354 error ("both %<_Sat%> and %<_Bool%> in "
7355 "declaration specifiers");
7356 else if (specs
->typespec_word
== cts_char
)
7357 error ("both %<_Sat%> and %<char%> in "
7358 "declaration specifiers");
7359 else if (specs
->typespec_word
== cts_int
)
7360 error ("both %<_Sat%> and %<int%> in "
7361 "declaration specifiers");
7362 else if (specs
->typespec_word
== cts_float
)
7363 error ("both %<_Sat%> and %<float%> in "
7364 "declaration specifiers");
7365 else if (specs
->typespec_word
== cts_double
)
7366 error ("both %<_Sat%> and %<double%> in "
7367 "declaration specifiers");
7368 else if (specs
->typespec_word
== cts_dfloat32
)
7369 error ("both %<_Sat%> and %<_Decimal32%> in "
7370 "declaration specifiers");
7371 else if (specs
->typespec_word
== cts_dfloat64
)
7372 error ("both %<_Sat%> and %<_Decimal64%> in "
7373 "declaration specifiers");
7374 else if (specs
->typespec_word
== cts_dfloat128
)
7375 error ("both %<_Sat%> and %<_Decimal128%> in "
7376 "declaration specifiers");
7377 else if (specs
->complex_p
)
7378 error ("both %<_Sat%> and %<complex%> in "
7379 "declaration specifiers");
7381 specs
->saturating_p
= true;
7388 error ("duplicate %qE", type
);
7394 /* "void", "_Bool", "char", "int", "float", "double", "_Decimal32",
7395 "_Decimal64", "_Decimal128", "_Fract" or "_Accum". */
7396 if (specs
->typespec_word
!= cts_none
)
7398 error ("two or more data types in declaration specifiers");
7405 error ("both %<long%> and %<void%> in "
7406 "declaration specifiers");
7407 else if (specs
->short_p
)
7408 error ("both %<short%> and %<void%> in "
7409 "declaration specifiers");
7410 else if (specs
->signed_p
)
7411 error ("both %<signed%> and %<void%> in "
7412 "declaration specifiers");
7413 else if (specs
->unsigned_p
)
7414 error ("both %<unsigned%> and %<void%> in "
7415 "declaration specifiers");
7416 else if (specs
->complex_p
)
7417 error ("both %<complex%> and %<void%> in "
7418 "declaration specifiers");
7419 else if (specs
->saturating_p
)
7420 error ("both %<_Sat%> and %<void%> in "
7421 "declaration specifiers");
7423 specs
->typespec_word
= cts_void
;
7427 error ("both %<long%> and %<_Bool%> in "
7428 "declaration specifiers");
7429 else if (specs
->short_p
)
7430 error ("both %<short%> and %<_Bool%> in "
7431 "declaration specifiers");
7432 else if (specs
->signed_p
)
7433 error ("both %<signed%> and %<_Bool%> in "
7434 "declaration specifiers");
7435 else if (specs
->unsigned_p
)
7436 error ("both %<unsigned%> and %<_Bool%> in "
7437 "declaration specifiers");
7438 else if (specs
->complex_p
)
7439 error ("both %<complex%> and %<_Bool%> in "
7440 "declaration specifiers");
7441 else if (specs
->saturating_p
)
7442 error ("both %<_Sat%> and %<_Bool%> in "
7443 "declaration specifiers");
7445 specs
->typespec_word
= cts_bool
;
7449 error ("both %<long%> and %<char%> in "
7450 "declaration specifiers");
7451 else if (specs
->short_p
)
7452 error ("both %<short%> and %<char%> in "
7453 "declaration specifiers");
7454 else if (specs
->saturating_p
)
7455 error ("both %<_Sat%> and %<char%> in "
7456 "declaration specifiers");
7458 specs
->typespec_word
= cts_char
;
7461 if (specs
->saturating_p
)
7462 error ("both %<_Sat%> and %<int%> in "
7463 "declaration specifiers");
7465 specs
->typespec_word
= cts_int
;
7469 error ("both %<long%> and %<float%> in "
7470 "declaration specifiers");
7471 else if (specs
->short_p
)
7472 error ("both %<short%> and %<float%> in "
7473 "declaration specifiers");
7474 else if (specs
->signed_p
)
7475 error ("both %<signed%> and %<float%> in "
7476 "declaration specifiers");
7477 else if (specs
->unsigned_p
)
7478 error ("both %<unsigned%> and %<float%> in "
7479 "declaration specifiers");
7480 else if (specs
->saturating_p
)
7481 error ("both %<_Sat%> and %<float%> in "
7482 "declaration specifiers");
7484 specs
->typespec_word
= cts_float
;
7487 if (specs
->long_long_p
)
7488 error ("both %<long long%> and %<double%> in "
7489 "declaration specifiers");
7490 else if (specs
->short_p
)
7491 error ("both %<short%> and %<double%> in "
7492 "declaration specifiers");
7493 else if (specs
->signed_p
)
7494 error ("both %<signed%> and %<double%> in "
7495 "declaration specifiers");
7496 else if (specs
->unsigned_p
)
7497 error ("both %<unsigned%> and %<double%> in "
7498 "declaration specifiers");
7499 else if (specs
->saturating_p
)
7500 error ("both %<_Sat%> and %<double%> in "
7501 "declaration specifiers");
7503 specs
->typespec_word
= cts_double
;
7510 if (i
== RID_DFLOAT32
)
7512 else if (i
== RID_DFLOAT64
)
7515 str
= "_Decimal128";
7516 if (specs
->long_long_p
)
7517 error ("both %<long long%> and %<%s%> in "
7518 "declaration specifiers", str
);
7520 error ("both %<long%> and %<%s%> in "
7521 "declaration specifiers", str
);
7522 else if (specs
->short_p
)
7523 error ("both %<short%> and %<%s%> in "
7524 "declaration specifiers", str
);
7525 else if (specs
->signed_p
)
7526 error ("both %<signed%> and %<%s%> in "
7527 "declaration specifiers", str
);
7528 else if (specs
->unsigned_p
)
7529 error ("both %<unsigned%> and %<%s%> in "
7530 "declaration specifiers", str
);
7531 else if (specs
->complex_p
)
7532 error ("both %<complex%> and %<%s%> in "
7533 "declaration specifiers", str
);
7534 else if (specs
->saturating_p
)
7535 error ("both %<_Sat%> and %<%s%> in "
7536 "declaration specifiers", str
);
7537 else if (i
== RID_DFLOAT32
)
7538 specs
->typespec_word
= cts_dfloat32
;
7539 else if (i
== RID_DFLOAT64
)
7540 specs
->typespec_word
= cts_dfloat64
;
7542 specs
->typespec_word
= cts_dfloat128
;
7544 if (!targetm
.decimal_float_supported_p ())
7545 error ("decimal floating point not supported for this target");
7546 pedwarn (input_location
, OPT_pedantic
,
7547 "ISO C does not support decimal floating point");
7557 if (specs
->complex_p
)
7558 error ("both %<complex%> and %<%s%> in "
7559 "declaration specifiers", str
);
7560 else if (i
== RID_FRACT
)
7561 specs
->typespec_word
= cts_fract
;
7563 specs
->typespec_word
= cts_accum
;
7565 if (!targetm
.fixed_point_supported_p ())
7566 error ("fixed-point types not supported for this target");
7567 pedwarn (input_location
, OPT_pedantic
,
7568 "ISO C does not support fixed-point types");
7571 /* ObjC reserved word "id", handled below. */
7577 /* Now we have a typedef (a TYPE_DECL node), an identifier (some
7578 form of ObjC type, cases such as "int" and "long" being handled
7579 above), a TYPE (struct, union, enum and typeof specifiers) or an
7580 ERROR_MARK. In none of these cases may there have previously
7581 been any type specifiers. */
7582 if (specs
->type
|| specs
->typespec_word
!= cts_none
7583 || specs
->long_p
|| specs
->short_p
|| specs
->signed_p
7584 || specs
->unsigned_p
|| specs
->complex_p
)
7585 error ("two or more data types in declaration specifiers");
7586 else if (TREE_CODE (type
) == TYPE_DECL
)
7588 if (TREE_TYPE (type
) == error_mark_node
)
7589 ; /* Allow the type to default to int to avoid cascading errors. */
7592 specs
->type
= TREE_TYPE (type
);
7593 specs
->decl_attr
= DECL_ATTRIBUTES (type
);
7594 specs
->typedef_p
= true;
7595 specs
->explicit_signed_p
= C_TYPEDEF_EXPLICITLY_SIGNED (type
);
7598 else if (TREE_CODE (type
) == IDENTIFIER_NODE
)
7600 tree t
= lookup_name (type
);
7601 if (!t
|| TREE_CODE (t
) != TYPE_DECL
)
7602 error ("%qE fails to be a typedef or built in type", type
);
7603 else if (TREE_TYPE (t
) == error_mark_node
)
7606 specs
->type
= TREE_TYPE (t
);
7608 else if (TREE_CODE (type
) != ERROR_MARK
)
7610 if (spec
.kind
== ctsk_tagdef
|| spec
.kind
== ctsk_tagfirstref
)
7611 specs
->tag_defined_p
= true;
7612 if (spec
.kind
== ctsk_typeof
)
7613 specs
->typedef_p
= true;
7620 /* Add the storage class specifier or function specifier SCSPEC to the
7621 declaration specifiers SPECS, returning SPECS. */
7623 struct c_declspecs
*
7624 declspecs_add_scspec (struct c_declspecs
*specs
, tree scspec
)
7627 enum c_storage_class n
= csc_none
;
7629 specs
->declspecs_seen_p
= true;
7630 gcc_assert (TREE_CODE (scspec
) == IDENTIFIER_NODE
7631 && C_IS_RESERVED_WORD (scspec
));
7632 i
= C_RID_CODE (scspec
);
7633 if (specs
->non_sc_seen_p
)
7634 warning (OPT_Wold_style_declaration
,
7635 "%qE is not at beginning of declaration", scspec
);
7639 /* C99 permits duplicate inline. Although of doubtful utility,
7640 it seems simplest to permit it in gnu89 mode as well, as
7641 there is also little utility in maintaining this as a
7642 difference between gnu89 and C99 inline. */
7644 specs
->inline_p
= true;
7647 dupe
= specs
->thread_p
;
7648 if (specs
->storage_class
== csc_auto
)
7649 error ("%<__thread%> used with %<auto%>");
7650 else if (specs
->storage_class
== csc_register
)
7651 error ("%<__thread%> used with %<register%>");
7652 else if (specs
->storage_class
== csc_typedef
)
7653 error ("%<__thread%> used with %<typedef%>");
7655 specs
->thread_p
= true;
7662 /* Diagnose "__thread extern". */
7663 if (specs
->thread_p
)
7664 error ("%<__thread%> before %<extern%>");
7671 /* Diagnose "__thread static". */
7672 if (specs
->thread_p
)
7673 error ("%<__thread%> before %<static%>");
7681 if (n
!= csc_none
&& n
== specs
->storage_class
)
7684 error ("duplicate %qE", scspec
);
7687 if (specs
->storage_class
!= csc_none
&& n
!= specs
->storage_class
)
7689 error ("multiple storage classes in declaration specifiers");
7693 specs
->storage_class
= n
;
7694 if (n
!= csc_extern
&& n
!= csc_static
&& specs
->thread_p
)
7696 error ("%<__thread%> used with %qE", scspec
);
7697 specs
->thread_p
= false;
7704 /* Add the attributes ATTRS to the declaration specifiers SPECS,
7707 struct c_declspecs
*
7708 declspecs_add_attrs (struct c_declspecs
*specs
, tree attrs
)
7710 specs
->attrs
= chainon (attrs
, specs
->attrs
);
7711 specs
->declspecs_seen_p
= true;
7715 /* Combine "long", "short", "signed", "unsigned" and "_Complex" type
7716 specifiers with any other type specifier to determine the resulting
7717 type. This is where ISO C checks on complex types are made, since
7718 "_Complex long" is a prefix of the valid ISO C type "_Complex long
7721 struct c_declspecs
*
7722 finish_declspecs (struct c_declspecs
*specs
)
7724 /* If a type was specified as a whole, we have no modifiers and are
7726 if (specs
->type
!= NULL_TREE
)
7728 gcc_assert (!specs
->long_p
&& !specs
->long_long_p
&& !specs
->short_p
7729 && !specs
->signed_p
&& !specs
->unsigned_p
7730 && !specs
->complex_p
);
7734 /* If none of "void", "_Bool", "char", "int", "float" or "double"
7735 has been specified, treat it as "int" unless "_Complex" is
7736 present and there are no other specifiers. If we just have
7737 "_Complex", it is equivalent to "_Complex double", but e.g.
7738 "_Complex short" is equivalent to "_Complex short int". */
7739 if (specs
->typespec_word
== cts_none
)
7741 if (specs
->saturating_p
)
7743 error ("%<_Sat%> is used without %<_Fract%> or %<_Accum%>");
7744 specs
->typespec_word
= cts_fract
;
7746 else if (specs
->long_p
|| specs
->short_p
7747 || specs
->signed_p
|| specs
->unsigned_p
)
7749 specs
->typespec_word
= cts_int
;
7751 else if (specs
->complex_p
)
7753 specs
->typespec_word
= cts_double
;
7754 pedwarn (input_location
, OPT_pedantic
,
7755 "ISO C does not support plain %<complex%> meaning "
7756 "%<double complex%>");
7760 specs
->typespec_word
= cts_int
;
7761 specs
->default_int_p
= true;
7762 /* We don't diagnose this here because grokdeclarator will
7763 give more specific diagnostics according to whether it is
7764 a function definition. */
7768 /* If "signed" was specified, record this to distinguish "int" and
7769 "signed int" in the case of a bit-field with
7770 -funsigned-bitfields. */
7771 specs
->explicit_signed_p
= specs
->signed_p
;
7773 /* Now compute the actual type. */
7774 switch (specs
->typespec_word
)
7777 gcc_assert (!specs
->long_p
&& !specs
->short_p
7778 && !specs
->signed_p
&& !specs
->unsigned_p
7779 && !specs
->complex_p
);
7780 specs
->type
= void_type_node
;
7783 gcc_assert (!specs
->long_p
&& !specs
->short_p
7784 && !specs
->signed_p
&& !specs
->unsigned_p
7785 && !specs
->complex_p
);
7786 specs
->type
= boolean_type_node
;
7789 gcc_assert (!specs
->long_p
&& !specs
->short_p
);
7790 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
7791 if (specs
->signed_p
)
7792 specs
->type
= signed_char_type_node
;
7793 else if (specs
->unsigned_p
)
7794 specs
->type
= unsigned_char_type_node
;
7796 specs
->type
= char_type_node
;
7797 if (specs
->complex_p
)
7799 pedwarn (input_location
, OPT_pedantic
,
7800 "ISO C does not support complex integer types");
7801 specs
->type
= build_complex_type (specs
->type
);
7805 gcc_assert (!(specs
->long_p
&& specs
->short_p
));
7806 gcc_assert (!(specs
->signed_p
&& specs
->unsigned_p
));
7807 if (specs
->long_long_p
)
7808 specs
->type
= (specs
->unsigned_p
7809 ? long_long_unsigned_type_node
7810 : long_long_integer_type_node
);
7811 else if (specs
->long_p
)
7812 specs
->type
= (specs
->unsigned_p
7813 ? long_unsigned_type_node
7814 : long_integer_type_node
);
7815 else if (specs
->short_p
)
7816 specs
->type
= (specs
->unsigned_p
7817 ? short_unsigned_type_node
7818 : short_integer_type_node
);
7820 specs
->type
= (specs
->unsigned_p
7821 ? unsigned_type_node
7822 : integer_type_node
);
7823 if (specs
->complex_p
)
7825 pedwarn (input_location
, OPT_pedantic
,
7826 "ISO C does not support complex integer types");
7827 specs
->type
= build_complex_type (specs
->type
);
7831 gcc_assert (!specs
->long_p
&& !specs
->short_p
7832 && !specs
->signed_p
&& !specs
->unsigned_p
);
7833 specs
->type
= (specs
->complex_p
7834 ? complex_float_type_node
7838 gcc_assert (!specs
->long_long_p
&& !specs
->short_p
7839 && !specs
->signed_p
&& !specs
->unsigned_p
);
7842 specs
->type
= (specs
->complex_p
7843 ? complex_long_double_type_node
7844 : long_double_type_node
);
7848 specs
->type
= (specs
->complex_p
7849 ? complex_double_type_node
7850 : double_type_node
);
7856 gcc_assert (!specs
->long_p
&& !specs
->long_long_p
&& !specs
->short_p
7857 && !specs
->signed_p
&& !specs
->unsigned_p
&& !specs
->complex_p
);
7858 if (specs
->typespec_word
== cts_dfloat32
)
7859 specs
->type
= dfloat32_type_node
;
7860 else if (specs
->typespec_word
== cts_dfloat64
)
7861 specs
->type
= dfloat64_type_node
;
7863 specs
->type
= dfloat128_type_node
;
7866 gcc_assert (!specs
->complex_p
);
7867 if (specs
->saturating_p
)
7869 if (specs
->long_long_p
)
7870 specs
->type
= specs
->unsigned_p
7871 ? sat_unsigned_long_long_fract_type_node
7872 : sat_long_long_fract_type_node
;
7873 else if (specs
->long_p
)
7874 specs
->type
= specs
->unsigned_p
7875 ? sat_unsigned_long_fract_type_node
7876 : sat_long_fract_type_node
;
7877 else if (specs
->short_p
)
7878 specs
->type
= specs
->unsigned_p
7879 ? sat_unsigned_short_fract_type_node
7880 : sat_short_fract_type_node
;
7882 specs
->type
= specs
->unsigned_p
7883 ? sat_unsigned_fract_type_node
7884 : sat_fract_type_node
;
7888 if (specs
->long_long_p
)
7889 specs
->type
= specs
->unsigned_p
7890 ? unsigned_long_long_fract_type_node
7891 : long_long_fract_type_node
;
7892 else if (specs
->long_p
)
7893 specs
->type
= specs
->unsigned_p
7894 ? unsigned_long_fract_type_node
7895 : long_fract_type_node
;
7896 else if (specs
->short_p
)
7897 specs
->type
= specs
->unsigned_p
7898 ? unsigned_short_fract_type_node
7899 : short_fract_type_node
;
7901 specs
->type
= specs
->unsigned_p
7902 ? unsigned_fract_type_node
7907 gcc_assert (!specs
->complex_p
);
7908 if (specs
->saturating_p
)
7910 if (specs
->long_long_p
)
7911 specs
->type
= specs
->unsigned_p
7912 ? sat_unsigned_long_long_accum_type_node
7913 : sat_long_long_accum_type_node
;
7914 else if (specs
->long_p
)
7915 specs
->type
= specs
->unsigned_p
7916 ? sat_unsigned_long_accum_type_node
7917 : sat_long_accum_type_node
;
7918 else if (specs
->short_p
)
7919 specs
->type
= specs
->unsigned_p
7920 ? sat_unsigned_short_accum_type_node
7921 : sat_short_accum_type_node
;
7923 specs
->type
= specs
->unsigned_p
7924 ? sat_unsigned_accum_type_node
7925 : sat_accum_type_node
;
7929 if (specs
->long_long_p
)
7930 specs
->type
= specs
->unsigned_p
7931 ? unsigned_long_long_accum_type_node
7932 : long_long_accum_type_node
;
7933 else if (specs
->long_p
)
7934 specs
->type
= specs
->unsigned_p
7935 ? unsigned_long_accum_type_node
7936 : long_accum_type_node
;
7937 else if (specs
->short_p
)
7938 specs
->type
= specs
->unsigned_p
7939 ? unsigned_short_accum_type_node
7940 : short_accum_type_node
;
7942 specs
->type
= specs
->unsigned_p
7943 ? unsigned_accum_type_node
7954 /* A subroutine of c_write_global_declarations. Perform final processing
7955 on one file scope's declarations (or the external scope's declarations),
7959 c_write_global_declarations_1 (tree globals
)
7964 /* Process the decls in the order they were written. */
7965 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
7967 /* Check for used but undefined static functions using the C
7968 standard's definition of "used", and set TREE_NO_WARNING so
7969 that check_global_declarations doesn't repeat the check. */
7970 if (TREE_CODE (decl
) == FUNCTION_DECL
7971 && DECL_INITIAL (decl
) == 0
7972 && DECL_EXTERNAL (decl
)
7973 && !TREE_PUBLIC (decl
)
7974 && C_DECL_USED (decl
))
7976 pedwarn (input_location
, 0, "%q+F used but never defined", decl
);
7977 TREE_NO_WARNING (decl
) = 1;
7980 wrapup_global_declaration_1 (decl
);
7986 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
7987 reconsider
|= wrapup_global_declaration_2 (decl
);
7991 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
7992 check_global_declaration_1 (decl
);
7995 /* A subroutine of c_write_global_declarations Emit debug information for each
7996 of the declarations in GLOBALS. */
7999 c_write_global_declarations_2 (tree globals
)
8003 for (decl
= globals
; decl
; decl
= TREE_CHAIN (decl
))
8004 debug_hooks
->global_decl (decl
);
8007 /* Preserve the external declarations scope across a garbage collect. */
8008 static GTY(()) tree ext_block
;
8011 c_write_global_declarations (void)
8015 /* We don't want to do this if generating a PCH. */
8019 /* Don't waste time on further processing if -fsyntax-only or we've
8020 encountered errors. */
8021 if (flag_syntax_only
|| errorcount
|| sorrycount
|| cpp_errors (parse_in
))
8024 /* Close the external scope. */
8025 ext_block
= pop_scope ();
8027 gcc_assert (!current_scope
);
8031 tree tmp
= BLOCK_VARS (ext_block
);
8033 FILE * stream
= dump_begin (TDI_tu
, &flags
);
8036 dump_node (tmp
, flags
& ~TDF_SLIM
, stream
);
8037 dump_end (TDI_tu
, stream
);
8041 /* Process all file scopes in this compilation, and the external_scope,
8042 through wrapup_global_declarations and check_global_declarations. */
8043 for (t
= all_translation_units
; t
; t
= TREE_CHAIN (t
))
8044 c_write_global_declarations_1 (BLOCK_VARS (DECL_INITIAL (t
)));
8045 c_write_global_declarations_1 (BLOCK_VARS (ext_block
));
8047 /* We're done parsing; proceed to optimize and emit assembly.
8048 FIXME: shouldn't be the front end's responsibility to call this. */
8051 /* After cgraph has had a chance to emit everything that's going to
8052 be emitted, output debug information for globals. */
8053 if (errorcount
== 0 && sorrycount
== 0)
8055 timevar_push (TV_SYMOUT
);
8056 for (t
= all_translation_units
; t
; t
= TREE_CHAIN (t
))
8057 c_write_global_declarations_2 (BLOCK_VARS (DECL_INITIAL (t
)));
8058 c_write_global_declarations_2 (BLOCK_VARS (ext_block
));
8059 timevar_pop (TV_SYMOUT
);
8065 #include "gt-c-decl.h"