Hi! The dwarf2out.c code relies on the assembly_start debug hook being invoked before any RTL is processed from final.c (and needs it to be done just once). Normally it is called from cgraphunit.c, but when __RTL is seen with a starting pass, run_rtl_passes is called already from the FE. While it would be better to defer the rtl finalization until cgraph says so, it might be quite hard, so instead this patch hacks dwarf2out_assembly_start so that it can be invoked multiple times (and does nothing on the 2nd+ call) and invokes it from the run_rtl_passes function too.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2017-11-20 Jakub Jelinek <ja...@redhat.com> PR debug/82933 * run-rtl-passes.c: Include debug.h. (run_rtl_passes): Call debug_hooks->assembly_start. * dwarf2out.c (dwarf2out_assembly_start): Return early if invoked multiple times. * gcc.dg/rtl/x86_64/pr82933.c: New test. --- gcc/run-rtl-passes.c.jj 2017-01-24 23:29:09.000000000 +0100 +++ gcc/run-rtl-passes.c 2017-11-20 17:36:31.320854900 +0100 @@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. #include "bitmap.h" #include "df.h" #include "regs.h" +#include "debug.h" /* for debug_hooks. */ #include "insn-attr-common.h" /* for INSN_SCHEDULING. */ #include "insn-attr.h" /* for init_sched_attrs. */ #include "run-rtl-passes.h" @@ -43,6 +44,9 @@ run_rtl_passes (char *initial_pass_name) cfun->pass_startwith = initial_pass_name; max_regno = max_reg_num (); + /* cgraphunit.c normally handles this. */ + (*debug_hooks->assembly_start) (); + /* Pass "expand" normally sets this up. */ #ifdef INSN_SCHEDULING init_sched_attrs (); --- gcc/dwarf2out.c.jj 2017-11-15 09:38:26.000000000 +0100 +++ gcc/dwarf2out.c 2017-11-20 17:31:48.222394813 +0100 @@ -27507,6 +27507,9 @@ dwarf2out_init (const char *filename ATT static void dwarf2out_assembly_start (void) { + if (text_section_line_info) + return; + #ifndef DWARF2_LINENO_DEBUGGING_INFO ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); --- gcc/testsuite/gcc.dg/rtl/x86_64/pr82933.c.jj 2017-11-20 17:34:54.680063313 +0100 +++ gcc/testsuite/gcc.dg/rtl/x86_64/pr82933.c 2017-11-20 17:35:26.361667161 +0100 @@ -0,0 +1,4 @@ +/* { dg-do run { target { { i?86-*-* x86_64-*-* } && lp64 } } } */ +/* { dg-options "-g" } */ + +#include "into-cfglayout.c" Jakub