From: Paolo Carlini Date: Mon, 25 Nov 2013 20:51:56 +0000 (+0000) Subject: re PR c++/58607 ([c++11] ICE with undeclared variable in constexpr) X-Git-Tag: releases/gcc-4.9.0~2464 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4fd602a1e050ca035265ae53f2dfe721505811a5;p=thirdparty%2Fgcc.git re PR c++/58607 ([c++11] ICE with undeclared variable in constexpr) /cp 2013-11-25 Paolo Carlini PR c++/58607 * semantics.c (check_constexpr_ctor_body): Check for BIND_EXPR_VARS. /testsuite 2013-11-25 Paolo Carlini PR c++/58607 * g++.dg/cpp0x/constexpr-ice9.C: New. From-SVN: r205364 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8118471f60f4..e567aa0c9da6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-11-25 Paolo Carlini + + PR c++/58607 + * semantics.c (check_constexpr_ctor_body): Check for BIND_EXPR_VARS. + 2013-11-25 Paolo Carlini PR c++/58810 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 316834c1e7c9..d871c4dcea2b 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7596,6 +7596,11 @@ check_constexpr_ctor_body (tree last, tree list) break; if (TREE_CODE (t) == BIND_EXPR) { + if (BIND_EXPR_VARS (t)) + { + ok = false; + break; + } if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t))) return false; else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 50e72f4c8803..920f8268c352 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-11-25 Paolo Carlini + + PR c++/58607 + * g++.dg/cpp0x/constexpr-ice9.C: New. + 2013-11-25 Paolo Carlini PR c++/58810 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C new file mode 100644 index 000000000000..50de3720b26f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice9.C @@ -0,0 +1,7 @@ +// PR c++/58607 +// { dg-do compile { target c++11 } } + +struct A +{ + constexpr A() { i; } // { dg-error "declared|empty body" } +};