decl2.c (grokfield): Issue error on illegal data member declaration.
authorMark Mitchell <mark@codesourcery.com>
Tue, 18 Apr 2000 01:30:21 +0000 (01:30 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 18 Apr 2000 01:30:21 +0000 (01:30 +0000)
* decl2.c (grokfield): Issue error on illegal data member
declaration.

From-SVN: r33220

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/g++.old-deja/g++.other/crash17.C [new file with mode: 0644]

index da6fca8..5f3c8fb 100644 (file)
@@ -1,3 +1,8 @@
+2000-04-17  Mark Mitchell  <mark@codesourcery.com>
+
+       * decl2.c (grokfield): Issue error on illegal data member
+       declaration.
+
 Mon Apr 17 17:11:16 2000  Mark P Mitchell  <mark@codesourcery.com>
 
        * method.c (make_thunk): Set DECL_CONTEXT for a THUNK_DECL.
index 18d41aa..e9b1b1f 100644 (file)
@@ -1572,7 +1572,23 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
          || TREE_CODE (TREE_OPERAND (declarator, 0)) == SCOPE_REF)
       && parmlist_is_exprlist (CALL_DECLARATOR_PARMS (declarator)))
     {
-      init = TREE_OPERAND (declarator, 1);
+      /* It's invalid to try to initialize a data member using a
+        functional notation, e.g.:
+        
+            struct S {
+             static int i (3);
+           };
+           
+        Explain that to the user.  */
+      static int explained_p;
+
+      cp_error ("invalid data member initiailization");
+      if (!explained_p)
+       {
+         cp_error ("use `=' to initialize static data members");
+         explained_p = 1;
+       }
+
       declarator = TREE_OPERAND (declarator, 0);
       flags = 0;
     }
diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash17.C b/gcc/testsuite/g++.old-deja/g++.other/crash17.C
new file mode 100644 (file)
index 0000000..0ec1d23
--- /dev/null
@@ -0,0 +1,6 @@
+// Build don't link:
+// Origin: Dima Volodin <dvv@dvv.org>
+
+class C {
+  static int const N (1000);
+};