C++ PATCH for c++/68449 (segv with compound statement)

Marek Polacek polacek@redhat.com
Fri Jan 8 19:06:00 GMT 2016


On Fri, Jan 08, 2016 at 12:56:15PM -0500, Jason Merrill wrote:
> On 01/08/2016 12:48 PM, Marek Polacek wrote:
> >  	if (tree *p = ctx->values->get (r))
> >  	  r = *p;
> >-      if (DECL_P (r))
> >+      if (r == NULL_TREE || DECL_P (r))
> 
> I think it would be a bit better not to change r if *p is null.  OK with
> that change.

All right:

Bootstrapped/regtested on x86_64-linux, applying to trunk.

2016-01-08  Marek Polacek  <polacek@redhat.com>

	PR c++/68449
	* constexpr.c (cxx_eval_constant_expression): Handle NULL initializer.

	* g++.dg/pr68449.C: New.

diff --git gcc/cp/constexpr.c gcc/cp/constexpr.c
index c6c3467..7b60271 100644
--- gcc/cp/constexpr.c
+++ gcc/cp/constexpr.c
@@ -3184,7 +3184,8 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
 	r = TARGET_EXPR_INITIAL (r);
       if (VAR_P (r))
 	if (tree *p = ctx->values->get (r))
-	  r = *p;
+	  if (*p != NULL_TREE)
+	    r = *p;
       if (DECL_P (r))
 	{
 	  if (!ctx->quiet)
diff --git gcc/testsuite/g++.dg/pr68449.C gcc/testsuite/g++.dg/pr68449.C
index e69de29..7d86fe9 100644
--- gcc/testsuite/g++.dg/pr68449.C
+++ gcc/testsuite/g++.dg/pr68449.C
@@ -0,0 +1,9 @@
+// PR c++/68449
+// { dg-do compile }
+// { dg-options "-Wsign-compare" }
+
+int
+foo (int a)
+{
+  return __extension__ ({ int b; b; }) < 0;
+}

	Marek



More information about the Gcc-patches mailing list