diff options
author | Richard Biener <rguenther@suse.de> | 2018-04-04 14:11:39 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-04-04 14:11:39 +0000 |
commit | f3ac6d2c51d007e000f92db06043f0f4683695bc (patch) | |
tree | e6c217a905d591203ff84ae0b003e2fb5a3f6f5f | |
parent | b43502719f0727864d5a19fe08a081a334022e42 (diff) | |
download | gcc-f3ac6d2c51d007e000f92db06043f0f4683695bc.zip gcc-f3ac6d2c51d007e000f92db06043f0f4683695bc.tar.gz gcc-f3ac6d2c51d007e000f92db06043f0f4683695bc.tar.bz2 |
re PR debug/85176 (ICE in force_decl_die, at dwarf2out.c:25910)
2018-04-04 Richard Biener <rguenther@suse.de>
PR lto/85176
* dwarf2out.c (dwarf2out_register_external_die): Peel namespaces
from contexts for DINFO_LEVEL_TERSE and below.
* g++.dg/lto/pr85176_0.C: New testcase.
From-SVN: r259080
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lto/pr85176_0.C | 10 |
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd0c1b1..c24c3dc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-04-04 Richard Biener <rguenther@suse.de> + + PR lto/85176 + * dwarf2out.c (dwarf2out_register_external_die): Peel namespaces + from contexts for DINFO_LEVEL_TERSE and below. + 2018-04-04 Kito Cheng <kito.cheng@gmail.com> * config/nds32/nds32-doubleword.md (move_<mode>): Require diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 049be71..7933054 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5903,8 +5903,13 @@ dwarf2out_register_external_die (tree decl, const char *sym, } else ctx = DECL_CONTEXT (decl); + /* Peel types in the context stack. */ while (ctx && TYPE_P (ctx)) ctx = TYPE_CONTEXT (ctx); + /* Likewise namespaces in case we do not want to emit DIEs for them. */ + if (debug_info_level <= DINFO_LEVEL_TERSE) + while (ctx && TREE_CODE (ctx) == NAMESPACE_DECL) + ctx = DECL_CONTEXT (ctx); if (ctx) { if (TREE_CODE (ctx) == BLOCK) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af3e374..e9c9475 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2018-04-04 Richard Biener <rguenther@suse.de> + PR lto/85176 + * g++.dg/lto/pr85176_0.C: New testcase. + +2018-04-04 Richard Biener <rguenther@suse.de> + PR testsuite/85191 * lib/target-supports.exp (check_effective_target_vect_perm_short): Fix typo. diff --git a/gcc/testsuite/g++.dg/lto/pr85176_0.C b/gcc/testsuite/g++.dg/lto/pr85176_0.C new file mode 100644 index 0000000..73767ce --- /dev/null +++ b/gcc/testsuite/g++.dg/lto/pr85176_0.C @@ -0,0 +1,10 @@ +// { dg-lto-do link } +// { dg-lto-options { { -flto -g1 } } } +// { dg-extra-ld-options "-r -nostdlib" } +namespace a { + template <typename b, typename = b> class c; + template <typename b, typename d> void e(c<b, d> &); + void operator<<(c<char> &f, const char *) { e(f); } + extern c<char> cout; +} +int main() { a::cout << ""; } |