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