aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRafael Espindola <espindola@google.com>2009-03-11 19:29:30 +0000
committerRafael Espindola <espindola@google.com>2009-03-11 19:29:30 +0000
commit347099440a225f0ad06f24ef570af596bf5a7dac (patch)
tree0301a93730a64b7d4d5987a86aa3b553aa089043 /gcc
parent50d00be3ce00f27ca6f51c48c684ca8c7490e841 (diff)
2009-03-11 Rafael Avila de Espindola <espindola@google.com>
* g++.dg/lto/20090311_0.C: New. * g++.dg/lto/20090311_1.C: New. 2009-03-11 Rafael Avila de Espindola <espindola@google.com> * tree.c (free_lang_data_in_decl): Free DECL_INITIAL of DECL_EXTERNAL VAR_DECLs. git-svn-id: https://gcc.gnu.org/svn/gcc/branches/lto@144789 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.lto5
-rw-r--r--gcc/testsuite/ChangeLog.lto5
-rw-r--r--gcc/testsuite/g++.dg/lto/20090311_0.C13
-rw-r--r--gcc/testsuite/g++.dg/lto/20090311_1.C13
-rw-r--r--gcc/tree.c3
5 files changed, 39 insertions, 0 deletions
diff --git a/gcc/ChangeLog.lto b/gcc/ChangeLog.lto
index 10fc8afdef3..293378fc7ca 100644
--- a/gcc/ChangeLog.lto
+++ b/gcc/ChangeLog.lto
@@ -1,3 +1,8 @@
+2009-03-11 Rafael Avila de Espindola <espindola@google.com>
+
+ * tree.c (free_lang_data_in_decl): Free DECL_INITIAL of DECL_EXTERNAL
+ VAR_DECLs.
+
2009-03-10 Diego Novillo <dnovillo@google.com>
Revert:
diff --git a/gcc/testsuite/ChangeLog.lto b/gcc/testsuite/ChangeLog.lto
index bb5e37f8217..d5828e603d3 100644
--- a/gcc/testsuite/ChangeLog.lto
+++ b/gcc/testsuite/ChangeLog.lto
@@ -1,3 +1,8 @@
+2009-03-11 Rafael Avila de Espindola <espindola@google.com>
+
+ * g++.dg/lto/20090311_0.C: New.
+ * g++.dg/lto/20090311_1.C: New.
+
2009-03-10 Diego Novillo <dnovillo@google.com>
Revert:
diff --git a/gcc/testsuite/g++.dg/lto/20090311_0.C b/gcc/testsuite/g++.dg/lto/20090311_0.C
new file mode 100644
index 00000000000..cc54bbfdc96
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/20090311_0.C
@@ -0,0 +1,13 @@
+class C1 {
+public: virtual ~C1() {
+}
+};
+class C2 : public C1 {
+public:
+ C2(void *q);
+ virtual void A();
+};
+int main(int argc, char **argv) {
+ C2 h(0);
+ return 0;
+}
diff --git a/gcc/testsuite/g++.dg/lto/20090311_1.C b/gcc/testsuite/g++.dg/lto/20090311_1.C
new file mode 100644
index 00000000000..e78da7223dd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lto/20090311_1.C
@@ -0,0 +1,13 @@
+class C1 {
+public: virtual ~C1() {
+}
+};
+class C2 : public C1 {
+ C2(void *q);
+ virtual void A();
+};
+void C2::A() {
+}
+C2::C2(void *q)
+{
+}
diff --git a/gcc/tree.c b/gcc/tree.c
index 8e94d0c0a2b..fee59cd51af 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -4034,6 +4034,9 @@ free_lang_data_in_decl (tree decl)
&& TREE_CODE (expr) == VAR_DECL
&& !TREE_STATIC (expr) && !DECL_EXTERNAL (expr))
SET_DECL_DEBUG_EXPR (decl, NULL_TREE);
+
+ if (DECL_EXTERNAL (decl))
+ DECL_INITIAL (decl) = NULL_TREE;
}
else if (TREE_CODE (decl) == TYPE_DECL)
{