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