Author: Jan Svoboda Date: 2020-12-15T10:15:58+01:00 New Revision: f24e58df7ddf2dc9f13c8f8fc259f0374f04aca3
URL: https://github.com/llvm/llvm-project/commit/f24e58df7ddf2dc9f13c8f8fc259f0374f04aca3 DIFF: https://github.com/llvm/llvm-project/commit/f24e58df7ddf2dc9f13c8f8fc259f0374f04aca3.diff LOG: [clang][cli] Create accessors for exception models in LangOptions This abstracts away the members that are being replaced in a follow-up patch. Depends on D83979. Reviewed By: dexonsmith Differential Revision: https://reviews.llvm.org/D93214 Added: Modified: clang/include/clang/Basic/LangOptions.h clang/lib/CodeGen/BackendUtil.cpp clang/lib/CodeGen/CGException.cpp clang/lib/Frontend/InitPreprocessor.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index 203c45fdd9a7..d4791650ec6b 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/include/clang/Basic/LangOptions.h @@ -380,6 +380,11 @@ class LangOptions : public LangOptionsBase { 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 index 554688ac987b..2dbf30ef171f 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -497,13 +497,13 @@ static bool initTargetOptions(DiagnosticsEngine &Diags, // 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 index 85604cf5e611..f8a486909e41 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -121,11 +121,11 @@ static const EHPersonality &getCPersonality(const TargetInfo &Target, 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 @@ static const EHPersonality &getObjCPersonality(const TargetInfo &Target, 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 @@ static const EHPersonality &getCXXPersonality(const TargetInfo &Target, 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 @@ void CodeGenFunction::EmitStartEHSpec(const Decl *D) { // 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 @@ void CodeGenFunction::EmitEndEHSpec(const Decl *D) { // 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 index 42eed9f6c7b5..f2c8d0f6b59a 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -753,12 +753,12 @@ static void InitializePredefinedMacros(const TargetInfo &TI, 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) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits