diff options
author | Richard Guenther <rguenther@suse.de> | 2010-04-26 09:13:00 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-04-26 09:13:00 +0000 |
commit | 1ae3075b79bad398cb152bef6d4431536aa6bde1 (patch) | |
tree | 1bcc92a1e332646dc08a56c785a3b7e88f594313 /gcc | |
parent | 4b5caab7712abeb3e4e1fa0ce6f74484e5953079 (diff) | |
download | gcc-1ae3075b79bad398cb152bef6d4431536aa6bde1.zip gcc-1ae3075b79bad398cb152bef6d4431536aa6bde1.tar.gz gcc-1ae3075b79bad398cb152bef6d4431536aa6bde1.tar.bz2 |
re PR debug/42425 (ICE declaring local class)
2010-04-26 Richard Guenther <rguenther@suse.de>
PR lto/42425
* tree.c (free_lang_data_in_type): Do not free TYPE_CONTEXT
if emitting debug information and it is either a function
or a namespace decl.
* g++.dg/lto/20100423-2_0.C: New testcase.
From-SVN: r158722
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/20100423-2_0.C | 14 | ||||
-rw-r--r-- | gcc/tree.c | 7 |
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b4ed3c..54ad269 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-04-26 Richard Guenther <rguenther@suse.de> + + PR lto/42425 + * tree.c (free_lang_data_in_type): Do not free TYPE_CONTEXT + if emitting debug information and it is either a function + or a namespace decl. + 2010-04-26 Ira Rosen <irar@il.ibm.com> * tree-vectorizer.h (struct _stmt_vec_info): Add new field to diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index badf910..e041658 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-04-26 Richard Guenther <rguenther@suse.de> + + PR lto/42425 + * g++.dg/lto/20100423-2_0.C: New testcase. + 2010-04-26 Ira Rosen <irar@il.ibm.com> * gcc.dg/vect/bb-slp-23.c: New test. diff --git a/gcc/testsuite/g++.dg/lto/20100423-2_0.C b/gcc/testsuite/g++.dg/lto/20100423-2_0.C new file mode 100644 index 0000000..2ab6bdc --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/20100423-2_0.C @@ -0,0 +1,14 @@ +// { dg-lto-do assemble } +// { dg-lto-options {{-flto -g}} } + +struct A +{ + virtual ~A(); +}; + +void foo() +{ + struct B : A {}; + B b; +} + @@ -4258,7 +4258,12 @@ free_lang_data_in_type (tree type) TYPE_LANG_SLOT_1 (type) = NULL_TREE; } - TYPE_CONTEXT (type) = NULL_TREE; + if (debug_info_level < DINFO_LEVEL_TERSE + || (TYPE_CONTEXT (type) + && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_DECL + && TREE_CODE (TYPE_CONTEXT (type)) != NAMESPACE_DECL)) + TYPE_CONTEXT (type) = NULL_TREE; + if (debug_info_level < DINFO_LEVEL_TERSE) TYPE_STUB_DECL (type) = NULL_TREE; } |