https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68658
Bug ID: 68658
Summary: [6 Regression] LTO - bogus redefinition of warning
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
Assignee: unassigned at gcc dot gnu.org
Reporter: burnus at gcc dot gnu.org
Target Milestone: ---
I have the following three-file program. Compiling it without LTO or with GCC 5
works, but with GCC 6 + LTO, I get:
g++ -O2 -flto one.cc two.cc
one.cc:3:5: error: redefinition of ‘int one::func()’
int one::func() { return 1;}
^~~
one.h:3:15: note: ‘virtual int one::func()’ previously defined here
virtual int func();
^~~~
one.cc: In function ‘int bar(one)’:
one.cc:5:5: error: redefinition of ‘int bar(one)’
int bar(class one y) {
^~~
one.h:6:5: note: ‘int bar(one)’ previously defined here
int bar(class one y);
^~~
==> one.h <==
class one {
public:
virtual int func();
};
int bar(class one y);
==> one.cc <==
#include "one.h"
int one::func() { return 1;}
int bar(class one y) {
return y.func();
}
==> two.cc <==
#include "one.h"
int main() {
class one x;
return bar(x);
}