From fdb415fe091cf23d7e816d72de95a0c40e47380d Mon Sep 17 00:00:00 2001 From: Andrew Pinski <apinski@cavium.com> Date: Thu, 1 Dec 2011 17:13:05 +0000 Subject: [PATCH] re PR lto/51198 ([c++0x] [4.7 Regression] ICE with -flto and non-static data member initializers) 2011-12-01 Andrew Pinski <apinski@cavium.com> PR lto/51198 * tree.c (free_lang_data_in_decl): Clear FIELD_DECL's DECL_INITIAL also. 2011-12-01 Andrew Pinski <apinski@cavium.com> PR lto/51198 * g++.dg/torture/pr51198.C: New testcase. From-SVN: r181886 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/torture/pr51198.C | 29 ++++++++++++++++++++++++++ gcc/tree.c | 3 ++- 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/torture/pr51198.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f82b8bce40d2..693036823b1c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-12-01 Andrew Pinski <apinski@cavium.com> + + PR lto/51198 + * tree.c (free_lang_data_in_decl): Clear FIELD_DECL's + DECL_INITIAL also. + 2011-12-01 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/51246 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7d74e8b99aa6..b7e73f13e52a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-01 Andrew Pinski <apinski@cavium.com> + + PR lto/51198 + * g++.dg/torture/pr51198.C: New testcase. + 2011-12-01 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/51246 diff --git a/gcc/testsuite/g++.dg/torture/pr51198.C b/gcc/testsuite/g++.dg/torture/pr51198.C new file mode 100644 index 000000000000..65009ff54582 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr51198.C @@ -0,0 +1,29 @@ +/* { dg-options "-std=gnu++0x" } */ + +struct A +{ + int i = 0 ? 0 : throw 1; +}; + + +struct B +{ + int f(); + int i = f(); +}; + +struct C +{ + C(int); +}; + +struct D +{ + C a = 0; +}; + +A a; +B b; +D d; + + diff --git a/gcc/tree.c b/gcc/tree.c index 72603b59945a..4cadc7ef8c49 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -4651,7 +4651,8 @@ free_lang_data_in_decl (tree decl) || (decl_function_context (decl) && !TREE_STATIC (decl))) DECL_INITIAL (decl) = NULL_TREE; } - else if (TREE_CODE (decl) == TYPE_DECL) + else if (TREE_CODE (decl) == TYPE_DECL + || TREE_CODE (decl) == FIELD_DECL) DECL_INITIAL (decl) = NULL_TREE; else if (TREE_CODE (decl) == TRANSLATION_UNIT_DECL && DECL_INITIAL (decl) -- GitLab