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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |lto, wrong-code
          Component|lto                         |c++
            Version|lto                         |10.1.0
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |jason at gcc dot gnu.org,
                   |                            |nathan at gcc dot gnu.org

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's more likely the GENERIC / cgraph output by the C++ frontend is not correct
and works by accident without LTO.  Initial symbol table:

Initial Symbol table:

int {anonymous}::xx/3 (int {anonymous}::xx) @0x7f615d2d8180
  Type: variable
  Visibility: external
  References:
  Referring: _ZN12_GLOBAL__N_13fooEv/0 (write)
  Availability: not-ready
  Varpool flags:
main/2 (int main()) @0x7f615d421168
  Type: function definition analyzed
  Visibility: force_output no_reorder public
  Aux: @0x37a5000
  References: int {anonymous}::xx/1 (write)
  Referring:
  Function flags: body
  Called by:
  Calls:
int {anonymous}::xx/1 (int {anonymous}::xx) @0x7f615d2d8100
  Type: variable definition analyzed
  Visibility: force_output no_reorder
  Aux: @0x7f615d421168
  References:
  Referring: main/2 (write)
  Availability: not-ready
  Varpool flags: initialized
_ZN12_GLOBAL__N_13fooEv/0 (void {anonymous}::foo()) @0x7f615d421000
  Type: function definition analyzed
  Visibility: force_output no_reorder
  Aux: @0x7f615d2d8100
  References: int {anonymous}::xx/3 (write)
  Referring:
  Function flags: body
  Called by:
  Calls:

where you can see there are actually two 'xx' objects and the C++ FE
takes it up to the linker/assembler to resolve them.  But the symtab
code does not include such "resolving" step.

Reply via email to