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

--- Comment #9 from Martin Liška <marxin at gcc dot gnu.org> ---
So what happens in WPA:

1) we read IPA ICF summary and the variable has definition:

(gdb) p vnode->debug()
_ZN8nlohmann6detail12static_constINS0_10to_json_fnEE5valueE/10 (value)
@0x7ffff7fb3200
  Type: variable definition analyzed
  Visibility: externally_visible semantic_interposition preempted_reg public
weak comdat
comdat_group:_ZN8nlohmann6detail12static_constINS0_10to_json_fnEE5valueE
one_only
  References: 
  Referring:
_Z7to_jsonRN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmiSaNS_14adl_serializerES2_IhSaIhEEEERK8Settings/1
(addr)
_Z7to_jsonRN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmiSaNS_14adl_serializerES2_IhSaIhEEEERK8Settings/1
(addr) 
  Read from file: a.o
  Availability: not-ready
  Varpool flags: initialized read-only const-value-known
$1 = void

2) the symbols is removed in unreachable nodes:
#0  symbol_table::remove_unreachable_nodes (this=<optimized out>,
file=<optimized out>) at /home/marxin/Programming/gcc/gcc/ipa.cc:639
#1  0x00000000008e1277 in read_cgraph_and_symbols (nfiles=<optimized out>,
fnames=<optimized out>) at
/home/marxin/Programming/gcc/gcc/lto/lto-common.cc:2959
#2  0x00000000008c7540 in lto_main () at
/home/marxin/Programming/gcc/gcc/lto/lto.cc:626
#3  0x0000000000e229d4 in compile_file () at
/home/marxin/Programming/gcc/gcc/toplev.cc:452
#4  0x00000000008a0822 in do_compile (no_backend=false) at
/home/marxin/Programming/gcc/gcc/toplev.cc:2144
#5  toplev::main (this=this@entry=0x7fffffffd93e, argc=<optimized out>,
argc@entry=17, argv=<optimized out>, argv@entry=0x7fffffffda68) at
/home/marxin/Programming/gcc/gcc/toplev.cc:2296
#6  0x00000000008a1f32 in main (argc=17, argv=0x7fffffffda68) at
/home/marxin/Programming/gcc/gcc/main.cc:39

3) IPA ICF loads the body:
(gdb) p item->node->debug()
_ZN8nlohmann6detail12static_constINS0_10to_json_fnEE5valueE/10 (value)
@0x7ffff7fb3200
  Type: variable
  Body removed by symtab_remove_unreachable_nodes
  Visibility: externally_visible semantic_interposition preempted_reg external
public weak comdat
comdat_group:_ZN8nlohmann6detail12static_constINS0_10to_json_fnEE5valueE
one_only
  References: 
  Referring:
_Z7to_jsonRN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmiSaNS_14adl_serializerES2_IhSaIhEEEERK8Settings/1
(addr)
_Z7to_jsonRN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmiSaNS_14adl_serializerES2_IhSaIhEEEERK8Settings/1
(addr) 
  Read from file: a.o
  Availability: not_available
  Varpool flags: initialized read-only
$8 = void

So we need to filter our such symbols.

Reply via email to