aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-02-13 17:31:12 -0500
committerJason Merrill <jason@gcc.gnu.org>2017-02-13 17:31:12 -0500
commit8cb7aaa11b356fbebd63f6da60356f91e67e6217 (patch)
treed0d060810267555cf72dd6dd9d9661f3653ff07f
parentaa326bfb90c7ad2bf16b9582dac7e3de102ca6c5 (diff)
downloadgcc-8cb7aaa11b356fbebd63f6da60356f91e67e6217.zip
gcc-8cb7aaa11b356fbebd63f6da60356f91e67e6217.tar.gz
gcc-8cb7aaa11b356fbebd63f6da60356f91e67e6217.tar.bz2
PR c++/79461 - ICE with lambda in constexpr constructor
* constexpr.c (build_data_member_initialization): Ignore initialization of a local variable. From-SVN: r245410
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/constexpr.c3
-rw-r--r--gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C10
3 files changed, 19 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 994492b..3d840c5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2017-02-13 Jason Merrill <jason@redhat.com>
+
+ PR c++/79461 - ICE with lambda in constexpr constructor
+ * constexpr.c (build_data_member_initialization): Ignore
+ initialization of a local variable.
+
2017-02-13 Jakub Jelinek <jakub@redhat.com>
* init.c (warn_placement_new_too_small): Add missing space in
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index bfdde9e..004bb45 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -379,6 +379,9 @@ build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
if (TREE_CODE (member) == COMPONENT_REF)
{
tree aggr = TREE_OPERAND (member, 0);
+ if (TREE_CODE (aggr) == VAR_DECL)
+ /* Initializing a local variable, don't add anything. */
+ return true;
if (TREE_CODE (aggr) != COMPONENT_REF)
/* Normal member initialization. */
member = TREE_OPERAND (member, 1);
diff --git a/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C
new file mode 100644
index 0000000..7e05481
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/constexpr-lambda15.C
@@ -0,0 +1,10 @@
+// PR c++/79461
+// { dg-options -std=c++1z }
+
+struct S {
+ constexpr S(int i) {
+ auto f = [i]{};
+ }
+};
+int main() {}
+