[PATCH] MS ABI: Give thunks linkonce_odr linkage
Reid Kleckner
rnk at google.com
Mon Jun 2 12:48:02 PDT 2014
I think it's handling this corner case:
struct Incomplete;
struct A { int a; virtual A *bar(); };
struct B { int b; virtual B *foo(Incomplete); };
struct C : A, B { int c; virtual C *foo(Incomplete); };
C c;
MSVC gives this error:
t.cpp(5) : error C2664: 'C *C::foo(Incomplete)' : cannot convert argument 1 from 'Incomplete' to 'Incomplete'
Source or target has incomplete type
This diagnostic occurred in the compiler generated function 'B *C::foo(Incomplete)'
Clang on the other hand relies on the TU defining the virtual function to emit code for the thunk. Therefore I think the correct linkage is weak_odr. This should also be applicable to the Itanium C++ ABI.
http://reviews.llvm.org/D3992
More information about the cfe-commits
mailing list