Fix MSVC build with C++ EH enabled
authorReid Kleckner <rnk@google.com>
Tue, 11 Feb 2020 23:50:27 +0000 (15:50 -0800)
committerReid Kleckner <rnk@google.com>
Tue, 11 Feb 2020 23:56:10 +0000 (15:56 -0800)
Mark the CrashRecoveryContextImpl constructor noexcept, so that MSVC
won't emit an unwind helper to clean up the allocation from `new` if the
constructor throws an exception.

Otherwise, MSVC complains:
  llvm\lib\Support\CrashRecoveryContext.cpp(220): error C2712: \
  Cannot use __try in functions that require object unwinding

The other simple fix would be to wrap `new` in a static helper or
lambda.

Users have reported that Tensorflow builds LLVM with /EHsc.

llvm/lib/Support/CrashRecoveryContext.cpp

index f708da7..3568356 100644 (file)
@@ -41,7 +41,7 @@ struct CrashRecoveryContextImpl {
   unsigned ValidJumpBuffer : 1;
 
 public:
-  CrashRecoveryContextImpl(CrashRecoveryContext *CRC)
+  CrashRecoveryContextImpl(CrashRecoveryContext *CRC) noexcept
       : CRC(CRC), Failed(false), SwitchedThread(false), ValidJumpBuffer(false) {
     Next = CurrentContext->get();
     CurrentContext->set(this);