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? > + 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
