Deleted Added
full compact
3c3
< 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
---
> 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
19,20c19,20
< Software Foundation, 59 Temple Place - Suite 330, Boston, MA
< 02111-1307, USA. */
---
> Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
> 02110-1301, USA. */
25a26,27
> #include "toplev.h"
> #include "diagnostic.h"
27c29,32
< /* Language-dependent contents of an identifier. */
---
> /* struct lang_identifier is private to c-decl.c, but langhooks.c needs to
> know how big it is. This is sanity-checked in c-decl.c. */
> #define C_SIZEOF_STRUCT_LANG_IDENTIFIER \
> (sizeof (struct c_common_identifier) + 3 * sizeof (void *))
29,56d33
< /* The limbo_value is used for block level extern declarations, which need
< to be type checked against subsequent extern declarations. They can't
< be referenced after they fall out of scope, so they can't be global.
<
< The rid_code field is used for keywords. It is in all
< lang_identifier nodes, because some keywords are only special in a
< particular context. */
<
< struct lang_identifier GTY(())
< {
< struct c_common_identifier common_id;
< tree symbol_value;
< tree tag_value;
< tree label_value;
< };
<
< /* The resulting tree type. */
<
< union lang_tree_node
< GTY((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
< 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)")))
< {
< union tree_node GTY ((tag ("0"),
< desc ("tree_node_structure (&%h)")))
< generic;
< struct lang_identifier GTY ((tag ("1"))) identifier;
< };
<
61,64c38
< /* The return types and parameter types may have variable size.
< This is a list of any SAVE_EXPRs that need to be evaluated to
< compute those sizes. */
< tree pending_sizes;
---
> char dummy;
67,86d40
< /* Macros for access to language-specific slots in an identifier. */
< /* Each of these slots contains a DECL node or null. */
<
< /* The value of the identifier in the namespace of "ordinary identifiers"
< (data objects, enum constants, functions, typedefs). */
< #define IDENTIFIER_SYMBOL_VALUE(NODE) \
< (((struct lang_identifier *) (NODE))->symbol_value)
< /* The value of the identifier in the namespace of struct, union,
< and enum tags. */
< #define IDENTIFIER_TAG_VALUE(NODE) \
< (((struct lang_identifier *) (NODE))->tag_value)
< /* The value of the identifier in the namespace of labels. */
< #define IDENTIFIER_LABEL_VALUE(NODE) \
< (((struct lang_identifier *) (NODE))->label_value)
<
< /* In identifiers, C uses the following fields in a special way:
< TREE_PUBLIC to record that there was a previous local extern decl.
< TREE_USED to record that such a decl was used.
< TREE_ADDRESSABLE to record that the address of such a decl was used. */
<
106d59
< /* In a RECORD_TYPE, a sorted array of the fields of the type. */
108a62
> /* In a RECORD_TYPE, a sorted array of the fields of the type. */
109a64,70
> /* In an ENUMERAL_TYPE, the min and max values. */
> tree enum_min;
> tree enum_max;
> /* In a RECORD_TYPE, information specific to Objective-C, such
> as a list of adopted protocols or a pointer to a corresponding
> @interface. See objc/objc-act.h for details. */
> tree objc_info;
117,120d77
< /* Store a value in that field. */
< #define C_SET_EXP_ORIGINAL_CODE(EXP, CODE) \
< (TREE_COMPLEXITY (EXP) = (int) (CODE))
<
131,135c88,91
< /* Nonzero for a declaration of an external object which is not
< currently in scope. This is either a built-in declaration of
< a library function, before a real declaration has been seen,
< or a declaration that appeared in an inner scope that has ended. */
< #define C_DECL_INVISIBLE(EXP) DECL_LANG_FLAG_3 (EXP)
---
> /* For FUNCTION_DECLs, evaluates true if the decl is built-in but has
> been declared. */
> #define C_DECL_DECLARED_BUILTIN(EXP) \
> DECL_LANG_FLAG_3 (FUNCTION_DECL_CHECK (EXP))
136a93,135
> /* For FUNCTION_DECLs, evaluates true if the decl is built-in, has a
> built-in prototype and does not have a non-built-in prototype. */
> #define C_DECL_BUILTIN_PROTOTYPE(EXP) \
> DECL_LANG_FLAG_6 (FUNCTION_DECL_CHECK (EXP))
>
> /* Record whether a decl was declared register. This is strictly a
> front-end flag, whereas DECL_REGISTER is used for code generation;
> they may differ for structures with volatile fields. */
> #define C_DECL_REGISTER(EXP) DECL_LANG_FLAG_4 (EXP)
>
> /* Record whether a decl was used in an expression anywhere except an
> unevaluated operand of sizeof / typeof / alignof. This is only
> used for functions declared static but not defined, though outside
> sizeof and typeof it is set for other function decls as well. */
> #define C_DECL_USED(EXP) DECL_LANG_FLAG_5 (FUNCTION_DECL_CHECK (EXP))
>
> /* Record whether a label was defined in a statement expression which
> has finished and so can no longer be jumped to. */
> #define C_DECL_UNJUMPABLE_STMT_EXPR(EXP) \
> DECL_LANG_FLAG_6 (LABEL_DECL_CHECK (EXP))
>
> /* Record whether a label was the subject of a goto from outside the
> current level of statement expression nesting and so cannot be
> defined right now. */
> #define C_DECL_UNDEFINABLE_STMT_EXPR(EXP) \
> DECL_LANG_FLAG_7 (LABEL_DECL_CHECK (EXP))
>
> /* Record whether a label was defined in the scope of an identifier
> with variably modified type which has finished and so can no longer
> be jumped to. */
> #define C_DECL_UNJUMPABLE_VM(EXP) \
> DECL_LANG_FLAG_3 (LABEL_DECL_CHECK (EXP))
>
> /* Record whether a label was the subject of a goto from outside the
> current level of scopes of identifiers with variably modified type
> and so cannot be defined right now. */
> #define C_DECL_UNDEFINABLE_VM(EXP) \
> DECL_LANG_FLAG_5 (LABEL_DECL_CHECK (EXP))
>
> /* Record whether a variable has been declared threadprivate by
> #pragma omp threadprivate. */
> #define C_DECL_THREADPRIVATE_P(DECL) DECL_LANG_FLAG_3 (VAR_DECL_CHECK (DECL))
>
148c147
< #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_BINFO (NODE)
---
> #define TYPE_ACTUAL_ARG_TYPES(NODE) TYPE_LANG_SLOT_1 (NODE)
150,153c149,160
< /* Values for the first parameter to poplevel. */
< #define KEEP_NO 0
< #define KEEP_YES 1
< #define KEEP_MAYBE 2
---
> /* Record parser information about an expression that is irrelevant
> for code generation alongside a tree representing its value. */
> struct c_expr
> {
> /* The value of the expression. */
> tree value;
> /* Record the original binary operator of an expression, which may
> have been changed by fold, STRING_CST for unparenthesized string
> constants, or ERROR_MARK for other expressions (including
> parenthesized expressions). */
> enum tree_code original_code;
> };
154a162,371
> /* A kind of type specifier. Note that this information is currently
> only used to distinguish tag definitions, tag references and typeof
> uses. */
> enum c_typespec_kind {
> /* A reserved keyword type specifier. */
> ctsk_resword,
> /* A reference to a tag, previously declared, such as "struct foo".
> This includes where the previous declaration was as a different
> kind of tag, in which case this is only valid if shadowing that
> tag in an inner scope. */
> ctsk_tagref,
> /* A reference to a tag, not previously declared in a visible
> scope. */
> ctsk_tagfirstref,
> /* A definition of a tag such as "struct foo { int a; }". */
> ctsk_tagdef,
> /* A typedef name. */
> ctsk_typedef,
> /* An ObjC-specific kind of type specifier. */
> ctsk_objc,
> /* A typeof specifier. */
> ctsk_typeof
> };
>
> /* A type specifier: this structure is created in the parser and
> passed to declspecs_add_type only. */
> struct c_typespec {
> /* What kind of type specifier this is. */
> enum c_typespec_kind kind;
> /* The specifier itself. */
> tree spec;
> };
>
> /* A storage class specifier. */
> enum c_storage_class {
> csc_none,
> csc_auto,
> csc_extern,
> csc_register,
> csc_static,
> csc_typedef
> };
>
> /* A type specifier keyword "void", "_Bool", "char", "int", "float",
> "double", or none of these. */
> enum c_typespec_keyword {
> cts_none,
> cts_void,
> cts_bool,
> cts_char,
> cts_int,
> cts_float,
> cts_double,
> cts_dfloat32,
> cts_dfloat64,
> cts_dfloat128
> };
>
> /* A sequence of declaration specifiers in C. */
> struct c_declspecs {
> /* The type specified, if a single type specifier such as a struct,
> union or enum specifier, typedef name or typeof specifies the
> whole type, or NULL_TREE if none or a keyword such as "void" or
> "char" is used. Does not include qualifiers. */
> tree type;
> /* The attributes from a typedef decl. */
> tree decl_attr;
> /* When parsing, the attributes. Outside the parser, this will be
> NULL; attributes (possibly from multiple lists) will be passed
> separately. */
> tree attrs;
> /* Any type specifier keyword used such as "int", not reflecting
> modifiers such as "short", or cts_none if none. */
> enum c_typespec_keyword typespec_word;
> /* The storage class specifier, or csc_none if none. */
> enum c_storage_class storage_class;
> /* Whether any declaration specifiers have been seen at all. */
> BOOL_BITFIELD declspecs_seen_p : 1;
> /* Whether a type specifier has been seen. */
> BOOL_BITFIELD type_seen_p : 1;
> /* Whether something other than a storage class specifier or
> attribute has been seen. This is used to warn for the
> obsolescent usage of storage class specifiers other than at the
> start of the list. (Doing this properly would require function
> specifiers to be handled separately from storage class
> specifiers.) */
> BOOL_BITFIELD non_sc_seen_p : 1;
> /* Whether the type is specified by a typedef or typeof name. */
> BOOL_BITFIELD typedef_p : 1;
> /* Whether a struct, union or enum type either had its content
> defined by a type specifier in the list or was the first visible
> declaration of its tag. */
> BOOL_BITFIELD tag_defined_p : 1;
> /* Whether the type is explicitly "signed" or specified by a typedef
> whose type is explicitly "signed". */
> BOOL_BITFIELD explicit_signed_p : 1;
> /* Whether the specifiers include a deprecated typedef. */
> BOOL_BITFIELD deprecated_p : 1;
> /* Whether the type defaulted to "int" because there were no type
> specifiers. */
> BOOL_BITFIELD default_int_p;
> /* Whether "long" was specified. */
> BOOL_BITFIELD long_p : 1;
> /* Whether "long" was specified more than once. */
> BOOL_BITFIELD long_long_p : 1;
> /* Whether "short" was specified. */
> BOOL_BITFIELD short_p : 1;
> /* Whether "signed" was specified. */
> BOOL_BITFIELD signed_p : 1;
> /* Whether "unsigned" was specified. */
> BOOL_BITFIELD unsigned_p : 1;
> /* Whether "complex" was specified. */
> BOOL_BITFIELD complex_p : 1;
> /* Whether "inline" was specified. */
> BOOL_BITFIELD inline_p : 1;
> /* Whether "__thread" was specified. */
> BOOL_BITFIELD thread_p : 1;
> /* Whether "const" was specified. */
> BOOL_BITFIELD const_p : 1;
> /* Whether "volatile" was specified. */
> BOOL_BITFIELD volatile_p : 1;
> /* Whether "restrict" was specified. */
> BOOL_BITFIELD restrict_p : 1;
> };
>
> /* The various kinds of declarators in C. */
> enum c_declarator_kind {
> /* An identifier. */
> cdk_id,
> /* A function. */
> cdk_function,
> /* An array. */
> cdk_array,
> /* A pointer. */
> cdk_pointer,
> /* Parenthesized declarator with nested attributes. */
> cdk_attrs
> };
>
> /* Information about the parameters in a function declarator. */
> struct c_arg_info {
> /* A list of parameter decls. */
> tree parms;
> /* A list of structure, union and enum tags defined. */
> tree tags;
> /* A list of argument types to go in the FUNCTION_TYPE. */
> tree types;
> /* A list of non-parameter decls (notably enumeration constants)
> defined with the parameters. */
> tree others;
> /* A list of VLA sizes from the parameters. In a function
> definition, these are used to ensure that side-effects in sizes
> of arrays converted to pointers (such as a parameter int i[n++])
> take place; otherwise, they are ignored. */
> tree pending_sizes;
> /* True when these arguments had [*]. */
> BOOL_BITFIELD had_vla_unspec : 1;
> };
>
> /* A declarator. */
> struct c_declarator {
> /* The kind of declarator. */
> enum c_declarator_kind kind;
> /* Except for cdk_id, the contained declarator. For cdk_id, NULL. */
> struct c_declarator *declarator;
> location_t id_loc; /* Currently only set for cdk_id. */
> union {
> /* For identifiers, an IDENTIFIER_NODE or NULL_TREE if an abstract
> declarator. */
> tree id;
> /* For functions. */
> struct c_arg_info *arg_info;
> /* For arrays. */
> struct {
> /* The array dimension, or NULL for [] and [*]. */
> tree dimen;
> /* The qualifiers inside []. */
> int quals;
> /* The attributes (currently ignored) inside []. */
> tree attrs;
> /* Whether [static] was used. */
> BOOL_BITFIELD static_p : 1;
> /* Whether [*] was used. */
> BOOL_BITFIELD vla_unspec_p : 1;
> } array;
> /* For pointers, the qualifiers on the pointer type. */
> int pointer_quals;
> /* For attributes. */
> tree attrs;
> } u;
> };
>
> /* A type name. */
> struct c_type_name {
> /* The declaration specifiers. */
> struct c_declspecs *specs;
> /* The declarator. */
> struct c_declarator *declarator;
> };
>
> /* A parameter. */
> struct c_parm {
> /* The declaration specifiers, minus any prefix attributes. */
> struct c_declspecs *specs;
> /* The attributes. */
> tree attrs;
> /* The declarator. */
> struct c_declarator *declarator;
> };
>
161a379,382
> tree x_break_label;
> tree x_cont_label;
> struct c_switch * GTY((skip)) x_switch_stack;
> struct c_arg_info * GTY((skip)) arg_info;
167,168d387
< int x_in_iteration_stmt;
< int x_in_case_stmt;
170a390,428
> /* Save lists of labels used or defined in particular contexts.
> Allocated on the parser obstack. */
>
> struct c_label_list
> {
> /* The label at the head of the list. */
> tree label;
> /* The rest of the list. */
> struct c_label_list *next;
> };
>
> /* Statement expression context. */
>
> struct c_label_context_se
> {
> /* The labels defined at this level of nesting. */
> struct c_label_list *labels_def;
> /* The labels used at this level of nesting. */
> struct c_label_list *labels_used;
> /* The next outermost context. */
> struct c_label_context_se *next;
> };
>
> /* Context of variably modified declarations. */
>
> struct c_label_context_vm
> {
> /* The labels defined at this level of nesting. */
> struct c_label_list *labels_def;
> /* The labels used at this level of nesting. */
> struct c_label_list *labels_used;
> /* The scope of this context. Multiple contexts may be at the same
> numbered scope, since each variably modified declaration starts a
> new context. */
> unsigned scope;
> /* The next outermost context. */
> struct c_label_context_vm *next;
> };
>
172c430
< /* in c-parse.in */
---
> /* in c-parser.c */
179,180c437,439
< extern int c_in_iteration_stmt;
< extern int c_in_case_stmt;
---
> extern struct obstack parser_obstack;
> extern tree c_break_label;
> extern tree c_cont_label;
183,184c442,443
< extern tree getdecls (void);
< extern void pushlevel (int);
---
> extern void push_scope (void);
> extern tree pop_scope (void);
186,187d444
< extern void set_block (tree);
< extern tree pushdecl (tree);
193c450,452
< extern tree build_array_declarator (tree, tree, int, int);
---
> extern int quals_from_declspecs (const struct c_declspecs *);
> extern struct c_declarator *build_array_declarator (tree, struct c_declspecs *,
> bool, bool);
195c454
< extern void check_for_loop_decls (void);
---
> extern tree check_for_loop_decls (void);
197d455
< extern int complete_array_type (tree, tree, int);
199c457
< extern void undeclared_variable (tree);
---
> extern void undeclared_variable (tree, location_t);
201a460
> extern void c_maybe_initialize_eh (void);
206,209c465,468
< extern tree get_parm_info (int);
< extern tree grokfield (tree, tree, tree);
< extern tree groktypename (tree);
< extern tree groktypename_in_parm_context (tree);
---
> extern struct c_arg_info *get_parm_info (bool);
> extern tree grokfield (struct c_declarator *, struct c_declspecs *, tree);
> extern tree groktypename (struct c_type_name *);
> extern tree grokparm (const struct c_parm *);
211d469
< extern int in_parm_level_p (void);
213d470
< extern tree lookup_name (tree);
217,222c474,481
< extern void push_parm_decl (tree);
< extern tree pushdecl_top_level (tree);
< extern void pushtag (tree, tree);
< extern tree set_array_declarator_type (tree, tree, int);
< extern void shadow_tag (tree);
< extern void shadow_tag_warned (tree, int);
---
> extern void push_parm_decl (const struct c_parm *);
> extern struct c_declarator *set_array_declarator_inner (struct c_declarator *,
> struct c_declarator *,
> bool);
> extern tree builtin_function (const char *, tree, int, enum built_in_class,
> const char *, tree);
> extern void shadow_tag (const struct c_declspecs *);
> extern void shadow_tag_warned (const struct c_declspecs *, int);
224,225c483,485
< extern int start_function (tree, tree, tree);
< extern tree start_decl (tree, tree, int, tree);
---
> extern int start_function (struct c_declspecs *, struct c_declarator *, tree);
> extern tree start_decl (struct c_declarator *, struct c_declspecs *, bool,
> tree);
227a488
> extern void store_parm_decls_from (struct c_arg_info *);
229,234c490,507
< extern tree c_begin_compound_stmt (void);
< extern void c_expand_deferred_function (tree);
< extern void c_expand_decl_stmt (tree);
< extern void c_static_assembler_name (tree);
< extern tree make_pointer_declarator (tree, tree);
< extern void merge_translation_unit_decls (void);
---
> extern struct c_typespec parser_xref_tag (enum tree_code, tree);
> extern int c_expand_decl (tree);
> extern struct c_parm *build_c_parm (struct c_declspecs *, tree,
> struct c_declarator *);
> extern struct c_declarator *build_attrs_declarator (tree,
> struct c_declarator *);
> extern struct c_declarator *build_function_declarator (struct c_arg_info *,
> struct c_declarator *);
> extern struct c_declarator *build_id_declarator (tree);
> extern struct c_declarator *make_pointer_declarator (struct c_declspecs *,
> struct c_declarator *);
> extern struct c_declspecs *build_null_declspecs (void);
> extern struct c_declspecs *declspecs_add_qual (struct c_declspecs *, tree);
> extern struct c_declspecs *declspecs_add_type (struct c_declspecs *,
> struct c_typespec);
> extern struct c_declspecs *declspecs_add_scspec (struct c_declspecs *, tree);
> extern struct c_declspecs *declspecs_add_attrs (struct c_declspecs *, tree);
> extern struct c_declspecs *finish_declspecs (struct c_declspecs *);
240,242c513,514
< extern int c_missing_noreturn_ok_p (tree);
< extern void c_objc_common_finish_file (void);
< extern int defer_fn (tree);
---
> extern bool c_missing_noreturn_ok_p (tree);
> extern tree c_objc_common_truthvalue_conversion (tree expr);
243a516,517
> extern void c_initialize_diagnostics (diagnostic_context *);
> extern bool c_vla_unspec_p (tree x, tree fn);
250,251d523
< #define c_sizeof_nowarn(T) c_sizeof_or_alignof_type (T, SIZEOF_EXPR, 0)
<
252a525,527
> extern int in_alignof;
> extern int in_sizeof;
> extern int in_typeof;
254,257c529,531
< /* For use with comptypes. */
< enum {
< COMPARE_STRICT = 0
< };
---
> extern struct c_switch *c_switch_stack;
> extern struct c_label_context_se *label_context_stack_se;
> extern struct c_label_context_vm *label_context_stack_vm;
260,261c534,536
< extern int comptypes (tree, tree, int);
< extern tree c_size_in_bytes (tree);
---
> extern int same_translation_unit_p (tree, tree);
> extern int comptypes (tree, tree);
> extern bool c_vla_type_p (tree);
264a540,541
> extern struct c_expr default_function_array_conversion (struct c_expr);
> extern tree composite_type (tree, tree);
266d542
< extern tree build_indirect_ref (tree, const char *);
268,271c544,550
< extern tree build_external_ref (tree, int);
< extern tree parser_build_binary_op (enum tree_code, tree, tree);
< extern int c_tree_expr_nonnegative_p (tree);
< extern void readonly_error (tree, const char *);
---
> extern tree build_external_ref (tree, int, location_t);
> extern void pop_maybe_used (bool);
> extern struct c_expr c_expr_sizeof_expr (struct c_expr);
> extern struct c_expr c_expr_sizeof_type (struct c_type_name *);
> extern struct c_expr parser_build_unary_op (enum tree_code, struct c_expr);
> extern struct c_expr parser_build_binary_op (enum tree_code, struct c_expr,
> struct c_expr);
273,274c552,553
< extern tree build_compound_expr (tree);
< extern tree c_cast_expr (tree, tree);
---
> extern tree build_compound_expr (tree, tree);
> extern tree c_cast_expr (struct c_type_name *, tree);
276d554
< extern tree build_modify_expr (tree, enum tree_code, tree);
279a558
> extern void maybe_warn_string_init (tree, struct c_expr);
284c563
< extern tree pop_init_level (int);
---
> extern struct c_expr pop_init_level (int);
287c566
< extern void process_init_element (tree);
---
> extern void process_init_element (struct c_expr);
289,290d567
< extern void pedwarn_c90 (const char *, ...) ATTRIBUTE_PRINTF_1;
< extern void pedwarn_c99 (const char *, ...) ATTRIBUTE_PRINTF_1;
292,294c569,571
< extern void c_finish_case (void);
< extern tree simple_asm_stmt (tree);
< extern tree build_asm_stmt (tree, tree, tree, tree, tree);
---
> extern void c_finish_case (tree);
> extern tree build_asm_expr (tree, tree, tree, tree, bool);
> extern tree build_asm_stmt (tree, tree);
295a573,591
> extern int c_types_compatible_p (tree, tree);
> extern tree c_begin_compound_stmt (bool);
> extern tree c_end_compound_stmt (tree, bool);
> extern void c_finish_if_stmt (location_t, tree, tree, tree, bool);
> extern void c_finish_loop (location_t, tree, tree, tree, tree, tree, bool);
> extern tree c_begin_stmt_expr (void);
> extern tree c_finish_stmt_expr (tree);
> extern tree c_process_expr_stmt (tree);
> extern tree c_finish_expr_stmt (tree);
> extern tree c_finish_return (tree);
> extern tree c_finish_bc_stmt (tree *, bool);
> extern tree c_finish_goto_label (tree);
> extern tree c_finish_goto_ptr (tree);
> extern void c_begin_vm_scope (unsigned int);
> extern void c_end_vm_scope (unsigned int);
> extern tree c_expr_to_decl (tree, bool *, bool *, bool *);
> extern tree c_begin_omp_parallel (void);
> extern tree c_finish_omp_parallel (tree, tree);
> extern tree c_finish_omp_clauses (tree);
315a612,619
> /* True means global_bindings_p should return false even if the scope stack
> says we are in file scope. */
>
> extern bool c_override_global_bindings_to_false;
>
> /* True means we've initialized exception handling. */
> extern bool c_eh_initialized_p;
>
318,319d621
< extern void *get_current_scope (void);
< extern void objc_mark_locals_volatile (void *);
322,324d623
< extern GTY(()) tree static_ctors;
< extern GTY(()) tree static_dtors;
<
328c627,631
< #define GCC_DIAG_STYLE __gcc_cdiag__
---
> #if GCC_VERSION >= 4001
> #define ATTRIBUTE_GCC_CDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m)
> #else
> #define ATTRIBUTE_GCC_CDIAG(m, n) ATTRIBUTE_NONNULL(m)
> #endif
329a633,635
> extern void pedwarn_c90 (const char *, ...) ATTRIBUTE_GCC_CDIAG(1,2);
> extern void pedwarn_c99 (const char *, ...) ATTRIBUTE_GCC_CDIAG(1,2);
>