aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-04-04 14:11:39 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-04-04 14:11:39 +0000
commitf3ac6d2c51d007e000f92db06043f0f4683695bc (patch)
treee6c217a905d591203ff84ae0b003e2fb5a3f6f5f
parentb43502719f0727864d5a19fe08a081a334022e42 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/dwarf2out.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/lto/pr85176_0.C10
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 << ""; }