Patchwork [C++] Fix -std=c++11 OpenMP UDR handling (PR c++/60331)

login
register
mail settings
Submitter Jakub Jelinek
Date March 25, 2014, 9:31 a.m.
Message ID <20140325093117.GN1817@tucnak.redhat.com>
Download mbox | patch
Permalink /patch/333338/
State New
Headers show

Comments

Jakub Jelinek - March 25, 2014, 9:31 a.m.
On Mon, Mar 24, 2014 at 02:02:27PM -0400, Jason Merrill wrote:
> On 03/18/2014 11:16 AM, Jakub Jelinek wrote:
> >Jason, do you have better ideas how to fix this?
> 
> Better would be to return false from potential_constant_expression_1
> for DECL_EXPR; just add another case to the various _STMT tree
> codes.

Thanks, here is what I've checked in after another bootstrap/regtest:

2014-03-25  Jakub Jelinek  <jakub@redhat.com>

	PR c++/60331
	* semantics.c (potential_constant_expression_1): Handle
	DECL_EXPR.

	* testsuite/libgomp.c++/udr-11.C: New test.
	* testsuite/libgomp.c++/udr-12.C: New test.
	* testsuite/libgomp.c++/udr-13.C: New test.
	* testsuite/libgomp.c++/udr-14.C: New test.
	* testsuite/libgomp.c++/udr-15.C: New test.
	* testsuite/libgomp.c++/udr-16.C: New test.
	* testsuite/libgomp.c++/udr-17.C: New test.
	* testsuite/libgomp.c++/udr-18.C: New test.
	* testsuite/libgomp.c++/udr-19.C: New test.



	Jakub

Patch

--- gcc/cp/semantics.c.jj	2014-03-13 19:01:19.000000000 +0100
+++ gcc/cp/semantics.c	2014-03-24 20:51:24.912546906 +0100
@@ -10253,6 +10253,7 @@  potential_constant_expression_1 (tree t,
     case DO_STMT:
     case FOR_STMT:
     case WHILE_STMT:
+    case DECL_EXPR:
       if (flags & tf_error)
         error ("expression %qE is not a constant-expression", t);
       return false;
--- libgomp/testsuite/libgomp.c++/udr-11.C.jj	2014-03-18 11:47:43.326846415 +0100
+++ libgomp/testsuite/libgomp.c++/udr-11.C	2014-03-18 11:47:43.329846576 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-1.C"
--- libgomp/testsuite/libgomp.c++/udr-12.C.jj	2014-03-18 11:47:43.330846623 +0100
+++ libgomp/testsuite/libgomp.c++/udr-12.C	2014-03-18 11:47:43.331846666 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-2.C"
--- libgomp/testsuite/libgomp.c++/udr-13.C.jj	2014-03-18 11:47:43.332846707 +0100
+++ libgomp/testsuite/libgomp.c++/udr-13.C	2014-03-18 11:47:43.332846707 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-3.C"
--- libgomp/testsuite/libgomp.c++/udr-14.C.jj	2014-03-18 11:47:43.333846744 +0100
+++ libgomp/testsuite/libgomp.c++/udr-14.C	2014-03-18 11:47:43.334846777 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-4.C"
--- libgomp/testsuite/libgomp.c++/udr-15.C.jj	2014-03-18 11:47:43.334846777 +0100
+++ libgomp/testsuite/libgomp.c++/udr-15.C	2014-03-18 11:47:43.335846809 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-5.C"
--- libgomp/testsuite/libgomp.c++/udr-16.C.jj	2014-03-18 11:47:43.336846840 +0100
+++ libgomp/testsuite/libgomp.c++/udr-16.C	2014-03-18 11:47:43.336846840 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-6.C"
--- libgomp/testsuite/libgomp.c++/udr-17.C.jj	2014-03-18 11:47:43.337846867 +0100
+++ libgomp/testsuite/libgomp.c++/udr-17.C	2014-03-18 11:47:43.337846867 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-7.C"
--- libgomp/testsuite/libgomp.c++/udr-18.C.jj	2014-03-18 11:47:43.338846892 +0100
+++ libgomp/testsuite/libgomp.c++/udr-18.C	2014-03-18 11:47:43.338846892 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-8.C"
--- libgomp/testsuite/libgomp.c++/udr-19.C.jj	2014-03-18 11:47:43.339846916 +0100
+++ libgomp/testsuite/libgomp.c++/udr-19.C	2014-03-18 11:47:43.339846916 +0100
@@ -0,0 +1,4 @@ 
+// { dg-do run }
+// { dg-options "-fopenmp -std=c++11" }
+
+#include "udr-9.C"