diff options
| author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-01 19:13:02 +0000 |
|---|---|---|
| committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-03-01 19:13:02 +0000 |
| commit | 9e67fc2682db97d71b0ff4202d4c976b117a8cea (patch) | |
| tree | a63a6cf92c9f582524d032791a81a2a6da9d7ca7 | |
| parent | 6400303607d55034f097aab7a1fb4642a49dee27 (diff) | |
| download | ppe42-gcc-9e67fc2682db97d71b0ff4202d4c976b117a8cea.tar.gz ppe42-gcc-9e67fc2682db97d71b0ff4202d4c976b117a8cea.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122434 138bc75d-0d04-0410-961f-82ee72b054a4
| -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 f6756070895..9e2ea733e5a 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 3aaa8df7dc5..749cee33589 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 f6a9766d11e..1f432cf5b33 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 9723892f91c..beb92ef8519 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 6c65671f6fe..cfe0f3f75bf 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 00000000000..74586a81f5b --- /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" } |

