re PR c++/6381 (Missing assembler label)
* dwarf2out.c (output_call_frame_info): Don't emit a CIE with no FDEs. * dwarf2out.c (gen_type_die): Abort on broken recursion. PR c++/6381 * dwarf2out.c (rtl_for_decl_location): Only expand INTEGER_CST and REAL_CST. From-SVN: r53295
This commit is contained in:
parent
6c76b95000
commit
29b91443e9
3 changed files with 36 additions and 5 deletions
|
@ -1,3 +1,13 @@
|
|||
2002-05-08 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* dwarf2out.c (output_call_frame_info): Don't emit a CIE with no FDEs.
|
||||
|
||||
* dwarf2out.c (gen_type_die): Abort on broken recursion.
|
||||
|
||||
PR c++/6381
|
||||
* dwarf2out.c (rtl_for_decl_location): Only expand INTEGER_CST and
|
||||
REAL_CST.
|
||||
|
||||
2002-05-08 Nick Clifton <nickc@cambridge.redhat.com>
|
||||
|
||||
* config/arm/t-arm-elf (MULTILIB): Do not allow big-endian/
|
||||
|
|
|
@ -1814,6 +1814,10 @@ output_call_frame_info (for_eh)
|
|||
int per_encoding = DW_EH_PE_absptr;
|
||||
int lsda_encoding = DW_EH_PE_absptr;
|
||||
|
||||
/* Don't emit a CIE if there won't be any FDEs. */
|
||||
if (fde_table_in_use == 0)
|
||||
return;
|
||||
|
||||
/* If we don't have any functions we'll want to unwind out of, don't emit any
|
||||
EH unwind information. */
|
||||
if (for_eh)
|
||||
|
@ -8946,15 +8950,17 @@ rtl_for_decl_location (decl)
|
|||
== strlen (TREE_STRING_POINTER (init)) + 1))
|
||||
rtl = gen_rtx_CONST_STRING (VOIDmode, TREE_STRING_POINTER (init));
|
||||
}
|
||||
|
||||
if (rtl == NULL)
|
||||
/* If the initializer is something that we know will expand into an
|
||||
immediate RTL constant, expand it now. Expanding anything else
|
||||
tends to produce unresolved symbols; see debug/5770 and c++/6381. */
|
||||
else if (TREE_CODE (DECL_INITIAL (decl)) == INTEGER_CST
|
||||
|| TREE_CODE (DECL_INITIAL (decl)) == REAL_CST)
|
||||
{
|
||||
rtl = expand_expr (DECL_INITIAL (decl), NULL_RTX, VOIDmode,
|
||||
EXPAND_INITIALIZER);
|
||||
/* If expand_expr returned a MEM, we cannot use it, since
|
||||
it won't be output, leading to unresolved symbol. */
|
||||
/* If expand_expr returns a MEM, it wasn't immediate. */
|
||||
if (rtl && GET_CODE (rtl) == MEM)
|
||||
rtl = NULL;
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11071,6 +11077,10 @@ gen_type_die (type, context_die)
|
|||
if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
|
||||
&& DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
|
||||
{
|
||||
/* Prevent broken recursion; we can't hand off to the same type. */
|
||||
if (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) == type)
|
||||
abort ();
|
||||
|
||||
TREE_ASM_WRITTEN (type) = 1;
|
||||
gen_decl_die (TYPE_NAME (type), context_die);
|
||||
return;
|
||||
|
|
11
gcc/testsuite/g++.dg/debug/const1.C
Normal file
11
gcc/testsuite/g++.dg/debug/const1.C
Normal file
|
@ -0,0 +1,11 @@
|
|||
// PR c++/6381
|
||||
// Bug: we were emitting the initializer for bar, which referenced foo,
|
||||
// which was not emitted.
|
||||
|
||||
// { dg-options "-O" }
|
||||
// { dg-do link }
|
||||
|
||||
static const int foo[] = { 0 };
|
||||
static const int * const bar[] = { foo };
|
||||
|
||||
int main() {}
|
Loading…
Add table
Reference in a new issue