[Bug lto/86490] New: lto1: fatal error: multiple prevailing defs

hjl.tools at gmail dot com gcc-bugzilla@gcc.gnu.org
Wed Jul 11 15:57:00 GMT 2018


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

            Bug ID: 86490
           Summary: lto1: fatal error: multiple prevailing defs
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: lto
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

[hjl@gnu-cfl-1 pr23350]$ cat foo.c
int foo;
void bar() {}
[hjl@gnu-cfl-1 pr23350]$ cat bar.c
int foo;
void bar() {}
[hjl@gnu-cfl-1 pr23350]$ cat main.c
int foo;
int
main ()
{
  return foo;
}
[hjl@gnu-cfl-1 pr23350]$ make CC=gcc
gcc -O2 -flto   -c -o main.o main.c
gcc -O2 -flto   -c -o foo.o foo.c
ar --plugin `gcc -print-prog-name=liblto_plugin.so` -rusc libfoo.a foo.o
gcc -O2 -flto   -c -o bar.o bar.c
ar --plugin `gcc -print-prog-name=liblto_plugin.so` -rusc libbar.a bar.o
gcc -o x  main.o libfoo.a libbar.a
lto1: fatal error: multiple prevailing defs for ‘bar’
compilation terminated.
lto-wrapper: fatal error: gcc returned 1 exit status
compilation terminated.
/usr/local/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make: *** [Makefile:14: x] Error 1
[hjl@gnu-cfl-1 pr23350]$ 

Linker has:

     if (!blhe)
        {
          /* The plugin is called to claim symbols in an archive element
             from plugin_object_p.  But those symbols aren't needed to
             create output.  They are defined and referenced only within
             IR.  */
          switch (syms[n].def)
            {
            default:
              abort ();
            case LDPK_UNDEF:
            case LDPK_WEAKUNDEF:
              res = LDPR_UNDEF;
              break;
            case LDPK_DEF:
            case LDPK_WEAKDEF:
            case LDPK_COMMON:
              res = LDPR_PREVAILING_DEF_IRONLY;
              break;
            }
          goto report_symbol;
        }

lto1 shouldn't issue

lto1: fatal error: multiple prevailing defs for ‘bar’

unless bar will be included in output.


More information about the Gcc-bugs mailing list