Reverting this and the next one that builds on it... On Thu, Jun 11, 2015 at 9:49 AM Manuel Klimek <kli...@google.com> wrote:
> This change breaks a test: > > http://lab.llvm.org:8080/green/job/clang-stage2-configure-Rlto_check/4473/testReport/Clang/CodeGenCXX/microsoft_abi_virtual_member_pointers_cpp/ > > On Thu, Jun 11, 2015 at 2:29 AM David Majnemer <david.majne...@gmail.com> > wrote: > >> Author: majnemer >> Date: Wed Jun 10 19:20:57 2015 >> New Revision: 239499 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=239499&view=rev >> Log: >> [MS ABI] Allow memfn pointers with unconvertible types to be formed >> >> Remove the restriction which forbade forming pointers to member >> functions which had parameter types or return types which were not >> convertible. >> >> Modified: >> cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp >> cfe/trunk/test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp >> >> Modified: cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp?rev=239499&r1=239498&r2=239499&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp (original) >> +++ cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp Wed Jun 10 19:20:57 2015 >> @@ -2423,12 +2423,7 @@ MicrosoftCXXABI::BuildMemberPointer(cons >> FirstField = CGM.GetAddrOfFunction(MD, Ty); >> FirstField = llvm::ConstantExpr::getBitCast(FirstField, >> CGM.VoidPtrTy); >> } else { >> - if (!CGM.getTypes().isFuncTypeConvertible( >> - MD->getType()->castAs<FunctionType>())) { >> - CGM.ErrorUnsupported(MD, "pointer to virtual member function with " >> - "incomplete return or parameter type"); >> - FirstField = llvm::Constant::getNullValue(CGM.VoidPtrTy); >> - } else if (FPT->getCallConv() == CC_X86FastCall) { >> + if (FPT->getCallConv() == CC_X86FastCall) { >> CGM.ErrorUnsupported(MD, "pointer to fastcall virtual member >> function"); >> FirstField = llvm::Constant::getNullValue(CGM.VoidPtrTy); >> } else { >> >> Modified: >> cfe/trunk/test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp?rev=239499&r1=239498&r2=239499&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp >> (original) >> +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-virtual-member-pointers.cpp >> Wed Jun 10 19:20:57 2015 >> @@ -1,5 +1,5 @@ >> -// RUN: %clang_cc1 -fno-rtti -emit-llvm -triple=i386-pc-win32 %s -o - | >> FileCheck %s --check-prefix=CHECK32 >> -// RUN: %clang_cc1 -fno-rtti -emit-llvm -triple=x86_64-pc-win32 %s -o - >> | FileCheck %s --check-prefix=CHECK64 >> +// RUN: %clang_cc1 -std=c++11 -fno-rtti -emit-llvm -triple=i386-pc-win32 >> %s -o - | FileCheck %s --check-prefix=CHECK32 >> +// RUN: %clang_cc1 -std=c++11 -fno-rtti -emit-llvm >> -triple=x86_64-pc-win32 %s -o - | FileCheck %s --check-prefix=CHECK64 >> >> struct S { >> int x, y, z; >> @@ -13,12 +13,15 @@ struct U { >> U(const U &); >> }; >> >> +struct B; >> + >> struct C { >> virtual void foo(); >> virtual int bar(int, double); >> virtual S baz(int); >> virtual S qux(U); >> virtual void thud(...); >> + virtual void (B::*plugh())(); >> }; >> >> namespace { >> @@ -47,6 +50,8 @@ void f() { >> void (C::*ptr6)(...); >> ptr6 = &C::thud; >> >> + auto ptr7 = &C::plugh; >> + >> >> // CHECK32-LABEL: define void @"\01?f@@YAXXZ"() >> // CHECK32: store i8* bitcast (void (%struct.C*, ...)* @"\01??_9C@ >> @$BA@AE" to i8*), i8** %ptr >> @@ -165,6 +170,20 @@ void f() { >> // CHECK64: [[CALLEE:%.*]] = load void (%struct.C*, ...)*, void >> (%struct.C*, ...)** [[VPTR]] >> // CHECK64: musttail call void (%struct.C*, ...) [[CALLEE]](%struct.C* >> %{{.*}}, ...) >> // CHECK64: ret void >> +// CHECK64: } >> + >> +// CHECK32: define linkonce_odr x86_thiscallcc void >> @"\01??_9C@@$BBE@AE"(%struct.C* >> %this, ...) {{.*}} comdat align 2 { >> +// CHECK32: [[VPTR:%.*]] = getelementptr inbounds void (%struct.C*, >> ...)*, void (%struct.C*, ...)** %vtable, i64 5 >> +// CHECK32: [[CALLEE:%.*]] = load void (%struct.C*, ...)*, void >> (%struct.C*, ...)** [[VPTR]] >> +// CHECK32: musttail call x86_thiscallcc void (%struct.C*, ...) >> [[CALLEE]](%struct.C* %{{.*}}, ...) >> +// CHECK32: ret void >> +// CHECK32: } >> + >> +// CHECK64: define linkonce_odr void @"\01??_9C@@$BCI@AA"(%struct.C* >> %this, ...) {{.*}} comdat align 2 { >> +// CHECK64: [[VPTR:%.*]] = getelementptr inbounds void (%struct.C*, >> ...)*, void (%struct.C*, ...)** %vtable, i64 5 >> +// CHECK64: [[CALLEE:%.*]] = load void (%struct.C*, ...)*, void >> (%struct.C*, ...)** [[VPTR]] >> +// CHECK64: musttail call void (%struct.C*, ...) [[CALLEE]](%struct.C* >> %{{.*}}, ...) >> +// CHECK64: ret void >> // CHECK64: } >> >> // CHECK32: #[[ATTR]] = {{{.*}}"thunk"{{.*}}} >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits