[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-04-02 Thread Daniel Kiss via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7314aea5a42d: [clang] Move branch-protection from 
CodeGenOptions to  LangOptions (authored by danielkiss).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Basic/CodeGenOptions.h
  clang/include/clang/Basic/LangOptions.def
  clang/include/clang/Basic/LangOptions.h
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/AST/PrintfFormatString.cpp
  clang/lib/Basic/Targets/AArch64.cpp
  clang/lib/CodeGen/CGDeclCXX.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Frontend/CompilerInvocation.cpp

Index: clang/lib/Frontend/CompilerInvocation.cpp
===
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -1387,38 +1387,6 @@
 
   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 @@
   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) {
Index: clang/lib/CodeGen/TargetInfo.cpp
===
--- clang/lib/CodeGen/TargetInfo.cpp
+++ clang/lib/CodeGen/TargetInfo.cpp
@@ -5107,9 +5107,11 @@
 if (!FD)
   return;
 
-CodeGenOptions::SignReturnAddressScope Scope = CGM.getCodeGenOpts().getSignReturnAddress();
-CodeGenOptions::SignReturnAddressKeyValue Key = CGM.getCodeGenOpts().getSignReturnAddressKey();
-bool BranchTargetEnforcement = CGM.getCodeGenOpts().BranchTargetEnforcement;
+LangOptions::SignReturnAddressScopeKind Scope =
+CGM.getLangOpts().getSignReturnAddressScope();
+LangOptions::SignReturnAddressKeyKind Key =
+CGM.getLangOpts().getSignReturnAddressKey();
+bool BranchTargetEnforcement = CGM.getLangOpts().BranchTargetEnforcement;
 if (const auto *TA = FD->getAttr()) {
   ParsedTargetAttr Attr = TA->parse();
   if 

[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-04-01 Thread Eli Friedman via Phabricator via cfe-commits
efriedma accepted this revision.
efriedma added a comment.
This revision is now accepted and ready to land.

LGTM


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-04-01 Thread Tamas Petz via Phabricator via cfe-commits
tamas.petz updated this revision to Diff 254174.
tamas.petz added a comment.

Address review comments.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Basic/CodeGenOptions.h
  clang/include/clang/Basic/LangOptions.def
  clang/include/clang/Basic/LangOptions.h
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/AST/PrintfFormatString.cpp
  clang/lib/Basic/Targets/AArch64.cpp
  clang/lib/CodeGen/CGDeclCXX.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Frontend/CompilerInvocation.cpp

Index: clang/lib/Frontend/CompilerInvocation.cpp
===
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -1386,38 +1386,6 @@
 
   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);
@@ -3347,6 +3315,40 @@
   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) {
Index: clang/lib/CodeGen/TargetInfo.cpp
===
--- clang/lib/CodeGen/TargetInfo.cpp
+++ clang/lib/CodeGen/TargetInfo.cpp
@@ -5107,9 +5107,11 @@
 if (!FD)
   return;
 
-CodeGenOptions::SignReturnAddressScope Scope = CGM.getCodeGenOpts().getSignReturnAddress();
-CodeGenOptions::SignReturnAddressKeyValue Key = CGM.getCodeGenOpts().getSignReturnAddressKey();
-bool BranchTargetEnforcement = CGM.getCodeGenOpts().BranchTargetEnforcement;
+LangOptions::SignReturnAddressScopeKind Scope =
+CGM.getLangOpts().getSignReturnAddressScope();
+LangOptions::SignReturnAddressKeyKind Key =
+CGM.getLangOpts().getSignReturnAddressKey();
+bool BranchTargetEnforcement = CGM.getLangOpts().BranchTargetEnforcement;
 if (const auto *TA = FD->getAttr()) {
   ParsedTargetAttr Attr = TA->parse();
   if (!Attr.BranchProtection.empty()) {
@@ -5125,14 +5127,14 @@
 }
 
 auto *Fn = cast(GV);
-if (Scope != CodeGenOptions::SignReturnAddressScope::None) {
+   

[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-04-01 Thread Momchil Velikov via Phabricator via cfe-commits
chill added a reviewer: efriedma.
chill added a subscriber: efriedma.
chill added a comment.

Following @efriedma  comment here 
http://lists.llvm.org/pipermail/cfe-dev/2020-March/065017.html LGTM.




Comment at: clang/include/clang/Basic/TargetInfo.h:18
 #include "clang/Basic/AddressSpaces.h"
-#include "clang/Basic/LLVM.h"
 #include "clang/Basic/CodeGenOptions.h"
+#include "clang/Basic/LLVM.h"

This include is probably not needed anymore.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-04-01 Thread Tamas Petz via Phabricator via cfe-commits
tamas.petz added a comment.

Tests pass, however, I am not sure ParseLangArgs is called in all the necessary 
cases (see the occurrences in the code).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-03-31 Thread Tamas Petz via Phabricator via cfe-commits
tamas.petz marked an inline comment as done.
tamas.petz added inline comments.



Comment at: clang/include/clang/Basic/CodeGenOptions.def:402
 #undef VALUE_CODEGENOPT
-

danielkiss wrote:
> is this change necessary? 
I think there should be one new line at the end of the file, not two.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-03-31 Thread Daniel Kiss via Phabricator via cfe-commits
danielkiss added a comment.

just a nit, LGTM otherwise.




Comment at: clang/include/clang/Basic/CodeGenOptions.def:402
 #undef VALUE_CODEGENOPT
-

is this change necessary? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D77131/new/

https://reviews.llvm.org/D77131



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D77131: [clang] Move branch-protection from CodeGenOptions to LangOptions

2020-03-31 Thread Tamas Petz via Phabricator via cfe-commits
tamas.petz created this revision.
tamas.petz added a reviewer: momchil.velikov.
tamas.petz added a project: clang.
Herald added a subscriber: cfe-commits.
danielkiss added a comment.
tamas.petz marked an inline comment as done.

just a nit, LGTM otherwise.




Comment at: clang/include/clang/Basic/CodeGenOptions.def:402
 #undef VALUE_CODEGENOPT
-

is this change necessary? 



Comment at: clang/include/clang/Basic/CodeGenOptions.def:402
 #undef VALUE_CODEGENOPT
-

danielkiss wrote:
> is this change necessary? 
I think there should be one new line at the end of the file, not two.


Reason: the option has an effect on preprocessing.

Also see thread: http://lists.llvm.org/pipermail/cfe-dev/2020-March/065014.html


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77131

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Basic/CodeGenOptions.h
  clang/include/clang/Basic/LangOptions.def
  clang/include/clang/Basic/LangOptions.h
  clang/include/clang/Basic/TargetInfo.h
  clang/lib/Basic/Targets/AArch64.cpp
  clang/lib/CodeGen/CGDeclCXX.cpp
  clang/lib/CodeGen/TargetInfo.cpp
  clang/lib/Frontend/CompilerInvocation.cpp

Index: clang/lib/Frontend/CompilerInvocation.cpp
===
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -1386,38 +1386,6 @@
 
   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);
@@ -3347,6 +3315,40 @@
   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) {
Index: clang/lib/CodeGen/TargetInfo.cpp
===
--- clang/lib/CodeGen/TargetInfo.cpp
+++ clang/lib/CodeGen/TargetInfo.cpp
@@ -5107,9 +5107,11 @@
 if (!FD)
   return;
 
-CodeGenOptions::SignReturnAddressScope Scope = CGM.getCodeGenOpts().getSignReturnAddress();
-CodeGenOptions::SignReturnAddressKeyValue Key = CGM.getCodeGenOpts().getSignReturnAddressKey();
-bool