aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2013-07-09 13:56:14 -0400
committerJason Merrill <jason@gcc.gnu.org>2013-07-09 13:56:14 -0400
commit9a3970ddfc50ed831d621c77a0b2157700302fa8 (patch)
treeba1da8b5532646a55252bb8646a92dd96c5950a1
parentcb5f47b639cda6c98d7def5e1f601e0cbc93da7d (diff)
downloadgcc-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
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/parser.c4
-rw-r--r--gcc/testsuite/g++.dg/parse/ref-qual2.C6
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());
+}