From: Simon Baldwin Date: Thu, 1 Mar 2007 19:13:02 +0000 (+0000) Subject: re PR c++/23689 (Malformed typedef silently ignored) X-Git-Tag: releases/gcc-4.3.0~6542 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=41dc91a89030fbf30192a18e542dceb3bb9dc28b;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f6756070895d..9e2ea733e5a4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-03-01 Simon Baldwin + + 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 * typeck.c (build_function_call): Store converted arguments diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 3aaa8df7dc5b..749cee33589a 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, "% was ignored in this declaration"); } return declared_type; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6a9766d11ea..1f432cf5b33c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2007-03-01 Simon Baldwin + + 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 PR middle-end/30364 diff --git a/gcc/testsuite/g++.dg/init/ctor8.C b/gcc/testsuite/g++.dg/init/ctor8.C index 9723892f91ca..beb92ef85198 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 6c65671f6fe4..cfe0f3f75bf6 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 typedef struct A; // { dg-error "" } +template 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 000000000000..74586a81f5b6 --- /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" }