diff options
author | Rafael Espindola <espindola@google.com> | 2009-03-11 19:29:30 +0000 |
---|---|---|
committer | Rafael Espindola <espindola@google.com> | 2009-03-11 19:29:30 +0000 |
commit | 347099440a225f0ad06f24ef570af596bf5a7dac (patch) | |
tree | 0301a93730a64b7d4d5987a86aa3b553aa089043 /gcc | |
parent | 50d00be3ce00f27ca6f51c48c684ca8c7490e841 (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.lto | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog.lto | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/20090311_0.C | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/20090311_1.C | 13 | ||||
-rw-r--r-- | gcc/tree.c | 3 |
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) { |