re PR debug/48207 (ICE in lhd_set_decl_assembler_name, at langhooks.c:158)
authorRichard Guenther <rguenther@suse.de>
Tue, 19 Apr 2011 13:04:57 +0000 (13:04 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 19 Apr 2011 13:04:57 +0000 (13:04 +0000)
2011-04-19  Richard Guenther  <rguenther@suse.de>

PR lto/48207
* tree.c (free_lang_data): Do not reset the decl-assembler-name
langhook.

* g++.dg/lto/pr48207_0.C: New testcase.

From-SVN: r172708

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/pr48207_0.C [new file with mode: 0644]
gcc/tree.c

index b119fa766a5463c82b67f954985bf203b597a096..14ed70733ca9919ab892bc9a0ca34bf6701a1b3f 100644 (file)
@@ -1,3 +1,9 @@
+2011-04-19  Richard Guenther  <rguenther@suse.de>
+
+       PR lto/48207
+       * tree.c (free_lang_data): Do not reset the decl-assembler-name
+       langhook.
+
 2011-04-19  Eric Botcazou  <ebotcazou@adacore.com>
 
        * tree-inline.c (expand_call_inline): Do not issue a -Winline warning
index 497fd4dadaee755fd2fd8985bdb77c95857777b9..69737234c9aa6459ab7f6ca4dbf075a558de3191 100644 (file)
@@ -1,3 +1,8 @@
+2011-04-19  Richard Guenther  <rguenther@suse.de>
+
+       PR lto/48207
+       * g++.dg/lto/pr48207_0.C: New testcase.
+
 2011-04-18  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/init/void1.C: New.
diff --git a/gcc/testsuite/g++.dg/lto/pr48207_0.C b/gcc/testsuite/g++.dg/lto/pr48207_0.C
new file mode 100644 (file)
index 0000000..e66cb49
--- /dev/null
@@ -0,0 +1,13 @@
+// { dg-lto-do link }
+// { dg-lto-options { { -flto -g } } }
+
+void bar(int) {}
+
+void foo(void)
+{
+  typedef enum { ABC } DEF;
+  DEF a;
+  bar((int)a);
+}
+
+int main() {}
index 57e8e684ad6a1e55826ff0b51f8e38cbed63e45d..d0c18b17ae2ff9671158865a5ceda18697967f45 100644 (file)
@@ -5176,7 +5176,12 @@ free_lang_data (void)
   lang_hooks.callgraph.analyze_expr = NULL;
   lang_hooks.dwarf_name = lhd_dwarf_name;
   lang_hooks.decl_printable_name = gimple_decl_printable_name;
-  lang_hooks.set_decl_assembler_name = lhd_set_decl_assembler_name;
+  /* We do not want the default decl_assembler_name implementation,
+     rather if we have fixed everything we want a wrapper around it
+     asserting that all non-local symbols already got their assembler
+     name and only produce assembler names for local symbols.  Or rather
+     make sure we never call decl_assembler_name on local symbols and
+     devise a separate, middle-end private scheme for it.  */
 
   /* Reset diagnostic machinery.  */
   diagnostic_starter (global_dc) = default_tree_diagnostic_starter;