public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* C++ PATCH for c++/57068 (wrong ref-qualifier error)
@ 2013-05-09  3:55 Jason Merrill
  0 siblings, 0 replies; only message in thread
From: Jason Merrill @ 2013-05-09  3:55 UTC (permalink / raw)
  To: gcc-patches List

[-- Attachment #1: Type: text/plain, Size: 182 bytes --]

A case of giving an error during tentative parsing; we need to wait 
until we know for sure that we're doing something dodgy.

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

[-- Attachment #2: 57068.patch --]
[-- Type: text/x-patch, Size: 2371 bytes --]

commit 4d01649f80e76af9be37b35d166a00990defa978
Author: Jason Merrill <jason@redhat.com>
Date:   Wed May 8 12:33:26 2013 -0400

    	PR c++/57068
    	* decl.c (grokdeclarator): Warn about ref-qualifiers here.
    	* parser.c (cp_parser_ref_qualifier_seq_opt): Not here.
    	* error.c (maybe_warn_cpp0x): s/0x/11/.

diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index a3250a2..bd9afc8 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -9577,6 +9577,7 @@ grokdeclarator (const cp_declarator *declarator,
 
 		if (rqual)
 		  {
+		    maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
 		    error ((flags == DTOR_FLAG)
 			   ? "destructors may not be ref-qualified"
 			   : "constructors may not be ref-qualified");
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index 48327dd..a75fc4e 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -3404,7 +3404,7 @@ maybe_warn_cpp0x (cpp0x_warn_str str)
 	break;
       case CPP0X_AUTO:
 	pedwarn (input_location, 0,
-		 "C++0x auto only available with -std=c++11 or -std=gnu++11");
+		 "C++11 auto only available with -std=c++11 or -std=gnu++11");
 	break;
       case CPP0X_SCOPED_ENUMS:
 	pedwarn (input_location, 0,
@@ -3453,7 +3453,7 @@ maybe_warn_cpp0x (cpp0x_warn_str str)
       case CPP0X_REF_QUALIFIER:
 	pedwarn (input_location, 0,
 		 "ref-qualifiers "
-		 "only available with -std=c++0x or -std=gnu++0x");
+		 "only available with -std=c++11 or -std=gnu++11");
 	break;
       default:
 	gcc_unreachable ();
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 6de8e1a..8d3f6c7 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -17199,9 +17199,6 @@ cp_parser_ref_qualifier_opt (cp_parser* parser)
 	}
     }
 
-  if (ref_qual)
-    maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
-
   return ref_qual;
 }
 
diff --git a/gcc/testsuite/g++.dg/parse/ref-qual1.C b/gcc/testsuite/g++.dg/parse/ref-qual1.C
new file mode 100644
index 0000000..e3f60c0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/ref-qual1.C
@@ -0,0 +1,29 @@
+// PR c++/57068
+
+enum Enums {
+  Enum1 = 0x00000000,
+  Enum2 = 0x00000001
+};
+
+class Flags {
+public:
+  Flags() : i(0) {}
+  Flags(int i): i(i) {}
+  Flags operator&(Enums f) { return Flags(Enums(i & f)); }
+
+  operator bool() { return i; }
+private:
+  int i;
+};
+
+Flags windowState()
+{
+  return Flags();
+}
+
+int main()
+{
+  if (bool(windowState() & Enum1) == true)
+    return 1;
+  return 0;
+}

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2013-05-09  3:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-05-09  3:55 C++ PATCH for c++/57068 (wrong ref-qualifier error) Jason Merrill

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).