Patchwork C++ PATCH for c++/57532 (bogus error with int() & int())

login
register
mail settings
Submitter Jason Merrill
Date July 9, 2013, 5:41 p.m.
Message ID <51DC4B62.8070905@redhat.com>
Download mbox | patch
Permalink /patch/257848/
State New
Headers show

Comments

Jason Merrill - July 9, 2013, 5:41 p.m.
In C++98 mode we were complaining about trying to apply a ref-qualifier 
to the function type int() during tentative parsing; the easiest fix is 
just not to try to tentatively parse ref-qualifiers in C++98 mode, which 
also lets us fail the tentative parse faster.

Tested x86_64-pc-linux-gnu, applying to trunk and 4.8.

Patch

commit 7d3bb96439735e08dd02af1e6d031b9a676dacb3
Author: Jason Merrill <jason@redhat.com>
Date:   Tue Jul 9 02:34:46 2013 -0400

    	PR c++/57532
    	* parser.c (cp_parser_ref_qualifier_opt): Don't tentatively parse
    	a ref-qualifier in C++98 mode.

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());
+}