aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSimon Baldwin <simonb@google.com>2007-03-01 19:13:02 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2007-03-01 19:13:02 +0000
commit41dc91a89030fbf30192a18e542dceb3bb9dc28b (patch)
treea63a6cf92c9f582524d032791a81a2a6da9d7ca7 /gcc
parentceca734e8f8b368ab4087ce3970118775735f593 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/cp/decl.c2
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/g++.dg/init/ctor8.C4
-rw-r--r--gcc/testsuite/g++.dg/template/typedef2.C3
-rw-r--r--gcc/testsuite/g++.dg/warn/ignored_typedef.C22
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" }