Commit 29b91443 by Jason Merrill Committed by Jason Merrill

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
parent 6c76b950
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;
......
// 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() {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment