From: Giovanni Funchal Date: Sat, 15 Jan 2011 14:41:09 +0000 (+0000) Subject: re PR c++/33558 ('mutable' incorrectly accepted on reference members) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=620437f2d4773ab2b42f4edebbd949577788ca86;p=gcc.git re PR c++/33558 ('mutable' incorrectly accepted on reference members) 2011-01-15 Giovanni Funchal Jonathan Wakely PR c++/33558 * decl.c (grokdeclarator): Reject mutable reference members. Co-Authored-By: Jonathan Wakely From-SVN: r168843 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 22f5bf095b3..e7b45b4830b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-01-15 Giovanni Funchal + Jonathan Wakely + + PR c++/33558 + * decl.c (grokdeclarator): Reject mutable reference members. + 2011-01-14 Jason Merrill PR c++/47289 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index f7bf1bfdb40..6a13cc474ae 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -9214,6 +9214,12 @@ grokdeclarator (const cp_declarator *declarator, error ("const %qs cannot be declared %", name); storage_class = sc_none; } + else if (TREE_CODE (type) == REFERENCE_TYPE) + { + permerror (input_location, "reference %qs cannot be declared " + "%", name); + storage_class = sc_none; + } } /* If this is declaring a typedef name, return a TYPE_DECL. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b1d5a5f13cf..b30e532b847 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2011-01-15 Giovanni Funchal + Jonathan Wakely + + PR c++/33558 + * g++.dg/other/pr33558.C: New. + * g++.dg/other/pr33558-2.C: New. + 2011-01-14 Martin Jambor PR tree-optimization/45934 diff --git a/gcc/testsuite/g++.dg/other/pr33558-2.C b/gcc/testsuite/g++.dg/other/pr33558-2.C new file mode 100644 index 00000000000..a8df840b7a8 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr33558-2.C @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-fpermissive" } */ + +class X { + mutable int &q; /* { dg-warning "cannot be declared 'mutable'" } */ +}; diff --git a/gcc/testsuite/g++.dg/other/pr33558.C b/gcc/testsuite/g++.dg/other/pr33558.C new file mode 100644 index 00000000000..1a340af5972 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr33558.C @@ -0,0 +1,5 @@ +/* { dg-do compile } */ + +class X { + mutable int &q; /* { dg-error "cannot be declared 'mutable'" } */ +};