diff options
author | Simon Baldwin <simonb@google.com> | 2007-03-01 19:13:02 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2007-03-01 19:13:02 +0000 |
commit | 41dc91a89030fbf30192a18e542dceb3bb9dc28b (patch) | |
tree | a63a6cf92c9f582524d032791a81a2a6da9d7ca7 /gcc | |
parent | ceca734e8f8b368ab4087ce3970118775735f593 (diff) | |
download | gcc-41dc91a89030fbf30192a18e542dceb3bb9dc28b.zip gcc-41dc91a89030fbf30192a18e542dceb3bb9dc28b.tar.gz gcc-41dc91a89030fbf30192a18e542dceb3bb9dc28b.tar.bz2 |
re PR c++/23689 (Malformed typedef silently ignored)
cp/:
PR c++/23689
* decl.c (check_tag_decl): Added new warning for typedef ignored
when it precedes an otherwise valid non-typedef declaration.
testsuite/:
PR c++/23689
* warn/ignored_typedef.C: New.
* init/ctor8.C: Added dg-warning to consume ignored typedef
warning.
* template/typedef2.C: Ditto. Moved dg-error onto its own line
and added an explicit line number.
From-SVN: r122434
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ctor8.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/typedef2.C | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/ignored_typedef.C | 22 |
6 files changed, 42 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f675607..9e2ea73 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-03-01 Simon Baldwin <simonb@google.com> + + PR c++/23689 + * decl.c (check_tag_decl): Added new warning for typedef ignored + when it precedes an otherwise valid non-typedef declaration. + 2007-02-28 Sandra Loosemore <sandra@codesourcery.com> * typeck.c (build_function_call): Store converted arguments diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 3aaa8df..749cee3 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -3694,6 +3694,8 @@ check_tag_decl (cp_decl_specifier_seq *declspecs) || declspecs->specs[(int)ds_thread]) error ("qualifiers can only be specified for objects " "and functions"); + else if (saw_typedef) + warning (0, "%<typedef%> was ignored in this declaration"); } return declared_type; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6a9766..1f432cf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2007-03-01 Simon Baldwin <simonb@google.com> + + PR c++/23689 + * warn/ignored_typedef.C: New. + * init/ctor8.C: Added dg-warning to consume ignored typedef + warning. + * template/typedef2.C: Ditto. Moved dg-error onto its own line + and added an explicit line number. + 2007-02-28 Richard Guenther <rguenther@suse.de> PR middle-end/30364 diff --git a/gcc/testsuite/g++.dg/init/ctor8.C b/gcc/testsuite/g++.dg/init/ctor8.C index 9723892..beb92ef 100644 --- a/gcc/testsuite/g++.dg/init/ctor8.C +++ b/gcc/testsuite/g++.dg/init/ctor8.C @@ -2,10 +2,8 @@ typedef struct S { // { dg-error "reference" } int &r; -}; +}; // { dg-warning "'typedef' was ignored" } S f () { return S (); // { dg-error "synthesized" } } - - diff --git a/gcc/testsuite/g++.dg/template/typedef2.C b/gcc/testsuite/g++.dg/template/typedef2.C index 6c65671..cfe0f3f 100644 --- a/gcc/testsuite/g++.dg/template/typedef2.C +++ b/gcc/testsuite/g++.dg/template/typedef2.C @@ -1,3 +1,4 @@ // PR c++/18155 -template<int> typedef struct A; // { dg-error "" } +template<int> typedef struct A; // { dg-warning "'typedef' was ignored" } + // { dg-error "" "" { target *-*-* } 3 } diff --git a/gcc/testsuite/g++.dg/warn/ignored_typedef.C b/gcc/testsuite/g++.dg/warn/ignored_typedef.C new file mode 100644 index 0000000..74586a8 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/ignored_typedef.C @@ -0,0 +1,22 @@ +// PR c++/23689 +// Test that malformed typedef's produce a compiler warning. + +typedef char valid_0; +typedef int valid_1; +typedef long valid_2; +typedef float valid_3; +typedef double valid_4; +typedef unsigned valid_5; +typedef int *valid_6; +typedef struct valid_7 {} valid_8; +typedef struct {} valid_9; +typedef int temp_0; typedef temp_0 valid_10; +struct temp_1 {}; typedef temp_1 valid_11; +union temp_2 {}; typedef temp_2 valid_12; +typedef void (*valid_13) (int); + +typedef struct invalid_0 {}; // { dg-warning "'typedef' was ignored" } +typedef class invalid_1 {}; // { dg-warning "'typedef' was ignored" } +typedef enum invalid_2 { INVALID_2 }; // { dg-warning "'typedef' was ignored" } +typedef enum { INVALID_3 }; // { dg-warning "'typedef' was ignored" } +typedef union invalid_4 {}; // { dg-warning "'typedef' was ignored" } |