aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorDaniel Kiss <daniel.kiss@arm.com>2020-04-02 10:11:01 +0200
committerDaniel Kiss <daniel.kiss@arm.com>2020-04-02 10:31:52 +0200
commit7314aea5a42d33f9f5af5d158d8892e88072764e (patch)
treefac86c350faf94d98f07ca86aef509e4d83f70a1 /clang/lib/Frontend/CompilerInvocation.cpp
parentc3ef971d36b7f7c37a0f5cedb5c64fef7420bfea (diff)
downloadllvm-7314aea5a42d33f9f5af5d158d8892e88072764e.zip
llvm-7314aea5a42d33f9f5af5d158d8892e88072764e.tar.gz
llvm-7314aea5a42d33f9f5af5d158d8892e88072764e.tar.bz2
[clang] Move branch-protection from CodeGenOptions to LangOptions
Summary: Reason: the option has an effect on preprocessing. Also see thread: http://lists.llvm.org/pipermail/cfe-dev/2020-March/065014.html Reviewers: chill, efriedma Reviewed By: efriedma Subscribers: efriedma, danielkiss, cfe-commits, kristof.beyls Tags: #clang Differential Revision: https://reviews.llvm.org/D77131
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp66
1 files changed, 34 insertions, 32 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 5d0be3c..23638e1 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1387,38 +1387,6 @@ static bool ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args, InputKind IK,
Opts.Addrsig = Args.hasArg(OPT_faddrsig);
- if (Arg *A = Args.getLastArg(OPT_msign_return_address_EQ)) {
- StringRef SignScope = A->getValue();
-
- if (SignScope.equals_lower("none"))
- Opts.setSignReturnAddress(CodeGenOptions::SignReturnAddressScope::None);
- else if (SignScope.equals_lower("all"))
- Opts.setSignReturnAddress(CodeGenOptions::SignReturnAddressScope::All);
- else if (SignScope.equals_lower("non-leaf"))
- Opts.setSignReturnAddress(
- CodeGenOptions::SignReturnAddressScope::NonLeaf);
- else
- Diags.Report(diag::err_drv_invalid_value)
- << A->getAsString(Args) << SignScope;
-
- if (Arg *A = Args.getLastArg(OPT_msign_return_address_key_EQ)) {
- StringRef SignKey = A->getValue();
- if (!SignScope.empty() && !SignKey.empty()) {
- if (SignKey.equals_lower("a_key"))
- Opts.setSignReturnAddressKey(
- CodeGenOptions::SignReturnAddressKeyValue::AKey);
- else if (SignKey.equals_lower("b_key"))
- Opts.setSignReturnAddressKey(
- CodeGenOptions::SignReturnAddressKeyValue::BKey);
- else
- Diags.Report(diag::err_drv_invalid_value)
- << A->getAsString(Args) << SignKey;
- }
- }
- }
-
- Opts.BranchTargetEnforcement = Args.hasArg(OPT_mbranch_target_enforce);
-
Opts.KeepStaticConsts = Args.hasArg(OPT_fkeep_static_consts);
Opts.SpeculativeLoadHardening = Args.hasArg(OPT_mspeculative_load_hardening);
@@ -3348,6 +3316,40 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
Opts.BuildingPCHWithObjectFile = Args.hasArg(OPT_building_pch_with_obj);
Opts.MaxTokens = getLastArgIntValue(Args, OPT_fmax_tokens_EQ, 0, Diags);
+
+ if (Arg *A = Args.getLastArg(OPT_msign_return_address_EQ)) {
+ StringRef SignScope = A->getValue();
+
+ if (SignScope.equals_lower("none"))
+ Opts.setSignReturnAddressScope(
+ LangOptions::SignReturnAddressScopeKind::None);
+ else if (SignScope.equals_lower("all"))
+ Opts.setSignReturnAddressScope(
+ LangOptions::SignReturnAddressScopeKind::All);
+ else if (SignScope.equals_lower("non-leaf"))
+ Opts.setSignReturnAddressScope(
+ LangOptions::SignReturnAddressScopeKind::NonLeaf);
+ else
+ Diags.Report(diag::err_drv_invalid_value)
+ << A->getAsString(Args) << SignScope;
+
+ if (Arg *A = Args.getLastArg(OPT_msign_return_address_key_EQ)) {
+ StringRef SignKey = A->getValue();
+ if (!SignScope.empty() && !SignKey.empty()) {
+ if (SignKey.equals_lower("a_key"))
+ Opts.setSignReturnAddressKey(
+ LangOptions::SignReturnAddressKeyKind::AKey);
+ else if (SignKey.equals_lower("b_key"))
+ Opts.setSignReturnAddressKey(
+ LangOptions::SignReturnAddressKeyKind::BKey);
+ else
+ Diags.Report(diag::err_drv_invalid_value)
+ << A->getAsString(Args) << SignKey;
+ }
+ }
+ }
+
+ Opts.BranchTargetEnforcement = Args.hasArg(OPT_mbranch_target_enforce);
}
static bool isStrictlyPreprocessorAction(frontend::ActionKind Action) {