diff options
author | Joseph Myers <jsm28@cam.ac.uk> | 2001-10-02 08:12:25 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2001-10-02 08:12:25 +0100 |
commit | 6431177a552eca9ee9d4b1fde8255f98363e4c34 (patch) | |
tree | 4648d58efabadc87677da26b0f516d5bfc64f45c /gcc/c-decl.c | |
parent | ed0ea5602b8f9b125eb77a59521ce8a636584704 (diff) | |
download | gcc-6431177a552eca9ee9d4b1fde8255f98363e4c34.zip gcc-6431177a552eca9ee9d4b1fde8255f98363e4c34.tar.gz gcc-6431177a552eca9ee9d4b1fde8255f98363e4c34.tar.bz2 |
attribs.c (decl_attributes): Possibly call insert_default_attributes to insert default attributes on...
* attribs.c (decl_attributes): Possibly call
insert_default_attributes to insert default attributes on
functions in a lazy manner.
* builtin-attrs.def: New file; define the default format and
format_arg attributes.
* c-common.c (c_format_attribute_table): Move to earlier in the
file.
(c_common_nodes_and_builtins): Initialize format_attribute_table.
(enum built_in_attribute, built_in_attributes,
c_attrs_initialized, c_init_attributes,
c_common_insert_default_attributes): New.
(c_common_lang_init): Don't initialize format_attribute_table. Do
call c_init_attributes.
* Makefile.in (c-common.o): Depend on builtin-attrs.def.
* c-common.h (init_function_format_info): Don't declare.
(c_common_insert_default_attributes): Declare.
* c-decl.c (implicitly_declare, builtin_function): Call
decl_attributes.
(init_decl_processing): Don't call init_function_format_info.
(insert_default_attributes): New.
* c-format.c (handle_format_attribute,
handle_format_arg_attribute): Be quiet about inappropriate
declaration when applying default attributes.
(init_function_format_info): Remove.
* tree.h (enum attribute_flags): Add ATTR_FLAG_BUILT_IN.
(insert_default_attributes): Declare.
cp:
* decl.c (init_decl_processing): Don't call
init_function_format_info. Initialize lang_attribute_table
earlier.
(builtin_function): Call decl_attributes.
(insert_default_attributes): New.
testsuite:
* gcc.dg/format/attr-5.c, gcc.dg/format/attr-6.c: New tests.
From-SVN: r45942
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 4652267..f3ad82e 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -2505,7 +2505,7 @@ tree implicitly_declare (functionid) tree functionid; { - register tree decl; + tree decl; int traditional_warning = 0; /* Only one "implicit declaration" warning per identifier. */ int implicit_warning; @@ -2555,6 +2555,9 @@ implicitly_declare (functionid) gen_aux_info_record (decl, 0, 1, 0); + /* Possibly apply some default attributes to this implicit declaration. */ + decl_attributes (&decl, NULL_TREE, 0); + return decl; } @@ -3056,9 +3059,6 @@ init_decl_processing () make_fname_decl = c_make_fname_decl; start_fname_decls (); - /* Prepare to check format strings against argument lists. */ - init_function_format_info (); - incomplete_decl_finalize_hook = finish_incomplete_decl; /* Record our roots. */ @@ -3152,8 +3152,23 @@ builtin_function (name, type, function_code, class, library_name) if (name[0] != '_' || name[1] != '_') C_DECL_ANTICIPATED (decl) = 1; + /* Possibly apply some default attributes to this built-in function. */ + decl_attributes (&decl, NULL_TREE, 0); + return decl; } + +/* Apply default attributes to a function, if a system function with default + attributes. */ + +void +insert_default_attributes (decl) + tree decl; +{ + if (!TREE_PUBLIC (decl)) + return; + c_common_insert_default_attributes (decl); +} /* Called when a declaration is seen that contains no names to declare. If its type is a reference to a structure, union or enum inherited |