aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-tree.h
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2009-04-26 14:40:19 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2009-04-26 14:40:19 +0100
commit991d66210228392118aa3f8102cb49a9f9c2b168 (patch)
treeec728d126f99eee23b10a037545ce496f4aeb946 /gcc/c-tree.h
parent4a81774c7b071cccb707cd31a7906b01c876944e (diff)
downloadgcc-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.h14
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);