[PATCH] D117522: [clang-tidy] Add modernize-macro-to-enum check

2022-01-30 Thread Richard via Phabricator via cfe-commits
LegalizeAdulthood added a comment.

This situation isn't properly diagnosed (false positive):

  #ifdef USE_FOO
  #if USE_FOO
  // code
  #endif
  #endif


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

https://reviews.llvm.org/D117522

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


[PATCH] D118578: [RISCV] Make Zfhmin in march imply F.

2022-01-30 Thread Craig Topper via Phabricator via cfe-commits
craig.topper created this revision.
craig.topper added reviewers: asb, achieveartificialintelligence, luismarques, 
kito-cheng.
Herald added subscribers: VincentWu, luke957, StephenFan, vkmr, frasercrmck, 
evandro, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, 
the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, 
niosHD, sabuasal, simoncook, johnrusso, rbar, hiraditya.
craig.topper requested review of this revision.
Herald added subscribers: cfe-commits, pcwang-thead, eopXD, MaskRay.
Herald added projects: clang, LLVM.

Zfhmin should imply F just like Zfh.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118578

Files:
  clang/test/Preprocessor/riscv-target-features.c
  llvm/lib/Support/RISCVISAInfo.cpp


Index: llvm/lib/Support/RISCVISAInfo.cpp
===
--- llvm/lib/Support/RISCVISAInfo.cpp
+++ llvm/lib/Support/RISCVISAInfo.cpp
@@ -737,6 +737,7 @@
 }
 
 static const char *ImpliedExtsV[] = {"zvl128b", "f", "d"};
+static const char *ImpliedExtsZfhmin[] = {"f"};
 static const char *ImpliedExtsZfh[] = {"zfhmin"};
 static const char *ImpliedExtsZve64d[] = {"zve64f"};
 static const char *ImpliedExtsZve64f[] = {"zve64x", "zve32f"};
@@ -772,6 +773,7 @@
 static constexpr ImpliedExtsEntry ImpliedExts[] = {
 {{"v"}, {ImpliedExtsV}},
 {{"zfh"}, {ImpliedExtsZfh}},
+{{"zfhmin"}, {ImpliedExtsZfhmin}},
 {{"zk"}, {ImpliedExtsZk}},
 {{"zkn"}, {ImpliedExtsZkn}},
 {{"zks"}, {ImpliedExtsZks}},
Index: clang/test/Preprocessor/riscv-target-features.c
===
--- clang/test/Preprocessor/riscv-target-features.c
+++ clang/test/Preprocessor/riscv-target-features.c
@@ -226,6 +226,7 @@
 // RUN: %clang -target riscv64-unknown-linux-gnu \
 // RUN: -march=rv64izfhmin1p0 -x c -E -dM %s \
 // RUN: -o - | FileCheck --check-prefix=CHECK-ZFHMIN-EXT %s
+// CHECK-ZFHMIN-EXT: __riscv_f 200{{$}}
 // CHECK-ZFHMIN-EXT: __riscv_zfhmin 100{{$}}
 
 // RUN: %clang -target riscv32-unknown-linux-gnu \
@@ -234,6 +235,7 @@
 // RUN: %clang -target riscv64-unknown-linux-gnu \
 // RUN: -march=rv64izfh1p0 -x c -E -dM %s \
 // RUN: -o - | FileCheck --check-prefix=CHECK-ZFH-EXT %s
+// CHECK-ZFH-EXT: __riscv_f 200{{$}}
 // CHECK-ZFH-EXT: __riscv_zfh 100{{$}}
 
 // RUN: %clang -target riscv32-unknown-linux-gnu \


Index: llvm/lib/Support/RISCVISAInfo.cpp
===
--- llvm/lib/Support/RISCVISAInfo.cpp
+++ llvm/lib/Support/RISCVISAInfo.cpp
@@ -737,6 +737,7 @@
 }
 
 static const char *ImpliedExtsV[] = {"zvl128b", "f", "d"};
+static const char *ImpliedExtsZfhmin[] = {"f"};
 static const char *ImpliedExtsZfh[] = {"zfhmin"};
 static const char *ImpliedExtsZve64d[] = {"zve64f"};
 static const char *ImpliedExtsZve64f[] = {"zve64x", "zve32f"};
@@ -772,6 +773,7 @@
 static constexpr ImpliedExtsEntry ImpliedExts[] = {
 {{"v"}, {ImpliedExtsV}},
 {{"zfh"}, {ImpliedExtsZfh}},
+{{"zfhmin"}, {ImpliedExtsZfhmin}},
 {{"zk"}, {ImpliedExtsZk}},
 {{"zkn"}, {ImpliedExtsZkn}},
 {{"zks"}, {ImpliedExtsZks}},
Index: clang/test/Preprocessor/riscv-target-features.c
===
--- clang/test/Preprocessor/riscv-target-features.c
+++ clang/test/Preprocessor/riscv-target-features.c
@@ -226,6 +226,7 @@
 // RUN: %clang -target riscv64-unknown-linux-gnu \
 // RUN: -march=rv64izfhmin1p0 -x c -E -dM %s \
 // RUN: -o - | FileCheck --check-prefix=CHECK-ZFHMIN-EXT %s
+// CHECK-ZFHMIN-EXT: __riscv_f 200{{$}}
 // CHECK-ZFHMIN-EXT: __riscv_zfhmin 100{{$}}
 
 // RUN: %clang -target riscv32-unknown-linux-gnu \
@@ -234,6 +235,7 @@
 // RUN: %clang -target riscv64-unknown-linux-gnu \
 // RUN: -march=rv64izfh1p0 -x c -E -dM %s \
 // RUN: -o - | FileCheck --check-prefix=CHECK-ZFH-EXT %s
+// CHECK-ZFH-EXT: __riscv_f 200{{$}}
 // CHECK-ZFH-EXT: __riscv_zfh 100{{$}}
 
 // RUN: %clang -target riscv32-unknown-linux-gnu \
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D99031: [clang-format] Fix CompactNamespaces corner case when AllowShortLambdasOnASingleLine/BraceWrapping.BeforeLambdaBody are set

2022-01-30 Thread Ahmed Mahdy via Phabricator via cfe-commits
aybassiouny added a comment.

Thanks @curdeius for checking this in, apologies for delay on my side. Glad the 
bug is not there in the new version!




Comment at: clang/lib/Format/TokenAnnotator.cpp:3498
+  !Tok.isOneOf(TT_ObjCBlockLBrace, TT_DictLiteral) &&
+  !Tok.Previous->Previous->is(tok::kw_namespace));
 }

curdeius wrote:
> Please add at least asserts for `Tok.Previous` and `Tok.Previous->Previous`.
I almost see no asserts despite similar usage, but sure 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D99031

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


[PATCH] D114413: [OpenMPIRBuilder] Implement static-chunked workshare-loop schedules.

2022-01-30 Thread Peixin Qiao via Phabricator via cfe-commits
peixin added a comment.

Thanks for the fix. The fix of off-by-one issue looks ok to me. Will continue 
reviewing other parts in one week due to the Spring Festival in China.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D114413

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


[PATCH] D118542: [Clang][OpenMPIRBuilder] Fix off-by-one error when dividing by stepsize.

2022-01-30 Thread Peixin Qiao via Phabricator via cfe-commits
peixin accepted this revision.
peixin added a comment.
This revision is now accepted and ready to land.

Function code LGTM. Please fix the CI fail.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118542

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


[clang-tools-extra] 2f18b02 - [clang-tools-extra] Remove unused forward declarations (NFC)

2022-01-30 Thread Kazu Hirata via cfe-commits

Author: Kazu Hirata
Date: 2022-01-30T16:05:00-08:00
New Revision: 2f18b02de7e365d9be1877810843a459bbe0d73d

URL: 
https://github.com/llvm/llvm-project/commit/2f18b02de7e365d9be1877810843a459bbe0d73d
DIFF: 
https://github.com/llvm/llvm-project/commit/2f18b02de7e365d9be1877810843a459bbe0d73d.diff

LOG: [clang-tools-extra] Remove unused forward declarations (NFC)

Added: 


Modified: 

clang-tools-extra/clang-apply-replacements/include/clang-apply-replacements/Tooling/ApplyReplacements.h
clang-tools-extra/clang-tidy/ClangTidyCheck.h
clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
clang-tools-extra/clangd/ClangdLSPServer.h
clang-tools-extra/clangd/GlobalCompilationDatabase.h
clang-tools-extra/clangd/ParsedAST.h

Removed: 




diff  --git 
a/clang-tools-extra/clang-apply-replacements/include/clang-apply-replacements/Tooling/ApplyReplacements.h
 
b/clang-tools-extra/clang-apply-replacements/include/clang-apply-replacements/Tooling/ApplyReplacements.h
index 2f8ddbed99079..e37768277c5a4 100644
--- 
a/clang-tools-extra/clang-apply-replacements/include/clang-apply-replacements/Tooling/ApplyReplacements.h
+++ 
b/clang-tools-extra/clang-apply-replacements/include/clang-apply-replacements/Tooling/ApplyReplacements.h
@@ -27,7 +27,6 @@
 namespace clang {
 
 class DiagnosticsEngine;
-class Rewriter;
 
 namespace replace {
 

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.h 
b/clang-tools-extra/clang-tidy/ClangTidyCheck.h
index 102e82ce85a88..9b41e5836de73 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.h
@@ -20,7 +20,6 @@
 
 namespace clang {
 
-class CompilerInstance;
 class SourceManager;
 
 namespace tidy {

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h 
b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
index 3b5f82033d253..1b1866476c38b 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
@@ -20,14 +20,7 @@
 namespace clang {
 
 class ASTContext;
-class CompilerInstance;
 class SourceManager;
-namespace ast_matchers {
-class MatchFinder;
-} // namespace ast_matchers
-namespace tooling {
-class CompilationDatabase;
-} // namespace tooling
 
 namespace tidy {
 class CachedGlobList;

diff  --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h 
b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
index a1621961986e7..01809c016ad01 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
@@ -12,9 +12,6 @@
 #include "../utils/RenamerClangTidyCheck.h"
 #include "llvm/ADT/Optional.h"
 namespace clang {
-
-class MacroInfo;
-
 namespace tidy {
 namespace readability {
 

diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.h 
b/clang-tools-extra/clangd/ClangdLSPServer.h
index 02c2a5c721e1d..27c65bade2164 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.h
+++ b/clang-tools-extra/clangd/ClangdLSPServer.h
@@ -31,8 +31,6 @@
 namespace clang {
 namespace clangd {
 
-class SymbolIndex;
-
 /// This class exposes ClangdServer's capabilities via Language Server 
Protocol.
 ///
 /// MessageHandler binds the implemented LSP methods (e.g. onInitialize) to

diff  --git a/clang-tools-extra/clangd/GlobalCompilationDatabase.h 
b/clang-tools-extra/clangd/GlobalCompilationDatabase.h
index b6e2fa3bccdfa..4a41c6963a597 100644
--- a/clang-tools-extra/clangd/GlobalCompilationDatabase.h
+++ b/clang-tools-extra/clangd/GlobalCompilationDatabase.h
@@ -24,8 +24,6 @@
 namespace clang {
 namespace clangd {
 
-class Logger;
-
 struct ProjectInfo {
   // The directory in which the compilation database was discovered.
   // Empty if directory-based compilation database discovery was not used.

diff  --git a/clang-tools-extra/clangd/ParsedAST.h 
b/clang-tools-extra/clangd/ParsedAST.h
index 8a89e5f3bebfd..43f3fdda7227e 100644
--- a/clang-tools-extra/clangd/ParsedAST.h
+++ b/clang-tools-extra/clangd/ParsedAST.h
@@ -43,7 +43,6 @@
 namespace clang {
 namespace clangd {
 class HeuristicResolver;
-class SymbolIndex;
 
 /// Stores and provides access to parsed AST.
 class ParsedAST {



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


[PATCH] D118386: [Support][NFC] Fix generic `ChildrenGetterTy` of `IDFCalculatorBase`

2022-01-30 Thread Markus Böck via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGe0b11c7659f8: [Support][NFC] Fix generic `ChildrenGetterTy` 
of `IDFCalculatorBase` (authored by zero9178).

Changed prior to commit:
  https://reviews.llvm.org/D118386?vs=403668=404408#toc

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118386

Files:
  clang/include/clang/Analysis/Analyses/Dominators.h
  clang/include/clang/Analysis/CFG.h
  llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
  llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp

Index: llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
===
--- llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
+++ llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
@@ -2212,40 +2212,6 @@
   // redundant PHIs.
 }
 
-// Boilerplate for feeding MachineBasicBlocks into IDF calculator. Provide
-// template specialisations for graph traits and a successor enumerator.
-namespace llvm {
-template <> struct GraphTraits {
-  using NodeRef = MachineBasicBlock *;
-  using ChildIteratorType = MachineBasicBlock::succ_iterator;
-
-  static NodeRef getEntryNode(MachineBasicBlock *BB) { return BB; }
-  static ChildIteratorType child_begin(NodeRef N) { return N->succ_begin(); }
-  static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
-};
-
-template <> struct GraphTraits {
-  using NodeRef = const MachineBasicBlock *;
-  using ChildIteratorType = MachineBasicBlock::const_succ_iterator;
-
-  static NodeRef getEntryNode(const MachineBasicBlock *BB) { return BB; }
-  static ChildIteratorType child_begin(NodeRef N) { return N->succ_begin(); }
-  static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
-};
-
-using MachineDomTreeBase = DomTreeBase::NodeType;
-using MachineDomTreeChildGetter =
-typename IDFCalculatorDetail::ChildrenGetterTy;
-
-namespace IDFCalculatorDetail {
-template <>
-typename MachineDomTreeChildGetter::ChildrenTy
-MachineDomTreeChildGetter::get(const NodeRef ) {
-  return {N->succ_begin(), N->succ_end()};
-}
-} // namespace IDFCalculatorDetail
-} // namespace llvm
-
 void InstrRefBasedLDV::BlockPHIPlacement(
 const SmallPtrSetImpl ,
 const SmallPtrSetImpl ,
@@ -2253,8 +2219,7 @@
   // Apply IDF calculator to the designated set of location defs, storing
   // required PHIs into PHIBlocks. Uses the dominator tree stored in the
   // InstrRefBasedLDV object.
-  IDFCalculatorDetail::ChildrenGetterTy foo;
-  IDFCalculatorBase IDF(DomTree->getBase(), foo);
+  IDFCalculatorBase IDF(DomTree->getBase());
 
   IDF.setLiveInBlocks(AllBlocks);
   IDF.setDefiningBlocks(DefBlocks);
Index: llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
===
--- llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
+++ llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
@@ -37,7 +37,7 @@
 /// May be specialized if, for example, one wouldn't like to return nullpointer
 /// successors.
 template  struct ChildrenGetterTy {
-  using NodeRef = typename GraphTraits::NodeRef;
+  using NodeRef = typename GraphTraits::NodeRef;
   using ChildrenTy = SmallVector;
 
   ChildrenTy get(const NodeRef );
Index: clang/include/clang/Analysis/CFG.h
===
--- clang/include/clang/Analysis/CFG.h
+++ clang/include/clang/Analysis/CFG.h
@@ -1494,9 +1494,6 @@
   static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
 };
 
-template <> struct GraphTraits
-: GraphTraits {};
-
 template <> struct GraphTraits< const ::clang::CFGBlock *> {
   using NodeRef = const ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_succ_iterator;
@@ -1506,9 +1503,6 @@
   static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
 };
 
-template <> struct GraphTraits
-: GraphTraits {};
-
 template <> struct GraphTraits> {
   using NodeRef = ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_pred_iterator;
@@ -1521,9 +1515,6 @@
   static ChildIteratorType child_end(NodeRef N) { return N->pred_end(); }
 };
 
-template <> struct GraphTraits>
-: GraphTraits {};
-
 template <> struct GraphTraits> {
   using NodeRef = const ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_pred_iterator;
@@ -1536,9 +1527,6 @@
   static ChildIteratorType child_end(NodeRef N) { return N->pred_end(); }
 };
 
-template <> struct GraphTraits>
-: GraphTraits {};
-
 // Traits for: CFG
 
 template <> struct GraphTraits< ::clang::CFG* >
Index: clang/include/clang/Analysis/Analyses/Dominators.h
===
--- clang/include/clang/Analysis/Analyses/Dominators.h
+++ 

[clang] e0b11c7 - [Support][NFC] Fix generic `ChildrenGetterTy` of `IDFCalculatorBase`

2022-01-30 Thread Markus Böck via cfe-commits

Author: Markus Böck
Date: 2022-01-30T22:09:07+01:00
New Revision: e0b11c7659f81a382a3c76e26ed792308248f41c

URL: 
https://github.com/llvm/llvm-project/commit/e0b11c7659f81a382a3c76e26ed792308248f41c
DIFF: 
https://github.com/llvm/llvm-project/commit/e0b11c7659f81a382a3c76e26ed792308248f41c.diff

LOG: [Support][NFC] Fix generic `ChildrenGetterTy` of `IDFCalculatorBase`

Both IDFCalculatorBase and its accompanying DominatorTreeBase only supports 
pointer nodes. The template argument is the block type itself and any uses of 
GraphTraits is therefore done via a pointer to the node type.
However, the ChildrenGetterTy type of IDFCalculatorBase has a use on just the 
node type instead of a pointer to the node type. Various parts of the monorepo 
has worked around this issue by providing specializations of GraphTraits for 
the node type directly, or not been affected by using specializations instead 
of the generic case. These are unnecessary however and instead the generic code 
should be fixed instead.

An example from within Tree is eg. A use of IDFCalculatorBase in 
InstrRefBasedImpl.cpp. It basically instantiates a 
IDFCalculatorBase but due to the bug above then goes 
on to specialize GraphTraits although 
GraphTraits exists (and should be used instead).

Similar dead code exists in clang which defines redundant GraphTraits to work 
around this bug.

This patch fixes both the original issue and removes the dead code that was 
used to work around the issue.

Differential Revision: https://reviews.llvm.org/D118386

Added: 


Modified: 
clang/include/clang/Analysis/Analyses/Dominators.h
clang/include/clang/Analysis/CFG.h
llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp

Removed: 




diff  --git a/clang/include/clang/Analysis/Analyses/Dominators.h 
b/clang/include/clang/Analysis/Analyses/Dominators.h
index f588a5c7d1d7b..9ac9cbe7d3ec7 100644
--- a/clang/include/clang/Analysis/Analyses/Dominators.h
+++ b/clang/include/clang/Analysis/Analyses/Dominators.h
@@ -193,7 +193,7 @@ namespace IDFCalculatorDetail {
 /// Specialize ChildrenGetterTy to skip nullpointer successors.
 template 
 struct ChildrenGetterTy {
-  using NodeRef = typename GraphTraits::NodeRef;
+  using NodeRef = typename GraphTraits::NodeRef;
   using ChildrenTy = SmallVector;
 
   ChildrenTy get(const NodeRef ) {

diff  --git a/clang/include/clang/Analysis/CFG.h 
b/clang/include/clang/Analysis/CFG.h
index c5512a7e14998..d8e7e1e43d815 100644
--- a/clang/include/clang/Analysis/CFG.h
+++ b/clang/include/clang/Analysis/CFG.h
@@ -1494,9 +1494,6 @@ template <> struct GraphTraits< ::clang::CFGBlock *> {
   static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
 };
 
-template <> struct GraphTraits
-: GraphTraits {};
-
 template <> struct GraphTraits< const ::clang::CFGBlock *> {
   using NodeRef = const ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_succ_iterator;
@@ -1506,9 +1503,6 @@ template <> struct GraphTraits< const ::clang::CFGBlock 
*> {
   static ChildIteratorType child_end(NodeRef N) { return N->succ_end(); }
 };
 
-template <> struct GraphTraits
-: GraphTraits {};
-
 template <> struct GraphTraits> {
   using NodeRef = ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_pred_iterator;
@@ -1521,9 +1515,6 @@ template <> struct GraphTraits> {
   static ChildIteratorType child_end(NodeRef N) { return N->pred_end(); }
 };
 
-template <> struct GraphTraits>
-: GraphTraits {};
-
 template <> struct GraphTraits> {
   using NodeRef = const ::clang::CFGBlock *;
   using ChildIteratorType = ::clang::CFGBlock::const_pred_iterator;
@@ -1536,9 +1527,6 @@ template <> struct GraphTraits> {
   static ChildIteratorType child_end(NodeRef N) { return N->pred_end(); }
 };
 
-template <> struct GraphTraits>
-: GraphTraits {};
-
 // Traits for: CFG
 
 template <> struct GraphTraits< ::clang::CFG* >

diff  --git a/llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h 
b/llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
index 3bafeb48f64a3..96105d6b4684b 100644
--- a/llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
+++ b/llvm/include/llvm/Support/GenericIteratedDominanceFrontier.h
@@ -37,7 +37,7 @@ namespace IDFCalculatorDetail {
 /// May be specialized if, for example, one wouldn't like to return nullpointer
 /// successors.
 template  struct ChildrenGetterTy {
-  using NodeRef = typename GraphTraits::NodeRef;
+  using NodeRef = typename GraphTraits::NodeRef;
   using ChildrenTy = SmallVector;
 
   ChildrenTy get(const NodeRef );

diff  --git a/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp 
b/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
index 8a190e7699414..ee3bc79ed8f75 100644
--- a/llvm/lib/CodeGen/LiveDebugValues/InstrRefBasedImpl.cpp
+++ 

[PATCH] D117753: [AArch64] Support for memset tagged intrinsic

2022-01-30 Thread Dave Green via Phabricator via cfe-commits
dmgreen accepted this revision.
dmgreen added a comment.

Thanks. LGTM


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117753

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


[clang] fdd0e74 - [clang] Remove redundant string initialization (NFC)

2022-01-30 Thread Kazu Hirata via cfe-commits

Author: Kazu Hirata
Date: 2022-01-30T12:32:55-08:00
New Revision: fdd0e745c35dd9f8747d0aaa66488cfefc9634a6

URL: 
https://github.com/llvm/llvm-project/commit/fdd0e745c35dd9f8747d0aaa66488cfefc9634a6
DIFF: 
https://github.com/llvm/llvm-project/commit/fdd0e745c35dd9f8747d0aaa66488cfefc9634a6.diff

LOG: [clang] Remove redundant string initialization (NFC)

Identified with readability-redundant-string-init.

Added: 


Modified: 
clang/include/clang/Analysis/FlowSensitive/MapLattice.h
clang/lib/Sema/SemaChecking.cpp

Removed: 




diff  --git a/clang/include/clang/Analysis/FlowSensitive/MapLattice.h 
b/clang/include/clang/Analysis/FlowSensitive/MapLattice.h
index ff403f68b7c5b..014cd60841ee7 100644
--- a/clang/include/clang/Analysis/FlowSensitive/MapLattice.h
+++ b/clang/include/clang/Analysis/FlowSensitive/MapLattice.h
@@ -112,7 +112,7 @@ template 
 std::ostream &
 operator<<(std::ostream ,
const clang::dataflow::MapLattice ) {
-  std::string Separator = "";
+  std::string Separator;
   Os << "{";
   for (const auto  : M) {
 Os << std::exchange(Separator, ", ") << E.first << " => " << E.second;
@@ -125,7 +125,7 @@ template 
 std::ostream &
 operator<<(std::ostream ,
const clang::dataflow::VarMapLattice ) {
-  std::string Separator = "";
+  std::string Separator;
   Os << "{";
   for (const auto  : M) {
 Os << std::exchange(Separator, ", ") << E.first->getName().str() << " => "

diff  --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index c8fb36b8311a4..dfbf4cdc89cb9 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -3987,7 +3987,7 @@ bool Sema::CheckRISCVBuiltinFunctionCall(const TargetInfo 
,
 }
 
 if (!HasFeature) {
-  std::string FeatureStrs = "";
+  std::string FeatureStrs;
   for (StringRef OF : ReqOpFeatures) {
 // If the feature is 64bit, alter the string so it will print better in
 // the diagnostic.



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


[PATCH] D86547: [compiler-rt][builtins] Use c[tl]zsi macro instead of __builtin_c[tl]z

2022-01-30 Thread Anatoly Trosinenko via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4bcd2588a986: [compiler-rt][builtins] Use c[tl]zsi macro 
instead of __builtin_c[tl]z (authored by atrosinenko).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D86547

Files:
  compiler-rt/lib/builtins/floatsisf.c
  compiler-rt/lib/builtins/floatsitf.c
  compiler-rt/lib/builtins/floatunsisf.c
  compiler-rt/lib/builtins/floatunsitf.c
  compiler-rt/lib/builtins/fp_extend.h
  compiler-rt/lib/builtins/udivmoddi4.c


Index: compiler-rt/lib/builtins/udivmoddi4.c
===
--- compiler-rt/lib/builtins/udivmoddi4.c
+++ compiler-rt/lib/builtins/udivmoddi4.c
@@ -82,7 +82,7 @@
 r.s.high = n.s.high & (d.s.high - 1);
 *rem = r.all;
   }
-  return n.s.high >> __builtin_ctz(d.s.high);
+  return n.s.high >> ctzsi(d.s.high);
 }
 // K K
 // ---
@@ -112,7 +112,7 @@
   *rem = n.s.low & (d.s.low - 1);
 if (d.s.low == 1)
   return n.all;
-sr = __builtin_ctz(d.s.low);
+sr = ctzsi(d.s.low);
 q.s.high = n.s.high >> sr;
 q.s.low = (n.s.high << (n_uword_bits - sr)) | (n.s.low >> sr);
 return q.all;
Index: compiler-rt/lib/builtins/fp_extend.h
===
--- compiler-rt/lib/builtins/fp_extend.h
+++ compiler-rt/lib/builtins/fp_extend.h
@@ -33,9 +33,9 @@
   return __builtin_clzl(a);
 #else
   if (a & REP_C(0x))
-return __builtin_clz(a >> 32);
+return clzsi(a >> 32);
   else
-return 32 + __builtin_clz(a & REP_C(0x));
+return 32 + clzsi(a & REP_C(0x));
 #endif
 }
 
Index: compiler-rt/lib/builtins/floatunsitf.c
===
--- compiler-rt/lib/builtins/floatunsitf.c
+++ compiler-rt/lib/builtins/floatunsitf.c
@@ -25,7 +25,7 @@
 return fromRep(0);
 
   // Exponent of (fp_t)a is the width of abs(a).
-  const int exponent = (aWidth - 1) - __builtin_clz(a);
+  const int exponent = (aWidth - 1) - clzsi(a);
   rep_t result;
 
   // Shift a into the significand field and clear the implicit bit.
Index: compiler-rt/lib/builtins/floatunsisf.c
===
--- compiler-rt/lib/builtins/floatunsisf.c
+++ compiler-rt/lib/builtins/floatunsisf.c
@@ -26,7 +26,7 @@
 return fromRep(0);
 
   // Exponent of (fp_t)a is the width of abs(a).
-  const int exponent = (aWidth - 1) - __builtin_clz(a);
+  const int exponent = (aWidth - 1) - clzsi(a);
   rep_t result;
 
   // Shift a into the significand field, rounding if it is a right-shift
Index: compiler-rt/lib/builtins/floatsitf.c
===
--- compiler-rt/lib/builtins/floatsitf.c
+++ compiler-rt/lib/builtins/floatsitf.c
@@ -33,7 +33,7 @@
   }
 
   // Exponent of (fp_t)a is the width of abs(a).
-  const int exponent = (aWidth - 1) - __builtin_clz(aAbs);
+  const int exponent = (aWidth - 1) - clzsi(aAbs);
   rep_t result;
 
   // Shift a into the significand field and clear the implicit bit.
Index: compiler-rt/lib/builtins/floatsisf.c
===
--- compiler-rt/lib/builtins/floatsisf.c
+++ compiler-rt/lib/builtins/floatsisf.c
@@ -33,7 +33,7 @@
   }
 
   // Exponent of (fp_t)a is the width of abs(a).
-  const int exponent = (aWidth - 1) - __builtin_clz(a);
+  const int exponent = (aWidth - 1) - clzsi(a);
   rep_t result;
 
   // Shift a into the significand field, rounding if it is a right-shift


Index: compiler-rt/lib/builtins/udivmoddi4.c
===
--- compiler-rt/lib/builtins/udivmoddi4.c
+++ compiler-rt/lib/builtins/udivmoddi4.c
@@ -82,7 +82,7 @@
 r.s.high = n.s.high & (d.s.high - 1);
 *rem = r.all;
   }
-  return n.s.high >> __builtin_ctz(d.s.high);
+  return n.s.high >> ctzsi(d.s.high);
 }
 // K K
 // ---
@@ -112,7 +112,7 @@
   *rem = n.s.low & (d.s.low - 1);
 if (d.s.low == 1)
   return n.all;
-sr = __builtin_ctz(d.s.low);
+sr = ctzsi(d.s.low);
 q.s.high = n.s.high >> sr;
 q.s.low = (n.s.high << (n_uword_bits - sr)) | (n.s.low >> sr);
 return q.all;
Index: compiler-rt/lib/builtins/fp_extend.h
===
--- compiler-rt/lib/builtins/fp_extend.h
+++ compiler-rt/lib/builtins/fp_extend.h
@@ -33,9 +33,9 @@
   return __builtin_clzl(a);
 #else
   if (a & REP_C(0x))
-return __builtin_clz(a >> 32);
+return clzsi(a >> 32);
   else
-return 32 + __builtin_clz(a & REP_C(0x));
+return 32 + clzsi(a & REP_C(0x));
 #endif
 }
 
Index: 

[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread Marek Kurdej via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd1aed486efc6: [clang-format] Handle C variables with name 
that matches c++ access specifier (authored by psigillito, committed by 
curdeius).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

Files:
  clang/lib/Format/FormatToken.h
  clang/lib/Format/UnwrappedLineFormatter.cpp
  clang/lib/Format/UnwrappedLineParser.cpp
  clang/unittests/Format/FormatTest.cpp

Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -3123,6 +3123,46 @@
"label:\n"
"  signals.baz();\n"
"}");
+  verifyFormat("private[1];");
+  verifyFormat("testArray[public] = 1;");
+  verifyFormat("public();");
+  verifyFormat("myFunc(public);");
+  verifyFormat("std::vector testVec = {private};");
+  verifyFormat("private.p = 1;");
+  verifyFormat("void function(private...){};");
+  verifyFormat("if (private && public)\n");
+  verifyFormat("private &= true;");
+  verifyFormat("int x = private * public;");
+  verifyFormat("public *= private;");
+  verifyFormat("int x = public + private;");
+  verifyFormat("private++;");
+  verifyFormat("++private;");
+  verifyFormat("public += private;");
+  verifyFormat("public = public - private;");
+  verifyFormat("public->foo();");
+  verifyFormat("private--;");
+  verifyFormat("--private;");
+  verifyFormat("public -= 1;");
+  verifyFormat("if (!private && !public)\n");
+  verifyFormat("public != private;");
+  verifyFormat("int x = public / private;");
+  verifyFormat("public /= 2;");
+  verifyFormat("public = public % 2;");
+  verifyFormat("public %= 2;");
+  verifyFormat("if (public < private)\n");
+  verifyFormat("public << private;");
+  verifyFormat("public <<= private;");
+  verifyFormat("if (public > private)\n");
+  verifyFormat("public >> private;");
+  verifyFormat("public >>= private;");
+  verifyFormat("public ^ private;");
+  verifyFormat("public ^= private;");
+  verifyFormat("public | private;");
+  verifyFormat("public |= private;");
+  verifyFormat("auto x = private ? 1 : 2;");
+  verifyFormat("if (public == private)\n");
+  verifyFormat("void foo(public, private)");
+  verifyFormat("public::foo();");
 }
 
 TEST_F(FormatTest, SeparatesLogicalBlocks) {
Index: clang/lib/Format/UnwrappedLineParser.cpp
===
--- clang/lib/Format/UnwrappedLineParser.cpp
+++ clang/lib/Format/UnwrappedLineParser.cpp
@@ -2708,14 +2708,25 @@
 }
 
 void UnwrappedLineParser::parseAccessSpecifier() {
+  FormatToken *AccessSpecifierCandidate = FormatTok;
   nextToken();
   // Understand Qt's slots.
   if (FormatTok->isOneOf(Keywords.kw_slots, Keywords.kw_qslots))
 nextToken();
   // Otherwise, we don't know what it is, and we'd better keep the next token.
-  if (FormatTok->Tok.is(tok::colon))
+  if (FormatTok->Tok.is(tok::colon)) {
 nextToken();
-  addUnwrappedLine();
+addUnwrappedLine();
+  } else if (!FormatTok->Tok.is(tok::coloncolon) &&
+ !std::binary_search(COperatorsFollowingVar.begin(),
+ COperatorsFollowingVar.end(),
+ FormatTok->Tok.getKind())) {
+// Not a variable name nor namespace name.
+addUnwrappedLine();
+  } else if (AccessSpecifierCandidate) {
+// Consider the access specifier to be a C identifier.
+AccessSpecifierCandidate->Tok.setKind(tok::identifier);
+  }
 }
 
 void UnwrappedLineParser::parseConcept() {
Index: clang/lib/Format/UnwrappedLineFormatter.cpp
===
--- clang/lib/Format/UnwrappedLineFormatter.cpp
+++ clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -100,10 +100,27 @@
 if (Style.Language == FormatStyle::LK_Java || Style.isJavaScript() ||
 Style.isCSharp())
   return 0;
-if (RootToken.isAccessSpecifier(false) ||
-RootToken.isObjCAccessSpecifier() ||
-(RootToken.isOneOf(Keywords.kw_signals, Keywords.kw_qsignals) &&
- RootToken.Next && RootToken.Next->is(tok::colon))) {
+
+auto IsAccessModifier = [this, ]() {
+  if (RootToken.isAccessSpecifier(Style.isCpp()))
+return true;
+  else if (RootToken.isObjCAccessSpecifier())
+return true;
+  // Handle Qt signals.
+  else if ((RootToken.isOneOf(Keywords.kw_signals, Keywords.kw_qsignals) &&
+RootToken.Next && RootToken.Next->is(tok::colon)))
+return true;
+  else if (RootToken.Next &&
+   RootToken.Next->isOneOf(Keywords.kw_slots, Keywords.kw_qslots) &&
+   RootToken.Next->Next && RootToken.Next->Next->is(tok::colon))
+return true;
+  // Handle malformed 

[clang] d1aed48 - [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread Marek Kurdej via cfe-commits

Author: Philip Sigillito
Date: 2022-01-30T20:56:50+01:00
New Revision: d1aed486efc6d35a81ca4acbabb4203c4b91cda9

URL: 
https://github.com/llvm/llvm-project/commit/d1aed486efc6d35a81ca4acbabb4203c4b91cda9
DIFF: 
https://github.com/llvm/llvm-project/commit/d1aed486efc6d35a81ca4acbabb4203c4b91cda9.diff

LOG: [clang-format] Handle C variables with name that matches c++ access 
specifier

Reviewed By: MyDeveloperDay, curdeius, HazardyKnusperkeks

Differential Revision: https://reviews.llvm.org/D117416

Added: 


Modified: 
clang/lib/Format/FormatToken.h
clang/lib/Format/UnwrappedLineFormatter.cpp
clang/lib/Format/UnwrappedLineParser.cpp
clang/unittests/Format/FormatTest.cpp

Removed: 




diff  --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h
index a64329802ee32..f116a89ac6440 100644
--- a/clang/lib/Format/FormatToken.h
+++ b/clang/lib/Format/FormatToken.h
@@ -123,6 +123,34 @@ namespace format {
   TYPE(CSharpGenericTypeConstraintComma)   
\
   TYPE(Unknown)
 
+/// Sorted operators that can follow a C variable.
+static const std::vector COperatorsFollowingVar = [] {
+  std::vector ReturnVal = {
+  tok::l_square, tok::r_square,
+  tok::l_paren,  tok::r_paren,
+  tok::r_brace,  tok::period,
+  tok::ellipsis, tok::ampamp,
+  tok::ampequal, tok::star,
+  tok::starequal,tok::plus,
+  tok::plusplus, tok::plusequal,
+  tok::minus,tok::arrow,
+  tok::minusminus,   tok::minusequal,
+  tok::exclaim,  tok::exclaimequal,
+  tok::slash,tok::slashequal,
+  tok::percent,  tok::percentequal,
+  tok::less, tok::lessless,
+  tok::lessequal,tok::lesslessequal,
+  tok::greater,  tok::greatergreater,
+  tok::greaterequal, tok::greatergreaterequal,
+  tok::caret,tok::caretequal,
+  tok::pipe, tok::pipepipe,
+  tok::pipeequal,tok::question,
+  tok::semi, tok::equal,
+  tok::equalequal,   tok::comma};
+  assert(std::is_sorted(ReturnVal.begin(), ReturnVal.end()));
+  return ReturnVal;
+}();
+
 /// Determines the semantic type of a syntactic token, e.g. whether "<" is a
 /// template opener or binary operator.
 enum TokenType : uint8_t {

diff  --git a/clang/lib/Format/UnwrappedLineFormatter.cpp 
b/clang/lib/Format/UnwrappedLineFormatter.cpp
index 0172a224335c8..01c151fec132c 100644
--- a/clang/lib/Format/UnwrappedLineFormatter.cpp
+++ b/clang/lib/Format/UnwrappedLineFormatter.cpp
@@ -100,10 +100,27 @@ class LevelIndentTracker {
 if (Style.Language == FormatStyle::LK_Java || Style.isJavaScript() ||
 Style.isCSharp())
   return 0;
-if (RootToken.isAccessSpecifier(false) ||
-RootToken.isObjCAccessSpecifier() ||
-(RootToken.isOneOf(Keywords.kw_signals, Keywords.kw_qsignals) &&
- RootToken.Next && RootToken.Next->is(tok::colon))) {
+
+auto IsAccessModifier = [this, ]() {
+  if (RootToken.isAccessSpecifier(Style.isCpp()))
+return true;
+  else if (RootToken.isObjCAccessSpecifier())
+return true;
+  // Handle Qt signals.
+  else if ((RootToken.isOneOf(Keywords.kw_signals, Keywords.kw_qsignals) &&
+RootToken.Next && RootToken.Next->is(tok::colon)))
+return true;
+  else if (RootToken.Next &&
+   RootToken.Next->isOneOf(Keywords.kw_slots, Keywords.kw_qslots) 
&&
+   RootToken.Next->Next && RootToken.Next->Next->is(tok::colon))
+return true;
+  // Handle malformed access specifier e.g. 'private' without trailing ':'.
+  else if (!RootToken.Next && RootToken.isAccessSpecifier(false))
+return true;
+  return false;
+};
+
+if (IsAccessModifier()) {
   // The AccessModifierOffset may be overridden by IndentAccessModifiers,
   // in which case we take a negative value of the IndentWidth to simulate
   // the upper indent level.

diff  --git a/clang/lib/Format/UnwrappedLineParser.cpp 
b/clang/lib/Format/UnwrappedLineParser.cpp
index 35be2fa3eb62f..2297d98850103 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -2708,14 +2708,25 @@ void UnwrappedLineParser::parseSwitch() {
 }
 
 void UnwrappedLineParser::parseAccessSpecifier() {
+  FormatToken *AccessSpecifierCandidate = FormatTok;
   nextToken();
   // Understand Qt's slots.
   if (FormatTok->isOneOf(Keywords.kw_slots, Keywords.kw_qslots))
 nextToken();
   // Otherwise, we don't know what it is, and we'd better keep the next token.
-  if (FormatTok->Tok.is(tok::colon))
+  if (FormatTok->Tok.is(tok::colon)) {
 nextToken();
-  addUnwrappedLine();
+addUnwrappedLine();
+  } else if (!FormatTok->Tok.is(tok::coloncolon) &&
+ !std::binary_search(COperatorsFollowingVar.begin(),
+ 

[PATCH] D118386: [Support][NFC] Fix generic `ChildrenGetterTy` of `IDFCalculatorBase`

2022-01-30 Thread Jakub Kuderski via Phabricator via cfe-commits
kuhar accepted this revision.
kuhar added a comment.
This revision is now accepted and ready to land.

LGTM


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118386

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


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread psigillito via Phabricator via cfe-commits
psigillito added a comment.

In D117416#3282937 , 
@HazardyKnusperkeks wrote:

> In D117416#3282853 , @psigillito 
> wrote:
>
>> Do I need to care about these pre-build checks failing? F21921747: image.png 
>> 
>
> The checks passed, the build on linux failed. But as far as I can see it's 
> something in openmp. I assume you did run all the format tests, then 
> everything should be fine.

Yes, I ran the format tests.

Thanks!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D118573: [clang][WebAssemmbly]: Call TargetInfo::adjust in derived method.

2022-01-30 Thread Sam Clegg via Phabricator via cfe-commits
sbc100 created this revision.
Herald added subscribers: wingo, jgravelle-google, dschuff.
sbc100 requested review of this revision.
Herald added subscribers: cfe-commits, aheejin.
Herald added a project: clang.

The superclass method handles a bunch of useful things. For example
it applies flags such as `-fnew-alignment` which doesn't work without
this patch.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118573

Files:
  clang/lib/Basic/Targets/WebAssembly.cpp
  clang/test/CXX/cpp/cpp.predefined/p1.cpp


Index: clang/test/CXX/cpp/cpp.predefined/p1.cpp
===
--- clang/test/CXX/cpp/cpp.predefined/p1.cpp
+++ clang/test/CXX/cpp/cpp.predefined/p1.cpp
@@ -1,6 +1,7 @@
 // RUN: %clang_cc1 -std=c++1z %s -verify -triple x86_64-linux-gnu -DALIGN=16
 // RUN: %clang_cc1 -std=c++1z %s -verify -fnew-alignment=2 -DALIGN=2
 // RUN: %clang_cc1 -std=c++1z %s -verify -fnew-alignment=256 -DALIGN=256
+// RUN: %clang_cc1 -std=c++1z %s -verify -triple wasm32-unknown-unknown 
-fnew-alignment=256 -DALIGN=256
 
 // expected-no-diagnostics
 
Index: clang/lib/Basic/Targets/WebAssembly.cpp
===
--- clang/lib/Basic/Targets/WebAssembly.cpp
+++ clang/lib/Basic/Targets/WebAssembly.cpp
@@ -255,6 +255,7 @@
 
 void WebAssemblyTargetInfo::adjust(DiagnosticsEngine ,
LangOptions ) {
+  TargetInfo::adjust(Diags, Opts);
   // If the Atomics feature isn't available, turn off POSIXThreads and
   // ThreadModel, so that we don't predefine _REENTRANT or __STDCPP_THREADS__.
   if (!HasAtomics) {


Index: clang/test/CXX/cpp/cpp.predefined/p1.cpp
===
--- clang/test/CXX/cpp/cpp.predefined/p1.cpp
+++ clang/test/CXX/cpp/cpp.predefined/p1.cpp
@@ -1,6 +1,7 @@
 // RUN: %clang_cc1 -std=c++1z %s -verify -triple x86_64-linux-gnu -DALIGN=16
 // RUN: %clang_cc1 -std=c++1z %s -verify -fnew-alignment=2 -DALIGN=2
 // RUN: %clang_cc1 -std=c++1z %s -verify -fnew-alignment=256 -DALIGN=256
+// RUN: %clang_cc1 -std=c++1z %s -verify -triple wasm32-unknown-unknown -fnew-alignment=256 -DALIGN=256
 
 // expected-no-diagnostics
 
Index: clang/lib/Basic/Targets/WebAssembly.cpp
===
--- clang/lib/Basic/Targets/WebAssembly.cpp
+++ clang/lib/Basic/Targets/WebAssembly.cpp
@@ -255,6 +255,7 @@
 
 void WebAssemblyTargetInfo::adjust(DiagnosticsEngine ,
LangOptions ) {
+  TargetInfo::adjust(Diags, Opts);
   // If the Atomics feature isn't available, turn off POSIXThreads and
   // ThreadModel, so that we don't predefine _REENTRANT or __STDCPP_THREADS__.
   if (!HasAtomics) {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread Björn Schäpers via Phabricator via cfe-commits
HazardyKnusperkeks added a comment.

In D117416#3282853 , @psigillito 
wrote:

> Do I need to care about these pre-build checks failing? F21921747: image.png 
> 

The checks passed, the build on linux failed. But as far as I can see it's 
something in openmp. I assume you did run all the format tests, then everything 
should be fine.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D118571: [clang][WebAssembly] Imply -fno-threadsafe-static when threading is disabled

2022-01-30 Thread Sam Clegg via Phabricator via cfe-commits
sbc100 updated this revision to Diff 404402.
sbc100 added a comment.

- revert unrelated line


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118571

Files:
  clang/lib/Basic/Targets/WebAssembly.cpp
  clang/test/CodeGenCXX/static-init-wasm.cpp


Index: clang/test/CodeGenCXX/static-init-wasm.cpp
===
--- clang/test/CodeGenCXX/static-init-wasm.cpp
+++ clang/test/CodeGenCXX/static-init-wasm.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -target-feature 
+atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY32
-// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -target-feature 
+atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
 // Test that we don't create common blocks.
@@ -52,3 +52,17 @@
 // WEBASSEMBLY64: call noundef %struct.A* @_ZN1AC1Ev(%struct.A* {{[^,]*}} 
@theA)
 // WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() 
#3 {
 // WEBASSEMBLY64: call void @__cxx_global_var_init()
+
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+
+// NOATOMICS-LABEL: @_Z1gv()
+// NOATOMICS:   %[[R0:.+]] = load i8, i8* @_ZGVZ1gvE1a, align 1
+// NOATOMICS-NEXT:  %guard.uninitialized = icmp eq i8 %[[R0]], 0
+// NOATOMICS-NEXT:  br i1 %guard.uninitialized, label %[[CHECK:.+]], label 
%[[END:.+]],
+// NOATOMICS:   [[CHECK]]:
+// NOATOMICS-NOT:   __cxa_guard_acquire
+// NOATOMICS:   [[END]]:
+// NOATOMICS-NEXT:  ret void
Index: clang/lib/Basic/Targets/WebAssembly.cpp
===
--- clang/lib/Basic/Targets/WebAssembly.cpp
+++ clang/lib/Basic/Targets/WebAssembly.cpp
@@ -260,6 +260,7 @@
   if (!HasAtomics) {
 Opts.POSIXThreads = false;
 Opts.setThreadModel(LangOptions::ThreadModelKind::Single);
+Opts.ThreadsafeStatics = false;
   }
 }
 


Index: clang/test/CodeGenCXX/static-init-wasm.cpp
===
--- clang/test/CodeGenCXX/static-init-wasm.cpp
+++ clang/test/CodeGenCXX/static-init-wasm.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -target-feature +atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY32
-// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -target-feature +atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
 // Test that we don't create common blocks.
@@ -52,3 +52,17 @@
 // WEBASSEMBLY64: call noundef %struct.A* @_ZN1AC1Ev(%struct.A* {{[^,]*}} @theA)
 // WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() #3 {
 // WEBASSEMBLY64: call void @__cxx_global_var_init()
+
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+
+// NOATOMICS-LABEL: @_Z1gv()
+// NOATOMICS:   %[[R0:.+]] = load i8, i8* @_ZGVZ1gvE1a, align 1
+// NOATOMICS-NEXT:  %guard.uninitialized = icmp eq i8 %[[R0]], 0
+// NOATOMICS-NEXT:  br i1 %guard.uninitialized, label %[[CHECK:.+]], label %[[END:.+]],
+// NOATOMICS:   [[CHECK]]:
+// NOATOMICS-NOT:   __cxa_guard_acquire
+// NOATOMICS:   [[END]]:
+// NOATOMICS-NEXT:  ret void
Index: clang/lib/Basic/Targets/WebAssembly.cpp
===
--- clang/lib/Basic/Targets/WebAssembly.cpp
+++ clang/lib/Basic/Targets/WebAssembly.cpp
@@ -260,6 +260,7 @@
   if (!HasAtomics) {
 Opts.POSIXThreads = false;
 Opts.setThreadModel(LangOptions::ThreadModelKind::Single);
+Opts.ThreadsafeStatics = false;
   }
 }
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118571: [clang][WebAssembly] Imply -fno-threadsafe-static when threading is disabled

2022-01-30 Thread Sam Clegg via Phabricator via cfe-commits
sbc100 created this revision.
Herald added subscribers: wingo, ecnelises, sunfish, jgravelle-google, dschuff.
sbc100 requested review of this revision.
Herald added subscribers: cfe-commits, aheejin.
Herald added a project: clang.

When we don't enable atomics we completely disabled threading in
which case there is no point in generating thread safe code for
static initialization.

This should always be safe because, in WebAssembly, it is not
possible to link object compiled without the atomics feature into a
mutli-threaded program.

See https://github.com/emscripten-core/emscripten/pull/16152


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118571

Files:
  clang/lib/Basic/Targets/WebAssembly.cpp
  clang/test/CodeGenCXX/static-init-wasm.cpp


Index: clang/test/CodeGenCXX/static-init-wasm.cpp
===
--- clang/test/CodeGenCXX/static-init-wasm.cpp
+++ clang/test/CodeGenCXX/static-init-wasm.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -target-feature 
+atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY32
-// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -target-feature 
+atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
 // Test that we don't create common blocks.
@@ -52,3 +52,17 @@
 // WEBASSEMBLY64: call noundef %struct.A* @_ZN1AC1Ev(%struct.A* {{[^,]*}} 
@theA)
 // WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() 
#3 {
 // WEBASSEMBLY64: call void @__cxx_global_var_init()
+
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+
+// NOATOMICS-LABEL: @_Z1gv()
+// NOATOMICS:   %[[R0:.+]] = load i8, i8* @_ZGVZ1gvE1a, align 1
+// NOATOMICS-NEXT:  %guard.uninitialized = icmp eq i8 %[[R0]], 0
+// NOATOMICS-NEXT:  br i1 %guard.uninitialized, label %[[CHECK:.+]], label 
%[[END:.+]],
+// NOATOMICS:   [[CHECK]]:
+// NOATOMICS-NOT:   __cxa_guard_acquire
+// NOATOMICS:   [[END]]:
+// NOATOMICS-NEXT:  ret void
Index: clang/lib/Basic/Targets/WebAssembly.cpp
===
--- clang/lib/Basic/Targets/WebAssembly.cpp
+++ clang/lib/Basic/Targets/WebAssembly.cpp
@@ -255,11 +255,13 @@
 
 void WebAssemblyTargetInfo::adjust(DiagnosticsEngine ,
LangOptions ) {
+  TargetInfo::adjust(Diags, Opts);
   // If the Atomics feature isn't available, turn off POSIXThreads and
   // ThreadModel, so that we don't predefine _REENTRANT or __STDCPP_THREADS__.
   if (!HasAtomics) {
 Opts.POSIXThreads = false;
 Opts.setThreadModel(LangOptions::ThreadModelKind::Single);
+Opts.ThreadsafeStatics = false;
   }
 }
 


Index: clang/test/CodeGenCXX/static-init-wasm.cpp
===
--- clang/test/CodeGenCXX/static-init-wasm.cpp
+++ clang/test/CodeGenCXX/static-init-wasm.cpp
@@ -1,6 +1,6 @@
-// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -target-feature +atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY32
-// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -target-feature +atomics -o - %s \
 // RUN:   | FileCheck %s -check-prefix=WEBASSEMBLY64
 
 // Test that we don't create common blocks.
@@ -52,3 +52,17 @@
 // WEBASSEMBLY64: call noundef %struct.A* @_ZN1AC1Ev(%struct.A* {{[^,]*}} @theA)
 // WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() #3 {
 // WEBASSEMBLY64: call void @__cxx_global_var_init()
+
+// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \
+// RUN:   | FileCheck %s -check-prefix=NOATOMICS
+
+// NOATOMICS-LABEL: @_Z1gv()
+// NOATOMICS:   %[[R0:.+]] = load i8, i8* @_ZGVZ1gvE1a, align 1
+// NOATOMICS-NEXT:  %guard.uninitialized = icmp eq i8 %[[R0]], 0
+// NOATOMICS-NEXT:  br i1 %guard.uninitialized, label %[[CHECK:.+]], label %[[END:.+]],
+// NOATOMICS:   [[CHECK]]:
+// NOATOMICS-NOT:   __cxa_guard_acquire
+// NOATOMICS:   [[END]]:
+// NOATOMICS-NEXT:  ret void
Index: clang/lib/Basic/Targets/WebAssembly.cpp
===
--- clang/lib/Basic/Targets/WebAssembly.cpp
+++ clang/lib/Basic/Targets/WebAssembly.cpp
@@ -255,11 +255,13 @@
 
 void WebAssemblyTargetInfo::adjust(DiagnosticsEngine ,
LangOptions ) {
+  

[PATCH] D117091: [Clang] Add attributes alloc_size and alloc_align to mm_malloc

2022-01-30 Thread Dávid Bolvanský via Phabricator via cfe-commits
xbolva00 added a comment.

In D117091#3272589 , @aaron.ballman 
wrote:

> There's a testing issue on Windows:
>
>    TEST 'Clang :: Headers/mm_malloc.c' FAILED 
> 
>   Script:
>   --
>   : 'RUN: at line 1';   
> c:\ws\w2\llvm-project\premerge-checks\build\bin\clang.exe -emit-llvm -std=c11 
> -x c C:\ws\w2\llvm-project\premerge-checks\clang\test\Headers\mm_malloc.c -O1 
> --target=x86_64-linux-gnu -S -o - | 
> c:\ws\w2\llvm-project\premerge-checks\build\bin\filecheck.exe 
> C:\ws\w2\llvm-project\premerge-checks\clang\test\Headers\mm_malloc.c
>   --
>   Exit Code: 2
>   
>   Command Output (stdout):
>   --
>   $ ":" "RUN: at line 1"
>   $ "c:\ws\w2\llvm-project\premerge-checks\build\bin\clang.exe" "-emit-llvm" 
> "-std=c11" "-x" "c" 
> "C:\ws\w2\llvm-project\premerge-checks\clang\test\Headers\mm_malloc.c" "-O1" 
> "--target=x86_64-linux-gnu" "-S" "-o" "-"
>   # command stderr:
>   In file included from 
> C:\ws\w2\llvm-project\premerge-checks\clang\test\Headers\mm_malloc.c:2:
>   
>   
> c:\ws\w2\llvm-project\premerge-checks\build\lib\clang\14.0.0\include\mm_malloc.h:13:10:
>  fatal error: 'stdlib.h' file not found
>   
>   #include 
>   
>^~
>   
>   1 error generated.
>   
>   
>   error: command failed with exit status: 1
>   $ "c:\ws\w2\llvm-project\premerge-checks\build\bin\filecheck.exe" 
> "C:\ws\w2\llvm-project\premerge-checks\clang\test\Headers\mm_malloc.c"
>   # command stderr:
>   FileCheck error: '' is empty.
>   
>   FileCheck command line:  
> c:\ws\w2\llvm-project\premerge-checks\build\bin\filecheck.exe 
> C:\ws\w2\llvm-project\premerge-checks\clang\test\Headers\mm_malloc.c
>   
>   
>   error: command failed with exit status: 2
>
> This one is neat because `stdlib.h` is not a header provided by the compiler 
> but is instead provided by whatever CRT happens to be used. Normally, we 
> require those headers to be mocked, but the goal here is to test the header 
> the compiler does provide.

Thanks for checking, I have no suitable Windows device to run patch on it.


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

https://reviews.llvm.org/D117091

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


[PATCH] D117091: [Clang] Add attributes alloc_size and alloc_align to mm_malloc

2022-01-30 Thread Dávid Bolvanský via Phabricator via cfe-commits
xbolva00 added a comment.

In D117091#3272594 , @jdoerfert wrote:

> Don't test with O1 , add the 
> dummy include folder to the include path 
> (`clang/test/Headers/Inputs/include`), stdlib.h is already there, malloc.h is 
> not and needs to be created.
>
> See `clang/test/Headers/nvptx_device_cmath_functions.c` for an example.

Need -O1, with -O0 no assumption is emitted.


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

https://reviews.llvm.org/D117091

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


[PATCH] D117091: [Clang] Add attributes alloc_size and alloc_align to mm_malloc

2022-01-30 Thread Dávid Bolvanský via Phabricator via cfe-commits
xbolva00 updated this revision to Diff 404397.

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

https://reviews.llvm.org/D117091

Files:
  clang/lib/Headers/mm_malloc.h
  clang/test/Headers/Inputs/include/malloc.h
  clang/test/Headers/mm_malloc.c


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 
-triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,7 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t);
+void __mingw_aligned_free(void *);
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+void _aligned_free(void *);
+#endif
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 -triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,7 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t);
+void __mingw_aligned_free(void *);
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+void _aligned_free(void *);
+#endif
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D117091: [Clang] Add attributes alloc_size and alloc_align to mm_malloc

2022-01-30 Thread Dávid Bolvanský via Phabricator via cfe-commits
xbolva00 updated this revision to Diff 404395.
xbolva00 added a comment.

Added newline


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

https://reviews.llvm.org/D117091

Files:
  clang/lib/Headers/mm_malloc.h
  clang/test/Headers/Inputs/include/malloc.h
  clang/test/Headers/mm_malloc.c


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 
-triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,5 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t)
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+#endif
\ No newline at end of file
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 -triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,5 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t)
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+#endif
\ No newline at end of file
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D117091: [Clang] Add attributes alloc_size and alloc_align to mm_malloc

2022-01-30 Thread Dávid Bolvanský via Phabricator via cfe-commits
xbolva00 updated this revision to Diff 404394.

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

https://reviews.llvm.org/D117091

Files:
  clang/lib/Headers/mm_malloc.h
  clang/test/Headers/Inputs/include/malloc.h
  clang/test/Headers/mm_malloc.c


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 
-triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,5 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t)
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+#endif
\ No newline at end of file
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 -triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,5 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t)
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+#endif
\ No newline at end of file
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D117091: [Clang] Add attributes alloc_size and alloc_align to mm_malloc

2022-01-30 Thread Dávid Bolvanský via Phabricator via cfe-commits
xbolva00 updated this revision to Diff 404393.
xbolva00 added a comment.
Herald added a subscriber: mstorsjo.

Address review comments


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

https://reviews.llvm.org/D117091

Files:
  clang/lib/Headers/mm_malloc.h
  clang/test/Headers/Inputs/include/malloc.h
  clang/test/Headers/mm_malloc.c


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 
-triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,5 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t)
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+#endif
\ No newline at end of file
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }


Index: clang/test/Headers/mm_malloc.c
===
--- /dev/null
+++ clang/test/Headers/mm_malloc.c
@@ -0,0 +1,12 @@
+
+// RUN: %clang_cc1 -internal-isystem %S/Inputs/include %s -emit-llvm -O1 -triple x86_64-linux-gnu -o - | FileCheck %s
+#include 
+
+_Bool align_test(void) {
+// CHECK-LABEL: @align_test(
+// CHECK:ret i1 true
+ void *p = _mm_malloc(1024, 16);
+_Bool ret = ((__UINTPTR_TYPE__)p % 16) == 0;
+_mm_free(p);
+return ret;
+}
Index: clang/test/Headers/Inputs/include/malloc.h
===
--- /dev/null
+++ clang/test/Headers/Inputs/include/malloc.h
@@ -0,0 +1,5 @@
+#if defined(__MINGW32__)
+void *__mingw_aligned_malloc(size_t, size_t)
+#elif defined(_WIN32)
+void *_aligned_malloc(size_t, size_t);
+#endif
\ No newline at end of file
Index: clang/lib/Headers/mm_malloc.h
===
--- clang/lib/Headers/mm_malloc.h
+++ clang/lib/Headers/mm_malloc.h
@@ -28,9 +28,9 @@
 
 #if !(defined(_WIN32) && defined(_mm_malloc))
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
-   __malloc__))
-_mm_malloc(size_t __size, size_t __align)
-{
+   __malloc__, alloc_size(1),
+   alloc_align(2)))
+_mm_malloc(size_t __size, size_t __align) {
   if (__align == 1) {
 return malloc(__size);
   }
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D86546: [compiler-rt][builtins] Use explicitly-sized integer types for LibCalls

2022-01-30 Thread Anatoly Trosinenko via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG9595f0051000: [compiler-rt][builtins] Use explicitly-sized 
integer types for LibCalls (authored by atrosinenko).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D86546

Files:
  compiler-rt/lib/builtins/floatsisf.c
  compiler-rt/lib/builtins/floatsitf.c
  compiler-rt/lib/builtins/floatunsisf.c
  compiler-rt/lib/builtins/floatunsitf.c
  compiler-rt/test/builtins/Unit/floatditf_test.c
  compiler-rt/test/builtins/Unit/floatsitf_test.c
  compiler-rt/test/builtins/Unit/floatunditf_test.c
  compiler-rt/test/builtins/Unit/floatunsitf_test.c

Index: compiler-rt/test/builtins/Unit/floatunsitf_test.c
===
--- compiler-rt/test/builtins/Unit/floatunsitf_test.c
+++ compiler-rt/test/builtins/Unit/floatunsitf_test.c
@@ -8,9 +8,9 @@
 
 #include "fp_test.h"
 
-COMPILER_RT_ABI long double __floatunsitf(unsigned int a);
+COMPILER_RT_ABI long double __floatunsitf(su_int a);
 
-int test__floatunsitf(unsigned int a, uint64_t expectedHi, uint64_t expectedLo)
+int test__floatunsitf(su_int a, uint64_t expectedHi, uint64_t expectedLo)
 {
 long double x = __floatunsitf(a);
 int ret = compareResultLD(x, expectedHi, expectedLo);
Index: compiler-rt/test/builtins/Unit/floatunditf_test.c
===
--- compiler-rt/test/builtins/Unit/floatunditf_test.c
+++ compiler-rt/test/builtins/Unit/floatunditf_test.c
@@ -12,9 +12,9 @@
 
 // Returns: long integer converted to long double
 
-COMPILER_RT_ABI long double __floatunditf(unsigned long long a);
+COMPILER_RT_ABI long double __floatunditf(du_int a);
 
-int test__floatunditf(unsigned long long a, uint64_t expectedHi, uint64_t expectedLo)
+int test__floatunditf(du_int a, uint64_t expectedHi, uint64_t expectedLo)
 {
 long double x = __floatunditf(a);
 int ret = compareResultLD(x, expectedHi, expectedLo);
Index: compiler-rt/test/builtins/Unit/floatsitf_test.c
===
--- compiler-rt/test/builtins/Unit/floatsitf_test.c
+++ compiler-rt/test/builtins/Unit/floatsitf_test.c
@@ -8,9 +8,9 @@
 
 #include "fp_test.h"
 
-long COMPILER_RT_ABI double __floatsitf(int a);
+COMPILER_RT_ABI long double __floatsitf(si_int a);
 
-int test__floatsitf(int a, uint64_t expectedHi, uint64_t expectedLo)
+int test__floatsitf(si_int a, uint64_t expectedHi, uint64_t expectedLo)
 {
 long double x = __floatsitf(a);
 int ret = compareResultLD(x, expectedHi, expectedLo);
Index: compiler-rt/test/builtins/Unit/floatditf_test.c
===
--- compiler-rt/test/builtins/Unit/floatditf_test.c
+++ compiler-rt/test/builtins/Unit/floatditf_test.c
@@ -12,9 +12,9 @@
 
 // Returns: long integer converted to long double
 
-COMPILER_RT_ABI long double __floatditf(long long a);
+COMPILER_RT_ABI long double __floatditf(di_int a);
 
-int test__floatditf(long long a, uint64_t expectedHi, uint64_t expectedLo)
+int test__floatditf(di_int a, uint64_t expectedHi, uint64_t expectedLo)
 {
 long double x = __floatditf(a);
 int ret = compareResultLD(x, expectedHi, expectedLo);
Index: compiler-rt/lib/builtins/floatunsitf.c
===
--- compiler-rt/lib/builtins/floatunsitf.c
+++ compiler-rt/lib/builtins/floatunsitf.c
@@ -16,7 +16,7 @@
 #include "fp_lib.h"
 
 #if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __floatunsitf(unsigned int a) {
+COMPILER_RT_ABI fp_t __floatunsitf(su_int a) {
 
   const int aWidth = sizeof a * CHAR_BIT;
 
Index: compiler-rt/lib/builtins/floatunsisf.c
===
--- compiler-rt/lib/builtins/floatunsisf.c
+++ compiler-rt/lib/builtins/floatunsisf.c
@@ -17,7 +17,7 @@
 
 #include "int_lib.h"
 
-COMPILER_RT_ABI fp_t __floatunsisf(unsigned int a) {
+COMPILER_RT_ABI fp_t __floatunsisf(su_int a) {
 
   const int aWidth = sizeof a * CHAR_BIT;
 
Index: compiler-rt/lib/builtins/floatsitf.c
===
--- compiler-rt/lib/builtins/floatsitf.c
+++ compiler-rt/lib/builtins/floatsitf.c
@@ -16,7 +16,7 @@
 #include "fp_lib.h"
 
 #if defined(CRT_HAS_128BIT) && defined(CRT_LDBL_128BIT)
-COMPILER_RT_ABI fp_t __floatsitf(int a) {
+COMPILER_RT_ABI fp_t __floatsitf(si_int a) {
 
   const int aWidth = sizeof a * CHAR_BIT;
 
@@ -26,10 +26,10 @@
 
   // All other cases begin by extracting the sign and absolute value of a
   rep_t sign = 0;
-  unsigned aAbs = (unsigned)a;
+  su_int aAbs = (su_int)a;
   if (a < 0) {
 sign = signBit;
-aAbs = ~(unsigned)a + 1U;
+aAbs = ~(su_int)a + (su_int)1U;
   }
 
   // Exponent of (fp_t)a is the width of abs(a).
Index: 

[PATCH] D118350: [Clang][Sema][AIX][PowerPC] Emit byval alignment warning only when struct member is passed to a function

2022-01-30 Thread Nemanja Ivanovic via Phabricator via cfe-commits
nemanjai added a comment.

Would it make sense (and would it be possible) to check the linkage of the 
callee? Presumably calling something like `static void localfunc(int *)` with 
an over-aligned member shouldn't be a problem.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118350

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


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread psigillito via Phabricator via cfe-commits
psigillito added a comment.

Do I need to care about these pre-build checks failing? F21921747: image.png 



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread psigillito via Phabricator via cfe-commits
psigillito added a comment.

@HazardyKnusperkeks 
Ok thanks, someone else can commit on my behalf while I wait for commit access.

name: Philip Sigillito
email: psigill...@gmail.com


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread Björn Schäpers via Phabricator via cfe-commits
HazardyKnusperkeks added a comment.

In D117416#3282775 , @psigillito 
wrote:

> @HazardyKnusperkeks  I do not have commit access. This is my first commit to 
> the project. Do I just need to issue an 'arc land' command?

I've never used arc, so I can't tell you anything about that.

You need to apply for commit access, that's no big deal, you can find the 
address in the LLVM documentation. Or you post name and email for the commit 
here and someone will commit it on your behalf.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D117603: [clang] Don't typo-fix an expression in a SFINAE context

2022-01-30 Thread Arthur O'Dwyer via Phabricator via cfe-commits
Quuxplusone updated this revision to Diff 404381.
Quuxplusone added a comment.

Poke CI (clang-format failed).


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

https://reviews.llvm.org/D117603

Files:
  clang/lib/Sema/Sema.cpp
  clang/lib/Sema/SemaExprMember.cpp
  clang/test/SemaTemplate/pr52970.cpp

Index: clang/test/SemaTemplate/pr52970.cpp
===
--- /dev/null
+++ clang/test/SemaTemplate/pr52970.cpp
@@ -0,0 +1,63 @@
+// RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s
+// RUN: %clang_cc1 -fsyntax-only -std=c++14 -verify %s
+// RUN: %clang_cc1 -fsyntax-only -std=c++17 -verify %s
+// RUN: %clang_cc1 -fsyntax-only -std=c++20 -verify=cxx20 %s
+// expected-no-diagnostics
+
+struct Incomplete;
+template  struct Holder { T t; };
+
+namespace DotFollowingFunctionName {
+struct Good {
+  struct Nested {
+int b;
+  } a;
+};
+
+struct Bad {
+  Holder a();
+};
+
+template 
+constexpr auto f(T t) -> decltype((t.a.b, true)) { return true; }
+constexpr bool f(...) { return false; }
+
+static_assert(DotFollowingFunctionName::f(Good{}), "");
+static_assert(!DotFollowingFunctionName::f(Bad{}), "");
+
+#if __cplusplus >= 202002L
+template 
+concept C = requires(T t) { t.a.b; };
+  // cxx20-note@-1 {{because 't.a.b' would be invalid: reference to non-static member function must be called}}
+
+static_assert(C);
+static_assert(!C);
+static_assert(C); // cxx20-error {{static_assert failed}}
+  // cxx20-note@-1 {{because 'DotFollowingFunctionName::Bad' does not satisfy 'C'}}
+#endif
+} // namespace DotFollowingFunctionName
+
+namespace DotFollowingPointer {
+struct Good {
+  int begin();
+};
+using Bad = Holder *;
+
+template 
+constexpr auto f(T t) -> decltype((t.begin(), true)) { return true; }
+constexpr bool f(...) { return false; }
+
+static_assert(DotFollowingPointer::f(Good{}), "");
+static_assert(!DotFollowingPointer::f(Bad{}), "");
+
+#if __cplusplus >= 202002L
+template 
+concept C = requires(T t) { t.begin(); };
+  // cxx20-note@-1 {{because 't.begin()' would be invalid: member reference type 'Holder *' is a pointer}}
+
+static_assert(C);
+static_assert(!C);
+static_assert(C); // cxx20-error {{static_assert failed}}
+  // cxx20-note@-1 {{because 'DotFollowingPointer::Bad' (aka 'Holder *') does not satisfy 'C'}}
+#endif
+} // namespace DotFollowingPointer
Index: clang/lib/Sema/SemaExprMember.cpp
===
--- clang/lib/Sema/SemaExprMember.cpp
+++ clang/lib/Sema/SemaExprMember.cpp
@@ -1645,6 +1645,9 @@
   << BaseType << int(IsArrow) << BaseExpr.get()->getSourceRange()
   << FixItHint::CreateReplacement(OpLoc, "->");
 
+  if (S.isSFINAEContext())
+return ExprError();
+
   // Recurse as an -> access.
   IsArrow = true;
   return LookupMemberExpr(S, R, BaseExpr, IsArrow, OpLoc, SS,
Index: clang/lib/Sema/Sema.cpp
===
--- clang/lib/Sema/Sema.cpp
+++ clang/lib/Sema/Sema.cpp
@@ -2556,32 +2556,36 @@
 bool (*IsPlausibleResult)(QualType)) {
   SourceLocation Loc = E.get()->getExprLoc();
   SourceRange Range = E.get()->getSourceRange();
-
-  QualType ZeroArgCallTy;
   UnresolvedSet<4> Overloads;
-  if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
-  !ZeroArgCallTy.isNull() &&
-  (!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
-// At this point, we know E is potentially callable with 0
-// arguments and that it returns something of a reasonable type,
-// so we can emit a fixit and carry on pretending that E was
-// actually a CallExpr.
-SourceLocation ParenInsertionLoc = getLocForEndOfToken(Range.getEnd());
-bool IsMV = IsCPUDispatchCPUSpecificMultiVersion(E.get());
-Diag(Loc, PD) << /*zero-arg*/ 1 << IsMV << Range
-  << (IsCallableWithAppend(E.get())
-  ? FixItHint::CreateInsertion(ParenInsertionLoc, "()")
-  : FixItHint());
-if (!IsMV)
-  notePlausibleOverloads(*this, Loc, Overloads, IsPlausibleResult);
-
-// FIXME: Try this before emitting the fixit, and suppress diagnostics
-// while doing so.
-E = BuildCallExpr(nullptr, E.get(), Range.getEnd(), None,
-  Range.getEnd().getLocWithOffset(1));
-return true;
-  }
 
+  // If this is a SFINAE context, don't try anything that might trigger ADL
+  // prematurely.
+  if (!isSFINAEContext()) {
+QualType ZeroArgCallTy;
+if (tryExprAsCall(*E.get(), ZeroArgCallTy, Overloads) &&
+!ZeroArgCallTy.isNull() &&
+(!IsPlausibleResult || IsPlausibleResult(ZeroArgCallTy))) {
+  // At this point, we know E is potentially callable with 0
+  // arguments and that it returns something of a reasonable type,
+  // so we can emit a fixit and carry on pretending that E was
+  // actually a CallExpr.
+  SourceLocation 

[PATCH] D118552: [clang] [concepts] Correctly(?) handle placeholder types in ExprRequirements.

2022-01-30 Thread Arthur O'Dwyer via Phabricator via cfe-commits
Quuxplusone updated this revision to Diff 404380.
Quuxplusone added a comment.

Poke CI (clang-format failed).


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

https://reviews.llvm.org/D118552

Files:
  clang/lib/AST/ASTContext.cpp
  clang/lib/Sema/SemaOverload.cpp
  clang/lib/Sema/SemaTemplateInstantiate.cpp
  clang/lib/Sema/TreeTransform.h
  clang/test/SemaTemplate/constraints.cpp
  clang/test/SemaTemplate/pr52909.cpp

Index: clang/test/SemaTemplate/pr52909.cpp
===
--- /dev/null
+++ clang/test/SemaTemplate/pr52909.cpp
@@ -0,0 +1,71 @@
+// RUN: %clang_cc1 -std=c++20 -verify %s
+// RUN: %clang_cc1 -std=c++2b -verify %s
+
+namespace PR52905 {
+template  concept C = true;
+
+struct A {
+  int begin();
+  int begin() const;
+};
+
+template 
+concept Beginable = requires (T t) {
+  { t.begin } -> C;
+  // expected-note@-1 {{because 't.begin' would be invalid: reference to non-static member function must be called}}
+};
+
+static_assert(Beginable); // expected-error {{static_assert failed}}
+ // expected-note@-1 {{does not satisfy 'Beginable'}}
+} // namespace PR52905
+
+namespace PR52909a {
+
+template constexpr bool B = true;
+template concept True = B;
+
+template 
+int foo(T t) requires requires { // expected-note {{candidate template ignored: constraints not satisfied}}
+{t.begin} -> True; // expected-note {{because 't.begin' would be invalid: reference to non-static member function must be called}}
+}
+{}
+
+struct A { int begin(); };
+auto x = foo(A()); // expected-error {{no matching function for call to 'foo'}}
+
+} // namespace PR52909a
+
+namespace PR52909b {
+
+template concept True = true;
+
+template concept C = requires {
+{ T::begin } -> True; // expected-note {{because 'T::begin' would be invalid: reference to overloaded function could not be resolved}}
+};
+
+struct A {
+static void begin(int);
+static void begin(double);
+};
+
+static_assert(C); // expected-error {{static_assert failed}}
+  // expected-note@-1 {{because 'PR52909b::A' does not satisfy 'C'}}
+
+} // namespace PR52909b
+
+namespace PR53075 {
+template concept True = true;
+
+template concept C = requires {
+{ ::f } -> True; // expected-note {{because '::f' would be invalid: reference to overloaded function could not be resolved}}
+};
+
+struct S {
+int *f();
+int *f() const;
+};
+
+static_assert(C); // expected-error {{static_assert failed}}
+  // expected-note@-1 {{because 'PR53075::S' does not satisfy 'C'}}
+
+} // namespace PR53075
Index: clang/test/SemaTemplate/constraints.cpp
===
--- clang/test/SemaTemplate/constraints.cpp
+++ clang/test/SemaTemplate/constraints.cpp
@@ -24,35 +24,3 @@
   // FIXME: These diagnostics are excessive.
   static_assert(test == 1); // expected-note 2{{while}} expected-note 2{{during}}
 }
-
-namespace PR52905 {
-// A mock for std::convertible_to. Not complete support.
-template 
-concept convertible_to = __is_convertible_to(_From, _To); // expected-note {{evaluated to false}}
-
-template 
-class A {
-public:
-  using iterator = void **;
-
-  iterator begin();
-  const iterator begin() const;
-};
-
-template 
-concept Beginable1 = requires(T t) {
-  { t.begin }
-  ->convertible_to; // expected-note {{not satisfied}}
-};
-
-static_assert(Beginable1>); // expected-error {{static_assert failed}}
-   // expected-note@-1 {{does not satisfy 'Beginable1'}}
-
-template 
-concept Beginable2 = requires(T t) {
-  { t.begin() }
-  ->convertible_to;
-};
-
-static_assert(Beginable2>);
-} // namespace PR52905
Index: clang/lib/Sema/TreeTransform.h
===
--- clang/lib/Sema/TreeTransform.h
+++ clang/lib/Sema/TreeTransform.h
@@ -12494,6 +12494,8 @@
 TransExpr = Req->getExprSubstitutionDiagnostic();
   else {
 ExprResult TransExprRes = getDerived().TransformExpr(Req->getExpr());
+if (TransExprRes.isUsable() && TransExprRes.get()->hasPlaceholderType())
+  TransExprRes = SemaRef.CheckPlaceholderExpr(TransExprRes.get());
 if (TransExprRes.isInvalid())
   return nullptr;
 TransExpr = TransExprRes.get();
Index: clang/lib/Sema/SemaTemplateInstantiate.cpp
===
--- clang/lib/Sema/SemaTemplateInstantiate.cpp
+++ clang/lib/Sema/SemaTemplateInstantiate.cpp
@@ -1943,6 +1943,11 @@
 if (ExprInst.isInvalid())
   return nullptr;
 ExprResult TransExprRes = TransformExpr(E);
+if (TransExprRes.isUsable() && !Trap.hasErrorOccurred()) {
+  if (TransExprRes.get()->hasPlaceholderType()) {
+TransExprRes = SemaRef.CheckPlaceholderExpr(TransExprRes.get());
+  }
+}
 if (TransExprRes.isInvalid() || Trap.hasErrorOccurred())
   TransExpr = createSubstDiag(SemaRef, Info, [&](llvm::raw_ostream ) {
 E->printPretty(OS, 

[PATCH] D118552: [clang] [concepts] Correctly(?) handle placeholder types in ExprRequirements.

2022-01-30 Thread Arthur O'Dwyer via Phabricator via cfe-commits
Quuxplusone added inline comments.



Comment at: clang/lib/AST/ASTContext.cpp:3375
+assert(T->isSpecificPlaceholderType(BuiltinType::UnknownAny) && 
"Unresolved placeholder type");
+  }
 

Quuxplusone wrote:
> Btw, I strongly suspect that the presence of placeholder type `UnknownAny` 
> all the way down in here is a bug (@rjmccall, thoughts?). But I found that 
> the test suite didn't pass without this exception, and I'm not terribly 
> interested in tracking down why; I don't have any idea what `UnknownAny` is, 
> myself.
>>! In D118552#3282538, @rjmccall wrote:
> It's a type that the debugger integration uses when it doesn't know the type 
> of a symbol.  If it's a data symbol, you make a `VarDecl` with `UnknownAny` 
> type; if it's a function symbol, you make a `FunctionDecl` with `UnknownAny`. 
>  In either case, if the user fails to cast it, it gets diagnosed as an error.
> 
> I can't think of any reason why we'd want to build a reference to 
> `UnknownAny` type; generally it's bad if the type "escapes" into subordinate 
> positions.  Probably we should be diagnosing something before we try to 
> propagate the `UnknownAny` type.

I've found https://github.com/llvm/llvm-project/issues/32247 on the same topic, 
and updated it with a comment and my own test case.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118552

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


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread psigillito via Phabricator via cfe-commits
psigillito added a comment.

@HazardyKnusperkeks  I do not have commit access. This is my first commit to 
the project. Do I just need to issue an 'arc land' command?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D111100: enable plugins for clang-tidy

2022-01-30 Thread Jameson Nash via Phabricator via cfe-commits
vtjnash added a comment.

Yes, please push a revert so I can look later. Do you have a link to the 
buildbot configuration, so I can reproduce that?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D00

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


[PATCH] D117416: [clang-format] Handle C variables with name that matches c++ access specifier

2022-01-30 Thread Björn Schäpers via Phabricator via cfe-commits
HazardyKnusperkeks accepted this revision.
HazardyKnusperkeks added a comment.

Have you commit access, or do you need some one to commit it for you?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117416

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


[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2022-01-30 Thread Simon Pilgrim via Phabricator via cfe-commits
RKSimon added inline comments.



Comment at: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp:1534
   } else if (StoreInst *SI = dyn_cast(I)) {
-if (!ClInstrumentWrites || ignoreAccess(SI->getPointerOperand()))
+if (!ClInstrumentWrites || ignoreAccess(LI, SI->getPointerOperand()))
   return;

RKSimon wrote:
> @kstoimenov You're using the LI pointer for all IgnoreAccess calls which is 
> causing nullptr dereference warnings in static analyzer.
> 
> Should we just be using I or the dyn_cast<> pointers in each case?
> 
> https://llvm.org/reports/scan-build/report-AddressSanitizer.cpp-ignoreAccess-21-f37ec0.html#EndPath
@kstoimenov Have you been able to check this at all please?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D112098

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


[PATCH] D118520: [clang-tidy] Output currently processing check and nodes on crash

2022-01-30 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 404350.
njames93 marked 5 inline comments as done.
njames93 added a comment.

Refactored implementation to not store state in ClangTidyContext. This will let 
external consumers of clang-tidy opt into the behaviour. As well as integrate 
the reporting to any signal handlers they may be using.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118520

Files:
  clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
  clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp

Index: clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
===
--- clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
+++ clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
@@ -20,6 +20,7 @@
 #include "../GlobList.h"
 #include "clang/Tooling/CommonOptionsParser.h"
 #include "llvm/Support/InitLLVM.h"
+#include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Process.h"
 #include "llvm/Support/Signals.h"
 #include "llvm/Support/TargetSelect.h"
@@ -384,6 +385,12 @@
   return FS;
 }
 
+class ClangTidyCrashTraceReporter : public llvm::PrettyStackTraceEntry,
+public CurProcessingCheckState {
+public:
+  void print(raw_ostream ) const override { return dump(OS); }
+};
+
 int clangTidyMain(int argc, const char **argv) {
   llvm::InitLLVM X(argc, argv);
   llvm::Expected OptionsParser =
@@ -488,8 +495,11 @@
   llvm::InitializeAllTargetMCs();
   llvm::InitializeAllAsmParsers();
 
+  ClangTidyCrashTraceReporter Trace;
+
   ClangTidyContext Context(std::move(OwningOptionsProvider),
AllowEnablingAnalyzerAlphaCheckers);
+  Context.setCrashTraceEngine();
   std::vector Errors =
   runClangTidy(Context, OptionsParser->getCompilations(), PathList, BaseFS,
FixNotes, EnableCheckProfile, ProfilePrefix);
Index: clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
===
--- clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
+++ clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
@@ -23,6 +23,7 @@
 class CompilerInstance;
 class SourceManager;
 namespace ast_matchers {
+class BoundNodes;
 class MatchFinder;
 } // namespace ast_matchers
 namespace tooling {
@@ -61,6 +62,31 @@
   }
 };
 
+class CurProcessingCheckState {
+public:
+  void dump(raw_ostream ) const;
+  void onProcessingCheckStart(StringRef CheckName,
+  const ast_matchers::BoundNodes ) {
+assert(CurContext && "ASTContext not set");
+CurrentCheckName = CheckName;
+CurNodes = 
+  }
+
+  void onProcessingCheckEnd() {
+CurrentCheckName = "";
+CurNodes = nullptr;
+  }
+
+  void setContext(const ASTContext ) { CurContext =  }
+
+  void clearContext() { CurContext = nullptr; }
+
+private:
+  mutable StringRef CurrentCheckName;
+  const ast_matchers::BoundNodes *CurNodes;
+  const ASTContext *CurContext;
+};
+
 /// Every \c ClangTidyCheck reports errors through a \c DiagnosticsEngine
 /// provided by this context.
 ///
@@ -82,6 +108,10 @@
 this->DiagEngine = DiagEngine;
   }
 
+  void setCrashTraceEngine(CurProcessingCheckState *State) {
+this->CurrentlyProcessing = State;
+  }
+
   ~ClangTidyContext();
 
   /// Report any errors detected using this method.
@@ -204,12 +234,24 @@
 DiagEngine->getDiagnosticIDs()->getDescription(DiagnosticID)));
   }
 
+  void onProcessingCheckStart(StringRef CheckName,
+  const ast_matchers::BoundNodes ) const {
+if (CurrentlyProcessing)
+  CurrentlyProcessing->onProcessingCheckStart(CheckName, Result);
+  }
+
+  void onProcessingCheckEnd() const {
+if (CurrentlyProcessing)
+  CurrentlyProcessing->onProcessingCheckEnd();
+  }
+
 private:
   // Writes to Stats.
   friend class ClangTidyDiagnosticConsumer;
 
   DiagnosticsEngine *DiagEngine;
   std::unique_ptr OptionsProvider;
+  CurProcessingCheckState *CurrentlyProcessing;
 
   std::string CurrentFile;
   ClangTidyOptions CurrentOptions;
Index: clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
===
--- clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
+++ clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
@@ -22,6 +22,7 @@
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/ASTDiagnostic.h"
 #include "clang/AST/Attr.h"
+#include "clang/ASTMatchers/ASTMatchers.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/DiagnosticOptions.h"
 #include "clang/Basic/FileManager.h"
@@ -161,7 +162,7 @@
 std::unique_ptr OptionsProvider,
 bool AllowEnablingAnalyzerAlphaCheckers)
 : DiagEngine(nullptr), 

[PATCH] D114639: Raise the minimum Visual Studio version to VS2019

2022-01-30 Thread Simon Pilgrim via Phabricator via cfe-commits
RKSimon added a comment.

mlir-windows buildbot looks to be green now - thanks!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D114639

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


[PATCH] D118519: [clang-tidy] Organize the release notes a little better

2022-01-30 Thread Nathan James via Phabricator via cfe-commits
njames93 added inline comments.



Comment at: clang-tools-extra/docs/ReleaseNotes.rst:221-227
 Removed checks
 ^^
 
 Improvements to include-fixer
 -
 
 The improvements are...

LegalizeAdulthood wrote:
> salman-javed-nz wrote:
> > Small nit, not about this patch, but the documentation release process as a 
> > whole.
> > 
> > Clang 13 got released with a lot of these placeholders still in the 
> > documentation.
> > https://releases.llvm.org/13.0.0/tools/clang/tools/extra/docs/ReleaseNotes.html
> > They were never tidied up before release.
> > 
> > What could be done to ensure that this doesn't happen again? Perhaps keep 
> > the placeholders in the file but in a commented-out state?
> > 
> > I'm aware of 
> > https://llvm.org/docs/HowToReleaseLLVM.html#update-documentation but in 
> > this case I guess it wasn't enough to capture this?
> I think it would be reasonable to have them as comment blocks.
> 
> I don't know if there's an automated process for generating/updating
> release notes.
I was always under the impression those got removed when the release branch is 
created


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118519

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


[PATCH] D118199: [AArch64] ACLE feature macro for Armv8.8-A MOPS

2022-01-30 Thread Son Tuan Vu via Phabricator via cfe-commits
tyb0807 updated this revision to Diff 404347.
tyb0807 added a comment.

Add more tests and update accordingly to change from ACLE specification: 
`__builtin_arm_mops_memset_tag` requires _both_ MOPS and MTE features


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D118199

Files:
  clang/lib/Basic/Targets/AArch64.cpp
  clang/test/CodeGen/aarch64-mops.c
  clang/test/Preprocessor/aarch64-target-features.c

Index: clang/test/Preprocessor/aarch64-target-features.c
===
--- clang/test/Preprocessor/aarch64-target-features.c
+++ clang/test/Preprocessor/aarch64-target-features.c
@@ -516,3 +516,15 @@
 // RUN: %clang -target aarch64-none-linux-gnu -march=armv8.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-LSE %s
 // RUN: %clang -target arm64-none-linux-gnu -march=armv8.1-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-LSE %s
 // CHECK-LSE: __ARM_FEATURE_ATOMICS 1
+
+// == Check Armv8.8-A/Armv9.3-A memcpy and memset acceleration instructions (MOPS)
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.7-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-NOMOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.7-a+mops -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.8-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.8-a+mops -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.2-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-NOMOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.2-a+mops -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.3-a -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.3-a+mops -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// CHECK-MOPS: __ARM_FEATURE_MOPS 1
+// CHECK-NOMOPS-NOT: __ARM_FEATURE_MOPS 1
Index: clang/test/CodeGen/aarch64-mops.c
===
--- clang/test/CodeGen/aarch64-mops.c
+++ clang/test/CodeGen/aarch64-mops.c
@@ -1,152 +1,281 @@
 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
 
-// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -target-feature +mops -target-feature +mte -S -emit-llvm -o - %s  | FileCheck %s
+// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -target-feature +mops -target-feature +mte -S -emit-llvm -o - %s  | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi-S -emit-llvm -o - %s  | FileCheck --check-prefix=CHECK-NOMOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.7-a+mops+memtag -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.7-a -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-NOMOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.8-a+memtag  -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv8.8-a -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-NOMOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.2-a+mops+memtag -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.2-a -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-NOMOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.3-a+memtag  -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-MOPS %s
+// RUN: %clang -target aarch64-arm-none-eabi -march=armv9.3-a -S -emit-llvm %s -o - | FileCheck --check-prefix=CHECK-NOMOPS %s
 
-#define __ARM_FEATURE_MOPS 1
 #include 
 #include 
 
-// CHECK-LABEL: @bzero_0(
-// CHECK-NEXT:  entry:
-// CHECK-NEXT:[[DST_ADDR:%.*]] = alloca i8*, align 8
-// CHECK-NEXT:store i8* [[DST:%.*]], i8** [[DST_ADDR]], align 8
-// CHECK-NEXT:[[TMP0:%.*]] = load i8*, i8** [[DST_ADDR]], align 8
-// CHECK-NEXT:[[TMP1:%.*]] = call i8* @llvm.aarch64.mops.memset.tag(i8* [[TMP0]], i8 0, i64 0)
-// CHECK-NEXT:ret i8* [[TMP1]]
+// CHECK-MOPS-LABEL: @bzero_0(
+// CHECK-MOPS:   entry:
+// CHECK-MOPS-NEXT:[[DST_ADDR:%.*]] = alloca i8*, align 8
+// CHECK-MOPS-NEXT:store i8* [[DST:%.*]], i8** [[DST_ADDR]], align 8
+// CHECK-MOPS-NEXT:[[TMP0:%.*]] = load i8*, i8** [[DST_ADDR]], align 8
+// CHECK-MOPS-NEXT:[[TMP1:%.*]] = call i8* @llvm.aarch64.mops.memset.tag(i8* [[TMP0]], i8 0, i64 0)
+// CHECK-MOPS-NEXT:ret i8* [[TMP1]]
+//
+// CHECK-NOMOPS-LABEL: @bzero_0(
+//