https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97937

            Bug ID: 97937
           Summary: Line numbers are missing from duplicated function
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ipa
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bernd.edlinger at hotmail dot de
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

Consider this test case:

$ cat test.c
int test(void)
{
  return 0;
}

int test1(void)
{
  return 0;
}

struct s {
  int (*x) (void);
  int (*y) (void);
};

struct s xxx = { test, test1 };

$ gcc -g -O2 -S test.c

test.s:
        .file   "test.c"
        .text
.Ltext0:
        .p2align 4
        .globl  test
        .type   test, @function
test:
.LFB0:
        .file 1 "test.c"
        .loc 1 2 1 view -0
        .cfi_startproc
        .loc 1 3 3 view .LVU1
        .loc 1 4 1 is_stmt 0 view .LVU2
        xorl    %eax, %eax
        ret
        .cfi_endproc
.LFE0:
        .size   test, .-test
        .p2align 4
        .globl  test1
        .type   test1, @function
test1:
.LFB3:
        .cfi_startproc
        xorl    %eax, %eax
        ret
        .cfi_endproc


The problem is that there are no line numbers in test1.

That is caused by this statement in symtab-thunks.cc

428           if (force_gimple_thunk)
429             DECL_IGNORED_P (thunk_fndecl) = 1;

#0  expand_thunk (node=0x7fffeee7edd0, output_asm_thunks=false,
force_gimple_thunk=true)
    at ../../gcc-trunk/gcc/symtab-thunks.cc:429
#1  0x0000000000fca17b in cgraph_node::create_wrapper (this=0x7fffeee7edd0,
target=0x7fffeee7ebb0)
    at ../../gcc-trunk/gcc/cgraphunit.c:2601
#2  0x000000000281d7bd in ipa_icf::sem_function::merge (this=0x46dfc90,
alias_item=0x46c2880)
    at ../../gcc-trunk/gcc/ipa-icf.c:1299
#3  0x0000000002825672 in ipa_icf::sem_item_optimizer::merge_classes
(this=0x4746390, prev_class_count=902, 
    loaded_symbols=74) at ../../gcc-trunk/gcc/ipa-icf.c:3406
#4  0x00000000028220c8 in ipa_icf::sem_item_optimizer::execute (this=0x4746390)
at ../../gcc-trunk/gcc/ipa-icf.c:2459

together with this in final.c:

2433            case NOTE_INSN_BEGIN_STMT:
2434              gcc_checking_assert (cfun->debug_nonbind_markers);
2435              if (!DECL_IGNORED_P (current_function_decl)
2436                  && notice_source_line (insn, NULL))
(gdb) 
2437                {
2438                output_source_line:
2439                  (*debug_hooks->source_line) (last_linenum,
last_columnnum,
2440                                               last_filename,
last_discriminator,
2441                                               true);
2442                  clear_next_view_needed (seen);
2443                }
2444              break;

which prevents the line number from being included in the asm.

Reply via email to