Author: Nick Desaulniers Date: 2020-10-28T11:20:30-07:00 New Revision: cdff3bd932870cc9f84c6828cb1a7bb0df3c5fa0
URL: https://github.com/llvm/llvm-project/commit/cdff3bd932870cc9f84c6828cb1a7bb0df3c5fa0 DIFF: https://github.com/llvm/llvm-project/commit/cdff3bd932870cc9f84c6828cb1a7bb0df3c5fa0.diff LOG: [clang][ToolChains] explicitly return LangOptions::StackProtectorMode Make the virtual method Toolchain::GetDefaultStackProtectorLevel() return an explict enum value rather than an integral constant. This makes the code subjectively easier to read, and should help prevent bugs that may (or may never) arise from changing the enum values. Previously, these were just kept in sync via a comment, which is brittle. The trade off is including a additional header in a few new places. It is not necessary, but in my opinion helps the readability. Split off from https://reviews.llvm.org/D90194 to help cut down on lines changed in code review. Reviewed By: phosek Differential Revision: https://reviews.llvm.org/D90271 Added: Modified: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/CrossWindows.h clang/lib/Driver/ToolChains/Darwin.h clang/lib/Driver/ToolChains/Fuchsia.h clang/lib/Driver/ToolChains/OpenBSD.h clang/lib/Driver/ToolChains/PS4CPU.h Removed: ################################################################################ diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index 4704308f0450..99a5f3238865 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -382,9 +382,10 @@ class ToolChain { virtual bool useRelaxRelocations() const; /// GetDefaultStackProtectorLevel - Get the default stack protector level for - /// this tool chain (0=off, 1=on, 2=strong, 3=all). - virtual unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const { - return 0; + /// this tool chain. + virtual LangOptions::StackProtectorMode + GetDefaultStackProtectorLevel(bool KernelOrKext) const { + return LangOptions::SSPOff; } /// Get the default trivial automatic variable initialization. diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 61e367bd835d..dde4e8de531c 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -2995,8 +2995,8 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC, return; // -stack-protector=0 is default. - unsigned StackProtectorLevel = 0; - unsigned DefaultStackProtectorLevel = + LangOptions::StackProtectorMode StackProtectorLevel = LangOptions::SSPOff; + LangOptions::StackProtectorMode DefaultStackProtectorLevel = TC.GetDefaultStackProtectorLevel(KernelOrKext); if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector, @@ -3005,7 +3005,7 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC, options::OPT_fstack_protector)) { if (A->getOption().matches(options::OPT_fstack_protector)) StackProtectorLevel = - std::max<unsigned>(LangOptions::SSPOn, DefaultStackProtectorLevel); + std::max<>(LangOptions::SSPOn, DefaultStackProtectorLevel); else if (A->getOption().matches(options::OPT_fstack_protector_strong)) StackProtectorLevel = LangOptions::SSPStrong; else if (A->getOption().matches(options::OPT_fstack_protector_all)) diff --git a/clang/lib/Driver/ToolChains/CrossWindows.h b/clang/lib/Driver/ToolChains/CrossWindows.h index df9a7f71bf9f..ffe75332c2e8 100644 --- a/clang/lib/Driver/ToolChains/CrossWindows.h +++ b/clang/lib/Driver/ToolChains/CrossWindows.h @@ -11,6 +11,7 @@ #include "Cuda.h" #include "Gnu.h" +#include "clang/Basic/LangOptions.h" #include "clang/Driver/Tool.h" #include "clang/Driver/ToolChain.h" @@ -59,8 +60,9 @@ class LLVM_LIBRARY_VISIBILITY CrossWindowsToolChain : public Generic_GCC { bool isPIEDefault() const override; bool isPICDefaultForced() const override; - unsigned int GetDefaultStackProtectorLevel(bool KernelOrKext) const override { - return 0; + LangOptions::StackProtectorMode + GetDefaultStackProtectorLevel(bool KernelOrKext) const override { + return LangOptions::SSPOff; } void diff --git a/clang/lib/Driver/ToolChains/Darwin.h b/clang/lib/Driver/ToolChains/Darwin.h index e67b2c5c87cd..c62c344a98da 100644 --- a/clang/lib/Driver/ToolChains/Darwin.h +++ b/clang/lib/Driver/ToolChains/Darwin.h @@ -11,6 +11,7 @@ #include "Cuda.h" #include "ROCm.h" +#include "clang/Basic/LangOptions.h" #include "clang/Driver/DarwinSDKInfo.h" #include "clang/Driver/Tool.h" #include "clang/Driver/ToolChain.h" @@ -491,17 +492,18 @@ class LLVM_LIBRARY_VISIBILITY Darwin : public MachO { return !(isTargetMacOS() && isMacosxVersionLT(10, 6)); } - unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { + LangOptions::StackProtectorMode + GetDefaultStackProtectorLevel(bool KernelOrKext) const override { // Stack protectors default to on for user code on 10.5, // and for everything in 10.6 and beyond if (isTargetIOSBased() || isTargetWatchOSBased()) - return 1; + return LangOptions::SSPOn; else if (isTargetMacOS() && !isMacosxVersionLT(10, 6)) - return 1; + return LangOptions::SSPOn; else if (isTargetMacOS() && !isMacosxVersionLT(10, 5) && !KernelOrKext) - return 1; + return LangOptions::SSPOn; - return 0; + return LangOptions::SSPOff; } void CheckObjCARC() const override; diff --git a/clang/lib/Driver/ToolChains/Fuchsia.h b/clang/lib/Driver/ToolChains/Fuchsia.h index 3159a54bda06..07adf9b7101d 100644 --- a/clang/lib/Driver/ToolChains/Fuchsia.h +++ b/clang/lib/Driver/ToolChains/Fuchsia.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_FUCHSIA_H #include "Gnu.h" +#include "clang/Basic/LangOptions.h" #include "clang/Driver/Tool.h" #include "clang/Driver/ToolChain.h" @@ -59,8 +60,9 @@ class LLVM_LIBRARY_VISIBILITY Fuchsia : public ToolChain { return llvm::DebuggerKind::GDB; } - unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { - return 2; // SSPStrong + LangOptions::StackProtectorMode + GetDefaultStackProtectorLevel(bool KernelOrKext) const override { + return LangOptions::SSPStrong; } std::string ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args, diff --git a/clang/lib/Driver/ToolChains/OpenBSD.h b/clang/lib/Driver/ToolChains/OpenBSD.h index 5f9b259bf861..4932ed5c609c 100644 --- a/clang/lib/Driver/ToolChains/OpenBSD.h +++ b/clang/lib/Driver/ToolChains/OpenBSD.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_OPENBSD_H #include "Gnu.h" +#include "clang/Basic/LangOptions.h" #include "clang/Driver/Tool.h" #include "clang/Driver/ToolChain.h" @@ -79,8 +80,9 @@ class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { std::string getCompilerRT(const llvm::opt::ArgList &Args, StringRef Component, FileType Type = ToolChain::FT_Static) const override; - unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { - return 2; + LangOptions::StackProtectorMode + GetDefaultStackProtectorLevel(bool KernelOrKext) const override { + return LangOptions::SSPStrong; } unsigned GetDefaultDwarfVersion() const override { return 2; } diff --git a/clang/lib/Driver/ToolChains/PS4CPU.h b/clang/lib/Driver/ToolChains/PS4CPU.h index 968be015d411..5f5d0e57d4ea 100644 --- a/clang/lib/Driver/ToolChains/PS4CPU.h +++ b/clang/lib/Driver/ToolChains/PS4CPU.h @@ -10,6 +10,7 @@ #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_PS4CPU_H #include "Gnu.h" +#include "clang/Basic/LangOptions.h" #include "clang/Driver/Tool.h" #include "clang/Driver/ToolChain.h" @@ -73,8 +74,9 @@ class LLVM_LIBRARY_VISIBILITY PS4CPU : public Generic_ELF { bool HasNativeLLVMSupport() const override; bool isPICDefault() const override; - unsigned GetDefaultStackProtectorLevel(bool KernelOrKext) const override { - return 2; // SSPStrong + LangOptions::StackProtectorMode + GetDefaultStackProtectorLevel(bool KernelOrKext) const override { + return LangOptions::SSPStrong; } llvm::DebuggerKind getDefaultDebuggerTuning() const override { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits