diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -380,6 +380,11 @@ bool isSignReturnAddressScopeAll() const { return getSignReturnAddressScope() == SignReturnAddressScopeKind::All; } + + bool hasSjLjExceptions() const { return SjLjExceptions; } + bool hasSEHExceptions() const { return SEHExceptions; } + bool hasDWARFExceptions() const { return DWARFExceptions; } + bool hasWasmExceptions() const { return WasmExceptions; } }; /// Floating point control options diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -497,13 +497,13 @@ // Set EABI version. Options.EABIVersion = TargetOpts.EABIVersion; - if (LangOpts.SjLjExceptions) + if (LangOpts.hasSjLjExceptions()) Options.ExceptionModel = llvm::ExceptionHandling::SjLj; - if (LangOpts.SEHExceptions) + if (LangOpts.hasSEHExceptions()) Options.ExceptionModel = llvm::ExceptionHandling::WinEH; - if (LangOpts.DWARFExceptions) + if (LangOpts.hasDWARFExceptions()) Options.ExceptionModel = llvm::ExceptionHandling::DwarfCFI; - if (LangOpts.WasmExceptions) + if (LangOpts.hasWasmExceptions()) Options.ExceptionModel = llvm::ExceptionHandling::Wasm; Options.NoInfsFPMath = LangOpts.NoHonorInfs; diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -121,11 +121,11 @@ const llvm::Triple &T = Target.getTriple(); if (T.isWindowsMSVCEnvironment()) return EHPersonality::MSVC_CxxFrameHandler3; - if (L.SjLjExceptions) + if (L.hasSjLjExceptions()) return EHPersonality::GNU_C_SJLJ; - if (L.DWARFExceptions) + if (L.hasDWARFExceptions()) return EHPersonality::GNU_C; - if (L.SEHExceptions) + if (L.hasSEHExceptions()) return EHPersonality::GNU_C_SEH; return EHPersonality::GNU_C; } @@ -149,9 +149,9 @@ LLVM_FALLTHROUGH; case ObjCRuntime::GCC: case ObjCRuntime::ObjFW: - if (L.SjLjExceptions) + if (L.hasSjLjExceptions()) return EHPersonality::GNU_ObjC_SJLJ; - if (L.SEHExceptions) + if (L.hasSEHExceptions()) return EHPersonality::GNU_ObjC_SEH; return EHPersonality::GNU_ObjC; } @@ -165,13 +165,13 @@ return EHPersonality::MSVC_CxxFrameHandler3; if (T.isOSAIX()) return EHPersonality::XL_CPlusPlus; - if (L.SjLjExceptions) + if (L.hasSjLjExceptions()) return EHPersonality::GNU_CPlusPlus_SJLJ; - if (L.DWARFExceptions) + if (L.hasDWARFExceptions()) return EHPersonality::GNU_CPlusPlus; - if (L.SEHExceptions) + if (L.hasSEHExceptions()) return EHPersonality::GNU_CPlusPlus_SEH; - if (L.WasmExceptions) + if (L.hasWasmExceptions()) return EHPersonality::GNU_Wasm_CPlusPlus; return EHPersonality::GNU_CPlusPlus; } @@ -476,7 +476,7 @@ // In wasm we currently treat 'throw()' in the same way as 'noexcept'. In // case of throw with types, we ignore it and print a warning for now. // TODO Correctly handle exception specification in wasm - if (CGM.getLangOpts().WasmExceptions) { + if (CGM.getLangOpts().hasWasmExceptions()) { if (EST == EST_DynamicNone) EHStack.pushTerminate(); else @@ -564,7 +564,7 @@ // In wasm we currently treat 'throw()' in the same way as 'noexcept'. In // case of throw with types, we ignore it and print a warning for now. // TODO Correctly handle exception specification in wasm - if (CGM.getLangOpts().WasmExceptions) { + if (CGM.getLangOpts().hasWasmExceptions()) { if (EST == EST_DynamicNone) EHStack.popTerminate(); return; diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -753,12 +753,12 @@ if (LangOpts.GNUCVersion && LangOpts.RTTI) Builder.defineMacro("__GXX_RTTI"); - if (LangOpts.SjLjExceptions) + if (LangOpts.hasSjLjExceptions()) Builder.defineMacro("__USING_SJLJ_EXCEPTIONS__"); - else if (LangOpts.SEHExceptions) + else if (LangOpts.hasSEHExceptions()) Builder.defineMacro("__SEH__"); - else if (LangOpts.DWARFExceptions && - (TI.getTriple().isThumb() || TI.getTriple().isARM())) + else if (LangOpts.hasDWARFExceptions() && + (TI.getTriple().isThumb() || TI.getTriple().isARM())) Builder.defineMacro("__ARM_DWARF_EH__"); if (LangOpts.Deprecated)