diff options
| -rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
| -rw-r--r-- | gcc/cp/parser.c | 4 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/parse/ref-qual2.C | 6 |
3 files changed, 14 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index aab2844..2d6fa73 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2013-07-09 Jason Merrill <jason@redhat.com> + PR c++/57532 + * parser.c (cp_parser_ref_qualifier_opt): Don't tentatively parse + a ref-qualifier in C++98 mode. + PR c++/57545 * pt.c (convert_nontype_argument) [INTEGER_CST]: Force the argument to have the exact type of the parameter. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index e2c3c3e..614cf43 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -17374,6 +17374,10 @@ cp_parser_ref_qualifier_opt (cp_parser* parser) { cp_ref_qualifier ref_qual = REF_QUAL_NONE; + /* Don't try to parse bitwise '&' as a ref-qualifier (c++/57532). */ + if (cxx_dialect < cxx11 && cp_parser_parsing_tentatively (parser)) + return ref_qual; + while (true) { cp_ref_qualifier curr_ref_qual = REF_QUAL_NONE; diff --git a/gcc/testsuite/g++.dg/parse/ref-qual2.C b/gcc/testsuite/g++.dg/parse/ref-qual2.C new file mode 100644 index 0000000..a78597b --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/ref-qual2.C @@ -0,0 +1,6 @@ +// PR c++/57532 + +int main() +{ + return (int() & int()); +} |
