[clang] f24e58d - [clang][cli] Create accessors for exception models in LangOptions
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 15 01:16:25 PST 2020
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)
More information about the cfe-commits
mailing list