forked from OSchip/llvm-project
Use castAs instead of cast in thunk generation
Calling convention attributes can add sugar to methods that we have to look through. This fixes an assertion failure in the provided test case. llvm-svn: 192496
This commit is contained in:
parent
f5370dddff
commit
fe56be5819
|
@ -481,7 +481,7 @@ void CodeGenVTables::maybeEmitThunkForVTable(GlobalDecl GD,
|
|||
// We can't emit thunks for member functions with incomplete types.
|
||||
const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
|
||||
if (!CGM.getTypes().isFuncTypeConvertible(
|
||||
cast<FunctionType>(MD->getType().getTypePtr())))
|
||||
MD->getType()->castAs<FunctionType>()))
|
||||
return;
|
||||
|
||||
emitThunk(GD, Thunk, /*ForVTable=*/true);
|
||||
|
|
|
@ -116,3 +116,18 @@ struct H : E {
|
|||
H h;
|
||||
|
||||
// FIXME: Write vtordisp adjusting thunk tests
|
||||
|
||||
namespace CrashOnThunksForAttributedType {
|
||||
// We used to crash on this because the type of foo is an AttributedType, not
|
||||
// FunctionType, and we had to look through the sugar.
|
||||
struct A {
|
||||
virtual void __stdcall foo();
|
||||
};
|
||||
struct B {
|
||||
virtual void __stdcall foo();
|
||||
};
|
||||
struct C : A, B {
|
||||
virtual void __stdcall foo();
|
||||
};
|
||||
C c;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue