diff options
author | Joseph Myers <joseph@codesourcery.com> | 2009-04-26 14:40:19 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2009-04-26 14:40:19 +0100 |
commit | 991d66210228392118aa3f8102cb49a9f9c2b168 (patch) | |
tree | ec728d126f99eee23b10a037545ce496f4aeb946 /gcc/c-tree.h | |
parent | 4a81774c7b071cccb707cd31a7906b01c876944e (diff) | |
download | gcc-991d66210228392118aa3f8102cb49a9f9c2b168.zip gcc-991d66210228392118aa3f8102cb49a9f9c2b168.tar.gz gcc-991d66210228392118aa3f8102cb49a9f9c2b168.tar.bz2 |
re PR c/39556 (statics in C99 inline functions later declared extern)
PR c/39556
* c-tree.h (enum c_inline_static_type): New.
(record_inline_static): Declare.
* c-decl.c (struct c_inline_static, c_inline_statics,
record_inline_static, check_inline_statics): New.
(pop_file_scope): Call check_inline_statics.
(start_decl): Call record_inline_static instead of pedwarning
directly for static in inline function.
* c-typeck.c (build_external_ref): Call record_inline_static
instead of pedwarning directly for static referenced in inline
function.
testsuite:
* gcc.dg/inline-34.c: New test.
From-SVN: r146800
Diffstat (limited to 'gcc/c-tree.h')
-rw-r--r-- | gcc/c-tree.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 64e491e..0bfcdfe 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -467,6 +467,18 @@ struct c_enum_contents int enum_overflow; }; +/* A type of reference to a static identifier in an inline + function. */ +enum c_inline_static_type { + /* Identifier with internal linkage used in function that may be an + inline definition (i.e., file-scope static). */ + csi_internal, + /* Modifiable object with static storage duration defined in + function that may be an inline definition (i.e., local + static). */ + csi_modifiable +}; + /* in c-parser.c */ extern void c_parse_init (void); @@ -483,6 +495,8 @@ extern int global_bindings_p (void); extern void push_scope (void); extern tree pop_scope (void); +extern void record_inline_static (location_t, tree, tree, + enum c_inline_static_type); extern void c_init_decl_processing (void); extern void c_dup_lang_specific_decl (tree); extern void c_print_identifier (FILE *, tree, int); |