]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/23689 (Malformed typedef silently ignored)
authorSimon Baldwin <simonb@google.com>
Thu, 1 Mar 2007 19:13:02 +0000 (19:13 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Thu, 1 Mar 2007 19:13:02 +0000 (19:13 +0000)
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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/ctor8.C
gcc/testsuite/g++.dg/template/typedef2.C
gcc/testsuite/g++.dg/warn/ignored_typedef.C [new file with mode: 0644]

index f6756070895dd46bb3085d2682cee85bde84e75d..9e2ea733e5a4c095ed4015572eb855a8abfcc8cc 100644 (file)
@@ -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
index 3aaa8df7dc5bad07bf62c9522cd8c9609340a966..749cee33589a7a0d5128a82f50fecc57b4f5a9a6 100644 (file)
@@ -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;
index f6a9766d11ea9cb0c97ebb3e6a187e2f0b558e33..1f432cf5b33c24ed7d661d9a26276bc34fb0fa3e 100644 (file)
@@ -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
index 9723892f91cafc5332d0c4d2cc1eefeffc362c7c..beb92ef8519887d5c726027f91b6b80051d9ca12 100644 (file)
@@ -2,10 +2,8 @@
 
 typedef struct S { // { dg-error "reference" }
   int &r; 
-};
+}; // { dg-warning "'typedef' was ignored" }
 
 S f () {
   return S (); // { dg-error "synthesized" }
 }
-
-
index 6c65671f6fe46c346f7804c507f5d0b9993948ad..cfe0f3f75bf66b496b0206be9efa4d7bd2a7933c 100644 (file)
@@ -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 (file)
index 0000000..74586a8
--- /dev/null
@@ -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" }