Calling convention attributes can add sugar to methods that we have to
look through. This fixes an assertion failure in the provided test
case.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192496
91177308-0d34-0410-b5e6-
96231b3b80d8
// 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);
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;
+}