[Bug lto/116094] New: Missing -Wodr diagnostic
sjames at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jul 25 18:14:31 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116094
Bug ID: 116094
Summary: Missing -Wodr diagnostic
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: lto
Assignee: unassigned at gcc dot gnu.org
Reporter: sjames at gcc dot gnu.org
Target Milestone: ---
This came up when reducing PR114790.
I'm going to use pinskia's testcase from
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114790#c8.
t1.cc:
```
struct APITracerContext {
virtual ~APITracerContext() = default;
virtual void releaseActivetracersList() = 0;
};
struct APITracerContextImp : APITracerContext {
~APITracerContextImp() override;
void releaseActivetracersList() override;
};
struct APITracerContextImp globalAPITracerContextImp;
struct APITracerContextImp *pGlobalAPITracerContextImp =
&globalAPITracerContextImp;
APITracerContextImp::~APITracerContextImp() {}
```
t2.cc:
```
struct APITracerContext {
virtual void releaseActivetracersList() = 0;
};
extern struct APITracerContextImp *pGlobalAPITracerContextImp;
struct APITracerContextImp : APITracerContext { void
releaseActivetracersList();};
int g();
inline int
apiTracerWrapperImp( ) {
for (int i = 0; i < g(); i++)
pGlobalAPITracerContextImp->releaseActivetracersList();
}
__attribute__((visibility("default"))) int
zeCommandListAppendMemoryCopyTracing() {
return apiTracerWrapperImp( );
}
```
This testcase violates ODR because:
1) APITracerContext is defined differently;
2) APITracerContextImp is defined differently.
with e.g. `gcc -Wfatal-errors -fvisibility=hidden -shared t1.cc t2.cc -o t.so
-fPIC -O2 -flto -Wodr", we don't get an ODR diagnostic.
More information about the Gcc-bugs
mailing list