From 009e98457a3f7b1603422123052eeddb83dd5070 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Tue, 18 Apr 2000 01:30:21 +0000 Subject: [PATCH] decl2.c (grokfield): Issue error on illegal data member declaration. * decl2.c (grokfield): Issue error on illegal data member declaration. From-SVN: r33220 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl2.c | 18 +++++++++++++++++- gcc/testsuite/g++.old-deja/g++.other/crash17.C | 6 ++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/crash17.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index da6fca8546a..5f3c8fb7aa5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-04-17 Mark Mitchell + + * decl2.c (grokfield): Issue error on illegal data member + declaration. + Mon Apr 17 17:11:16 2000 Mark P Mitchell * method.c (make_thunk): Set DECL_CONTEXT for a THUNK_DECL. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 18d41aa9776..e9b1b1fb4a8 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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 index 00000000000..0ec1d23ba3a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/crash17.C @@ -0,0 +1,6 @@ +// Build don't link: +// Origin: Dima Volodin + +class C { + static int const N (1000); +};