OSDN Git Service

./:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Jun 2009 15:25:16 +0000 (15:25 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Jun 2009 15:25:16 +0000 (15:25 +0000)
* c-decl.c (grokdeclarator): If -Wc++-compat, warn about a global
variable with an anonymous type.
fortran/:
* cpp.c (struct gfc_cpp_option_data): Give this struct, used for
the global variable gfc_cpp_option, a name.
testsuite/:
* gcc.dg/Wcxx-compat-16.c: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148708 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-decl.c
gcc/fortran/ChangeLog
gcc/fortran/cpp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Wcxx-compat-16.c [new file with mode: 0644]

index c327984..37a3629 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-19  Ian Lance Taylor  <iant@google.com>
+
+       * c-decl.c (grokdeclarator): If -Wc++-compat, warn about a global
+       variable with an anonymous type.
+
 2009-06-19  Uros Bizjak  <ubizjak@gmail.com>
 
        * see.c: Remove for real.
index 4e48bac..57cbd28 100644 (file)
@@ -5875,6 +5875,19 @@ grokdeclarator (const struct c_declarator *declarator,
      name of a variable.  Thus, if it's known before this, die horribly.  */
     gcc_assert (!DECL_ASSEMBLER_NAME_SET_P (decl));
 
+    if (warn_cxx_compat
+       && TREE_CODE (decl) == VAR_DECL
+       && TREE_PUBLIC (decl)
+       && TREE_STATIC (decl)
+       && (TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
+           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
+           || TREE_CODE (TREE_TYPE (decl)) == ENUMERAL_TYPE)
+       && TYPE_NAME (TREE_TYPE (decl)) == NULL_TREE)
+      warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wc___compat,
+                 ("non-local variable %qD with anonymous type is "
+                  "questionable in C++"),
+                 decl);
+
     return decl;
   }
 }
index d3d140b..136a0e5 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-19  Ian Lance Taylor  <iant@google.com>
+
+       * cpp.c (struct gfc_cpp_option_data): Give this struct, used for
+       the global variable gfc_cpp_option, a name.
+
 2009-06-19  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/40450
index 9187bed..ec8bb59 100644 (file)
@@ -66,7 +66,7 @@ typedef struct gfc_cpp_macro_queue
 } gfc_cpp_macro_queue;
 static gfc_cpp_macro_queue *cpp_define_queue, *cpp_undefine_queue;
 
-struct
+struct gfc_cpp_option_data
 {
   /* Argument of -cpp, implied by SPEC;
      if NULL, preprocessing disabled.  */
index 918d198..b68dc7e 100644 (file)
@@ -1,3 +1,7 @@
+2009-06-19  Ian Lance Taylor  <iant@google.com>
+
+       * gcc.dg/Wcxx-compat-16.c: New testcase.
+
 2009-06-19  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.dg/builtins-34.c: Add significand cases.
diff --git a/gcc/testsuite/gcc.dg/Wcxx-compat-16.c b/gcc/testsuite/gcc.dg/Wcxx-compat-16.c
new file mode 100644 (file)
index 0000000..51b503b
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-Wc++-compat" } */
+
+struct { int f1; } g1;         /* { dg-warning "C\[+\]\[+\]" } */
+static struct { int f2; } g2;
+struct s { int f3; } g3;
+union { int f4; } g4;          /* { dg-warning "C\[+\]\[+\]" } */
+static union { int f5; } g5;
+union u { int f6; } g6;
+enum { A } g7;                 /* { dg-warning "C\[+\]\[+\]" } */
+static enum { B } g8;
+enum E { C } g9;