On Sun, May 10, 2015 at 3:24 PM, Nico Weber <[email protected]> wrote:
> On Sun, May 10, 2015 at 2:38 PM, David Majnemer <[email protected]> > wrote: > >> Author: majnemer >> Date: Sun May 10 16:38:26 2015 >> New Revision: 236961 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=236961&view=rev >> Log: >> [MS ABI] Update EH emission for MSVC 2015 compatibility >> >> MSVC 2015 renamed the symbol found by name lookup for 'std::terminate' >> so we cannot rely on using '?terminate@@YAXXZ'. Furthermore, it seems >> that 2015 will be the first release of MSVC which permits inlining a >> function which is noexcept into a function which isn't. This is >> implemented by creating a cleanup for the invoker which jumps to >> __std_terminate. Clang's implementation of this aspect of the MSVC >> scheme is slightly less efficient in this respect because we use a >> catch handler configured as a catch-all handler instead. >> >> Added: >> cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp >> Modified: >> cfe/trunk/lib/CodeGen/CGException.cpp >> >> Modified: cfe/trunk/lib/CodeGen/CGException.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=236961&r1=236960&r2=236961&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/CodeGen/CGException.cpp (original) >> +++ cfe/trunk/lib/CodeGen/CGException.cpp Sun May 10 16:38:26 2015 >> @@ -60,7 +60,10 @@ llvm::Constant *CodeGenModule::getTermin >> name = "_ZSt9terminatev"; >> } else if (getLangOpts().CPlusPlus && >> getTarget().getCXXABI().isMicrosoft()) { >> - name = "\01?terminate@@YAXXZ"; >> + if (getLangOpts().isCompatibleWithMSVC(19)) >> > > Since this 19 is showing up in a few places, should there be a named > constant (say, MSVS2015) for it? > Done in r236967. > > >> + name = "__std_terminate"; >> + else >> + name = "\01?terminate@@YAXXZ"; >> } else if (getLangOpts().ObjC1 && >> getLangOpts().ObjCRuntime.hasTerminate()) >> name = "objc_terminate"; >> >> Added: cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp?rev=236961&view=auto >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp (added) >> +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp Sun May 10 >> 16:38:26 2015 >> @@ -0,0 +1,15 @@ >> +// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - >> -triple=x86_64-pc-windows-msvc -mconstructor-aliases -fexceptions >> -fcxx-exceptions -fms-compatibility-version=18.00 | FileCheck >> -check-prefix=MSVC2013 %s >> +// RUN: %clang_cc1 -std=c++11 -emit-llvm %s -o - >> -triple=x86_64-pc-windows-msvc -mconstructor-aliases -fexceptions >> -fcxx-exceptions -fms-compatibility-version=19.00 | FileCheck >> -check-prefix=MSVC2015 %s >> + >> +void may_throw(); >> +void never_throws() noexcept(true) { >> + may_throw(); >> +} >> + >> +// CHECK-LABEL: define void @"\01?never_throws@@YAXXZ" >> +// CHECK: invoke void @"\01?may_throw@@YAXXZ"() >> + >> +// CHECK: landingpad { i8*, i32 } personality i8* bitcast (i32 >> (...)* @__CxxFrameHandler3 to i8*) >> +// MSVC2013: call void @"\01?terminate@@YAXXZ"() >> +// MSVC2015: call void @__std_terminate() >> +// CHECK-NEXT: unreachable >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
