forked from OSchip/llvm-project
Compare canonical return types when generating MS C++ ABI vtable thunks
This was part of the cause for PR17655. We were generating thunks when we shouldn't have. I suspect that if we tweak the test case for PR17655 to actually require thunks, we can reproduce the same crash. llvm-svn: 197836
This commit is contained in:
parent
f30e848432
commit
d2d1cc5156
|
@ -2888,7 +2888,8 @@ void VFTableBuilder::AddMethods(BaseSubobject Base, unsigned BaseDepth,
|
|||
AddThunk(MD, VTableThunks[OverriddenMethodInfo.VFTableIndex]);
|
||||
}
|
||||
|
||||
if (MD->getResultType() == OverriddenMD->getResultType()) {
|
||||
if (Context.hasSameType(MD->getResultType(),
|
||||
OverriddenMD->getResultType())) {
|
||||
// No return adjustment needed - just replace the overridden method info
|
||||
// with the current info.
|
||||
MethodInfo MI(OverriddenMethodInfo.VBTableIndex,
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
// RUN: FileCheck --check-prefix=CHECK-L %s < %t
|
||||
// RUN: FileCheck --check-prefix=CHECK-M %s < %t
|
||||
// RUN: FileCheck --check-prefix=CHECK-N %s < %t
|
||||
// RUN: FileCheck --check-prefix=CHECK-O %s < %t
|
||||
|
||||
struct A {
|
||||
// CHECK-A: VFTable for 'A' (3 entries)
|
||||
|
@ -250,3 +251,13 @@ struct N {
|
|||
};
|
||||
|
||||
N n;
|
||||
|
||||
typedef int int_type;
|
||||
struct O { virtual int f(); };
|
||||
struct P : O { virtual int_type f(); };
|
||||
P p;
|
||||
// CHECK-O: VFTable for 'O' in 'P' (1 entries)
|
||||
// CHECK-O-NEXT: 0 | int_type P::f()
|
||||
|
||||
// CHECK-O: VFTable for 'O' (1 entries)
|
||||
// CHECK-O-NEXT: 0 | int O::f()
|
||||
|
|
Loading…
Reference in New Issue