From d6a1dfd98b85ba31c58c4d0f3f53adb3dd0044f1 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Sat, 11 Sep 2004 23:15:14 +0100 Subject: [PATCH] c-tree.h (enum c_storage_class): New. * c-tree.h (enum c_storage_class): New. (struct c_declspecs): Add storage_class, inline_p and thread_p. * c-decl.c (shadow_tag_warned): Give errors for "inline" in empty declarations and "auto" or "register" in file scope empty declarations. Give more specific warnings for other cases of storage class specifiers in empty declarations. (grokdeclarator): Update for new structures. Don't check for multiple storage classes. Diagnose file-scope "register" if pedantic. (build_null_declspecs): Update. (declspecs_add_scspec): Update. Diagnose multiple storage class specifiers and invalid uses of "__thread". testsuite: * gcc.dg/declspec-4.c, gcc.dg/declspec-5.c, gcc.dg/declspec-6.c, gcc.dg/tls/diag-2.c: Update expected messages. * gcc.dg/991209-1.c: Specify compilation options. Update expected messages. * gcc.dg/pr14289-2.c, gcc.dg/pr14289-3.c: Remove. * gcc.dg/declspec-7.c, gcc.dg/declspec-8.c, gcc.dg/declspec-9.c, gcc.dg/declspec-10.c, gcc.dg/declspec-11.c, gcc.dg/tls/diag-4.c, gcc.dg/tls/diag-5.c: New tests. From-SVN: r87376 --- gcc/c-tree.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gcc/c-tree.h b/gcc/c-tree.h index dde8dc3249d..0e28dfef3c0 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -131,6 +131,16 @@ struct c_expr enum tree_code original_code; }; +/* A storage class specifier. */ +enum c_storage_class { + csc_none, + csc_auto, + csc_extern, + csc_register, + csc_static, + csc_typedef +}; + /* A sequence of declaration specifiers in C. */ struct c_declspecs { /* The type specified, not reflecting modifiers such as "short" and @@ -144,6 +154,8 @@ struct c_declspecs { tree attrs; /* The modifier bits present. */ int specbits; + /* The storage class specifier, or csc_none if none. */ + enum c_storage_class storage_class; /* 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 @@ -164,6 +176,10 @@ struct c_declspecs { BOOL_BITFIELD explicit_char_p : 1; /* Whether "long" was specified more than once. */ BOOL_BITFIELD long_long_p : 1; + /* Whether "inline" was specified. */ + BOOL_BITFIELD inline_p : 1; + /* Whether "__thread" was specified. */ + BOOL_BITFIELD thread_p : 1; }; /* The various kinds of declarators in C. */ -- 2.30.2