diff options
author | Jason Merrill <jason@redhat.com> | 2013-07-09 13:56:14 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2013-07-09 13:56:14 -0400 |
commit | 9a3970ddfc50ed831d621c77a0b2157700302fa8 (patch) | |
tree | ba1da8b5532646a55252bb8646a92dd96c5950a1 /gcc | |
parent | cb5f47b639cda6c98d7def5e1f601e0cbc93da7d (diff) | |
download | gcc-9a3970ddfc50ed831d621c77a0b2157700302fa8.zip gcc-9a3970ddfc50ed831d621c77a0b2157700302fa8.tar.gz gcc-9a3970ddfc50ed831d621c77a0b2157700302fa8.tar.bz2 |
re PR c++/57532 (operator& broken when used on rvalues)
PR c++/57532
* parser.c (cp_parser_ref_qualifier_opt): Don't tentatively parse
a ref-qualifier in C++98 mode.
From-SVN: r200842
Diffstat (limited to 'gcc')
-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()); +} |