[PATCH] D82141: [sve][acle] Add SVE BFloat16 extensions.

2020-06-19 Thread Sander de Smalen via Phabricator via cfe-commits
sdesmalen added inline comments.



Comment at: clang/include/clang/Basic/arm_sve.td:494
+let ArchGuard = "defined(__ARM_FEATURE_SVE_BF16)" in {
+  def SVBFDOT   : SInst<"svbfdot[_{0}]",   "dd$$", "f", MergeNone, 
"aarch64_sve_bfdot">;
+  def SVBFMLALB : SInst<"svbfmlalb[_{0}]", "dd$$", "f", MergeNone, 
"aarch64_sve_bfmlalb">;

The types for these intrinsics are always `svfloat32_t` and `svbfloat16_t`, 
which given their semantics is unlikely to ever be extended to other types, so 
it's easier to make the LLVM IR non-overloaded (i.e. hardcoding 
`llvm_nxv4f32_ty` and `llvm_nxv8bf16_ty`) and using the `IsOverloadNone` flag 
for these builtins. Then you can express this builtin as:
```def SVBFDOT: SInst<"svbfdot[_{0}]",  "MMdd", "b", MergeNone, 
"aarch64_sve_bfdot">;```
and drop the need for the `$` modifier.



Comment at: clang/include/clang/Basic/arm_sve.td:498
+  def SVBFMMLA  : SInst<"svbfmmla[_{0}]",  "dd$$", "f", MergeNone, 
"aarch64_sve_bfmmla">;
+  def SVBFDOT_N   : SInst<"svbfdot[_n_{0}]",   "dd$~", "f", MergeNone, 
"aarch64_sve_bfdot">;
+  def SVBFMLAL_N  : SInst<"svbfmlalb[_n_{0}]", "dd$~", "f", MergeNone, 
"aarch64_sve_bfmlalb">;

Similar to the suggestion above to use `"MMdd"` for SVBFDOT, this could use 
`"MMda"` and you don't need the `~` modifier.

nit: add whitespace above this line.
nit: the rest of this file tries to align the columns, that makes this file a 
bit easier to read.



Comment at: clang/include/clang/Basic/arm_sve.td:1032
+  defm SVCVT_BF16_F32 : SInstCvtMXZ<"svcvt_bf16[_f32]", "ddPM", "dPM", "b",  
"aarch64_sve_cvt_bf16f32">;
+  // svcvtnt_bf16_f32
+  defm SVCVTNT_BF16_F32 : SInstCvtMX<"svcvtnt_bf16[_f32]", "ddPM", "dPM", "b", 
 "aarch64_sve_cvtnt_bf16f32">;

nit: redundant comment (same for above)



Comment at: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_bfdot.c:27
+
+svfloat32_t test_bfdot_lane_1_f32(svfloat32_t x, svbfloat16_t y, svbfloat16_t 
z) {
+  // CHECK-LABEL: @test_bfdot_lane_1_f32(

Testing the edge cases 0 and 3 should be sufficient. (same for all other cases 
in this patch)



Comment at: llvm/include/llvm/IR/IntrinsicsAArch64.td:1343
 
+class SVE_bfloat
+: Intrinsic<[llvm_anyvector_ty],

nit: `SVE_bfloat` is not very descriptive, maybe use `SVE_4Vec_BF16` and 
`SVE_4Vec_BF16_Indexed`?



Comment at: llvm/include/llvm/IR/IntrinsicsAArch64.td:1811
 
+def int_aarch64_sve_cvt_bf16f32 : Builtin_SVCVT<"svcvt_bf16_f32_m",   
llvm_nxv8bf16_ty, llvm_nxv8i1_ty, llvm_nxv4f32_ty>;
+def int_aarch64_sve_cvtnt_bf16f32   : Builtin_SVCVT<"svcvtnt_bf16_f32_m", 
llvm_nxv8bf16_ty, llvm_nxv8i1_ty, llvm_nxv4f32_ty>;

nit:  use `fcvtbf` instead of `cvt` => `int_aarch64_sve_fcvtbf_bf16f32` ?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82141



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


[PATCH] D82103: [analyzer] Remove forbidden characters from a SourceLocation filename for a graph dump on Windows

2020-06-19 Thread Denys Petrov via Phabricator via cfe-commits
ASDenysPetrov updated this revision to Diff 271971.
ASDenysPetrov added a comment.

Fixed clang-format.


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

https://reviews.llvm.org/D82103

Files:
  clang/include/clang/Basic/JsonSupport.h
  
clang/test/Analysis/exploded-graph-rewriter/l_directory_from_l/win_file_macros.cpp
  clang/test/Analysis/exploded-graph-rewriter/win_filepath.cpp
  clang/utils/analyzer/exploded-graph-rewriter.py

Index: clang/utils/analyzer/exploded-graph-rewriter.py
===
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -368,8 +368,7 @@
 self.root_id = node_id
 # Note: when writing tests you don't need to escape everything,
 # even though in a valid dot file everything is escaped.
-node_label = result.group(2).replace('\\l', '') \
-.replace('', '') \
+node_label = result.group(2).replace('', '') \
 .replace('\\"', '"') \
 .replace('\\{', '{') \
 .replace('\\}', '}') \
@@ -378,6 +377,15 @@
 .replace('\\<', '<') \
 .replace('\\>', '>') \
 .rstrip(',')
+# Handle `\l` separately for Windows, because macros __FILE__ produces
+# Windows specific delimiters `\` and sometimes it happens
+# when directory name starts with the letter `l`.
+if sys.platform == 'win32':
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,
+# because __FILE__ containes multiple `\` before `\l`.
+node_label = re.sub(r'(?
 
 namespace clang {
 
@@ -98,7 +98,16 @@
 if (AddBraces)
   Out << "{ ";
 std::string filename(PLoc.getFilename());
-#ifdef _WIN32 // Handle windows-specific path delimiters.
+#ifdef _WIN32
+// Remove forbidden Windows path characters
+auto RemoveIt =
+std::remove_if(filename.begin(), filename.end(), [](auto Char) {
+  static const char ForbiddenChars[] = "<>*?\"|";
+  return std::find(std::begin(ForbiddenChars), std::end(ForbiddenChars),
+   Char) != std::end(ForbiddenChars);
+});
+filename.erase(RemoveIt, filename.end());
+// Handle windows-specific path delimiters.
 std::replace(filename.begin(), filename.end(), '\\', '/');
 #endif
 Out << "\"line\": " << PLoc.getLine()
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D82092: [analyzer] Handle `\l` symbol in Windows specific file paths in exploded-graph-rewriter

2020-06-19 Thread Denys Petrov via Phabricator via cfe-commits
ASDenysPetrov updated this revision to Diff 271968.
ASDenysPetrov added a comment.

Fixed clang-format.


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

https://reviews.llvm.org/D82092

Files:
  
clang/test/Analysis/exploded-graph-rewriter/l_directory_from_l/win_file_macros.cpp
  clang/utils/analyzer/exploded-graph-rewriter.py


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -368,8 +368,7 @@
 self.root_id = node_id
 # Note: when writing tests you don't need to escape everything,
 # even though in a valid dot file everything is escaped.
-node_label = result.group(2).replace('\\l', '') \
-.replace('', '') \
+node_label = result.group(2).replace('', '') \
 .replace('\\"', '"') \
 .replace('\\{', '{') \
 .replace('\\}', '}') \
@@ -378,6 +377,15 @@
 .replace('\\<', '<') \
 .replace('\\>', '>') \
 .rstrip(',')
+# Handle `\l` separately for Windows, because macros __FILE__ 
produces
+# Windows specific delimiters `\` and sometimes it happens
+# when directory name starts with the letter `l`.
+if sys.platform == 'win32':
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,
+# because __FILE__ containes multiple `\` before `\l`.
+node_label = re.sub(r'(?Index: clang/utils/analyzer/exploded-graph-rewriter.py
===
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -368,8 +368,7 @@
 self.root_id = node_id
 # Note: when writing tests you don't need to escape everything,
 # even though in a valid dot file everything is escaped.
-node_label = result.group(2).replace('\\l', '') \
-.replace('', '') \
+node_label = result.group(2).replace('', '') \
 .replace('\\"', '"') \
 .replace('\\{', '{') \
 .replace('\\}', '}') \
@@ -378,6 +377,15 @@
 .replace('\\<', '<') \
 .replace('\\>', '>') \
 .rstrip(',')
+# Handle `\l` separately for Windows, because macros __FILE__ produces
+# Windows specific delimiters `\` and sometimes it happens
+# when directory name starts with the letter `l`.
+if sys.platform == 'win32':
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,
+# because __FILE__ containes multiple `\` before `\l`.
+node_label = re.sub(r'(?___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D82169: Don't install clang-import-test

2020-06-19 Thread Alexander Richardson via Phabricator via cfe-commits
arichardson created this revision.
arichardson added reviewers: spyffe, bruno, lhames, v.g.vassilev, loladiro.
Herald added subscribers: cfe-commits, dexonsmith, mgorny.
Herald added a project: clang.

I have been trying to reduce the installed size of our CHERI toolchain and
noticed that this tool was being installed even with 
-DLLVM_INSTALL_TOOLCHAIN_ONLY=ON.
This appears to be a test binary that should not be installed.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82169

Files:
  clang/tools/clang-import-test/CMakeLists.txt


Index: clang/tools/clang-import-test/CMakeLists.txt
===
--- clang/tools/clang-import-test/CMakeLists.txt
+++ clang/tools/clang-import-test/CMakeLists.txt
@@ -7,7 +7,7 @@
   set(tablegen_deps intrinsics_gen)
 endif()
 
-add_clang_tool(clang-import-test
+add_clang_executable(clang-import-test
   clang-import-test.cpp
   DEPENDS
   ${tablegen_deps}


Index: clang/tools/clang-import-test/CMakeLists.txt
===
--- clang/tools/clang-import-test/CMakeLists.txt
+++ clang/tools/clang-import-test/CMakeLists.txt
@@ -7,7 +7,7 @@
   set(tablegen_deps intrinsics_gen)
 endif()
 
-add_clang_tool(clang-import-test
+add_clang_executable(clang-import-test
   clang-import-test.cpp
   DEPENDS
   ${tablegen_deps}
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D82157: Fix crash on `user defined literals`

2020-06-19 Thread Eduardo Caldas via Phabricator via cfe-commits
eduucaldas created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Given an UserDefinedLiteral `1.2_w`:
Problem: Lexer generates one Token for the literal, but ClangAST
references two source locations
Fix: Ignore the operator and interpret it as the underlying literal.
e.g.: `1.2_w` token generates syntax node IntegerLiteral(1.2_w)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82157

Files:
  clang/lib/Tooling/Syntax/BuildTree.cpp
  clang/unittests/Tooling/Syntax/TreeTest.cpp

Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -1228,6 +1228,95 @@
 )txt"));
 }
 
+TEST_P(SyntaxTreeTest, UserDefinedLiteral) {
+  if (!GetParam().isCXX11OrLater()) {
+return;
+  }
+  EXPECT_TRUE(treeDumpEqual(
+  R"cpp(
+long double operator "" _w(long double);
+unsigned operator "" _w(const char*);
+template  unsigned operator "" _x();
+int main() {
+1.2_w; // calls operator "" _w(1.2L)
+12_w;  // calls operator "" _w("12")
+12_x;  // calls operator<'1', '2'> "" _x()
+}
+)cpp",
+  R"txt(
+*: TranslationUnit
+|-SimpleDeclaration
+| |-long
+| |-double
+| |-SimpleDeclarator
+| | |-operator
+| | |-""
+| | |-_w
+| | `-ParametersAndQualifiers
+| |   |-(
+| |   |-SimpleDeclaration
+| |   | |-long
+| |   | `-double
+| |   `-)
+| `-;
+|-SimpleDeclaration
+| |-unsigned
+| |-SimpleDeclarator
+| | |-operator
+| | |-""
+| | |-_w
+| | `-ParametersAndQualifiers
+| |   |-(
+| |   |-SimpleDeclaration
+| |   | |-const
+| |   | |-char
+| |   | `-SimpleDeclarator
+| |   |   `-*
+| |   `-)
+| `-;
+|-TemplateDeclaration
+| |-template
+| |-<
+| |-SimpleDeclaration
+| | `-char
+| |-...
+| |->
+| `-SimpleDeclaration
+|   |-unsigned
+|   |-SimpleDeclarator
+|   | |-operator
+|   | |-""
+|   | |-_x
+|   | `-ParametersAndQualifiers
+|   |   |-(
+|   |   `-)
+|   `-;
+`-SimpleDeclaration
+  |-int
+  |-SimpleDeclarator
+  | |-main
+  | `-ParametersAndQualifiers
+  |   |-(
+  |   `-)
+  `-CompoundStatement
+|-{
+|-ExpressionStatement
+| |-UnknownExpression
+| | `-UnknownExpression
+| |   `-1.2_w
+| `-;
+|-ExpressionStatement
+| |-UnknownExpression
+| | `-UnknownExpression
+| |   `-12_w
+| `-;
+|-ExpressionStatement
+| |-UnknownExpression
+| | `-12_x
+| `-;
+`-}
+)txt"));
+}
 TEST_P(SyntaxTreeTest, IntegerLiteral) {
   EXPECT_TRUE(treeDumpEqual(
   R"cpp(
Index: clang/lib/Tooling/Syntax/BuildTree.cpp
===
--- clang/lib/Tooling/Syntax/BuildTree.cpp
+++ clang/lib/Tooling/Syntax/BuildTree.cpp
@@ -624,6 +624,9 @@
   }
 
   bool WalkUpFromDeclRefExpr(DeclRefExpr *S) {
+if (S->getNameInfo().getName().getNameKind() ==
+clang::DeclarationName::CXXLiteralOperatorName)
+  return true;
 if (auto *NNS = BuildNestedNameSpecifier(S->getQualifierLoc()))
   Builder.markChild(NNS, syntax::NodeRole::IdExpression_qualifier);
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D82162: [clang-tidy] RenamerClangTidy wont emit fixes in scratch space

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 created this revision.
njames93 added reviewers: aaron.ballman, alexfh, gribozavr2.
Herald added subscribers: cfe-commits, xazax.hun.
Herald added a project: clang.

Prevent fixes being displayed if usages are found in the scratch buffer.
See Fix-It hints are being generated in the ScratchBuffer 
.
It may be wise down the line to put in a general fix in clang-tidy to prevent 
ScratchBuffer replacements being applied, but for now this will help.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82162

Files:
  clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
  clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming.cpp

Index: clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming.cpp
===
--- clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming.cpp
@@ -562,3 +562,19 @@
 }
 
 } // namespace redecls
+
+namespace scratchspace {
+#define DUP(Tok) Tok
+#define M1(Tok) DUP(badName##Tok())
+
+// We don't want a warning here as the call to this in Foo is in a scratch
+// buffer so its fix-it wouldn't be applied, resulting in invalid code.
+void badNameWarn();
+
+void Foo() {
+  M1(Warn);
+}
+
+#undef M1
+#undef DUP
+} // namespace scratchspace
Index: clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
===
--- clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
+++ clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
@@ -156,14 +156,17 @@
   // is already in there
   RenamerClangTidyCheck::NamingCheckFailure  =
   NamingCheckFailures[Decl];
-  if (!Failure.RawUsageLocs.insert(FixLocation.getRawEncoding()).second)
-return;
 
   if (!Failure.ShouldFix())
 return;
 
+  if (SourceMgr && SourceMgr->isWrittenInScratchSpace(FixLocation))
+Failure.FixStatus = RenamerClangTidyCheck::ShouldFixStatus::InsideMacro;
+
   if (!utils::rangeCanBeFixed(Range, SourceMgr))
 Failure.FixStatus = RenamerClangTidyCheck::ShouldFixStatus::InsideMacro;
+
+  Failure.RawUsageLocs.insert(FixLocation.getRawEncoding());
 }
 
 void RenamerClangTidyCheck::addUsage(const NamedDecl *Decl, SourceRange Range,
@@ -248,13 +251,15 @@
   if (const auto *Decl =
   Result.Nodes.getNodeAs("classRef")) {
 
-addUsage(Decl->getParent(), Decl->getNameInfo().getSourceRange());
+addUsage(Decl->getParent(), Decl->getNameInfo().getSourceRange(),
+ Result.SourceManager);
 
 for (const auto *Init : Decl->inits()) {
   if (!Init->isWritten() || Init->isInClassMemberInitializer())
 continue;
   if (const FieldDecl *FD = Init->getAnyMember())
-addUsage(FD, SourceRange(Init->getMemberLocation()));
+addUsage(FD, SourceRange(Init->getMemberLocation()),
+ Result.SourceManager);
   // Note: delegating constructors and base class initializers are handled
   // via the "typeLoc" matcher.
 }
@@ -271,7 +276,7 @@
 // we want instead to replace the next token, that will be the identifier.
 Range.setBegin(CharSourceRange::getTokenRange(Range).getEnd());
 
-addUsage(Decl->getParent(), Range);
+addUsage(Decl->getParent(), Range, Result.SourceManager);
 return;
   }
 
@@ -289,7 +294,7 @@
 // further TypeLocs handled below
 
 if (Decl) {
-  addUsage(Decl, Loc->getSourceRange());
+  addUsage(Decl, Loc->getSourceRange(), Result.SourceManager);
   return;
 }
 
@@ -300,7 +305,7 @@
   SourceRange Range(Ref.getTemplateNameLoc(), Ref.getTemplateNameLoc());
   if (const auto *ClassDecl = dyn_cast(Decl)) {
 if (const NamedDecl *TemplDecl = ClassDecl->getTemplatedDecl())
-  addUsage(TemplDecl, Range);
+  addUsage(TemplDecl, Range, Result.SourceManager);
 return;
   }
 }
@@ -308,7 +313,7 @@
 if (const auto  =
 Loc->getAs()) {
   if (const TagDecl *Decl = Ref.getTypePtr()->getAsTagDecl())
-addUsage(Decl, Loc->getSourceRange());
+addUsage(Decl, Loc->getSourceRange(), Result.SourceManager);
   return;
 }
   }
@@ -317,7 +322,7 @@
   Result.Nodes.getNodeAs("nestedNameLoc")) {
 if (const NestedNameSpecifier *Spec = Loc->getNestedNameSpecifier()) {
   if (const NamespaceDecl *Decl = Spec->getAsNamespace()) {
-addUsage(Decl, Loc->getLocalSourceRange());
+addUsage(Decl, Loc->getLocalSourceRange(), Result.SourceManager);
 return;
   }
 }
@@ -325,7 +330,8 @@
 
   if (const auto *Decl = Result.Nodes.getNodeAs("using")) {
 for (const auto *Shadow : Decl->shadows())
-  addUsage(Shadow->getTargetDecl(), Decl->getNameInfo().getSourceRange());
+  addUsage(Shadow->getTargetDecl(), Decl->getNameInfo().getSourceRange(),
+   

[PATCH] D81404: [AArch64] Add clang command line support for -mharden-sls=

2020-06-19 Thread Kristof Beyls via Phabricator via cfe-commits
kristof.beyls marked 2 inline comments as done.
kristof.beyls added inline comments.



Comment at: clang/lib/Driver/ToolChains/Arch/AArch64.cpp:229
+  Scope.split(Opts, ",");
+  for (int I = 0, E = Opts.size(); I != E; ++I) {
+StringRef Opt = Opts[I].trim();

ostannard wrote:
> Could this be a range-based for loop?
Yep, thanks for the suggestion. I've changed that before committing this.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81404



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


[PATCH] D81408: [builtins] Improve compatibility with 16 bit targets

2020-06-19 Thread Anatoly Trosinenko via Phabricator via cfe-commits
atrosinenko added a comment.

Ping.

Those flaky test failures seems to be due to `ld.lld` being not built from 
source as part of testing `compiler-rt/`-only patches.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81408



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


[PATCH] D82157: Fix crash on `user defined literals`

2020-06-19 Thread Eduardo Caldas via Phabricator via cfe-commits
eduucaldas updated this revision to Diff 271980.
eduucaldas added a comment.

Why does this work?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82157

Files:
  clang/lib/Tooling/Syntax/BuildTree.cpp
  clang/unittests/Tooling/Syntax/TreeTest.cpp

Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -1228,6 +1228,93 @@
 )txt"));
 }
 
+TEST_P(SyntaxTreeTest, UserDefinedLiteral) {
+  if (!GetParam().isCXX11OrLater()) {
+return;
+  }
+  EXPECT_TRUE(treeDumpEqual(
+  R"cpp(
+long double operator "" _w(long double);
+unsigned operator "" _w(const char*);
+template  unsigned operator "" _x();
+int main() {
+1.2_w; // calls operator "" _w(1.2L)
+12_w;  // calls operator "" _w("12")
+12_x;  // calls operator<'1', '2'> "" _x()
+}
+)cpp",
+  R"txt(
+*: TranslationUnit
+|-SimpleDeclaration
+| |-long
+| |-double
+| |-SimpleDeclarator
+| | |-operator
+| | |-""
+| | |-_w
+| | `-ParametersAndQualifiers
+| |   |-(
+| |   |-SimpleDeclaration
+| |   | |-long
+| |   | `-double
+| |   `-)
+| `-;
+|-SimpleDeclaration
+| |-unsigned
+| |-SimpleDeclarator
+| | |-operator
+| | |-""
+| | |-_w
+| | `-ParametersAndQualifiers
+| |   |-(
+| |   |-SimpleDeclaration
+| |   | |-const
+| |   | |-char
+| |   | `-SimpleDeclarator
+| |   |   `-*
+| |   `-)
+| `-;
+|-TemplateDeclaration
+| |-template
+| |-<
+| |-SimpleDeclaration
+| | `-char
+| |-...
+| |->
+| `-SimpleDeclaration
+|   |-unsigned
+|   |-SimpleDeclarator
+|   | |-operator
+|   | |-""
+|   | |-_x
+|   | `-ParametersAndQualifiers
+|   |   |-(
+|   |   `-)
+|   `-;
+`-SimpleDeclaration
+  |-int
+  |-SimpleDeclarator
+  | |-main
+  | `-ParametersAndQualifiers
+  |   |-(
+  |   `-)
+  `-CompoundStatement
+|-{
+|-ExpressionStatement
+| |-UserDefinedLiteralExpression
+| | `-1.2_w
+| `-;
+|-ExpressionStatement
+| |-UserDefinedLiteralExpression
+| | `-12_w
+| `-;
+|-ExpressionStatement
+| |-UserDefinedLiteralExpression
+| | `-12_x
+| `-;
+`-}
+)txt"));
+}
 TEST_P(SyntaxTreeTest, IntegerLiteral) {
   EXPECT_TRUE(treeDumpEqual(
   R"cpp(
Index: clang/lib/Tooling/Syntax/BuildTree.cpp
===
--- clang/lib/Tooling/Syntax/BuildTree.cpp
+++ clang/lib/Tooling/Syntax/BuildTree.cpp
@@ -623,6 +623,19 @@
 return NNS;
   }
 
+  bool TraverseUserDefinedLiteral(UserDefinedLiteral *S) { return true; }
+
+  bool WalkUpFromUserDefinedLiteral(UserDefinedLiteral *S) {
+// The user-defined-literal `1.2_w` is not split in the tokens `1.2` and
+// `_w` as we might imagine, its tokens are `1.2_w` only.
+// As a node is built by folding tokens we cannot generate one
+// for `_w`
+Builder.markChildToken(S->getBeginLoc(), syntax::NodeRole::LiteralToken);
+Builder.foldNode(Builder.getExprRange(S),
+ new (allocator()) syntax::IntegerLiteralExpression, S);
+return true;
+  }
+
   bool WalkUpFromDeclRefExpr(DeclRefExpr *S) {
 if (auto *NNS = BuildNestedNameSpecifier(S->getQualifierLoc()))
   Builder.markChild(NNS, syntax::NodeRole::IdExpression_qualifier);
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D81998: [clangd][NFC] Rename FSProvider and getFileSystem

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet updated this revision to Diff 271979.
kadircet marked 4 inline comments as done.
kadircet added a comment.

- Address comments


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81998

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp
  clang-tools-extra/clangd/ClangdLSPServer.h
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/ClangdServer.h
  clang-tools-extra/clangd/CodeComplete.cpp
  clang-tools-extra/clangd/Compiler.cpp
  clang-tools-extra/clangd/Compiler.h
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/Preamble.cpp
  clang-tools-extra/clangd/SourceCode.cpp
  clang-tools-extra/clangd/SourceCode.h
  clang-tools-extra/clangd/fuzzer/clangd-fuzzer.cpp
  clang-tools-extra/clangd/index/Background.cpp
  clang-tools-extra/clangd/index/Background.h
  clang-tools-extra/clangd/support/CMakeLists.txt
  clang-tools-extra/clangd/support/FSProvider.cpp
  clang-tools-extra/clangd/support/FSProvider.h
  clang-tools-extra/clangd/support/ThreadsafeFS.cpp
  clang-tools-extra/clangd/support/ThreadsafeFS.h
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp
  clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp
  clang-tools-extra/clangd/unittests/ClangdTests.cpp
  clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
  clang-tools-extra/clangd/unittests/CompilerTests.cpp
  clang-tools-extra/clangd/unittests/FileIndexTests.cpp
  clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
  clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp
  clang-tools-extra/clangd/unittests/HeadersTests.cpp
  clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
  clang-tools-extra/clangd/unittests/PreambleTests.cpp
  clang-tools-extra/clangd/unittests/RenameTests.cpp
  clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
  clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
  clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
  clang-tools-extra/clangd/unittests/TestFS.h
  clang-tools-extra/clangd/unittests/TestTU.cpp
  clang-tools-extra/clangd/unittests/TestTU.h
  clang-tools-extra/clangd/unittests/XRefsTests.cpp

Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp
===
--- clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -974,7 +974,7 @@
   std::string BuildDir = testPath("build");
   MockCompilationDatabase CDB(BuildDir, RelPathPrefix);
 
-  MockFSProvider FS;
+  MockFS FS;
   ClangdServer Server(CDB, FS, ClangdServer::optsForTest());
 
   // Fill the filesystem.
@@ -1010,7 +1010,7 @@
 }
 
 TEST(GoToInclude, All) {
-  MockFSProvider FS;
+  MockFS FS;
   MockCompilationDatabase CDB;
   ClangdServer Server(CDB, FS, ClangdServer::optsForTest());
 
@@ -1084,7 +1084,7 @@
 TEST(LocateSymbol, WithPreamble) {
   // Test stragety: AST should always use the latest preamble instead of last
   // good preamble.
-  MockFSProvider FS;
+  MockFS FS;
   MockCompilationDatabase CDB;
   ClangdServer Server(CDB, FS, ClangdServer::optsForTest());
 
Index: clang-tools-extra/clangd/unittests/TestTU.h
===
--- clang-tools-extra/clangd/unittests/TestTU.h
+++ clang-tools-extra/clangd/unittests/TestTU.h
@@ -70,7 +70,7 @@
   // Suppress this behavior by adding an 'error-ok' comment to the code.
   ParsedAST build() const;
   std::shared_ptr preamble() const;
-  ParseInputs inputs(MockFSProvider ) const;
+  ParseInputs inputs(MockFS ) const;
   SymbolSlab headerSymbols() const;
   RefSlab headerRefs() const;
   std::unique_ptr index() const;
Index: clang-tools-extra/clangd/unittests/TestTU.cpp
===
--- clang-tools-extra/clangd/unittests/TestTU.cpp
+++ clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -20,7 +20,7 @@
 namespace clang {
 namespace clangd {
 
-ParseInputs TestTU::inputs(MockFSProvider ) const {
+ParseInputs TestTU::inputs(MockFS ) const {
   std::string FullFilename = testPath(Filename),
   FullHeaderName = testPath(HeaderFilename),
   ImportThunk = testPath("import_thunk.h");
@@ -67,7 +67,7 @@
 }
 
 std::shared_ptr TestTU::preamble() const {
-  MockFSProvider FSProvider;
+  MockFS FSProvider;
   auto Inputs = inputs(FSProvider);
   IgnoreDiagnostics Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
@@ -78,7 +78,7 @@
 }
 
 ParsedAST TestTU::build() const {
-  MockFSProvider FSProvider;
+  MockFS FSProvider;
   auto Inputs = inputs(FSProvider);
   StoreDiags Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
Index: clang-tools-extra/clangd/unittests/TestFS.h
===
--- clang-tools-extra/clangd/unittests/TestFS.h
+++ clang-tools-extra/clangd/unittests/TestFS.h
@@ 

[PATCH] D82092: [analyzer] Handle `\l` symbol in string literals in exploded-graph-rewriter

2020-06-19 Thread Denys Petrov via Phabricator via cfe-commits
ASDenysPetrov marked an inline comment as done.
ASDenysPetrov added inline comments.



Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:432
  .replace('|', '\\|')
+s = re.sub(r'(?', s)
 if self._gray_mode:

This makes the graph data being look from {F12194502} to {F12194498}.


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

https://reviews.llvm.org/D82092



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


[PATCH] D81975: [clangd] Add command line option for ClangTidyConfig

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 272009.
njames93 added a comment.

Small rebase


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81975

Files:
  clang-tools-extra/clangd/test/clang-tidy-config.test
  clang-tools-extra/clangd/tool/ClangdMain.cpp


Index: clang-tools-extra/clangd/tool/ClangdMain.cpp
===
--- clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -151,6 +151,15 @@
 init(""),
 };
 
+opt ClangTidyConfig{
+"clang-tidy-config",
+cat(Features),
+desc("Specifies a YAML/JSON configuration for when running clang-tidy "
+ "checks (this will override clang-tidy files). Only meaningful when "
+ "-clang-tidy flag is on"),
+init(""),
+};
+
 opt CodeCompletionParse{
 "completion-parse",
 cat(Features),
@@ -716,10 +725,24 @@
 tidy::ClangTidyOptions OverrideClangTidyOptions;
 if (!ClangTidyChecks.empty())
   OverrideClangTidyOptions.Checks = ClangTidyChecks;
-ClangTidyOptProvider = std::make_unique(
-tidy::ClangTidyGlobalOptions(),
-/* Default */ EmptyDefaults,
-/* Override */ OverrideClangTidyOptions, TFS.view(/*CWD=*/llvm::None));
+if (ClangTidyConfig.empty()) {
+  ClangTidyOptProvider = std::make_unique(
+  tidy::ClangTidyGlobalOptions(),
+  /* Default */ EmptyDefaults,
+  /* Override */ OverrideClangTidyOptions,
+  TFS.view(/*CWD=*/llvm::None));
+} else {
+  llvm::ErrorOr ParsedConfig =
+  tidy::parseConfiguration(ClangTidyConfig);
+  if (!ParsedConfig) {
+elog("Invalid -clang-tidy-config: {0}",
+ ParsedConfig.getError().message());
+return 1;
+  }
+  ClangTidyOptProvider = std::make_unique(
+  tidy::ClangTidyGlobalOptions(), EmptyDefaults, *ParsedConfig,
+  OverrideClangTidyOptions, TFS.view(/*CWD*/ llvm::None));
+}
 Opts.GetClangTidyOptions = [&](llvm::vfs::FileSystem &,
llvm::StringRef File) {
   // This function must be thread-safe and tidy option providers are not.
Index: clang-tools-extra/clangd/test/clang-tidy-config.test
===
--- /dev/null
+++ clang-tools-extra/clangd/test/clang-tidy-config.test
@@ -0,0 +1,40 @@
+# RUN: clangd -lit-test -clang-tidy-config="{CheckOptions: [{key: 
readability-identifier-naming.FunctionCase, value: camelBack}], Checks: 
'-*,readability-identifier-naming' }" < %s | FileCheck -strict-whitespace %s
+{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"processId":123,"rootPath":"clangd","capabilities":{},"trace":"off"}}
+---
+{"jsonrpc":"2.0","method":"textDocument/didOpen","params":{"textDocument":{"uri":"test:///foo.c","languageId":"c","text":"void
 BadName();"}}}
+#  CHECK:  "method": "textDocument/publishDiagnostics",
+# CHECK-NEXT:  "params": {
+# CHECK-NEXT:"diagnostics": [
+# CHECK-NEXT:  {
+# CHECK-NEXT:"code": "readability-identifier-naming",
+# CHECK-NEXT:"message": "Invalid case style for function 'BadName' 
(fix available)",
+# CHECK-NEXT:"range": {
+# CHECK-NEXT:  "end": {
+# CHECK-NEXT:"character": 12,
+# CHECK-NEXT:"line": 0
+# CHECK-NEXT:  },
+# CHECK-NEXT:  "start": {
+# CHECK-NEXT:"character": 5,
+# CHECK-NEXT:"line": 0
+# CHECK-NEXT:  }
+# CHECK-NEXT:},
+# CHECK-NEXT:"severity": 2,
+# CHECK-NEXT:"source": "clang-tidy"
+# CHECK-NEXT:  }
+# CHECK-NEXT:],
+# CHECK-NEXT:"uri": "file://{{.*}}/foo.c",
+# CHECK-NEXT:"version": 0
+# CHECK-NEXT:  }
+---
+{"jsonrpc":"2.0","id":2,"method":"sync","params":null}
+---
+{"jsonrpc":"2.0","method":"textDocument/didClose","params":{"textDocument":{"uri":"test:///foo.c"}}}
+#  CHECK:  "method": "textDocument/publishDiagnostics",
+# CHECK-NEXT:  "params": {
+# CHECK-NEXT:"diagnostics": [],
+# CHECK-NEXT:"uri": "file://{{.*}}/foo.c"
+# CHECK-NEXT:  }
+---
+{"jsonrpc":"2.0","id":5,"method":"shutdown"}
+---
+{"jsonrpc":"2.0","method":"exit"}


Index: clang-tools-extra/clangd/tool/ClangdMain.cpp
===
--- clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -151,6 +151,15 @@
 init(""),
 };
 
+opt ClangTidyConfig{
+"clang-tidy-config",
+cat(Features),
+desc("Specifies a YAML/JSON configuration for when running clang-tidy "
+ "checks (this will override clang-tidy files). Only meaningful when "
+ "-clang-tidy flag is on"),
+init(""),
+};
+
 opt CodeCompletionParse{
 "completion-parse",
 cat(Features),
@@ -716,10 +725,24 @@
 tidy::ClangTidyOptions OverrideClangTidyOptions;
 if (!ClangTidyChecks.empty())
   

[PATCH] D82092: [analyzer] Handle `\l` symbol in string literals in exploded-graph-rewriter

2020-06-19 Thread Denys Petrov via Phabricator via cfe-commits
ASDenysPetrov updated this revision to Diff 272007.
ASDenysPetrov added a comment.

Expanded the patch for all platforms.


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

https://reviews.llvm.org/D82092

Files:
  clang/test/Analysis/exploded-graph-rewriter/l_name_starts_with_l.cpp
  clang/utils/analyzer/exploded-graph-rewriter.py


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -368,8 +368,7 @@
 self.root_id = node_id
 # Note: when writing tests you don't need to escape everything,
 # even though in a valid dot file everything is escaped.
-node_label = result.group(2).replace('\\l', '') \
-.replace('', '') \
+node_label = result.group(2).replace('', '') \
 .replace('\\"', '"') \
 .replace('\\{', '{') \
 .replace('\\}', '}') \
@@ -378,6 +377,13 @@
 .replace('\\<', '<') \
 .replace('\\>', '>') \
 .rstrip(',')
+# Handle `\l` separately because a string literal can be in code
+# like "string\\literal" with the `\l` inside.
+# Also on Windows macros __FILE__ produces specific delimiters `\`
+# and a directory or file may starts with the letter `l`.
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,
+# because the literal as a rule containes multiple `\` before `\l`.
+node_label = re.sub(r'(?', '') \
- .replace('\\l', '') \
  .replace('|', '\\|')
+s = re.sub(r'(?', s)
 if self._gray_mode:
 s = re.sub(r'', '', s)
 s = re.sub(r'', '', s)
Index: clang/test/Analysis/exploded-graph-rewriter/l_name_starts_with_l.cpp
===
--- /dev/null
+++ clang/test/Analysis/exploded-graph-rewriter/l_name_starts_with_l.cpp
@@ -0,0 +1,26 @@
+// CAUTION: The name of this file should start with `l` for proper tests.
+// FIXME: Figure out how to use %clang_analyze_cc1 with our lit.local.cfg.
+// RUN: %clang_cc1 -analyze -triple x86_64-unknown-linux-gnu \
+// RUN: -analyzer-checker=core \
+// RUN: -analyzer-dump-egraph=%t.dot %s
+// RUN: %exploded_graph_rewriter %t.dot | FileCheck %s
+// REQUIRES: asserts
+
+void test1() {
+  // Here __FILE__ macros produces a string with `\` delimiters on Windows
+  // and the name of the file starts with `l`.
+  char text[] = __FILE__;
+}
+
+void test2() {
+  // Here `\l` is in the middle of the literal.
+  char text[] = "string\\literal";
+}
+
+void test() {
+  test1();
+  test2();
+}
+
+// This test is passed if exploded_graph_rewriter handles dot file without 
errors.
+// CHECK: digraph "ExplodedGraph"


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -368,8 +368,7 @@
 self.root_id = node_id
 # Note: when writing tests you don't need to escape everything,
 # even though in a valid dot file everything is escaped.
-node_label = result.group(2).replace('\\l', '') \
-.replace('', '') \
+node_label = result.group(2).replace('', '') \
 .replace('\\"', '"') \
 .replace('\\{', '{') \
 .replace('\\}', '}') \
@@ -378,6 +377,13 @@
 .replace('\\<', '<') \
 .replace('\\>', '>') \
 .rstrip(',')
+# Handle `\l` separately because a string literal can be in code
+# like "string\\literal" with the `\l` inside.
+# Also on Windows macros __FILE__ produces specific delimiters `\`
+# and a directory or file may starts with the letter `l`.
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,
+# because the literal as a rule containes multiple `\` before `\l`.
+node_label = re.sub(r'(?', '') \
- .replace('\\l', '') \
  .replace('|', '\\|')
+s = re.sub(r'(?', s)
 if self._gray_mode:
 s = re.sub(r'', '', s)
 s = re.sub(r'', '', s)
Index: clang/test/Analysis/exploded-graph-rewriter/l_name_starts_with_l.cpp

[PATCH] D82081: [z/OS] Add binary format goff and operating system zos to the triple

2020-06-19 Thread Kai Nacke via Phabricator via cfe-commits
Kai marked 4 inline comments as done.
Kai added inline comments.



Comment at: llvm/include/llvm/Support/TargetRegistry.h:518
+case Triple::GOFF:
+  report_fatal_error("GOFF MCObjectStreamer not implemented yet."); 
 }

hubert.reinterpretcast wrote:
> The coding guidelines have been updated to clarify the formatting of 
> `report_fatal_error` messages:
> https://llvm.org/docs/CodingStandards.html#id14
Thanks! That was a good hint.


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

https://reviews.llvm.org/D82081



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


[PATCH] D82081: [z/OS] Add binary format goff and operating system zos to the triple

2020-06-19 Thread Kai Nacke via Phabricator via cfe-commits
Kai updated this revision to Diff 272010.
Kai added a comment.

- Relative order is now consistently GOFF before XCOFF
- llvm_report_fatal() now follows guideline
- Updated formatting




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

https://reviews.llvm.org/D82081

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/CodeGen/CGObjCMac.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  llvm/include/llvm/ADT/Triple.h
  llvm/include/llvm/Support/TargetRegistry.h
  llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
  llvm/lib/MC/MCObjectFileInfo.cpp
  llvm/lib/Support/Triple.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/unittests/ADT/TripleTest.cpp

Index: llvm/unittests/ADT/TripleTest.cpp
===
--- llvm/unittests/ADT/TripleTest.cpp
+++ llvm/unittests/ADT/TripleTest.cpp
@@ -170,6 +170,18 @@
   EXPECT_EQ(Triple::FreeBSD, T.getOS());
   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
 
+  T = Triple("s390x-ibm-zos");
+  EXPECT_EQ(Triple::systemz, T.getArch());
+  EXPECT_EQ(Triple::IBM, T.getVendor());
+  EXPECT_EQ(Triple::ZOS, T.getOS());
+  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
+  T = Triple("systemz-ibm-zos");
+  EXPECT_EQ(Triple::systemz, T.getArch());
+  EXPECT_EQ(Triple::IBM, T.getVendor());
+  EXPECT_EQ(Triple::ZOS, T.getOS());
+  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
   T = Triple("arm-none-none-eabi");
   EXPECT_EQ(Triple::arm, T.getArch());
   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
@@ -1289,6 +1301,15 @@
   EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
   EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
 
+  EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat());
+  EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat());
+
+  EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat());
+
   EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
   EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
   EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat());
@@ -1335,6 +1356,9 @@
 
   T.setObjectFormat(Triple::XCOFF);
   EXPECT_EQ(Triple::XCOFF, T.getObjectFormat());
+
+  T.setObjectFormat(Triple::GOFF);
+  EXPECT_EQ(Triple::GOFF, T.getObjectFormat());
 }
 
 TEST(TripleTest, NormalizeWindows) {
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1960,9 +1960,10 @@
   case Triple::ELF:   return "asan_globals";
   case Triple::MachO: return "__DATA,__asan_globals,regular";
   case Triple::Wasm:
+  case Triple::GOFF:
   case Triple::XCOFF:
 report_fatal_error(
-"ModuleAddressSanitizer not implemented for object file format.");
+"ModuleAddressSanitizer not implemented for object file format");
   case Triple::UnknownObjectFormat:
 break;
   }
Index: llvm/lib/Support/Triple.cpp
===
--- llvm/lib/Support/Triple.cpp
+++ llvm/lib/Support/Triple.cpp
@@ -217,6 +217,8 @@
   case WASI: return "wasi";
   case WatchOS: return "watchos";
   case Win32: return "windows";
+  case ZOS:
+return "zos";
   }
 
   llvm_unreachable("Invalid OSType");
@@ -503,6 +505,7 @@
 .StartsWith("solaris", Triple::Solaris)
 .StartsWith("win32", Triple::Win32)
 .StartsWith("windows", Triple::Win32)
+.StartsWith("zos", Triple::ZOS)
 .StartsWith("haiku", Triple::Haiku)
 .StartsWith("minix", Triple::Minix)
 .StartsWith("rtems", Triple::RTEMS)
@@ -557,6 +560,7 @@
 .EndsWith("xcoff", Triple::XCOFF)
 .EndsWith("coff", Triple::COFF)
 .EndsWith("elf", Triple::ELF)
+.EndsWith("goff", Triple::GOFF)
 .EndsWith("macho", Triple::MachO)
 .EndsWith("wasm", Triple::Wasm)
 .Default(Triple::UnknownObjectFormat);
@@ -650,6 +654,7 @@
   case Triple::ELF:   return "elf";
   case Triple::MachO: return "macho";
   case Triple::Wasm:  return "wasm";
+  case Triple::GOFF:  return "goff";
   case Triple::XCOFF: return "xcoff";
   }
   llvm_unreachable("unknown object format type");
@@ -705,7 +710,6 @@
   case Triple::sparcv9:
   case Triple::spir64:
   case Triple::spir:
-  case Triple::systemz:
   case Triple::tce:
   case Triple::tcele:
   case Triple::thumbeb:
@@ -719,6 +723,11 @@
   return Triple::XCOFF;
 return Triple::ELF;
 
+  case Triple::systemz:
+if (T.getOS() == Triple::ZOS)
+  return 

[PATCH] D74166: [AIX][Frontend] Static init implementation for AIX considering no priority

2020-06-19 Thread Xiangling Liao via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Xiangling_L marked an inline comment as done.
Closed by commit rG22337bfe7d87: [AIX][Frontend] Static init implementation for 
AIX considering no priority (authored by Xiangling_L).

Changed prior to commit:
  https://reviews.llvm.org/D74166?vs=271747=272035#toc

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D74166

Files:
  clang/include/clang/AST/Mangle.h
  clang/lib/AST/ItaniumMangle.cpp
  clang/lib/CodeGen/CGCXXABI.h
  clang/lib/CodeGen/CGDeclCXX.cpp
  clang/lib/CodeGen/CGOpenMPRuntime.cpp
  clang/lib/CodeGen/CodeGenFunction.h
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/CodeGen/CodeGenModule.h
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  clang/lib/CodeGen/MicrosoftCXXABI.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/test/CodeGen/aix-constructor-attribute.cpp
  clang/test/CodeGen/aix-destructor-attribute.cpp
  clang/test/CodeGen/aix-init-priority-attribute.cpp
  clang/test/CodeGen/static-init.cpp
  clang/test/CodeGenCXX/aix-static-init.cpp

Index: clang/test/CodeGenCXX/aix-static-init.cpp
===
--- /dev/null
+++ clang/test/CodeGenCXX/aix-static-init.cpp
@@ -0,0 +1,193 @@
+// RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -S -emit-llvm -x c++ \
+// RUN: -fno-use-cxa-atexit -std=c++2a < %s | \
+// RUN:   FileCheck --check-prefixes=CHECK,CHECK32 %s
+
+// RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -S -emit-llvm -x c++ \
+// RUN: -fno-use-cxa-atexit -std=c++2a < %s | \
+// RUN:   FileCheck --check-prefixes=CHECK,CHECK64 %s
+
+namespace test1 {
+  struct Test1 {
+Test1();
+~Test1();
+  } t1, t2;
+} // namespace test1
+
+namespace test2 {
+  int foo() { return 3; }
+  int x = foo();
+} // namespace test2
+
+namespace test3 {
+  struct Test3 {
+constexpr Test3() {};
+~Test3() {};
+  };
+
+  constinit Test3 t;
+} // namespace test3
+
+namespace test4 {
+  struct Test4 {
+Test4();
+~Test4();
+  };
+
+  void f() {
+static Test4 staticLocal;
+  }
+} // namespace test4
+
+// CHECK: @llvm.global_ctors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @__sinit8000_clang_1145401da454a7baad10bfe313c46638, i8* null }]
+// CHECK: @llvm.global_dtors = appending global [1 x { i32, void ()*, i8* }] [{ i32, void ()*, i8* } { i32 65535, void ()* @__sterm8000_clang_1145401da454a7baad10bfe313c46638, i8* null }]
+
+// CHECK: define internal void @__cxx_global_var_init() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   call void @_ZN5test15Test1C1Ev(%"struct.test1::Test1"* @_ZN5test12t1E)
+// CHECK:   %0 = call i32 @atexit(void ()* @__dtor__ZN5test12t1E)
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: define internal void @__dtor__ZN5test12t1E() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   call void @_ZN5test15Test1D1Ev(%"struct.test1::Test1"* @_ZN5test12t1E)
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: declare i32 @atexit(void ()*)
+
+// CHECK: define internal void @__finalize__ZN5test12t1E() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   %0 = call i32 @unatexit(void ()* @__dtor__ZN5test12t1E)
+// CHECK:   %needs_destruct = icmp eq i32 %0, 0
+// CHECK:   br i1 %needs_destruct, label %destruct.call, label %destruct.end
+
+// CHECK: destruct.call:
+// CHECK:   call void @__dtor__ZN5test12t1E()
+// CHECK:   br label %destruct.end
+
+// CHECK: destruct.end:
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: declare i32 @unatexit(void ()*)
+
+// CHECK: define internal void @__cxx_global_var_init.1() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   call void @_ZN5test15Test1C1Ev(%"struct.test1::Test1"* @_ZN5test12t2E)
+// CHECK:   %0 = call i32 @atexit(void ()* @__dtor__ZN5test12t2E)
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: define internal void @__dtor__ZN5test12t2E() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   call void @_ZN5test15Test1D1Ev(%"struct.test1::Test1"* @_ZN5test12t2E)
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: define internal void @__finalize__ZN5test12t2E() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   %0 = call i32 @unatexit(void ()* @__dtor__ZN5test12t2E)
+// CHECK:   %needs_destruct = icmp eq i32 %0, 0
+// CHECK:   br i1 %needs_destruct, label %destruct.call, label %destruct.end
+
+// CHECK: destruct.call:
+// CHECK:   call void @__dtor__ZN5test12t2E()
+// CHECK:   br label %destruct.end
+
+// CHECK: destruct.end:
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: define internal void @__cxx_global_var_init.2() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK32: %call = call i32 @_ZN5test23fooEv()
+// CHECK64: %call = call signext i32 @_ZN5test23fooEv()
+// CHECK:   store i32 %call, i32* @_ZN5test21xE
+// CHECK:   ret void
+// CHECK: }
+
+// CHECK: define internal void @__cxx_global_var_init.3() [[ATTR:#[0-9]+]] {
+// CHECK: entry:
+// CHECK:   %0 = call i32 @atexit(void ()* 

[PATCH] D82178: [AArch64][SVE] Guard svbfloat16_t with feature macro in ACLE

2020-06-19 Thread Sander de Smalen via Phabricator via cfe-commits
sdesmalen added inline comments.



Comment at: clang/utils/TableGen/SveEmitter.cpp:1091
+  OS << "#if defined(__ARM_FEATURE_SVE_BF16)\n";
+  OS << "typedef __SVBFloat16_t svbfloat16_t;\n";
+  OS << "#endif\n\n";

Can you also add an error if `__ARM_FEATURE_SVE_BF16` is defined, but 
`__ARM_FEATURE_BF16_SCALAR_ARITHMETIC` isn't?
something like:
```#ifndef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
#error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC must be defined when 
__ARM_FEATURE_SVE_BF16 is defined"
#endif
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82178



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


[PATCH] D82089: [clang-tidy] modernize-loop-convert reverse iteration support

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 272034.
njames93 added a comment.

Add documentation about the include style optione


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82089

Files:
  clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
  clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.h
  clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h
  clang-tools-extra/docs/ReleaseNotes.rst
  clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst
  clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-reverse.cpp

Index: clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-reverse.cpp
===
--- /dev/null
+++ clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-reverse.cpp
@@ -0,0 +1,120 @@
+// RUN: %check_clang_tidy -std=c++20 -check-suffix=RANGES %s modernize-loop-convert %t
+
+// RUN: %check_clang_tidy -check-suffix=CUSTOM %s modernize-loop-convert %t -- \
+// RUN:   -config="{CheckOptions: [ \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeFunction, value: 'llvm::reverse'}, \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeHeader, value: 'llvm/ADT/STLExtras.h'}]}"
+
+// Ensure the check doesn't transform reverse loops when not in c++20 mode or
+// when UseCxx20ReverseRanges has been disabled
+// RUN: clang-tidy %s -checks=-*,modernize-loop-convert -- -std=c++17 | count 0
+
+// RUN: clang-tidy %s -checks=-*,modernize-loop-convert -config="{CheckOptions: \
+// RUN: [{key: modernize-loop-convert.UseCxx20ReverseRanges, value: 'false'}] \
+// RUN: }" -- -std=c++20 | count 0
+
+// RUN: %check_clang_tidy -check-suffix=CUSTOM-NO-HEADER %s modernize-loop-convert %t -- \
+// RUN:   -config="{CheckOptions: [ \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeFunction, value: 'globalReverse'}]}"
+
+// Ensure we get a warning if we only supply one of the required reverse range arguments.
+// RUN: %check_clang_tidy -check-suffix=BAD-CUSTOM %s modernize-loop-convert %t -- \
+// RUN:   -config="{CheckOptions: [ \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeHeader, value: 'ranges/v3/views/reverse.hpp'}]}"
+
+// CHECK-MESSAGES-BAD-CUSTOM: warning: modernize-loop-convert: 'MakeReverseRangeHeader' is set but 'MakeReverseRangeFunction' is not, disabling reverse loop transformation
+
+// Make sure appropiate headers are included
+// CHECK-FIXES-RANGES: #include 
+// CHECK-FIXES-CUSTOM: #include "llvm/ADT/STLExtras.h"
+
+// Make sure no header is included in this example
+// CHECK-FIXES-CUSTOM-NO-HEADER-NOT: #include
+
+template 
+struct reversable {
+  using iterator = T *;
+  using const_iterator = const T *;
+
+  iterator begin();
+  iterator end();
+  iterator rbegin();
+  iterator rend();
+
+  const_iterator begin() const;
+  const_iterator end() const;
+  const_iterator rbegin() const;
+  const_iterator rend() const;
+
+  const_iterator cbegin() const;
+  const_iterator cend() const;
+  const_iterator crbegin() const;
+  const_iterator crend() const;
+};
+
+template 
+void observe(const T &);
+template 
+void mutate(T &);
+
+void constContainer(const reversable ) {
+  // CHECK-MESSAGES-RANGES: :[[@LINE+3]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM: :[[@LINE+2]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM-NO-HEADER: :[[@LINE+1]]:3: warning: use range-based for loop instead
+  for (auto I = Numbers.rbegin(), E = Numbers.rend(); I != E; ++I) {
+observe(*I);
+//  CHECK-FIXES-RANGES: for (int Number : std::ranges::reverse_view(Numbers)) {
+// CHECK-FIXES-RANGES-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM: for (int Number : llvm::reverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM-NO-HEADER: for (int Number : globalReverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NO-HEADER-NEXT: observe(Number);
+  }
+  // CHECK-MESSAGES-RANGES: :[[@LINE+3]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM: :[[@LINE+2]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM-NO-HEADER: :[[@LINE+1]]:3: warning: use range-based for loop instead
+  for (auto I = Numbers.crbegin(), E = Numbers.crend(); I != E; ++I) {
+observe(*I);
+//  CHECK-FIXES-RANGES: for (int Number : std::ranges::reverse_view(Numbers)) {
+// CHECK-FIXES-RANGES-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM: for (int Number : llvm::reverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM-NO-HEADER: for (int Number : globalReverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NO-HEADER-NEXT: observe(Number);
+  }
+
+  // Ensure these bad loops aren't transformed.
+  for (auto I = Numbers.rbegin(), E = Numbers.end(); I != E; ++I) {
+observe(*I);
+  }
+  for (auto I = Numbers.begin(), E 

[PATCH] D81923: [clang-tidy] Add modernize-use-ranges check.

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 272033.
njames93 added a comment.

- Updated Docs and set HandleReverseRanges default to false


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81923

Files:
  clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
  clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
  clang-tools-extra/clang-tidy/modernize/UseRangesCheck.cpp
  clang-tools-extra/clang-tidy/modernize/UseRangesCheck.h
  clang-tools-extra/docs/ReleaseNotes.rst
  clang-tools-extra/docs/clang-tidy/checks/list.rst
  clang-tools-extra/docs/clang-tidy/checks/modernize-use-ranges.rst
  
clang-tools-extra/test/clang-tidy/checkers/Inputs/modernize-use-ranges/algorithm
  
clang-tools-extra/test/clang-tidy/checkers/Inputs/modernize-use-ranges/execution
  clang-tools-extra/test/clang-tidy/checkers/Inputs/modernize-use-ranges/vector
  clang-tools-extra/test/clang-tidy/checkers/modernize-use-ranges.cpp

Index: clang-tools-extra/test/clang-tidy/checkers/modernize-use-ranges.cpp
===
--- /dev/null
+++ clang-tools-extra/test/clang-tidy/checkers/modernize-use-ranges.cpp
@@ -0,0 +1,135 @@
+// RUN: %check_clang_tidy -std=c++20 %s modernize-use-ranges %t -- --config="{CheckOptions: [ \
+// RUN: {key: modernize-use-ranges.HandleReverseRanges, value: true}]}" \
+// RUN: -- -isystem %S/Inputs/modernize-use-ranges
+
+// Ensure no warnings are generated when not in c++20 mode
+// RUN: clang-tidy %s -checks=-*,modernize-use-ranges --warnings-as-errors=modernize-use-ranges -- -nostdinc++ -std=c++17 -isystem %S/Inputs/modernize-use-ranges
+
+#include 
+#include 
+#include 
+// CHECK-FIXES: #include 
+
+template 
+class smart_pointer {
+public:
+  T *();
+  T *operator->();
+};
+
+void goodBeginEndCalls(const std::vector ) {
+  std::find(Vec.begin(), Vec.end(), 1);
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace find with std::ranges::find
+  std::find(Vec.cbegin(), Vec.cend(), 1);
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace find with std::ranges::find
+  std::find(std::begin(Vec), std::end(Vec), 1);
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace find with std::ranges::find
+  std::find(std::cbegin(Vec), std::cend(Vec), 1);
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace find with std::ranges::find
+  std::find(std::execution::parallel_policy(), Vec.begin(), Vec.end(), 1);
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace find with std::ranges::find
+
+  // CHECK-FIXES:  std::ranges::find(Vec, 1);
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::find(Vec, 1);
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::find(Vec, 1);
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::find(Vec, 1);
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::find(std::execution::parallel_policy(), Vec, 1);
+  // CHECK-FIXES-NEXT: //
+}
+
+void badBeginEndCalls(const std::vector ,
+  const std::vector ) {
+  // end, begin.
+  std::find(Vec.end(), Vec.begin(), 1);
+  std::find(Vec.cend(), Vec.cbegin(), 1);
+  std::find(std::end(Vec), std::begin(Vec), 1);
+  std::find(std::cend(Vec), std::cbegin(Vec), 1);
+
+  // begin, begin.
+  std::find(Vec.begin(), Vec.begin(), 1);
+  // end, end.
+  std::find(Vec.end(), Vec.end(), 1);
+
+  // Different containers, definitely bad, but not what this check is for.
+  std::find(Vec.begin(), Vec2.end(), 1);
+}
+
+void maybeDualArg(const std::vector , std::vector ) {
+  std::equal(Vec1.begin(), Vec1.end(), Vec2.begin());
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace equal with std::ranges::equal
+  std::equal(Vec1.begin(), Vec1.end(), Vec2.begin(), Vec2.end());
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace equal with std::ranges::equal
+  std::equal(std::execution::sequenced_policy(), Vec1.begin(), Vec1.end(), Vec2.begin());
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace equal with std::ranges::equal
+  std::equal(std::execution::unsequenced_policy(), Vec1.begin(), Vec1.end(), Vec2.begin(), Vec2.end());
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace equal with std::ranges::equal
+
+  // CHECK-FIXES:  std::ranges::equal(Vec1, Vec2.begin());
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::equal(Vec1, Vec2);
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::equal(std::execution::sequenced_policy(), Vec1, Vec2.begin());
+  // CHECK-FIXES-NEXT: //
+  // CHECK-FIXES-NEXT: std::ranges::equal(std::execution::unsequenced_policy(), Vec1, Vec2);
+  // CHECK-FIXES-NEXT: //
+}
+
+void dualArg(const std::vector , const std::vector ) {
+  std::includes(Vec1.begin(), Vec1.end(), Vec2.begin(), Vec2.end());
+  // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: replace includes with std::ranges::includes
+  std::includes(std::execution::parallel_unsequenced_policy(), Vec1.begin(), Vec1.end(), Vec2.begin(), 

[PATCH] D82136: [AIX] Default AIX to using -fno-use-cxa-atexit

2020-06-19 Thread Xiangling Liao via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Xiangling_L marked 2 inline comments as done.
Closed by commit rG3f2e61c1fe42: [AIX] Default AIX to using -fno-use-cxa-atexit 
(authored by Xiangling_L).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Changed prior to commit:
  https://reviews.llvm.org/D82136?vs=271885=272036#toc

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82136

Files:
  clang/lib/CodeGen/ItaniumCXXABI.cpp
  clang/lib/Driver/ToolChains/Clang.cpp
  clang/test/CodeGenCXX/aix-static-init.cpp
  clang/test/Driver/cxa-atexit.cpp


Index: clang/test/Driver/cxa-atexit.cpp
===
--- clang/test/Driver/cxa-atexit.cpp
+++ clang/test/Driver/cxa-atexit.cpp
@@ -17,6 +17,8 @@
 // RUN: %clang -### -target mips-unknown-none-gnu -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-MIPS
 // RUN: %clang -### -target mips-mti-none-gnu -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-MIPS
 // RUN: %clang -### -target sparc-sun-solaris -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-SOLARIS
+// RUN: %clang -### -target powerpc-ibm-aix-xcoff -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-AIX
+// RUN: %clang -### -target powerpc64-ibm-aix-xcoff -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-AIX
 
 // CHECK-WINDOWS: "-fno-use-cxa-atexit"
 // CHECK-SOLARIS-NOT: "-fno-use-cxa-atexit"
@@ -24,6 +26,7 @@
 // CHECK-XCORE: "-fno-use-cxa-atexit"
 // CHECK-MTI: "-fno-use-cxa-atexit"
 // CHECK-MIPS-NOT: "-fno-use-cxa-atexit"
+// CHECK-AIX: "-fno-use-cxa-atexit"
 
 // RUN: %clang -target x86_64-apple-darwin -fregister-global-dtors-with-atexit 
-fno-register-global-dtors-with-atexit -c -### %s 2>&1 | \
 // RUN: FileCheck --check-prefix=WITHOUTATEXIT %s
Index: clang/test/CodeGenCXX/aix-static-init.cpp
===
--- clang/test/CodeGenCXX/aix-static-init.cpp
+++ clang/test/CodeGenCXX/aix-static-init.cpp
@@ -1,9 +1,9 @@
 // RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -S -emit-llvm -x c++ \
-// RUN: -fno-use-cxa-atexit -std=c++2a < %s | \
+// RUN: -std=c++2a < %s | \
 // RUN:   FileCheck --check-prefixes=CHECK,CHECK32 %s
 
 // RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -S -emit-llvm -x c++ \
-// RUN: -fno-use-cxa-atexit -std=c++2a < %s | \
+// RUN: -std=c++2a < %s | \
 // RUN:   FileCheck --check-prefixes=CHECK,CHECK64 %s
 
 namespace test1 {
Index: clang/lib/Driver/ToolChains/Clang.cpp
===
--- clang/lib/Driver/ToolChains/Clang.cpp
+++ clang/lib/Driver/ToolChains/Clang.cpp
@@ -5498,7 +5498,7 @@
   // -fuse-cxa-atexit is default.
   if (!Args.hasFlag(
   options::OPT_fuse_cxa_atexit, options::OPT_fno_use_cxa_atexit,
-  !RawTriple.isOSWindows() &&
+  !RawTriple.isOSAIX() && !RawTriple.isOSWindows() &&
   TC.getArch() != llvm::Triple::xcore &&
   ((RawTriple.getVendor() != llvm::Triple::MipsTechnologies) ||
RawTriple.hasEnvironment())) ||
Index: clang/lib/CodeGen/ItaniumCXXABI.cpp
===
--- clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -4528,8 +4528,6 @@
   // Create __dtor function for the var decl.
   llvm::Function *dtorStub = CGF.createAtExitStub(D, dtor, addr);
 
-  if (CGM.getCodeGenOpts().CXAAtExit)
-llvm::report_fatal_error("using __cxa_atexit unsupported on AIX");
   // Register above __dtor with atexit().
   CGF.registerGlobalDtorWithAtExit(dtorStub);
 


Index: clang/test/Driver/cxa-atexit.cpp
===
--- clang/test/Driver/cxa-atexit.cpp
+++ clang/test/Driver/cxa-atexit.cpp
@@ -17,6 +17,8 @@
 // RUN: %clang -### -target mips-unknown-none-gnu -c %s -o /dev/null 2>&1 | FileCheck %s -check-prefix CHECK-MIPS
 // RUN: %clang -### -target mips-mti-none-gnu -c %s -o /dev/null 2>&1 | FileCheck %s -check-prefix CHECK-MIPS
 // RUN: %clang -### -target sparc-sun-solaris -c %s -o /dev/null 2>&1 | FileCheck %s -check-prefix CHECK-SOLARIS
+// RUN: %clang -### -target powerpc-ibm-aix-xcoff -c %s -o /dev/null 2>&1 | FileCheck %s -check-prefix CHECK-AIX
+// RUN: %clang -### -target powerpc64-ibm-aix-xcoff -c %s -o /dev/null 2>&1 | FileCheck %s -check-prefix CHECK-AIX
 
 // CHECK-WINDOWS: "-fno-use-cxa-atexit"
 // CHECK-SOLARIS-NOT: "-fno-use-cxa-atexit"
@@ -24,6 +26,7 @@
 // CHECK-XCORE: "-fno-use-cxa-atexit"
 // CHECK-MTI: "-fno-use-cxa-atexit"
 // CHECK-MIPS-NOT: "-fno-use-cxa-atexit"
+// CHECK-AIX: "-fno-use-cxa-atexit"
 
 // RUN: %clang -target x86_64-apple-darwin -fregister-global-dtors-with-atexit -fno-register-global-dtors-with-atexit -c -### %s 2>&1 | \
 // RUN: FileCheck --check-prefix=WITHOUTATEXIT %s
Index: 

[PATCH] D81949: [clang-tidy] Extend InheritParentConfig to CommandLineConfig

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4836188ad9b3: [clang-tidy] Extend InheritParentConfig to 
CommandLineConfig (authored by njames93).

Changed prior to commit:
  https://reviews.llvm.org/D81949?vs=271134=272004#toc

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81949

Files:
  clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
  clang-tools-extra/clang-tidy/ClangTidyOptions.h
  clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
  clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp

Index: clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp
===
--- clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp
+++ clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp
@@ -18,7 +18,7 @@
 // RUN: clang-tidy -dump-config %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-CHILD4
 // CHECK-CHILD4: Checks: {{.*}}modernize-loop-convert,modernize-use-using,llvm-qualified-auto
 // CHECK-CHILD4: - key: llvm-qualified-auto.AddConstToQualified
-// CHECK-CHILD4-NEXT: value: '1
+// CHECK-CHILD4-NEXT: value: '1'
 // CHECK-CHILD4: - key: modernize-loop-convert.MaxCopySize
 // CHECK-CHILD4-NEXT: value: '20'
 // CHECK-CHILD4: - key: modernize-loop-convert.MinConfidence
@@ -30,3 +30,23 @@
 // CHECK-EXPLAIN: 'llvm-qualified-auto' is enabled in the {{.*}}{{[/\\]}}Inputs{{[/\\]}}config-files{{[/\\]}}4{{[/\\]}}44{{[/\\]}}.clang-tidy.
 // CHECK-EXPLAIN: 'modernize-loop-convert' is enabled in the {{.*}}{{[/\\]}}Inputs{{[/\\]}}config-files{{[/\\]}}4{{[/\\]}}.clang-tidy.
 // CHECK-EXPLAIN: 'modernize-use-using' is enabled in the {{.*}}{{[/\\]}}Inputs{{[/\\]}}config-files{{[/\\]}}4{{[/\\]}}.clang-tidy.
+
+// RUN: clang-tidy -dump-config \
+// RUN: --config='{InheritParentConfig: true, \
+// RUN: Checks: -llvm-qualified-auto, \
+// RUN: CheckOptions: [{key: modernize-loop-convert.MaxCopySize, value: 21}]}' \
+// RUN: %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-CHILD5
+// CHECK-CHILD5: Checks: {{.*}}modernize-loop-convert,modernize-use-using,llvm-qualified-auto,-llvm-qualified-auto
+// CHECK-CHILD5: - key: modernize-loop-convert.MaxCopySize
+// CHECK-CHILD5-NEXT: value: '21'
+// CHECK-CHILD5: - key: modernize-loop-convert.MinConfidence
+// CHECK-CHILD5-NEXT: value: reasonable
+// CHECK-CHILD5: - key: modernize-use-using.IgnoreMacros
+// CHECK-CHILD5-NEXT: value: '0'
+
+// RUN: clang-tidy -dump-config \
+// RUN: --config='{InheritParentConfig: false, \
+// RUN: Checks: -llvm-qualified-auto}' \
+// RUN: %S/Inputs/config-files/4/44/- -- | FileCheck %s -check-prefix=CHECK-CHILD6
+// CHECK-CHILD6: Checks: {{.*}}-llvm-qualified-auto
+// CHECK-CHILD6-NOT: - key: modernize-use-using.IgnoreMacros
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
@@ -310,7 +310,7 @@
   return std::make_unique(
   GlobalOptions,
   ClangTidyOptions::getDefaults().mergeWith(DefaultOptions, 0),
-  *ParsedConfig, OverrideOptions);
+  *ParsedConfig, OverrideOptions, std::move(FS));
 } else {
   llvm::errs() << "Error: invalid configuration specified.\n"
<< ParsedConfig.getError().message() << "\n";
Index: clang-tools-extra/clang-tidy/ClangTidyOptions.h
===
--- clang-tools-extra/clang-tidy/ClangTidyOptions.h
+++ clang-tools-extra/clang-tidy/ClangTidyOptions.h
@@ -121,10 +121,13 @@
   /// Add extra compilation arguments to the start of the list.
   llvm::Optional ExtraArgsBefore;
 
-  /// Only used in the FileOptionsProvider. If true, FileOptionsProvider will
-  /// take a configuration file in the parent directory (if any exists) and
-  /// apply this config file on top of the parent one. If false or missing,
-  /// only this configuration file will be used.
+  /// Only used in the FileOptionsProvider and ConfigOptionsProvider. If true
+  /// and using a FileOptionsProvider, it will take a configuration file in the
+  /// parent directory (if any exists) and apply this config file on top of the
+  /// parent one. IF true and using a ConfigOptionsProvider, it will apply this
+  /// config on top of any configuation file it finds in the directory using the
+  /// same logic as FileOptionsProvider. If false or missing, only this
+  /// configuration file will be used.
   llvm::Optional InheritParentConfig;
 
   /// Use colors in diagnostics. If missing, it will be auto detected.
@@ -180,30 +183,7 @@
   ClangTidyOptions DefaultOptions;
 };
 
-/// Implementation of ClangTidyOptions interface, which is used for
-/// '-config' command-line option.
-class ConfigOptionsProvider : 

[clang] 22337bf - [AIX][Frontend] Static init implementation for AIX considering no priority

2020-06-19 Thread Xiangling Liao via cfe-commits

Author: Xiangling Liao
Date: 2020-06-19T08:27:07-04:00
New Revision: 22337bfe7d87f9bf2b072ec7fe9165f7b9e2d793

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

LOG: [AIX][Frontend] Static init implementation for AIX considering no priority

1. Provides no piroirity supoort && disables three priority related
   attributes: init_priority, ctor attr, dtor attr;
2. '-qunique' in XL compiler equivalent behavior of emitting sinit
and sterm functions name using getUniqueModuleId() util function
in LLVM (currently no support for InternalLinkage and WeakODRLinkage
symbols);
3. Add testcases to emit IR sample with __sinit8000, __dtor, and
__sterm8000;
4. Temporarily side-steps the need to implement the functionality of
   llvm.global_ctors and llvm.global_dtors arrays. The uses of that
   functionality in this patch (with respect to the name of the functions
   involved) are not representative of how the functionality will be used
   once implemented.

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

Added: 
clang/test/CodeGen/aix-constructor-attribute.cpp
clang/test/CodeGen/aix-destructor-attribute.cpp
clang/test/CodeGen/aix-init-priority-attribute.cpp
clang/test/CodeGenCXX/aix-static-init.cpp

Modified: 
clang/include/clang/AST/Mangle.h
clang/lib/AST/ItaniumMangle.cpp
clang/lib/CodeGen/CGCXXABI.h
clang/lib/CodeGen/CGDeclCXX.cpp
clang/lib/CodeGen/CGOpenMPRuntime.cpp
clang/lib/CodeGen/CodeGenFunction.h
clang/lib/CodeGen/CodeGenModule.cpp
clang/lib/CodeGen/CodeGenModule.h
clang/lib/CodeGen/ItaniumCXXABI.cpp
clang/lib/CodeGen/MicrosoftCXXABI.cpp
clang/lib/Sema/SemaDeclAttr.cpp

Removed: 
clang/test/CodeGen/static-init.cpp



diff  --git a/clang/include/clang/AST/Mangle.h 
b/clang/include/clang/AST/Mangle.h
index b39a81462efd..011d1faab8ea 100644
--- a/clang/include/clang/AST/Mangle.h
+++ b/clang/include/clang/AST/Mangle.h
@@ -175,6 +175,8 @@ class ItaniumMangleContext : public MangleContext {
 
   virtual void mangleLambdaSig(const CXXRecordDecl *Lambda, raw_ostream &) = 0;
 
+  virtual void mangleDynamicStermFinalizer(const VarDecl *D, raw_ostream &) = 
0;
+
   bool isUniqueNameMangler() { return IsUniqueNameMangler; }
 
   static bool classof(const MangleContext *C) {

diff  --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index ad4ecad151f5..ddfbe9f86499 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -160,6 +160,7 @@ class ItaniumMangleContextImpl : public 
ItaniumMangleContext {
   void mangleDynamicInitializer(const VarDecl *D, raw_ostream ) override;
   void mangleDynamicAtExitDestructor(const VarDecl *D,
  raw_ostream ) override;
+  void mangleDynamicStermFinalizer(const VarDecl *D, raw_ostream ) 
override;
   void mangleSEHFilterExpression(const NamedDecl *EnclosingDecl,
  raw_ostream ) override;
   void mangleSEHFinallyBlock(const NamedDecl *EnclosingDecl,
@@ -5230,6 +5231,18 @@ void 
ItaniumMangleContextImpl::mangleDynamicAtExitDestructor(const VarDecl *D,
 Mangler.getStream() << D->getName();
 }
 
+void ItaniumMangleContextImpl::mangleDynamicStermFinalizer(const VarDecl *D,
+   raw_ostream ) {
+  // Clang generates these internal-linkage functions as part of its
+  // implementation of the XL ABI.
+  CXXNameMangler Mangler(*this, Out);
+  Mangler.getStream() << "__finalize_";
+  if (shouldMangleDeclName(D))
+Mangler.mangle(D);
+  else
+Mangler.getStream() << D->getName();
+}
+
 void ItaniumMangleContextImpl::mangleSEHFilterExpression(
 const NamedDecl *EnclosingDecl, raw_ostream ) {
   CXXNameMangler Mangler(*this, Out);

diff  --git a/clang/lib/CodeGen/CGCXXABI.h b/clang/lib/CodeGen/CGCXXABI.h
index f5f378510950..2b7f45fcab98 100644
--- a/clang/lib/CodeGen/CGCXXABI.h
+++ b/clang/lib/CodeGen/CGCXXABI.h
@@ -108,6 +108,8 @@ class CGCXXABI {
 
   virtual bool hasMostDerivedReturn(GlobalDecl GD) const { return false; }
 
+  virtual bool useSinitAndSterm() const { return false; }
+
   /// Returns true if the target allows calling a function through a pointer
   /// with a 
diff erent signature than the actual function (or equivalently,
   /// bitcasting a function or function pointer to a 
diff erent function type).

diff  --git a/clang/lib/CodeGen/CGDeclCXX.cpp b/clang/lib/CodeGen/CGDeclCXX.cpp
index b4a8d551a5ae..5a8500364295 100644
--- a/clang/lib/CodeGen/CGDeclCXX.cpp
+++ b/clang/lib/CodeGen/CGDeclCXX.cpp
@@ -21,6 +21,7 @@
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/IR/MDBuilder.h"
 #include "llvm/Support/Path.h"
+#include "llvm/Transforms/Utils/ModuleUtils.h"
 
 using namespace clang;
 using 

[PATCH] D82089: [clang-tidy] modernize-loop-convert reverse iteration support

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 updated this revision to Diff 272030.
njames93 added a comment.

- Set and store the IncludeStyle


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82089

Files:
  clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
  clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.h
  clang-tools-extra/clang-tidy/modernize/LoopConvertUtils.h
  clang-tools-extra/docs/ReleaseNotes.rst
  clang-tools-extra/docs/clang-tidy/checks/modernize-loop-convert.rst
  clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-reverse.cpp

Index: clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-reverse.cpp
===
--- /dev/null
+++ clang-tools-extra/test/clang-tidy/checkers/modernize-loop-convert-reverse.cpp
@@ -0,0 +1,120 @@
+// RUN: %check_clang_tidy -std=c++20 -check-suffix=RANGES %s modernize-loop-convert %t
+
+// RUN: %check_clang_tidy -check-suffix=CUSTOM %s modernize-loop-convert %t -- \
+// RUN:   -config="{CheckOptions: [ \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeFunction, value: 'llvm::reverse'}, \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeHeader, value: 'llvm/ADT/STLExtras.h'}]}"
+
+// Ensure the check doesn't transform reverse loops when not in c++20 mode or
+// when UseCxx20ReverseRanges has been disabled
+// RUN: clang-tidy %s -checks=-*,modernize-loop-convert -- -std=c++17 | count 0
+
+// RUN: clang-tidy %s -checks=-*,modernize-loop-convert -config="{CheckOptions: \
+// RUN: [{key: modernize-loop-convert.UseCxx20ReverseRanges, value: 'false'}] \
+// RUN: }" -- -std=c++20 | count 0
+
+// RUN: %check_clang_tidy -check-suffix=CUSTOM-NO-HEADER %s modernize-loop-convert %t -- \
+// RUN:   -config="{CheckOptions: [ \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeFunction, value: 'globalReverse'}]}"
+
+// Ensure we get a warning if we only supply one of the required reverse range arguments.
+// RUN: %check_clang_tidy -check-suffix=BAD-CUSTOM %s modernize-loop-convert %t -- \
+// RUN:   -config="{CheckOptions: [ \
+// RUN:   {key: modernize-loop-convert.MakeReverseRangeHeader, value: 'ranges/v3/views/reverse.hpp'}]}"
+
+// CHECK-MESSAGES-BAD-CUSTOM: warning: modernize-loop-convert: 'MakeReverseRangeHeader' is set but 'MakeReverseRangeFunction' is not, disabling reverse loop transformation
+
+// Make sure appropiate headers are included
+// CHECK-FIXES-RANGES: #include 
+// CHECK-FIXES-CUSTOM: #include "llvm/ADT/STLExtras.h"
+
+// Make sure no header is included in this example
+// CHECK-FIXES-CUSTOM-NO-HEADER-NOT: #include
+
+template 
+struct reversable {
+  using iterator = T *;
+  using const_iterator = const T *;
+
+  iterator begin();
+  iterator end();
+  iterator rbegin();
+  iterator rend();
+
+  const_iterator begin() const;
+  const_iterator end() const;
+  const_iterator rbegin() const;
+  const_iterator rend() const;
+
+  const_iterator cbegin() const;
+  const_iterator cend() const;
+  const_iterator crbegin() const;
+  const_iterator crend() const;
+};
+
+template 
+void observe(const T &);
+template 
+void mutate(T &);
+
+void constContainer(const reversable ) {
+  // CHECK-MESSAGES-RANGES: :[[@LINE+3]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM: :[[@LINE+2]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM-NO-HEADER: :[[@LINE+1]]:3: warning: use range-based for loop instead
+  for (auto I = Numbers.rbegin(), E = Numbers.rend(); I != E; ++I) {
+observe(*I);
+//  CHECK-FIXES-RANGES: for (int Number : std::ranges::reverse_view(Numbers)) {
+// CHECK-FIXES-RANGES-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM: for (int Number : llvm::reverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM-NO-HEADER: for (int Number : globalReverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NO-HEADER-NEXT: observe(Number);
+  }
+  // CHECK-MESSAGES-RANGES: :[[@LINE+3]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM: :[[@LINE+2]]:3: warning: use range-based for loop instead
+  // CHECK-MESSAGES-CUSTOM-NO-HEADER: :[[@LINE+1]]:3: warning: use range-based for loop instead
+  for (auto I = Numbers.crbegin(), E = Numbers.crend(); I != E; ++I) {
+observe(*I);
+//  CHECK-FIXES-RANGES: for (int Number : std::ranges::reverse_view(Numbers)) {
+// CHECK-FIXES-RANGES-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM: for (int Number : llvm::reverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NEXT: observe(Number);
+//  CHECK-FIXES-CUSTOM-NO-HEADER: for (int Number : globalReverse(Numbers)) {
+// CHECK-FIXES-CUSTOM-NO-HEADER-NEXT: observe(Number);
+  }
+
+  // Ensure these bad loops aren't transformed.
+  for (auto I = Numbers.rbegin(), E = Numbers.end(); I != E; ++I) {
+observe(*I);
+  }
+  for (auto I = Numbers.begin(), E = 

[PATCH] D82178: [AArch64][SVE] Guard svbfloat16_t with feature macro in ACLE

2020-06-19 Thread Cullen Rhodes via Phabricator via cfe-commits
c-rhodes created this revision.
c-rhodes added reviewers: sdesmalen, efriedma, stuij, fpetrogalli.
Herald added subscribers: cfe-commits, danielkiss, psnobl, rkruppe, 
kristof.beyls, tschuett.
Herald added a reviewer: rengolin.
Herald added a project: clang.
sdesmalen added inline comments.



Comment at: clang/utils/TableGen/SveEmitter.cpp:1091
+  OS << "#if defined(__ARM_FEATURE_SVE_BF16)\n";
+  OS << "typedef __SVBFloat16_t svbfloat16_t;\n";
+  OS << "#endif\n\n";

Can you also add an error if `__ARM_FEATURE_SVE_BF16` is defined, but 
`__ARM_FEATURE_BF16_SCALAR_ARITHMETIC` isn't?
something like:
```#ifndef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC
#error "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC must be defined when 
__ARM_FEATURE_SVE_BF16 is defined"
#endif
```


`svbfloat16_t` should only be defined if the `__ARM_FEATURE_SVE_BF16`
feature macro is enabled, similar to the scalar `bfloat16_t` type. Patch
also contains a fix for ld1ro intrinsic which should be guarded on
`__ARM_FEATURE_SVE_BF16` rather than `__ARM_FEATURE_BF16_SCALAR_ARITHMETIC`.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82178

Files:
  clang/include/clang/Basic/arm_sve.td
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
  clang/utils/TableGen/SveEmitter.cpp


Index: clang/utils/TableGen/SveEmitter.cpp
===
--- clang/utils/TableGen/SveEmitter.cpp
+++ clang/utils/TableGen/SveEmitter.cpp
@@ -1085,8 +1085,11 @@
   OS << "typedef __SVUint16_t svuint16_t;\n";
   OS << "typedef __SVUint32_t svuint32_t;\n";
   OS << "typedef __SVUint64_t svuint64_t;\n";
-  OS << "typedef __SVFloat16_t svfloat16_t;\n";
-  OS << "typedef __SVBFloat16_t svbfloat16_t;\n\n";
+  OS << "typedef __SVFloat16_t svfloat16_t;\n\n";
+
+  OS << "#if defined(__ARM_FEATURE_SVE_BF16)\n";
+  OS << "typedef __SVBFloat16_t svbfloat16_t;\n";
+  OS << "#endif\n\n";
 
   OS << "#ifdef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC\n";
   OS << "typedef __bf16 bfloat16_t;\n";
Index: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
===
--- clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
+++ clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE -triple 
aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 
-fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | 
FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE 
-DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 -D__ARM_FEATURE_SVE_BF16 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE -triple 
aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 
-fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | 
FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 -D__ARM_FEATURE_SVE_BF16 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE 
-DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
 
 #include 
 
Index: clang/include/clang/Basic/arm_sve.td
===
--- clang/include/clang/Basic/arm_sve.td
+++ clang/include/clang/Basic/arm_sve.td
@@ -484,8 +484,8 @@
 let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64)" in {
   def SVLD1RO : SInst<"svld1ro[_{2}]", "dPc", "csilUcUsUiUlhfd", MergeNone, 
"aarch64_sve_ld1ro">;
 }
-let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64) && 
defined(__ARM_FEATURE_BF16_SCALAR_ARITHMETIC)" in {
-  def SVLD1RO_BF : SInst<"svld1ro[_{2}]", "dPc", "b", MergeNone, 
"aarch64_sve_ld1ro">;
+let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64) && 
defined(__ARM_FEATURE_SVE_BF16)" in {
+  def SVLD1RO_BF16 : SInst<"svld1ro[_{2}]", "dPc", "b", MergeNone, 
"aarch64_sve_ld1ro">;
 }
 

 // Stores


Index: clang/utils/TableGen/SveEmitter.cpp
===
--- clang/utils/TableGen/SveEmitter.cpp
+++ clang/utils/TableGen/SveEmitter.cpp
@@ -1085,8 +1085,11 @@
   OS << "typedef __SVUint16_t svuint16_t;\n";
   OS << "typedef __SVUint32_t svuint32_t;\n";
   OS << "typedef __SVUint64_t svuint64_t;\n";
-  OS << "typedef __SVFloat16_t svfloat16_t;\n";
-  OS << "typedef __SVBFloat16_t svbfloat16_t;\n\n";
+  OS << "typedef __SVFloat16_t svfloat16_t;\n\n";
+
+  OS << "#if 

[clang-tools-extra] d2fcc58 - [clangd] Drop usage of PreambleStatCache in scanPreamble

2020-06-19 Thread Kadir Cetinkaya via cfe-commits

Author: Kadir Cetinkaya
Date: 2020-06-19T12:36:49+02:00
New Revision: d2fcc586223c522098df7a627e87a6a6c8381fbe

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

LOG: [clangd] Drop usage of PreambleStatCache in scanPreamble

Summary: It was used inside buildCompilerInvocation to speed up stats. But
preambleStatCache doesn't contain stat information performed while
building compiler invocation. So it was an unnecessary optimization.

Furthermore, buildCompilerInvocation in scanPreamble doesn't need to
find gcc installation, include paths and such, as it is only trying to
lex directives. Hence we are passing an empty FS to get rid of any
redundant IO.

Reviewers: sammccall

Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, usaxena95, 
cfe-commits

Tags: #clang

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

Added: 


Modified: 
clang-tools-extra/clangd/Preamble.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/Preamble.cpp 
b/clang-tools-extra/clangd/Preamble.cpp
index 8652f350a07e..ca0a76db78f4 100644
--- a/clang-tools-extra/clangd/Preamble.cpp
+++ b/clang-tools-extra/clangd/Preamble.cpp
@@ -224,35 +224,22 @@ struct ScannedPreamble {
 
 /// Scans the preprocessor directives in the preamble section of the file by
 /// running preprocessor over \p Contents. Returned includes do not contain
-/// resolved paths. \p VFS and \p Cmd is used to build the compiler invocation,
-/// which might stat/read files.
+/// resolved paths. \p Cmd is used to build the compiler invocation, which 
might
+/// stat/read files.
 llvm::Expected
-scanPreamble(llvm::StringRef Contents,
- llvm::IntrusiveRefCntPtr VFS,
- const tooling::CompileCommand ) {
-  // FIXME: Change PreambleStatCache to operate on FileSystemProvider rather
-  // than vfs::FileSystem, that way we can just use ParseInputs without this
-  // hack.
-  auto GetFSProvider = [](llvm::IntrusiveRefCntPtr FS) {
-class VFSProvider : public ThreadsafeFS {
-public:
-  VFSProvider(llvm::IntrusiveRefCntPtr FS)
-  : VFS(std::move(FS)) {}
-  llvm::IntrusiveRefCntPtr
-  view(llvm::NoneType) const override {
-return VFS;
-  }
-
-private:
-  const llvm::IntrusiveRefCntPtr VFS;
-};
-return std::make_unique(std::move(FS));
+scanPreamble(llvm::StringRef Contents, const tooling::CompileCommand ) {
+  class EmptyFS : public ThreadsafeFS {
+  public:
+llvm::IntrusiveRefCntPtr
+view(llvm::NoneType) const override {
+  return new llvm::vfs::InMemoryFileSystem;
+}
   };
-  auto FSProvider = GetFSProvider(std::move(VFS));
+  EmptyFS FS;
   // Build and run Preprocessor over the preamble.
   ParseInputs PI;
   PI.Contents = Contents.str();
-  PI.TFS = FSProvider.get();
+  PI.TFS = 
   PI.CompileCommand = Cmd;
   IgnoringDiagConsumer IgnoreDiags;
   auto CI = buildCompilerInvocation(PI, IgnoreDiags);
@@ -272,7 +259,7 @@ scanPreamble(llvm::StringRef Contents,
   std::move(CI), nullptr, std::move(PreambleContents),
   // Provide an empty FS to prevent preprocessor from performing IO. This
   // also implies missing resolved paths for includes.
-  new llvm::vfs::InMemoryFileSystem, IgnoreDiags);
+  FS.view(llvm::None), IgnoreDiags);
   if (Clang->getFrontendOpts().Inputs.empty())
 return llvm::createStringError(llvm::inconvertibleErrorCode(),
"compiler instance had no inputs");
@@ -422,8 +409,6 @@ PreamblePatch PreamblePatch::create(llvm::StringRef 
FileName,
   trace::Span Tracer("CreatePreamblePatch");
   SPAN_ATTACH(Tracer, "File", FileName);
   assert(llvm::sys::path::is_absolute(FileName) && "relative FileName!");
-  auto VFS = Baseline.StatCache->getConsumingFS(
-  Modified.TFS->view(/*CWD=*/llvm::None));
   // First scan preprocessor directives in Baseline and Modified. These will be
   // used to figure out newly added directives in Modified. Scanning can fail,
   // the code just bails out and creates an empty patch in such cases, as:
@@ -434,14 +419,13 @@ PreamblePatch PreamblePatch::create(llvm::StringRef 
FileName,
   //   there's nothing to do but generate an empty patch.
   auto BaselineScan = scanPreamble(
   // Contents needs to be null-terminated.
-  Baseline.Preamble.getContents().str(), VFS, Modified.CompileCommand);
+  Baseline.Preamble.getContents().str(), Modified.CompileCommand);
   if (!BaselineScan) {
 elog("Failed to scan baseline of {0}: {1}", FileName,
  BaselineScan.takeError());
 return PreamblePatch::unmodified(Baseline);
   }
-  auto ModifiedScan =
-  scanPreamble(Modified.Contents, std::move(VFS), Modified.CompileCommand);
+  auto ModifiedScan = scanPreamble(Modified.Contents, Modified.CompileCommand);
   if 

[PATCH] D82024: [clangd] Rename FSProvider to TFS in case of ThreadsafeFS

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet updated this revision to Diff 271988.
kadircet added a comment.

- Rebase


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82024

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp
  clang-tools-extra/clangd/ClangdLSPServer.h
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/ClangdServer.h
  clang-tools-extra/clangd/CodeComplete.cpp
  clang-tools-extra/clangd/Compiler.cpp
  clang-tools-extra/clangd/Compiler.h
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/Preamble.cpp
  clang-tools-extra/clangd/SourceCode.cpp
  clang-tools-extra/clangd/SourceCode.h
  clang-tools-extra/clangd/index/Background.cpp
  clang-tools-extra/clangd/index/Background.h
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/ClangdTests.cpp
  clang-tools-extra/clangd/unittests/FileIndexTests.cpp
  clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
  clang-tools-extra/clangd/unittests/HeadersTests.cpp
  clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
  clang-tools-extra/clangd/unittests/PreambleTests.cpp
  clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
  clang-tools-extra/clangd/unittests/TestTU.cpp
  clang-tools-extra/clangd/unittests/TestTU.h

Index: clang-tools-extra/clangd/unittests/TestTU.h
===
--- clang-tools-extra/clangd/unittests/TestTU.h
+++ clang-tools-extra/clangd/unittests/TestTU.h
@@ -70,7 +70,7 @@
   // Suppress this behavior by adding an 'error-ok' comment to the code.
   ParsedAST build() const;
   std::shared_ptr preamble() const;
-  ParseInputs inputs(MockFS ) const;
+  ParseInputs inputs(MockFS ) const;
   SymbolSlab headerSymbols() const;
   RefSlab headerRefs() const;
   std::unique_ptr index() const;
Index: clang-tools-extra/clangd/unittests/TestTU.cpp
===
--- clang-tools-extra/clangd/unittests/TestTU.cpp
+++ clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -20,7 +20,7 @@
 namespace clang {
 namespace clangd {
 
-ParseInputs TestTU::inputs(MockFS ) const {
+ParseInputs TestTU::inputs(MockFS ) const {
   std::string FullFilename = testPath(Filename),
   FullHeaderName = testPath(HeaderFilename),
   ImportThunk = testPath("import_thunk.h");
@@ -29,10 +29,10 @@
   // guard without messing up offsets). In this case, use an intermediate file.
   std::string ThunkContents = "#import \"" + FullHeaderName + "\"\n";
 
-  FSProvider.Files = AdditionalFiles;
-  FSProvider.Files[FullFilename] = Code;
-  FSProvider.Files[FullHeaderName] = HeaderCode;
-  FSProvider.Files[ImportThunk] = ThunkContents;
+  FS.Files = AdditionalFiles;
+  FS.Files[FullFilename] = Code;
+  FS.Files[FullHeaderName] = HeaderCode;
+  FS.Files[ImportThunk] = ThunkContents;
 
   ParseInputs Inputs;
   auto  = Inputs.CompileCommand.CommandLine;
@@ -54,7 +54,7 @@
   Inputs.CompileCommand.Filename = FullFilename;
   Inputs.CompileCommand.Directory = testRoot();
   Inputs.Contents = Code;
-  Inputs.FSProvider = 
+  Inputs.TFS = 
   Inputs.Opts = ParseOptions();
   Inputs.Opts.BuildRecoveryAST = true;
   Inputs.Opts.PreserveRecoveryASTType = true;
@@ -67,8 +67,8 @@
 }
 
 std::shared_ptr TestTU::preamble() const {
-  MockFS FSProvider;
-  auto Inputs = inputs(FSProvider);
+  MockFS FS;
+  auto Inputs = inputs(FS);
   IgnoreDiagnostics Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
   assert(CI && "Failed to build compilation invocation.");
@@ -78,8 +78,8 @@
 }
 
 ParsedAST TestTU::build() const {
-  MockFS FSProvider;
-  auto Inputs = inputs(FSProvider);
+  MockFS FS;
+  auto Inputs = inputs(FS);
   StoreDiags Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
   assert(CI && "Failed to build compilation invocation.");
Index: clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
===
--- clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
+++ clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
@@ -74,7 +74,7 @@
   ParseInputs getInputs(PathRef File, std::string Contents) {
 ParseInputs Inputs;
 Inputs.CompileCommand = *CDB.getCompileCommand(File);
-Inputs.FSProvider = 
+Inputs.TFS = 
 Inputs.Contents = std::move(Contents);
 Inputs.Opts = ParseOptions();
 return Inputs;
@@ -150,7 +150,7 @@
std::move(CB));
   }
 
-  MockFS FSProvider;
+  MockFS FS;
   MockCompilationDatabase CDB;
 };
 
@@ -161,10 +161,10 @@
   TUScheduler S(CDB, optsForTest());
 
   auto Added = testPath("added.cpp");
-  FSProvider.Files[Added] = "x";
+  FS.Files[Added] = "x";
 
   auto Missing = testPath("missing.cpp");
-  FSProvider.Files[Missing] = "";
+  FS.Files[Missing] = "";
 
   S.update(Added, getInputs(Added, "x"), WantDiagnostics::No);
 
@@ -425,7 +425,7 @@
 for (int I = 0; I < FilesCount; ++I) {
  

[PATCH] D81998: [clangd][NFC] Rename FSProvider and getFileSystem

2020-06-19 Thread Sam McCall via Phabricator via cfe-commits
sammccall accepted this revision.
sammccall added a comment.

Thanks for this, and sympathies for inevitable merge conflicts.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81998



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


[PATCH] D81719: [clangd] Drop usage of PreambleStatCache in scanPreamble

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet updated this revision to Diff 271993.
kadircet added a comment.

- Rebase


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81719

Files:
  clang-tools-extra/clangd/Preamble.cpp


Index: clang-tools-extra/clangd/Preamble.cpp
===
--- clang-tools-extra/clangd/Preamble.cpp
+++ clang-tools-extra/clangd/Preamble.cpp
@@ -224,35 +224,22 @@
 
 /// Scans the preprocessor directives in the preamble section of the file by
 /// running preprocessor over \p Contents. Returned includes do not contain
-/// resolved paths. \p VFS and \p Cmd is used to build the compiler invocation,
-/// which might stat/read files.
+/// resolved paths. \p Cmd is used to build the compiler invocation, which 
might
+/// stat/read files.
 llvm::Expected
-scanPreamble(llvm::StringRef Contents,
- llvm::IntrusiveRefCntPtr VFS,
- const tooling::CompileCommand ) {
-  // FIXME: Change PreambleStatCache to operate on FileSystemProvider rather
-  // than vfs::FileSystem, that way we can just use ParseInputs without this
-  // hack.
-  auto GetFSProvider = [](llvm::IntrusiveRefCntPtr FS) {
-class VFSProvider : public ThreadsafeFS {
-public:
-  VFSProvider(llvm::IntrusiveRefCntPtr FS)
-  : VFS(std::move(FS)) {}
-  llvm::IntrusiveRefCntPtr
-  view(llvm::NoneType) const override {
-return VFS;
-  }
-
-private:
-  const llvm::IntrusiveRefCntPtr VFS;
-};
-return std::make_unique(std::move(FS));
+scanPreamble(llvm::StringRef Contents, const tooling::CompileCommand ) {
+  class EmptyFS : public ThreadsafeFS {
+  public:
+llvm::IntrusiveRefCntPtr
+view(llvm::NoneType) const override {
+  return new llvm::vfs::InMemoryFileSystem;
+}
   };
-  auto FSProvider = GetFSProvider(std::move(VFS));
+  EmptyFS FS;
   // Build and run Preprocessor over the preamble.
   ParseInputs PI;
   PI.Contents = Contents.str();
-  PI.TFS = FSProvider.get();
+  PI.TFS = 
   PI.CompileCommand = Cmd;
   IgnoringDiagConsumer IgnoreDiags;
   auto CI = buildCompilerInvocation(PI, IgnoreDiags);
@@ -272,7 +259,7 @@
   std::move(CI), nullptr, std::move(PreambleContents),
   // Provide an empty FS to prevent preprocessor from performing IO. This
   // also implies missing resolved paths for includes.
-  new llvm::vfs::InMemoryFileSystem, IgnoreDiags);
+  FS.view(llvm::None), IgnoreDiags);
   if (Clang->getFrontendOpts().Inputs.empty())
 return llvm::createStringError(llvm::inconvertibleErrorCode(),
"compiler instance had no inputs");
@@ -422,8 +409,6 @@
   trace::Span Tracer("CreatePreamblePatch");
   SPAN_ATTACH(Tracer, "File", FileName);
   assert(llvm::sys::path::is_absolute(FileName) && "relative FileName!");
-  auto VFS = Baseline.StatCache->getConsumingFS(
-  Modified.TFS->view(/*CWD=*/llvm::None));
   // First scan preprocessor directives in Baseline and Modified. These will be
   // used to figure out newly added directives in Modified. Scanning can fail,
   // the code just bails out and creates an empty patch in such cases, as:
@@ -434,14 +419,13 @@
   //   there's nothing to do but generate an empty patch.
   auto BaselineScan = scanPreamble(
   // Contents needs to be null-terminated.
-  Baseline.Preamble.getContents().str(), VFS, Modified.CompileCommand);
+  Baseline.Preamble.getContents().str(), Modified.CompileCommand);
   if (!BaselineScan) {
 elog("Failed to scan baseline of {0}: {1}", FileName,
  BaselineScan.takeError());
 return PreamblePatch::unmodified(Baseline);
   }
-  auto ModifiedScan =
-  scanPreamble(Modified.Contents, std::move(VFS), Modified.CompileCommand);
+  auto ModifiedScan = scanPreamble(Modified.Contents, Modified.CompileCommand);
   if (!ModifiedScan) {
 elog("Failed to scan modified contents of {0}: {1}", FileName,
  ModifiedScan.takeError());


Index: clang-tools-extra/clangd/Preamble.cpp
===
--- clang-tools-extra/clangd/Preamble.cpp
+++ clang-tools-extra/clangd/Preamble.cpp
@@ -224,35 +224,22 @@
 
 /// Scans the preprocessor directives in the preamble section of the file by
 /// running preprocessor over \p Contents. Returned includes do not contain
-/// resolved paths. \p VFS and \p Cmd is used to build the compiler invocation,
-/// which might stat/read files.
+/// resolved paths. \p Cmd is used to build the compiler invocation, which might
+/// stat/read files.
 llvm::Expected
-scanPreamble(llvm::StringRef Contents,
- llvm::IntrusiveRefCntPtr VFS,
- const tooling::CompileCommand ) {
-  // FIXME: Change PreambleStatCache to operate on FileSystemProvider rather
-  // than vfs::FileSystem, that way we can just use ParseInputs without this
-  // hack.
-  auto GetFSProvider = [](llvm::IntrusiveRefCntPtr FS) {
-  

[clang-tools-extra] a3b7934 - [clangd] Don't mangle workdir-relevant driver path in compile commands

2020-06-19 Thread Sam McCall via cfe-commits

Author: Sam McCall
Date: 2020-06-19T13:46:55+02:00
New Revision: a3b793401255cc91cbfaa5360e0940678bf86d1d

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

LOG: [clangd] Don't mangle workdir-relevant driver path in compile commands

Summary:
We can't resolve this (if it's a symlink) without further refactoring, but the
current behaviour is just incorrect.

Reviewers: kadircet

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

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

Added: 


Modified: 
clang-tools-extra/clangd/CompileCommands.cpp
clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/CompileCommands.cpp 
b/clang-tools-extra/clangd/CompileCommands.cpp
index a73312a521e8..a2d704f57bda 100644
--- a/clang-tools-extra/clangd/CompileCommands.cpp
+++ b/clang-tools-extra/clangd/CompileCommands.cpp
@@ -135,6 +135,12 @@ static std::string resolveDriver(llvm::StringRef Driver, 
bool FollowSymlink,
   // First, eliminate relative paths.
   std::string Storage;
   if (!llvm::sys::path::is_absolute(Driver)) {
+// If it's working-dir relative like bin/clang, we can't resolve it.
+// FIXME: we could if we had the working directory here.
+// Let's hope it's not a symlink.
+if (llvm::any_of(Driver,
+ [](char C) { return llvm::sys::path::is_separator(C); }))
+  return Driver.str();
 // If the driver is a generic like "g++" with no path, add clang dir.
 if (ClangPath &&
 (Driver == "clang" || Driver == "clang++" || Driver == "gcc" ||

diff  --git a/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp 
b/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
index 839c41d93ccb..d064c941a590 100644
--- a/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
@@ -115,7 +115,7 @@ TEST(CommandMangler, ClangPath) {
 
   Cmd = {"foo/unknown-binary", "foo.cc"};
   Mangler.adjust(Cmd);
-  EXPECT_EQ(testPath("fake/unknown-binary"), Cmd.front());
+  EXPECT_EQ("foo/unknown-binary", Cmd.front());
 }
 
 // Only run the PATH/symlink resolving test on unix, we need to fiddle



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


[clang] bb48005 - [NFC] Make AST_BLOCK_HASH test more robust with downstream changes

2020-06-19 Thread Daniel Grumberg via cfe-commits

Author: Daniel Grumberg
Date: 2020-06-19T09:41:15+01:00
New Revision: bb480056602daab86fbcd6aac5c6bc92ce350bb3

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

LOG: [NFC] Make AST_BLOCK_HASH test more robust with downstream changes

Added: 


Modified: 
clang/test/Modules/ASTSignature.c

Removed: 




diff  --git a/clang/test/Modules/ASTSignature.c 
b/clang/test/Modules/ASTSignature.c
index d041b61200a7..f0df1e4e7823 100644
--- a/clang/test/Modules/ASTSignature.c
+++ b/clang/test/Modules/ASTSignature.c
@@ -4,7 +4,7 @@
 // RUN:   -fmodules-cache-path=%t -fdisable-module-hash %s
 // RUN: cp %t/MyHeader2.pcm %t1.pcm
 // RUN: rm -rf %t
-// RUN: %clang_cc1 -iquote "/dev/null" -iquote %S/Inputs/ASTHash/ 
-fsyntax-only \
+// RUN: %clang_cc1 -nostdinc++ -iquote %S/Inputs/ASTHash/ -fsyntax-only \
 // RUN:   -fmodules -fimplicit-module-maps -fmodules-strict-context-hash \
 // RUN:   -fmodules-cache-path=%t -fdisable-module-hash %s
 // RUN: cp %t/MyHeader2.pcm %t2.pcm



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


[PATCH] D81285: [builtins] Change si_int to int in some helper declarations

2020-06-19 Thread Anatoly Trosinenko via Phabricator via cfe-commits
atrosinenko updated this revision to Diff 271963.
atrosinenko added a comment.

Replaced `native_int` by plain `int`, as @aykevl suggested.

On one hand, I have no specific preference for using some descriptive name such 
as `native_int`, `default_int`, etc. (that should suggest it was chosen 
intentionally, not because "I had no better idea") or just use standard `int` 
instead (supposing special names would be more confusing than explaining).

On the other hand, I aggree with @aykevl that replacing machine mode-related 
names (locally typedef'ed `[sdt][ui]_int`) with widely known type names such as 
uint32_t that should be equivalent by the definition according to GCC 
documentation  would 
simplify understanding of the builtins source code. And after such change, 
using `native_int` for just `int` and absolutely traditional names for most 
other types would be quite strange.

On renaming fixed width integer types to their traditional names: I would 
prefer sending such patch afterwards, it would probably be as simple as just 
running `sed --in-place` several times.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81285

Files:
  compiler-rt/lib/builtins/README.txt
  compiler-rt/lib/builtins/clzdi2.c
  compiler-rt/lib/builtins/clzsi2.c
  compiler-rt/lib/builtins/clzti2.c
  compiler-rt/lib/builtins/ctzdi2.c
  compiler-rt/lib/builtins/ctzsi2.c
  compiler-rt/lib/builtins/ctzti2.c
  compiler-rt/lib/builtins/ffsti2.c
  compiler-rt/lib/builtins/int_lib.h
  compiler-rt/lib/builtins/paritydi2.c
  compiler-rt/lib/builtins/paritysi2.c
  compiler-rt/lib/builtins/parityti2.c
  compiler-rt/lib/builtins/popcountsi2.c
  compiler-rt/lib/builtins/popcountti2.c
  compiler-rt/lib/builtins/powidf2.c
  compiler-rt/lib/builtins/powisf2.c
  compiler-rt/lib/builtins/powitf2.c
  compiler-rt/lib/builtins/powixf2.c
  compiler-rt/test/builtins/Unit/clzdi2_test.c
  compiler-rt/test/builtins/Unit/clzsi2_test.c
  compiler-rt/test/builtins/Unit/clzti2_test.c
  compiler-rt/test/builtins/Unit/ctzsi2_test.c
  compiler-rt/test/builtins/Unit/ctzti2_test.c
  compiler-rt/test/builtins/Unit/ffsti2_test.c
  compiler-rt/test/builtins/Unit/paritydi2_test.c
  compiler-rt/test/builtins/Unit/paritysi2_test.c
  compiler-rt/test/builtins/Unit/parityti2_test.c
  compiler-rt/test/builtins/Unit/popcountsi2_test.c
  compiler-rt/test/builtins/Unit/popcountti2_test.c
  compiler-rt/test/builtins/Unit/powidf2_test.c
  compiler-rt/test/builtins/Unit/powisf2_test.c
  compiler-rt/test/builtins/Unit/powitf2_test.c
  compiler-rt/test/builtins/Unit/powixf2_test.c

Index: compiler-rt/test/builtins/Unit/powixf2_test.c
===
--- compiler-rt/test/builtins/Unit/powixf2_test.c
+++ compiler-rt/test/builtins/Unit/powixf2_test.c
@@ -11,9 +11,9 @@
 
 // Returns: a ^ b
 
-COMPILER_RT_ABI long double __powixf2(long double a, si_int b);
+COMPILER_RT_ABI long double __powixf2(long double a, int b);
 
-int test__powixf2(long double a, si_int b, long double expected)
+int test__powixf2(long double a, int b, long double expected)
 {
 long double x = __powixf2(a, b);
 int correct = (x == expected) && (signbit(x) == signbit(expected));
@@ -58,9 +58,9 @@
 return 1;
 if (test__powixf2(0, 4, 0))
 return 1;
-if (test__powixf2(0, 0x7FFE, 0))
+if (test__powixf2(0, INT_MAX - 1, 0))
 return 1;
-if (test__powixf2(0, 0x7FFF, 0))
+if (test__powixf2(0, INT_MAX, 0))
 return 1;
 
 if (test__powixf2(-0., 1, -0.))
@@ -71,9 +71,9 @@
 return 1;
 if (test__powixf2(-0., 4, 0))
 return 1;
-if (test__powixf2(-0., 0x7FFE, 0))
+if (test__powixf2(-0., INT_MAX - 1, 0))
 return 1;
-if (test__powixf2(-0., 0x7FFF, -0.))
+if (test__powixf2(-0., INT_MAX, -0.))
 return 1;
 
 if (test__powixf2(1, 1, 1))
@@ -84,9 +84,9 @@
 return 1;
 if (test__powixf2(1, 4, 1))
 return 1;
-if (test__powixf2(1, 0x7FFE, 1))
+if (test__powixf2(1, INT_MAX - 1, 1))
 return 1;
-if (test__powixf2(1, 0x7FFF, 1))
+if (test__powixf2(1, INT_MAX, 1))
 return 1;
 
 if (test__powixf2(INFINITY, 1, INFINITY))
@@ -97,9 +97,9 @@
 return 1;
 if (test__powixf2(INFINITY, 4, INFINITY))
 return 1;
-if (test__powixf2(INFINITY, 0x7FFE, INFINITY))
+if (test__powixf2(INFINITY, INT_MAX - 1, INFINITY))
 return 1;
-if (test__powixf2(INFINITY, 0x7FFF, INFINITY))
+if (test__powixf2(INFINITY, INT_MAX, INFINITY))
 return 1;
 
 if (test__powixf2(-INFINITY, 1, -INFINITY))
@@ -110,9 +110,9 @@
 return 1;
 if (test__powixf2(-INFINITY, 4, INFINITY))
 return 1;
-if (test__powixf2(-INFINITY, 0x7FFE, INFINITY))
+if (test__powixf2(-INFINITY, INT_MAX - 1, INFINITY))
 return 1;
- 

[PATCH] D81407: [Analyzer][StreamChecker] Add note tags for file opening.

2020-06-19 Thread Kristóf Umann via Phabricator via cfe-commits
Szelethus added a comment.

I see where you're coming from @NoQ. What do you think, @balazske? I think 
there is is still value in this implementation as a //debug// option to gather 
data, so that we don't invest a lot of time creating a robust infrastructure 
for an idea that might not work out.

In D81407#2102641 , @balazske wrote:

> I do not understand fully this "globally". A new option should be added that 
> affects all checkers that detect some kind of resource leak?


Yup, its a fair point that all leaks describe the same kind of bug, even if the 
root cause of that bug may come from different kinds of programming errors, so 
it makes sense to unique them all the same way.

> And then implement that kind of report uniqueness in all checkers that detect 
> resource leak.

That could be helped additionally by creating a distinct `LeakBugReport`, 
derived from `PathSensitiveBugReport`, that would take non-optional uniqueing 
lambda to find the `ExplodedNode` responsible for the resource acquisition. Or 
the actual `ExplodedNode` itself.

> Other possible solution: Leave the current way of checker specific options, 
> and add a kind of "meta-option" that can set multiple (checker) options in a 
> batch. For our case this would set the report uniqueing option for every 
> checker that supports it. Still it remains possible to set options separately 
> for each checker.

That could be achieved with Artem's proposed package system (or hashtags): 
D77866#2069144  (Package options are a 
thing even today). However, if we had a `LeakBugReport` class, we could 
implement the option with regular analyzer configs.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81407



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


[PATCH] D81998: [clangd][NFC] Rename FSProvider and getFileSystem

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0628705efaf7: [clangd][NFC] Rename FSProvider and 
getFileSystem (authored by kadircet).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81998

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp
  clang-tools-extra/clangd/ClangdLSPServer.h
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/ClangdServer.h
  clang-tools-extra/clangd/CodeComplete.cpp
  clang-tools-extra/clangd/Compiler.cpp
  clang-tools-extra/clangd/Compiler.h
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/Preamble.cpp
  clang-tools-extra/clangd/SourceCode.cpp
  clang-tools-extra/clangd/SourceCode.h
  clang-tools-extra/clangd/fuzzer/clangd-fuzzer.cpp
  clang-tools-extra/clangd/index/Background.cpp
  clang-tools-extra/clangd/index/Background.h
  clang-tools-extra/clangd/support/CMakeLists.txt
  clang-tools-extra/clangd/support/FSProvider.cpp
  clang-tools-extra/clangd/support/FSProvider.h
  clang-tools-extra/clangd/support/ThreadsafeFS.cpp
  clang-tools-extra/clangd/support/ThreadsafeFS.h
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp
  clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp
  clang-tools-extra/clangd/unittests/ClangdTests.cpp
  clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
  clang-tools-extra/clangd/unittests/CompilerTests.cpp
  clang-tools-extra/clangd/unittests/FileIndexTests.cpp
  clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
  clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp
  clang-tools-extra/clangd/unittests/HeadersTests.cpp
  clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
  clang-tools-extra/clangd/unittests/PreambleTests.cpp
  clang-tools-extra/clangd/unittests/RenameTests.cpp
  clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
  clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
  clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
  clang-tools-extra/clangd/unittests/TestFS.h
  clang-tools-extra/clangd/unittests/TestTU.cpp
  clang-tools-extra/clangd/unittests/TestTU.h
  clang-tools-extra/clangd/unittests/XRefsTests.cpp

Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp
===
--- clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -974,7 +974,7 @@
   std::string BuildDir = testPath("build");
   MockCompilationDatabase CDB(BuildDir, RelPathPrefix);
 
-  MockFSProvider FS;
+  MockFS FS;
   ClangdServer Server(CDB, FS, ClangdServer::optsForTest());
 
   // Fill the filesystem.
@@ -1010,7 +1010,7 @@
 }
 
 TEST(GoToInclude, All) {
-  MockFSProvider FS;
+  MockFS FS;
   MockCompilationDatabase CDB;
   ClangdServer Server(CDB, FS, ClangdServer::optsForTest());
 
@@ -1084,7 +1084,7 @@
 TEST(LocateSymbol, WithPreamble) {
   // Test stragety: AST should always use the latest preamble instead of last
   // good preamble.
-  MockFSProvider FS;
+  MockFS FS;
   MockCompilationDatabase CDB;
   ClangdServer Server(CDB, FS, ClangdServer::optsForTest());
 
Index: clang-tools-extra/clangd/unittests/TestTU.h
===
--- clang-tools-extra/clangd/unittests/TestTU.h
+++ clang-tools-extra/clangd/unittests/TestTU.h
@@ -70,7 +70,7 @@
   // Suppress this behavior by adding an 'error-ok' comment to the code.
   ParsedAST build() const;
   std::shared_ptr preamble() const;
-  ParseInputs inputs(MockFSProvider ) const;
+  ParseInputs inputs(MockFS ) const;
   SymbolSlab headerSymbols() const;
   RefSlab headerRefs() const;
   std::unique_ptr index() const;
Index: clang-tools-extra/clangd/unittests/TestTU.cpp
===
--- clang-tools-extra/clangd/unittests/TestTU.cpp
+++ clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -20,7 +20,7 @@
 namespace clang {
 namespace clangd {
 
-ParseInputs TestTU::inputs(MockFSProvider ) const {
+ParseInputs TestTU::inputs(MockFS ) const {
   std::string FullFilename = testPath(Filename),
   FullHeaderName = testPath(HeaderFilename),
   ImportThunk = testPath("import_thunk.h");
@@ -67,7 +67,7 @@
 }
 
 std::shared_ptr TestTU::preamble() const {
-  MockFSProvider FSProvider;
+  MockFS FSProvider;
   auto Inputs = inputs(FSProvider);
   IgnoreDiagnostics Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
@@ -78,7 +78,7 @@
 }
 
 ParsedAST TestTU::build() const {
-  MockFSProvider FSProvider;
+  MockFS FSProvider;
   auto Inputs = inputs(FSProvider);
   StoreDiags Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
Index: clang-tools-extra/clangd/unittests/TestFS.h
===
--- clang-tools-extra/clangd/unittests/TestFS.h
+++ 

[PATCH] D82024: [clangd] Rename FSProvider to TFS in case of ThreadsafeFS

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG8d654df5b982: [clangd] Rename FSProvider to TFS in case of 
ThreadsafeFS (authored by kadircet).

Changed prior to commit:
  https://reviews.llvm.org/D82024?vs=271988=271996#toc

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82024

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp
  clang-tools-extra/clangd/ClangdLSPServer.h
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/ClangdServer.h
  clang-tools-extra/clangd/CodeComplete.cpp
  clang-tools-extra/clangd/Compiler.cpp
  clang-tools-extra/clangd/Compiler.h
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/Preamble.cpp
  clang-tools-extra/clangd/SourceCode.cpp
  clang-tools-extra/clangd/SourceCode.h
  clang-tools-extra/clangd/index/Background.cpp
  clang-tools-extra/clangd/index/Background.h
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/ClangdTests.cpp
  clang-tools-extra/clangd/unittests/FileIndexTests.cpp
  clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
  clang-tools-extra/clangd/unittests/HeadersTests.cpp
  clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
  clang-tools-extra/clangd/unittests/PreambleTests.cpp
  clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
  clang-tools-extra/clangd/unittests/TestTU.cpp
  clang-tools-extra/clangd/unittests/TestTU.h

Index: clang-tools-extra/clangd/unittests/TestTU.h
===
--- clang-tools-extra/clangd/unittests/TestTU.h
+++ clang-tools-extra/clangd/unittests/TestTU.h
@@ -70,7 +70,7 @@
   // Suppress this behavior by adding an 'error-ok' comment to the code.
   ParsedAST build() const;
   std::shared_ptr preamble() const;
-  ParseInputs inputs(MockFS ) const;
+  ParseInputs inputs(MockFS ) const;
   SymbolSlab headerSymbols() const;
   RefSlab headerRefs() const;
   std::unique_ptr index() const;
Index: clang-tools-extra/clangd/unittests/TestTU.cpp
===
--- clang-tools-extra/clangd/unittests/TestTU.cpp
+++ clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -20,7 +20,7 @@
 namespace clang {
 namespace clangd {
 
-ParseInputs TestTU::inputs(MockFS ) const {
+ParseInputs TestTU::inputs(MockFS ) const {
   std::string FullFilename = testPath(Filename),
   FullHeaderName = testPath(HeaderFilename),
   ImportThunk = testPath("import_thunk.h");
@@ -29,10 +29,10 @@
   // guard without messing up offsets). In this case, use an intermediate file.
   std::string ThunkContents = "#import \"" + FullHeaderName + "\"\n";
 
-  FSProvider.Files = AdditionalFiles;
-  FSProvider.Files[FullFilename] = Code;
-  FSProvider.Files[FullHeaderName] = HeaderCode;
-  FSProvider.Files[ImportThunk] = ThunkContents;
+  FS.Files = AdditionalFiles;
+  FS.Files[FullFilename] = Code;
+  FS.Files[FullHeaderName] = HeaderCode;
+  FS.Files[ImportThunk] = ThunkContents;
 
   ParseInputs Inputs;
   auto  = Inputs.CompileCommand.CommandLine;
@@ -54,7 +54,7 @@
   Inputs.CompileCommand.Filename = FullFilename;
   Inputs.CompileCommand.Directory = testRoot();
   Inputs.Contents = Code;
-  Inputs.FSProvider = 
+  Inputs.TFS = 
   Inputs.Opts = ParseOptions();
   Inputs.Opts.BuildRecoveryAST = true;
   Inputs.Opts.PreserveRecoveryASTType = true;
@@ -67,8 +67,8 @@
 }
 
 std::shared_ptr TestTU::preamble() const {
-  MockFS FSProvider;
-  auto Inputs = inputs(FSProvider);
+  MockFS FS;
+  auto Inputs = inputs(FS);
   IgnoreDiagnostics Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
   assert(CI && "Failed to build compilation invocation.");
@@ -78,8 +78,8 @@
 }
 
 ParsedAST TestTU::build() const {
-  MockFS FSProvider;
-  auto Inputs = inputs(FSProvider);
+  MockFS FS;
+  auto Inputs = inputs(FS);
   StoreDiags Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
   assert(CI && "Failed to build compilation invocation.");
Index: clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
===
--- clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
+++ clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
@@ -74,7 +74,7 @@
   ParseInputs getInputs(PathRef File, std::string Contents) {
 ParseInputs Inputs;
 Inputs.CompileCommand = *CDB.getCompileCommand(File);
-Inputs.FSProvider = 
+Inputs.TFS = 
 Inputs.Contents = std::move(Contents);
 Inputs.Opts = ParseOptions();
 return Inputs;
@@ -150,7 +150,7 @@
std::move(CB));
   }
 
-  MockFS FSProvider;
+  MockFS FS;
   MockCompilationDatabase CDB;
 };
 
@@ -161,10 +161,10 @@
   TUScheduler S(CDB, optsForTest());
 
   auto Added = testPath("added.cpp");
-  FSProvider.Files[Added] = "x";
+  FS.Files[Added] = "x";
 
   auto Missing = testPath("missing.cpp");
-  

[PATCH] D81719: [clangd] Drop usage of PreambleStatCache in scanPreamble

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd2fcc586223c: [clangd] Drop usage of PreambleStatCache in 
scanPreamble (authored by kadircet).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81719

Files:
  clang-tools-extra/clangd/Preamble.cpp


Index: clang-tools-extra/clangd/Preamble.cpp
===
--- clang-tools-extra/clangd/Preamble.cpp
+++ clang-tools-extra/clangd/Preamble.cpp
@@ -224,35 +224,22 @@
 
 /// Scans the preprocessor directives in the preamble section of the file by
 /// running preprocessor over \p Contents. Returned includes do not contain
-/// resolved paths. \p VFS and \p Cmd is used to build the compiler invocation,
-/// which might stat/read files.
+/// resolved paths. \p Cmd is used to build the compiler invocation, which 
might
+/// stat/read files.
 llvm::Expected
-scanPreamble(llvm::StringRef Contents,
- llvm::IntrusiveRefCntPtr VFS,
- const tooling::CompileCommand ) {
-  // FIXME: Change PreambleStatCache to operate on FileSystemProvider rather
-  // than vfs::FileSystem, that way we can just use ParseInputs without this
-  // hack.
-  auto GetFSProvider = [](llvm::IntrusiveRefCntPtr FS) {
-class VFSProvider : public ThreadsafeFS {
-public:
-  VFSProvider(llvm::IntrusiveRefCntPtr FS)
-  : VFS(std::move(FS)) {}
-  llvm::IntrusiveRefCntPtr
-  view(llvm::NoneType) const override {
-return VFS;
-  }
-
-private:
-  const llvm::IntrusiveRefCntPtr VFS;
-};
-return std::make_unique(std::move(FS));
+scanPreamble(llvm::StringRef Contents, const tooling::CompileCommand ) {
+  class EmptyFS : public ThreadsafeFS {
+  public:
+llvm::IntrusiveRefCntPtr
+view(llvm::NoneType) const override {
+  return new llvm::vfs::InMemoryFileSystem;
+}
   };
-  auto FSProvider = GetFSProvider(std::move(VFS));
+  EmptyFS FS;
   // Build and run Preprocessor over the preamble.
   ParseInputs PI;
   PI.Contents = Contents.str();
-  PI.TFS = FSProvider.get();
+  PI.TFS = 
   PI.CompileCommand = Cmd;
   IgnoringDiagConsumer IgnoreDiags;
   auto CI = buildCompilerInvocation(PI, IgnoreDiags);
@@ -272,7 +259,7 @@
   std::move(CI), nullptr, std::move(PreambleContents),
   // Provide an empty FS to prevent preprocessor from performing IO. This
   // also implies missing resolved paths for includes.
-  new llvm::vfs::InMemoryFileSystem, IgnoreDiags);
+  FS.view(llvm::None), IgnoreDiags);
   if (Clang->getFrontendOpts().Inputs.empty())
 return llvm::createStringError(llvm::inconvertibleErrorCode(),
"compiler instance had no inputs");
@@ -422,8 +409,6 @@
   trace::Span Tracer("CreatePreamblePatch");
   SPAN_ATTACH(Tracer, "File", FileName);
   assert(llvm::sys::path::is_absolute(FileName) && "relative FileName!");
-  auto VFS = Baseline.StatCache->getConsumingFS(
-  Modified.TFS->view(/*CWD=*/llvm::None));
   // First scan preprocessor directives in Baseline and Modified. These will be
   // used to figure out newly added directives in Modified. Scanning can fail,
   // the code just bails out and creates an empty patch in such cases, as:
@@ -434,14 +419,13 @@
   //   there's nothing to do but generate an empty patch.
   auto BaselineScan = scanPreamble(
   // Contents needs to be null-terminated.
-  Baseline.Preamble.getContents().str(), VFS, Modified.CompileCommand);
+  Baseline.Preamble.getContents().str(), Modified.CompileCommand);
   if (!BaselineScan) {
 elog("Failed to scan baseline of {0}: {1}", FileName,
  BaselineScan.takeError());
 return PreamblePatch::unmodified(Baseline);
   }
-  auto ModifiedScan =
-  scanPreamble(Modified.Contents, std::move(VFS), Modified.CompileCommand);
+  auto ModifiedScan = scanPreamble(Modified.Contents, Modified.CompileCommand);
   if (!ModifiedScan) {
 elog("Failed to scan modified contents of {0}: {1}", FileName,
  ModifiedScan.takeError());


Index: clang-tools-extra/clangd/Preamble.cpp
===
--- clang-tools-extra/clangd/Preamble.cpp
+++ clang-tools-extra/clangd/Preamble.cpp
@@ -224,35 +224,22 @@
 
 /// Scans the preprocessor directives in the preamble section of the file by
 /// running preprocessor over \p Contents. Returned includes do not contain
-/// resolved paths. \p VFS and \p Cmd is used to build the compiler invocation,
-/// which might stat/read files.
+/// resolved paths. \p Cmd is used to build the compiler invocation, which might
+/// stat/read files.
 llvm::Expected
-scanPreamble(llvm::StringRef Contents,
- llvm::IntrusiveRefCntPtr VFS,
- const tooling::CompileCommand ) {
-  // FIXME: Change PreambleStatCache to operate on FileSystemProvider rather
-  // than vfs::FileSystem, that way we can 

[PATCH] D81920: [clangd] Change FSProvider::getFileSystem to take CurrentWorkingDirectory

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2dc2e47e3cb7: [clangd] Change FSProvider::getFileSystem to 
take CurrentWorkingDirectory (authored by kadircet).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81920

Files:
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/CodeComplete.cpp
  clang-tools-extra/clangd/Compiler.cpp
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/Preamble.cpp
  clang-tools-extra/clangd/SourceCode.cpp
  clang-tools-extra/clangd/SourceCode.h
  clang-tools-extra/clangd/index/Background.cpp
  clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp
  clang-tools-extra/clangd/support/FSProvider.cpp
  clang-tools-extra/clangd/support/FSProvider.h
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/ClangdTests.cpp
  clang-tools-extra/clangd/unittests/FSTests.cpp
  clang-tools-extra/clangd/unittests/HeadersTests.cpp
  clang-tools-extra/clangd/unittests/PreambleTests.cpp
  clang-tools-extra/clangd/unittests/TestFS.h

Index: clang-tools-extra/clangd/unittests/TestFS.h
===
--- clang-tools-extra/clangd/unittests/TestFS.h
+++ clang-tools-extra/clangd/unittests/TestFS.h
@@ -13,8 +13,11 @@
 #define LLVM_CLANG_TOOLS_EXTRA_UNITTESTS_CLANGD_TESTFS_H
 #include "ClangdServer.h"
 #include "GlobalCompilationDatabase.h"
+#include "support/FSProvider.h"
 #include "support/Path.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/ADT/None.h"
+#include "llvm/ADT/Optional.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/VirtualFileSystem.h"
 
@@ -30,10 +33,18 @@
 // A VFS provider that returns TestFSes containing a provided set of files.
 class MockFSProvider : public FileSystemProvider {
 public:
-  IntrusiveRefCntPtr getFileSystem() const override {
+  // Prevent name hiding caused by the overload below.
+  using FileSystemProvider::getFileSystem;
+
+  IntrusiveRefCntPtr getFileSystem() const {
 return buildTestFS(Files, Timestamps);
   }
 
+  IntrusiveRefCntPtr
+  getFileSystem(llvm::NoneType) const override {
+return getFileSystem();
+  }
+
   // If relative paths are used, they are resolved with testPath().
   llvm::StringMap Files;
   llvm::StringMap Timestamps;
Index: clang-tools-extra/clangd/unittests/PreambleTests.cpp
===
--- clang-tools-extra/clangd/unittests/PreambleTests.cpp
+++ clang-tools-extra/clangd/unittests/PreambleTests.cpp
@@ -70,11 +70,11 @@
   // We don't run PP directly over the patch cotents to test production
   // behaviour.
   auto Bounds = Lexer::ComputePreamble(ModifiedContents, *CI->getLangOpts());
-  auto Clang =
-  prepareCompilerInstance(std::move(CI), >Preamble,
-  llvm::MemoryBuffer::getMemBufferCopy(
-  ModifiedContents.slice(0, Bounds.Size).str()),
-  PI.FSProvider->getFileSystem(), Diags);
+  auto Clang = prepareCompilerInstance(
+  std::move(CI), >Preamble,
+  llvm::MemoryBuffer::getMemBufferCopy(
+  ModifiedContents.slice(0, Bounds.Size).str()),
+  PI.FSProvider->getFileSystem(PI.CompileCommand.Directory), Diags);
   PreprocessOnlyAction Action;
   if (!Action.BeginSourceFile(*Clang, Clang->getFrontendOpts().Inputs[0])) {
 ADD_FAILURE() << "failed begin source file";
Index: clang-tools-extra/clangd/unittests/HeadersTests.cpp
===
--- clang-tools-extra/clangd/unittests/HeadersTests.cpp
+++ clang-tools-extra/clangd/unittests/HeadersTests.cpp
@@ -16,6 +16,7 @@
 #include "clang/Frontend/CompilerInvocation.h"
 #include "clang/Frontend/FrontendActions.h"
 #include "clang/Lex/PreprocessorOptions.h"
+#include "llvm/ADT/StringRef.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/Path.h"
 #include "gmock/gmock.h"
@@ -52,8 +53,7 @@
 EXPECT_TRUE(static_cast(CI));
 // The diagnostic options must be set before creating a CompilerInstance.
 CI->getDiagnosticOpts().IgnoreWarnings = true;
-auto VFS = FS.getFileSystem();
-VFS->setCurrentWorkingDirectory(Cmd->Directory);
+auto VFS = PI.FSProvider->getFileSystem(Cmd->Directory);
 auto Clang = prepareCompilerInstance(
 std::move(CI), /*Preamble=*/nullptr,
 llvm::MemoryBuffer::getMemBuffer(FS.Files[MainFile], MainFile),
Index: clang-tools-extra/clangd/unittests/FSTests.cpp
===
--- clang-tools-extra/clangd/unittests/FSTests.cpp
+++ clang-tools-extra/clangd/unittests/FSTests.cpp
@@ -21,7 +21,6 @@
   Files["y"] = "";
   Files["main"] = "";
   auto FS = buildTestFS(Files);
-  FS->setCurrentWorkingDirectory(testRoot());
 
   PreambleFileStatusCache StatCache(testPath("main"));
   auto 

[clang-tools-extra] 3bd7acf - [clangd] Use drop_front instead of consume_front to get rid of a redundant check

2020-06-19 Thread Kadir Cetinkaya via cfe-commits

Author: Kadir Cetinkaya
Date: 2020-06-19T14:13:08+02:00
New Revision: 3bd7acf2e55801208700663d428ec37f694fb8a4

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

LOG: [clangd] Use drop_front instead of consume_front to get rid of a redundant 
check

Added: 


Modified: 
clang-tools-extra/clangd/QueryDriverDatabase.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/QueryDriverDatabase.cpp 
b/clang-tools-extra/clangd/QueryDriverDatabase.cpp
index 11d74203ae94..ba3aa0d66741 100644
--- a/clang-tools-extra/clangd/QueryDriverDatabase.cpp
+++ b/clang-tools-extra/clangd/QueryDriverDatabase.cpp
@@ -143,7 +143,7 @@ extractSystemIncludes(PathRef Driver, llvm::StringRef Lang,
   });
   if (Found == std::end(ArgsToPreserve))
 continue;
-  Arg.consume_front(*Found);
+  Arg = Arg.drop_front(Found->size());
   if (Arg.empty() && I + 1 < E) {
 Args.push_back(CommandLine[I]);
 Args.push_back(CommandLine[++I]);



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


[PATCH] D82092: [analyzer] Handle `\l` symbol in Windows specific file paths in exploded-graph-rewriter

2020-06-19 Thread Denys Petrov via Phabricator via cfe-commits
ASDenysPetrov marked an inline comment as done.
ASDenysPetrov added a comment.

In D82092#2100973 , @vsavchenko wrote:

> Even though it doesn't seem that necessary, I would still vote to comply with 
> `clang-format` in tests as well.


Yes, I just forgot to format it and was going to load it after.

> Additionally, I want to make a note that we are not really working hard on 
> keeping all the scripts and the analyzer itself to be fully functional on 
> Windows.

I think it depends on the platform you prefer, so that's natural. I also try to 
use Ubuntu on VM to check any differences.




Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:383
+# when directory name starts with the letter `l`.
+if sys.platform == 'win32':
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,

NoQ wrote:
> NoQ wrote:
> > Behavior of this script should not depend on the host platform. Neither 
> > should it depend on the target platform if the graph is obtained via 
> > cross-compilation. It should only depend on the graph itself, as it's a 
> > simple dot file converter. The graph itself may, of course, depend on the 
> > target platform (maybe even on the host platform).
> > 
> > So it sounds like this fix should be on the C++ side.
> Like, i mean, i see no reason why it should be impossible to copy the 
> original dot file from one machine to another and still be able to run the 
> script. It's probably not a super-important use case but i don't see why 
> would we consciously break that.
>So it sounds like this fix should be on the C++ side.
The first I did was C++ side. BTW an explicit literal `"string\\literal"` can 
also cause this issue.
But then I found that I am not sure what the solution could be. How can we let 
the script skip this particular case without modifiing the string? How can we 
modify the string to keep it logically valid? The only solution I see is to 
make the replacement selection more accurate. 

>Like, i mean, i see no reason why it should be impossible to copy the original 
>dot file from one machine to another and still be able to run the script.
Correct! I'll keep the regex part for all platforms.

I've just checked the old code on Ubuntu using the sample. `char text[] = 
"string\\literal";` And it also fails as on Windows.
When I used the patch It passed. So this is not only a Windows related issue.


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

https://reviews.llvm.org/D82092



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


[PATCH] D82011: [clangd] Don't mangle workdir-relevant driver path in compile commands

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet added inline comments.



Comment at: clang-tools-extra/clangd/CompileCommands.cpp:141
+// Let's hope it's not a symlink.
+if (llvm::any_of(Driver,
+ [](char C) { return llvm::sys::path::is_separator(C); }))

sammccall wrote:
> kadircet wrote:
> > I believe it would be clearer if you put it below, into `else if 
> > (ClangPath)` part.
> > 
> > i.e.
> > ```
> > if (Absolute ...)
> >   ..
> > // If we couldn't find program and driver is just a filename, use clang dir
> > // FIXME: Note that Driver can still be relative to workdir even if it 
> > doesn't have any path separators.
> > // We should pass WD into here and try to make Driver absolute.
> > else if(ClangPath && !hasPathSeparators(Driver))
> >  ...
> > ```
> This would rely on the undocumented behaviour of findProgramByName with 
> workdir-relative paths, which I think would be nice to avoid (for clarity to 
> the reader if nothing else).
> Doing (what looks like) a PATH search for a workdir-relative path is just 
> conceptually wrong.
makes sense, i think we should land this soon-ish to stop the bleeding.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82011



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


[clang] 3f2e61c - [AIX] Default AIX to using -fno-use-cxa-atexit

2020-06-19 Thread Xiangling Liao via cfe-commits

Author: Xiangling Liao
Date: 2020-06-19T08:27:07-04:00
New Revision: 3f2e61c1fe42e5b790096d6962f6bc2de6ee00ce

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

LOG: [AIX] Default AIX to using -fno-use-cxa-atexit

On AIX, we use __atexit to register dtor functions rather than __cxa_atexit.
So a driver change is needed to default AIX to using -fno-use-cxa-atexit.

Windows platform does not uses __cxa_atexit either. Following its precedent,
we remove the assertion for when -fuse-cxa-atexit is specified by the user,
do not produce a message and silently default to -fno-use-cxa-atexit behavior.

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

Added: 


Modified: 
clang/lib/CodeGen/ItaniumCXXABI.cpp
clang/lib/Driver/ToolChains/Clang.cpp
clang/test/CodeGenCXX/aix-static-init.cpp
clang/test/Driver/cxa-atexit.cpp

Removed: 




diff  --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp 
b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 18aff757f7b5..2829877cfe5d 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -4528,8 +4528,6 @@ void XLCXXABI::registerGlobalDtor(CodeGenFunction , 
const VarDecl ,
   // Create __dtor function for the var decl.
   llvm::Function *dtorStub = CGF.createAtExitStub(D, dtor, addr);
 
-  if (CGM.getCodeGenOpts().CXAAtExit)
-llvm::report_fatal_error("using __cxa_atexit unsupported on AIX");
   // Register above __dtor with atexit().
   CGF.registerGlobalDtorWithAtExit(dtorStub);
 

diff  --git a/clang/lib/Driver/ToolChains/Clang.cpp 
b/clang/lib/Driver/ToolChains/Clang.cpp
index 0ff8d1250242..70d0fe0021a9 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -5498,7 +5498,7 @@ void Clang::ConstructJob(Compilation , const JobAction 
,
   // -fuse-cxa-atexit is default.
   if (!Args.hasFlag(
   options::OPT_fuse_cxa_atexit, options::OPT_fno_use_cxa_atexit,
-  !RawTriple.isOSWindows() &&
+  !RawTriple.isOSAIX() && !RawTriple.isOSWindows() &&
   TC.getArch() != llvm::Triple::xcore &&
   ((RawTriple.getVendor() != llvm::Triple::MipsTechnologies) ||
RawTriple.hasEnvironment())) ||

diff  --git a/clang/test/CodeGenCXX/aix-static-init.cpp 
b/clang/test/CodeGenCXX/aix-static-init.cpp
index 7307d3d448f1..606e51328ffb 100644
--- a/clang/test/CodeGenCXX/aix-static-init.cpp
+++ b/clang/test/CodeGenCXX/aix-static-init.cpp
@@ -1,9 +1,9 @@
 // RUN: %clang_cc1 -triple powerpc-ibm-aix-xcoff -S -emit-llvm -x c++ \
-// RUN: -fno-use-cxa-atexit -std=c++2a < %s | \
+// RUN: -std=c++2a < %s | \
 // RUN:   FileCheck --check-prefixes=CHECK,CHECK32 %s
 
 // RUN: %clang_cc1 -triple powerpc64-ibm-aix-xcoff -S -emit-llvm -x c++ \
-// RUN: -fno-use-cxa-atexit -std=c++2a < %s | \
+// RUN: -std=c++2a < %s | \
 // RUN:   FileCheck --check-prefixes=CHECK,CHECK64 %s
 
 namespace test1 {

diff  --git a/clang/test/Driver/cxa-atexit.cpp 
b/clang/test/Driver/cxa-atexit.cpp
index 336756dedcec..e81af6cd5963 100644
--- a/clang/test/Driver/cxa-atexit.cpp
+++ b/clang/test/Driver/cxa-atexit.cpp
@@ -17,6 +17,8 @@
 // RUN: %clang -### -target mips-unknown-none-gnu -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-MIPS
 // RUN: %clang -### -target mips-mti-none-gnu -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-MIPS
 // RUN: %clang -### -target sparc-sun-solaris -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-SOLARIS
+// RUN: %clang -### -target powerpc-ibm-aix-xcoff -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-AIX
+// RUN: %clang -### -target powerpc64-ibm-aix-xcoff -c %s -o /dev/null 2>&1 | 
FileCheck %s -check-prefix CHECK-AIX
 
 // CHECK-WINDOWS: "-fno-use-cxa-atexit"
 // CHECK-SOLARIS-NOT: "-fno-use-cxa-atexit"
@@ -24,6 +26,7 @@
 // CHECK-XCORE: "-fno-use-cxa-atexit"
 // CHECK-MTI: "-fno-use-cxa-atexit"
 // CHECK-MIPS-NOT: "-fno-use-cxa-atexit"
+// CHECK-AIX: "-fno-use-cxa-atexit"
 
 // RUN: %clang -target x86_64-apple-darwin -fregister-global-dtors-with-atexit 
-fno-register-global-dtors-with-atexit -c -### %s 2>&1 | \
 // RUN: FileCheck --check-prefix=WITHOUTATEXIT %s



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


[clang] d3b7528 - [clang][test][NFC] Also test for serialization in AST dump tests, part 1/n.

2020-06-19 Thread Bruno Ricci via cfe-commits

Author: Bruno Ricci
Date: 2020-06-19T13:40:20+01:00
New Revision: d3b752845df0331348dad48000fc8b82afb3de5b

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

LOG: [clang][test][NFC] Also test for serialization in AST dump tests, part 1/n.

The outputs between the direct ast-dump test and the ast-dump test after
deserialization should match modulo a few differences.

For hand-written tests, strip the ""s and
the "imported"s with sed.

For tests generated with "make-ast-dump-check.sh", regenerate the
output.

Part 1/n.

Added: 


Modified: 
clang/test/AST/ast-dump-overloaded-operators.cpp
clang/test/AST/ast-dump-pipe.cl
clang/test/AST/ast-dump-record-definition-data.cpp
clang/test/AST/ast-dump-records.c
clang/test/AST/ast-dump-records.cpp
clang/test/AST/ast-dump-special-member-functions.cpp
clang/test/AST/ast-dump-stmt.c
clang/test/AST/ast-dump-stmt.cpp
clang/test/AST/ast-dump-stmt.m
clang/test/AST/ast-dump-template-decls.cpp
clang/test/AST/ast-dump-traits.cpp
clang/test/AST/ast-dump-wasm-attr-export.c
clang/test/AST/ast-dump-wasm-attr-import.c
clang/test/AST/ast-dump-wchar.cpp

Removed: 




diff  --git a/clang/test/AST/ast-dump-overloaded-operators.cpp 
b/clang/test/AST/ast-dump-overloaded-operators.cpp
index cd4e14be9f1a..639a0d9874eb 100644
--- a/clang/test/AST/ast-dump-overloaded-operators.cpp
+++ b/clang/test/AST/ast-dump-overloaded-operators.cpp
@@ -1,4 +1,11 @@
-// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s | FileCheck 
-strict-whitespace %s
+// Test without serialization:
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ast-dump %s \
+// RUN: | FileCheck -strict-whitespace %s
+//
+// Test with serialization:
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -emit-pch -o %t %s
+// RUN: %clang_cc1 -x c++ -triple x86_64-unknown-unknown -include-pch %t 
-ast-dump-all /dev/null \
+// RUN: | FileCheck -strict-whitespace %s
 
 enum E {};
 void operator+(E,E);
@@ -9,19 +16,26 @@ void test() {
   e + e;
   e , e;
 }
-// CHECK: TranslationUnitDecl {{.*}} <> 
-// CHECK: `-FunctionDecl {{.*}}  line:7:6 test 'void ()'
-// CHECK-NEXT:   `-CompoundStmt {{.*}} 
-// CHECK-NEXT: |-DeclStmt {{.*}} 
-// CHECK-NEXT: | `-VarDecl {{.*}}  col:5 used e 'E'
-// CHECK-NEXT: |-CXXOperatorCallExpr {{.*}}  'void' '+'
+// CHECK: TranslationUnitDecl {{.*}} <> {{( 
)?}}
+// CHECK: |-EnumDecl {{.*}} <{{.*}}ast-dump-overloaded-operators.cpp:10:1, 
col:9> col:6{{( imported)?}} referenced E
+// CHECK-NEXT: |-FunctionDecl {{.*}}  col:6{{( imported)?}} 
used operator+ 'void (E, E)'
+// CHECK-NEXT: | |-ParmVarDecl {{.*}}  col:17{{( imported)?}} 'E'
+// CHECK-NEXT: | `-ParmVarDecl {{.*}}  col:19{{( imported)?}} 'E'
+// CHECK-NEXT: |-FunctionDecl {{.*}}  col:6{{( imported)?}} 
used operator, 'void (E, E)'
+// CHECK-NEXT: | |-ParmVarDecl {{.*}}  col:17{{( imported)?}} 'E'
+// CHECK-NEXT: | `-ParmVarDecl {{.*}}  col:19{{( imported)?}} 'E'
+// CHECK-NEXT: `-FunctionDecl {{.*}}  line:14:6{{( 
imported)?}} test 'void ()'
+// CHECK-NEXT:   `-CompoundStmt {{.*}} 
+// CHECK-NEXT: |-DeclStmt {{.*}} 
+// CHECK-NEXT: | `-VarDecl {{.*}}  col:5{{( imported)?}} 
used e 'E'
+// CHECK-NEXT: |-CXXOperatorCallExpr {{.*}}  'void' '+'
 // CHECK-NEXT: | |-ImplicitCastExpr {{.*}}  'void (*)(E, E)' 

 // CHECK-NEXT: | | `-DeclRefExpr {{.*}}  'void (E, E)' lvalue 
Function {{.*}} 'operator+' 'void (E, E)'
 // CHECK-NEXT: | |-ImplicitCastExpr {{.*}}  'E' 
 // CHECK-NEXT: | | `-DeclRefExpr {{.*}}  'E' lvalue Var {{.*}} 'e' 
'E'
 // CHECK-NEXT: | `-ImplicitCastExpr {{.*}}  'E' 
 // CHECK-NEXT: |   `-DeclRefExpr {{.*}}  'E' lvalue Var {{.*}} 'e' 
'E'
-// CHECK-NEXT: `-CXXOperatorCallExpr {{.*}}  'void' ','
+// CHECK-NEXT: `-CXXOperatorCallExpr {{.*}}  'void' ','
 // CHECK-NEXT:   |-ImplicitCastExpr {{.*}}  'void (*)(E, E)' 

 // CHECK-NEXT:   | `-DeclRefExpr {{.*}}  'void (E, E)' lvalue 
Function {{.*}} 'operator,' 'void (E, E)'
 // CHECK-NEXT:   |-ImplicitCastExpr {{.*}}  'E' 

diff  --git a/clang/test/AST/ast-dump-pipe.cl b/clang/test/AST/ast-dump-pipe.cl
index ceed2f6f8992..b4f78e1a7412 100644
--- a/clang/test/AST/ast-dump-pipe.cl
+++ b/clang/test/AST/ast-dump-pipe.cl
@@ -1,4 +1,13 @@
-// RUN: %clang_cc1 -triple spir64 -cl-std=CL2.0 -ast-dump -ast-dump-filter 
pipetype %s | FileCheck -strict-whitespace %s
+// Test without serialization:
+// RUN: %clang_cc1 -triple spir64 -cl-std=CL2.0 -ast-dump -ast-dump-filter 
pipetype %s \
+// RUN: | FileCheck -strict-whitespace %s
+//
+// Test with serialization:
+// RUN: %clang_cc1 -triple spir64 -cl-std=CL2.0 -emit-pch -o %t %s
+// RUN: %clang_cc1 -x cl -triple spir64 -cl-std=CL2.0 -include-pch %t 
-ast-dump-all -ast-dump-filter pipetype /dev/null \
+// RUN: 

[clang] 70f952b - [clang][utils] Also match "col:" when looking for the end of builtins

2020-06-19 Thread Bruno Ricci via cfe-commits

Author: Bruno Ricci
Date: 2020-06-19T13:40:20+01:00
New Revision: 70f952bebe38f8117e6ce8986cd39f735b7b3d69

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

LOG: [clang][utils] Also match "col:" when looking for the end of builtins

Some AST dump tests have no "line:" at all. See "ast-dump-wchar.cpp" for
an example.

Added: 


Modified: 
clang/utils/make-ast-dump-check.sh

Removed: 




diff  --git a/clang/utils/make-ast-dump-check.sh 
b/clang/utils/make-ast-dump-check.sh
index 578c725f48b1..4e8a1c198608 100755
--- a/clang/utils/make-ast-dump-check.sh
+++ b/clang/utils/make-ast-dump-check.sh
@@ -48,6 +48,10 @@ BEGIN {
   skipping_builtins = 0
 }
 
+/^[\`|].* col:/ {
+  skipping_builtins = 0
+}
+
 {
   if (skipping_builtins == 1) {
 matched_last_line = 0



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


[clang-tools-extra] 4836188 - [clang-tidy] Extend InheritParentConfig to CommandLineConfig

2020-06-19 Thread Nathan James via cfe-commits

Author: Nathan James
Date: 2020-06-19T12:02:19+01:00
New Revision: 4836188ad9b3334b0c1e055d45ccaa54ed797e4b

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

LOG: [clang-tidy] Extend InheritParentConfig to CommandLineConfig

Extend the `InheritParentConfig` support introduced in D75184 for the command 
line option `--config`.
The current behaviour of `--config` is to when set, disable looking for 
`.clang-tidy` configuration files.
This new behaviour lets you set `InheritParentConfig` to true in the command 
line to then look for `.clang-tidy` configuration files to be merged with 
what's been specified on the command line.

Reviewed By: DmitryPolukhin

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
clang-tools-extra/clang-tidy/ClangTidyOptions.h
clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
clang-tools-extra/test/clang-tidy/infrastructure/config-files.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
index 76cb663c8e2e..4fa78e2803f1 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
@@ -194,14 +194,27 @@ ConfigOptionsProvider::ConfigOptionsProvider(
 const ClangTidyGlobalOptions ,
 const ClangTidyOptions ,
 const ClangTidyOptions ,
-const ClangTidyOptions )
-: DefaultOptionsProvider(GlobalOptions, DefaultOptions),
-  ConfigOptions(ConfigOptions), OverrideOptions(OverrideOptions) {}
+const ClangTidyOptions ,
+llvm::IntrusiveRefCntPtr FS)
+: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
+  FS),
+  ConfigOptions(ConfigOptions) {}
 
 std::vector
 ConfigOptionsProvider::getRawOptions(llvm::StringRef FileName) {
   std::vector RawOptions =
   DefaultOptionsProvider::getRawOptions(FileName);
+  if (ConfigOptions.InheritParentConfig.getValueOr(false)) {
+LLVM_DEBUG(llvm::dbgs()
+   << "Getting options for file " << FileName << "...\n");
+assert(FS && "FS must be set.");
+
+llvm::SmallString<128> AbsoluteFilePath(FileName);
+
+if (!FS->makeAbsolute(AbsoluteFilePath)) {
+  addRawFileOptions(AbsoluteFilePath, RawOptions);
+}
+  }
   RawOptions.emplace_back(ConfigOptions,
   OptionsSourceTypeConfigCommandLineOption);
   RawOptions.emplace_back(OverrideOptions,
@@ -209,7 +222,7 @@ ConfigOptionsProvider::getRawOptions(llvm::StringRef 
FileName) {
   return RawOptions;
 }
 
-FileOptionsProvider::FileOptionsProvider(
+FileOptionsBaseProvider::FileOptionsBaseProvider(
 const ClangTidyGlobalOptions ,
 const ClangTidyOptions ,
 const ClangTidyOptions ,
@@ -221,36 +234,21 @@ FileOptionsProvider::FileOptionsProvider(
   ConfigHandlers.emplace_back(".clang-tidy", parseConfiguration);
 }
 
-FileOptionsProvider::FileOptionsProvider(
+FileOptionsBaseProvider::FileOptionsBaseProvider(
 const ClangTidyGlobalOptions ,
 const ClangTidyOptions ,
 const ClangTidyOptions ,
-const FileOptionsProvider::ConfigFileHandlers )
+const FileOptionsBaseProvider::ConfigFileHandlers )
 : DefaultOptionsProvider(GlobalOptions, DefaultOptions),
   OverrideOptions(OverrideOptions), ConfigHandlers(ConfigHandlers) {}
 
-// FIXME: This method has some common logic with clang::format::getStyle().
-// Consider pulling out common bits to a findParentFileWithName function or
-// similar.
-std::vector
-FileOptionsProvider::getRawOptions(StringRef FileName) {
-  LLVM_DEBUG(llvm::dbgs() << "Getting options for file " << FileName
-  << "...\n");
-  assert(FS && "FS must be set.");
-
-  llvm::SmallString<128> AbsoluteFilePath(FileName);
+void FileOptionsBaseProvider::addRawFileOptions(
+llvm::StringRef AbsolutePath, std::vector ) {
+  auto CurSize = CurOptions.size();
 
-  if (FS->makeAbsolute(AbsoluteFilePath))
-return {};
-
-  std::vector RawOptions =
-  DefaultOptionsProvider::getRawOptions(AbsoluteFilePath.str());
-  OptionsSource CommandLineOptions(OverrideOptions,
-   OptionsSourceTypeCheckCommandLineOption);
-  size_t FirstFileConfig = RawOptions.size();
   // Look for a suitable configuration file in all parent directories of the
   // file. Start with the immediate parent directory and move up.
-  StringRef Path = llvm::sys::path::parent_path(AbsoluteFilePath.str());
+  StringRef Path = llvm::sys::path::parent_path(AbsolutePath);
   for (StringRef CurrentPath = Path; !CurrentPath.empty();
CurrentPath = llvm::sys::path::parent_path(CurrentPath)) {
 llvm::Optional Result;
@@ -273,21 +271,58 @@ 

[PATCH] D82081: [z/OS] Add binary format goff and operating system zos to the triple

2020-06-19 Thread Kai Nacke via Phabricator via cfe-commits
Kai updated this revision to Diff 272023.
Kai added a comment.

- In Triple.cpp: Keep list of binary formats sorted
- In Triple.cpp: Use isOSzOS() for check


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

https://reviews.llvm.org/D82081

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/CodeGen/CGObjCMac.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  llvm/include/llvm/ADT/Triple.h
  llvm/include/llvm/Support/TargetRegistry.h
  llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
  llvm/lib/MC/MCObjectFileInfo.cpp
  llvm/lib/Support/Triple.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/unittests/ADT/TripleTest.cpp

Index: llvm/unittests/ADT/TripleTest.cpp
===
--- llvm/unittests/ADT/TripleTest.cpp
+++ llvm/unittests/ADT/TripleTest.cpp
@@ -170,6 +170,18 @@
   EXPECT_EQ(Triple::FreeBSD, T.getOS());
   EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
 
+  T = Triple("s390x-ibm-zos");
+  EXPECT_EQ(Triple::systemz, T.getArch());
+  EXPECT_EQ(Triple::IBM, T.getVendor());
+  EXPECT_EQ(Triple::ZOS, T.getOS());
+  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
+  T = Triple("systemz-ibm-zos");
+  EXPECT_EQ(Triple::systemz, T.getArch());
+  EXPECT_EQ(Triple::IBM, T.getVendor());
+  EXPECT_EQ(Triple::ZOS, T.getOS());
+  EXPECT_EQ(Triple::UnknownEnvironment, T.getEnvironment());
+
   T = Triple("arm-none-none-eabi");
   EXPECT_EQ(Triple::arm, T.getArch());
   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());
@@ -1289,6 +1301,15 @@
   EXPECT_EQ(Triple::ELF, Triple("i686-pc-windows-msvc-elf").getObjectFormat());
   EXPECT_EQ(Triple::ELF, Triple("i686-pc-cygwin-elf").getObjectFormat());
 
+  EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-linux").getObjectFormat());
+  EXPECT_EQ(Triple::ELF, Triple("systemz-ibm-unknown").getObjectFormat());
+
+  EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("systemz-ibm-zos").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("s390x-ibm-zos-goff").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("s390x-unknown-zos-goff").getObjectFormat());
+  EXPECT_EQ(Triple::GOFF, Triple("s390x---goff").getObjectFormat());
+
   EXPECT_EQ(Triple::Wasm, Triple("wasm32-unknown-unknown").getObjectFormat());
   EXPECT_EQ(Triple::Wasm, Triple("wasm64-unknown-unknown").getObjectFormat());
   EXPECT_EQ(Triple::Wasm, Triple("wasm32-wasi").getObjectFormat());
@@ -1335,6 +1356,9 @@
 
   T.setObjectFormat(Triple::XCOFF);
   EXPECT_EQ(Triple::XCOFF, T.getObjectFormat());
+
+  T.setObjectFormat(Triple::GOFF);
+  EXPECT_EQ(Triple::GOFF, T.getObjectFormat());
 }
 
 TEST(TripleTest, NormalizeWindows) {
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1960,9 +1960,10 @@
   case Triple::ELF:   return "asan_globals";
   case Triple::MachO: return "__DATA,__asan_globals,regular";
   case Triple::Wasm:
+  case Triple::GOFF:
   case Triple::XCOFF:
 report_fatal_error(
-"ModuleAddressSanitizer not implemented for object file format.");
+"ModuleAddressSanitizer not implemented for object file format");
   case Triple::UnknownObjectFormat:
 break;
   }
Index: llvm/lib/Support/Triple.cpp
===
--- llvm/lib/Support/Triple.cpp
+++ llvm/lib/Support/Triple.cpp
@@ -217,6 +217,8 @@
   case WASI: return "wasi";
   case WatchOS: return "watchos";
   case Win32: return "windows";
+  case ZOS:
+return "zos";
   }
 
   llvm_unreachable("Invalid OSType");
@@ -503,6 +505,7 @@
 .StartsWith("solaris", Triple::Solaris)
 .StartsWith("win32", Triple::Win32)
 .StartsWith("windows", Triple::Win32)
+.StartsWith("zos", Triple::ZOS)
 .StartsWith("haiku", Triple::Haiku)
 .StartsWith("minix", Triple::Minix)
 .StartsWith("rtems", Triple::RTEMS)
@@ -557,6 +560,7 @@
 .EndsWith("xcoff", Triple::XCOFF)
 .EndsWith("coff", Triple::COFF)
 .EndsWith("elf", Triple::ELF)
+.EndsWith("goff", Triple::GOFF)
 .EndsWith("macho", Triple::MachO)
 .EndsWith("wasm", Triple::Wasm)
 .Default(Triple::UnknownObjectFormat);
@@ -648,6 +652,7 @@
   case Triple::UnknownObjectFormat: return "";
   case Triple::COFF:  return "coff";
   case Triple::ELF:   return "elf";
+  case Triple::GOFF:  return "goff";
   case Triple::MachO: return "macho";
   case Triple::Wasm:  return "wasm";
   case Triple::XCOFF: return "xcoff";
@@ -705,7 +710,6 @@
   case Triple::sparcv9:
   case Triple::spir64:
   case Triple::spir:
-  case Triple::systemz:
   case Triple::tce:
   case Triple::tcele:
   case Triple::thumbeb:
@@ -719,6 +723,11 @@
   return Triple::XCOFF;
 return Triple::ELF;
 
+  case Triple::systemz:
+if (T.isOSzOS())
+  return Triple::GOFF;
+

[PATCH] D80981: [AST] Fix a crash on accessing a class without definition in constexpr function context.

2020-06-19 Thread Haojian Wu via Phabricator via cfe-commits
hokein updated this revision to Diff 272018.
hokein marked an inline comment as done.
hokein added a comment.

Update per Richard's comment: do the error check in getDefaultInitValue, and
modify every caller of it to support the error handling.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80981

Files:
  clang/lib/AST/ExprConstant.cpp
  clang/test/SemaCXX/constexpr-default-init-value-crash.cpp

Index: clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
===
--- /dev/null
+++ clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -verify
+// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -verify -fno-recovery-ast
+
+namespace NoCrash {
+struct ForwardDecl; // expected-note {{forward declaration of}}
+struct Foo {// expected-note 2{{candidate constructor}}
+  ForwardDecl f;// expected-error {{field has incomplete type}}
+};
+
+constexpr Foo getFoo() {
+  Foo e = 123; // expected-error {{no viable conversion from 'int' to 'NoCrash::Foo'}}
+  return e;
+}
+}
Index: clang/lib/AST/ExprConstant.cpp
===
--- clang/lib/AST/ExprConstant.cpp
+++ clang/lib/AST/ExprConstant.cpp
@@ -4312,37 +4312,48 @@
 }
 
 /// Get the value to use for a default-initialized object of type T.
-static APValue getDefaultInitValue(QualType T) {
+/// Return false if fails.
+static bool getDefaultInitValue(QualType T, APValue ) {
+  bool Success = true;
   if (auto *RD = T->getAsCXXRecordDecl()) {
-if (RD->isUnion())
-  return APValue((const FieldDecl*)nullptr);
-
-APValue Struct(APValue::UninitStruct(), RD->getNumBases(),
-   std::distance(RD->field_begin(), RD->field_end()));
+if (RD->isInvalidDecl()) {
+  Result = APValue();
+  return false;
+}
+if (RD->isUnion()) {
+  Result = APValue((const FieldDecl *)nullptr);
+  return true;
+}
+Result = APValue(APValue::UninitStruct(), RD->getNumBases(),
+ std::distance(RD->field_begin(), RD->field_end()));
 
 unsigned Index = 0;
 for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
-   End = RD->bases_end(); I != End; ++I, ++Index)
-  Struct.getStructBase(Index) = getDefaultInitValue(I->getType());
+  End = RD->bases_end();
+ I != End; ++I, ++Index)
+  Success &= getDefaultInitValue(I->getType(), Result.getStructBase(Index));
 
 for (const auto *I : RD->fields()) {
   if (I->isUnnamedBitfield())
 continue;
-  Struct.getStructField(I->getFieldIndex()) =
-  getDefaultInitValue(I->getType());
+  Success &= getDefaultInitValue(I->getType(),
+ Result.getStructField(I->getFieldIndex()));
 }
-return Struct;
+return Success;
   }
 
   if (auto *AT =
   dyn_cast_or_null(T->getAsArrayTypeUnsafe())) {
-APValue Array(APValue::UninitArray(), 0, AT->getSize().getZExtValue());
-if (Array.hasArrayFiller())
-  Array.getArrayFiller() = getDefaultInitValue(AT->getElementType());
-return Array;
+Result = APValue(APValue::UninitArray(), 0, AT->getSize().getZExtValue());
+if (Result.hasArrayFiller())
+  Success &=
+  getDefaultInitValue(AT->getElementType(), Result.getArrayFiller());
+
+return Success;
   }
 
-  return APValue::IndeterminateValue();
+  Result = APValue::IndeterminateValue();
+  return true;
 }
 
 namespace {
@@ -4372,10 +4383,8 @@
   Info.CurrentCall->createTemporary(VD, VD->getType(), true, Result);
 
   const Expr *InitE = VD->getInit();
-  if (!InitE) {
-Val = getDefaultInitValue(VD->getType());
-return true;
-  }
+  if (!InitE)
+return getDefaultInitValue(VD->getType(), Val);
 
   if (InitE->isValueDependent())
 return false;
@@ -5372,11 +5381,11 @@
   const Expr *LHSExpr;
   const FieldDecl *Field;
   bool DuringInit;
-
+  bool Failed = false;
   static const AccessKinds AccessKind = AK_Assign;
 
   typedef bool result_type;
-  bool failed() { return false; }
+  bool failed() { return Failed; }
   bool found(APValue , QualType SubobjType) {
 // We are supposed to perform no initialization but begin the lifetime of
 // the object. We interpret that as meaning to do what default
@@ -5400,8 +5409,9 @@
   diag::note_constexpr_union_member_change_during_init);
   return false;
 }
-
-Subobj.setUnion(Field, getDefaultInitValue(Field->getType()));
+APValue Result;
+Failed = !getDefaultInitValue(Field->getType(), Result);
+Subobj.setUnion(Field, Result);
 return true;
   }
   bool found(APSInt , QualType SubobjType) {
@@ -5717,8 +5727,9 @@
 for (; !declaresSameEntity(*FieldIt, FD); ++FieldIt) {
   assert(FieldIt != RD->field_end() && 

[PATCH] D81930: [AArch64] Add -mmark-bti-property flag.

2020-06-19 Thread Daniel Kiss via Phabricator via cfe-commits
danielkiss updated this revision to Diff 272024.
danielkiss retitled this revision from "[AArch64] Add -mbti flag." to 
"[AArch64] Add -mmark-bti-property flag.".
danielkiss edited the summary of this revision.
danielkiss added a comment.

Rename the flag to -mmark-bti-property


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

https://reviews.llvm.org/D81930

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Arch/AArch64.cpp
  clang/test/Driver/arm64-markbti.S
  llvm/lib/Target/AArch64/AArch64.td
  llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
  llvm/lib/Target/AArch64/AArch64Subtarget.h
  llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
  llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
  llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h

Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
===
--- llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
+++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.h
@@ -20,6 +20,7 @@
 class AArch64TargetStreamer : public MCTargetStreamer {
 public:
   AArch64TargetStreamer(MCStreamer );
+  AArch64TargetStreamer(MCStreamer , const MCSubtargetInfo *STI);
   ~AArch64TargetStreamer() override;
 
   void finish() override;
@@ -36,6 +37,9 @@
   /// Callback used to implement the .inst directive.
   virtual void emitInst(uint32_t Inst);
 
+  /// Callback used to implement the .note.gnu.property section.
+  virtual void emitNoteSection(unsigned Flags);
+
   virtual void EmitARM64WinCFIAllocStack(unsigned Size) {}
   virtual void EmitARM64WinCFISaveFPLR(int Offset) {}
   virtual void EmitARM64WinCFISaveFPLRX(int Offset) {}
@@ -56,6 +60,7 @@
 
 private:
   std::unique_ptr ConstantPools;
+  const MCSubtargetInfo *STI;
 };
 
 class AArch64TargetELFStreamer : public AArch64TargetStreamer {
@@ -65,7 +70,8 @@
   void emitInst(uint32_t Inst) override;
 
 public:
-  AArch64TargetELFStreamer(MCStreamer ) : AArch64TargetStreamer(S) {}
+  AArch64TargetELFStreamer(MCStreamer , const MCSubtargetInfo *STI)
+  : AArch64TargetStreamer(S, STI) {}
 };
 
 class AArch64TargetWinCOFFStreamer : public llvm::AArch64TargetStreamer {
@@ -76,8 +82,8 @@
   // Symbol of the current epilog for which we are processing SEH directives.
   MCSymbol *CurrentEpilog = nullptr;
 public:
-  AArch64TargetWinCOFFStreamer(llvm::MCStreamer )
-: AArch64TargetStreamer(S) {}
+  AArch64TargetWinCOFFStreamer(llvm::MCStreamer , const MCSubtargetInfo *STI)
+  : AArch64TargetStreamer(S, STI) {}
 
   // The unwind codes on ARM64 Windows are documented at
   // https://docs.microsoft.com/en-us/cpp/build/arm64-exception-handling
Index: llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
===
--- llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
+++ llvm/lib/Target/AArch64/MCTargetDesc/AArch64TargetStreamer.cpp
@@ -11,8 +11,12 @@
 //===--===//
 
 #include "AArch64TargetStreamer.h"
+#include "AArch64Subtarget.h"
+#include "llvm/BinaryFormat/ELF.h"
 #include "llvm/MC/ConstantPools.h"
+#include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCSection.h"
+#include "llvm/MC/MCSectionELF.h"
 #include "llvm/MC/MCSubtargetInfo.h"
 
 using namespace llvm;
@@ -21,7 +25,13 @@
 // AArch64TargetStreamer Implemenation
 //
 AArch64TargetStreamer::AArch64TargetStreamer(MCStreamer )
-: MCTargetStreamer(S), ConstantPools(new AssemblerConstantPools()) {}
+: MCTargetStreamer(S), ConstantPools(new AssemblerConstantPools()),
+  STI(nullptr) {}
+
+AArch64TargetStreamer::AArch64TargetStreamer(MCStreamer ,
+ const MCSubtargetInfo *STI)
+: MCTargetStreamer(S), ConstantPools(new AssemblerConstantPools()),
+  STI(STI) {}
 
 AArch64TargetStreamer::~AArch64TargetStreamer() = default;
 
@@ -37,8 +47,54 @@
   ConstantPools->emitForCurrentSection(Streamer);
 }
 
-// finish() - write out any non-empty assembler constant pools.
-void AArch64TargetStreamer::finish() { ConstantPools->emitAll(Streamer); }
+// finish() - write out any non-empty assembler constant pools and
+//   write out note.gnu.properties if need.
+void AArch64TargetStreamer::finish() {
+  ConstantPools->emitAll(Streamer);
+  if (!STI)
+return;
+
+  if (STI->getFeatureBits()[AArch64::FeatureEmitNoteBTIProperty]) {
+emitNoteSection(ELF::GNU_PROPERTY_AARCH64_FEATURE_1_BTI);
+  }
+}
+
+void AArch64TargetStreamer::emitNoteSection(unsigned Flags) {
+  if (Flags == 0) {
+return;
+  }
+  MCStreamer  = getStreamer();
+  MCContext  = OutStreamer.getContext();
+  // Emit a .note.gnu.property section with the flags.
+  MCSection *Cur = OutStreamer.getCurrentSectionOnly();
+  MCSectionELF *Nt = Context.getELFSection(".note.gnu.property", ELF::SHT_NOTE,
+   

[clang-tools-extra] c3b4486 - [NFC] Simplify IncludeInsertions appending to diagnostics

2020-06-19 Thread Nathan James via cfe-commits

Author: Nathan James
Date: 2020-06-19T13:22:49+01:00
New Revision: c3b4486a57f6105bd5d96ec2e736f567aa4a0e35

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

LOG: [NFC] Simplify IncludeInsertions appending to diagnostics

Added: 


Modified: 
clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.cpp
clang-tools-extra/unittests/clang-tidy/IncludeInserterTest.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
index 633f3781f4d8..ed1a1a26bb62 100644
--- a/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
@@ -217,14 +217,11 @@ void PassByValueCheck::check(const 
MatchFinder::MatchResult ) {
   // Use std::move in the initialization list.
   Diag << FixItHint::CreateInsertion(Initializer->getRParenLoc(), ")")
<< FixItHint::CreateInsertion(
-  Initializer->getLParenLoc().getLocWithOffset(1), "std::move(");
-
-  if (auto IncludeFixit = Inserter->CreateIncludeInsertion(
-  Result.SourceManager->getFileID(Initializer->getSourceLocation()),
-  "utility",
-  /*IsAngled=*/true)) {
-Diag << *IncludeFixit;
-  }
+  Initializer->getLParenLoc().getLocWithOffset(1), "std::move(")
+   << Inserter->CreateIncludeInsertion(
+  
Result.SourceManager->getFileID(Initializer->getSourceLocation()),
+  "utility",
+  /*IsAngled=*/true);
 }
 
 } // namespace modernize

diff  --git a/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
index 515b2146f06c..295be200bca6 100644
--- a/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
@@ -148,14 +148,12 @@ void ReplaceAutoPtrCheck::check(const 
MatchFinder::MatchResult ) {
 if (Range.isInvalid())
   return;
 
-auto Diag = diag(Range.getBegin(), "use std::move to transfer ownership")
-<< FixItHint::CreateInsertion(Range.getBegin(), "std::move(")
-<< FixItHint::CreateInsertion(Range.getEnd(), ")");
-
-if (auto Fix =
-Inserter->CreateIncludeInsertion(SM.getMainFileID(), "utility",
- /*IsAngled=*/true))
-  Diag << *Fix;
+auto Diag =
+diag(Range.getBegin(), "use std::move to transfer ownership")
+<< FixItHint::CreateInsertion(Range.getBegin(), "std::move(")
+<< FixItHint::CreateInsertion(Range.getEnd(), ")")
+<< Inserter->CreateIncludeInsertion(SM.getMainFileID(), "utility",
+/*IsAngled=*/true);
 
 return;
   }

diff  --git 
a/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp 
b/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
index 550772972923..9cfbd87239dc 100644
--- a/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
@@ -94,13 +94,10 @@ void ReplaceRandomShuffleCheck::check(const 
MatchFinder::MatchResult ) {
 
   Diag << FixItHint::CreateRemoval(MatchedDecl->getSourceRange());
   Diag << FixItHint::CreateInsertion(MatchedDecl->getBeginLoc(), NewName);
-
-  if (Optional IncludeFixit =
-  IncludeInserter->CreateIncludeInsertion(
-  Result.Context->getSourceManager().getFileID(
-  MatchedCallExpr->getBeginLoc()),
-  "random", /*IsAngled=*/true))
-Diag << IncludeFixit.getValue();
+  Diag << IncludeInserter->CreateIncludeInsertion(
+  Result.Context->getSourceManager().getFileID(
+  MatchedCallExpr->getBeginLoc()),
+  "random", /*IsAngled=*/true);
 }
 
 } // namespace modernize

diff  --git 
a/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp 
b/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
index 1d7ee4baae93..d08cec1a2c3c 100644
--- a/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
+++ b/clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
@@ -193,10 +193,9 @@ void TypePromotionInMathFnCheck::check(const 
MatchFinder::MatchResult ) {
   // , because the functions we're suggesting moving away from are 

[PATCH] D80981: [AST] Fix a crash on accessing a class without definition in constexpr function context.

2020-06-19 Thread Haojian Wu via Phabricator via cfe-commits
hokein updated this revision to Diff 272019.
hokein added a comment.

cleanup the debug code.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80981

Files:
  clang/lib/AST/ExprConstant.cpp
  clang/test/SemaCXX/constexpr-default-init-value-crash.cpp

Index: clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
===
--- /dev/null
+++ clang/test/SemaCXX/constexpr-default-init-value-crash.cpp
@@ -0,0 +1,14 @@
+// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -verify
+// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -verify -fno-recovery-ast
+
+namespace NoCrash {
+struct ForwardDecl; // expected-note {{forward declaration of}}
+struct Foo {// expected-note 2{{candidate constructor}}
+  ForwardDecl f;// expected-error {{field has incomplete type}}
+};
+
+constexpr Foo getFoo() {
+  Foo e = 123; // expected-error {{no viable conversion from 'int' to 'NoCrash::Foo'}}
+  return e;
+}
+}
Index: clang/lib/AST/ExprConstant.cpp
===
--- clang/lib/AST/ExprConstant.cpp
+++ clang/lib/AST/ExprConstant.cpp
@@ -4312,37 +4312,48 @@
 }
 
 /// Get the value to use for a default-initialized object of type T.
-static APValue getDefaultInitValue(QualType T) {
+/// Return false if fails.
+static bool getDefaultInitValue(QualType T, APValue ) {
+  bool Success = true;
   if (auto *RD = T->getAsCXXRecordDecl()) {
-if (RD->isUnion())
-  return APValue((const FieldDecl*)nullptr);
-
-APValue Struct(APValue::UninitStruct(), RD->getNumBases(),
-   std::distance(RD->field_begin(), RD->field_end()));
+if (RD->isInvalidDecl()) {
+  Result = APValue();
+  return false;
+}
+if (RD->isUnion()) {
+  Result = APValue((const FieldDecl *)nullptr);
+  return true;
+}
+Result = APValue(APValue::UninitStruct(), RD->getNumBases(),
+ std::distance(RD->field_begin(), RD->field_end()));
 
 unsigned Index = 0;
 for (CXXRecordDecl::base_class_const_iterator I = RD->bases_begin(),
-   End = RD->bases_end(); I != End; ++I, ++Index)
-  Struct.getStructBase(Index) = getDefaultInitValue(I->getType());
+  End = RD->bases_end();
+ I != End; ++I, ++Index)
+  Success &= getDefaultInitValue(I->getType(), Result.getStructBase(Index));
 
 for (const auto *I : RD->fields()) {
   if (I->isUnnamedBitfield())
 continue;
-  Struct.getStructField(I->getFieldIndex()) =
-  getDefaultInitValue(I->getType());
+  Success &= getDefaultInitValue(I->getType(),
+ Result.getStructField(I->getFieldIndex()));
 }
-return Struct;
+return Success;
   }
 
   if (auto *AT =
   dyn_cast_or_null(T->getAsArrayTypeUnsafe())) {
-APValue Array(APValue::UninitArray(), 0, AT->getSize().getZExtValue());
-if (Array.hasArrayFiller())
-  Array.getArrayFiller() = getDefaultInitValue(AT->getElementType());
-return Array;
+Result = APValue(APValue::UninitArray(), 0, AT->getSize().getZExtValue());
+if (Result.hasArrayFiller())
+  Success &=
+  getDefaultInitValue(AT->getElementType(), Result.getArrayFiller());
+
+return Success;
   }
 
-  return APValue::IndeterminateValue();
+  Result = APValue::IndeterminateValue();
+  return true;
 }
 
 namespace {
@@ -4372,10 +4383,8 @@
   Info.CurrentCall->createTemporary(VD, VD->getType(), true, Result);
 
   const Expr *InitE = VD->getInit();
-  if (!InitE) {
-Val = getDefaultInitValue(VD->getType());
-return true;
-  }
+  if (!InitE)
+return getDefaultInitValue(VD->getType(), Val);
 
   if (InitE->isValueDependent())
 return false;
@@ -5372,11 +5381,11 @@
   const Expr *LHSExpr;
   const FieldDecl *Field;
   bool DuringInit;
-
+  bool Failed = false;
   static const AccessKinds AccessKind = AK_Assign;
 
   typedef bool result_type;
-  bool failed() { return false; }
+  bool failed() { return Failed; }
   bool found(APValue , QualType SubobjType) {
 // We are supposed to perform no initialization but begin the lifetime of
 // the object. We interpret that as meaning to do what default
@@ -5400,8 +5409,9 @@
   diag::note_constexpr_union_member_change_during_init);
   return false;
 }
-
-Subobj.setUnion(Field, getDefaultInitValue(Field->getType()));
+APValue Result;
+Failed = !getDefaultInitValue(Field->getType(), Result);
+Subobj.setUnion(Field, Result);
 return true;
   }
   bool found(APSInt , QualType SubobjType) {
@@ -5717,8 +5727,9 @@
 for (; !declaresSameEntity(*FieldIt, FD); ++FieldIt) {
   assert(FieldIt != RD->field_end() && "missing field?");
   if (!FieldIt->isUnnamedBitfield())
-Result.getStructField(FieldIt->getFieldIndex()) =
-

[PATCH] D80981: [AST] Fix a crash on accessing a class without definition in constexpr function context.

2020-06-19 Thread Haojian Wu via Phabricator via cfe-commits
hokein added inline comments.



Comment at: clang/lib/AST/ExprConstant.cpp:4320
+if (!RD->hasDefinition())
+  return APValue();
 APValue Struct(APValue::UninitStruct(), RD->getNumBases(),

rsmith wrote:
> hokein wrote:
> > rsmith wrote:
> > > hokein wrote:
> > > > sammccall wrote:
> > > > > This doesn't look all that safe - you're using a `None` value to 
> > > > > indicate failure, but no current code path does that and none of the 
> > > > > callers seem to check for failure.
> > > > > (e.g. `evaluateVarDecl` returns true instead of false).
> > > > > Presumably we're going to get a diagnostic somewhere (though it's not 
> > > > > completely obvious to me) but can we be sure we won't assume this 
> > > > > value has the right type somewhere down the line?
> > > > > 
> > > > > I get the feeling this is correct and I don't have enough context to 
> > > > > understand why... how about you :-)
> > > > I don't have a promising explanation neither. 
> > > > 
> > > > I didn't find a better way to model failures in `getDefaultInitValue`. 
> > > > This function is used in multiple places of this file (and I'm not sure 
> > > > whether we should change it).
> > > > 
> > > > @rsmith any thoughts?
> > > `APValue()` is a valid representation for an object of class type, 
> > > representing a class object that is outside its lifetime, so I think it's 
> > > OK to use this representation, if we can be sure that this only happens 
> > > along error paths. (It's not ideal, though.)
> > > 
> > > If we can't be sure this happens only along error paths, then we should 
> > > produce a diagnostic here. Perhaps feed an `EvalInfo&` and a source 
> > > location into every caller of this function and produce a diagnostic if 
> > > we end up querying the default-initialized value of an 
> > > incomplete-but-valid class type. Or perhaps we could check that the class 
> > > is complete and valid from every caller of this function instead. (I 
> > > think that we guarantee that, for a valid complete class type, all 
> > > transitive subobjects are of valid complete types, so checking this only 
> > > once at the top level before calling into `getDefaultInitValue` should be 
> > > enough.)
> > Thanks for the suggestions.
> > 
> > oh, yeah, I missed that the `Foo` Decl is invalid, so checking the class 
> > decl is valid at every caller of `getDefaultInitValue` should work -- it 
> > would also fix other potential issues, looks like here we guarantee that 
> > the VarDecl is valid, but don't verify the decl which the VarDecl's type 
> > refers to is valid in all callers.  
> > 
> > Given the fact that the `VarDecl` e is valid and class `Foo` Decl is 
> > invalid, another option to fix the crash is to invalidate this `VarDecl`. 
> > Should we invalidate the VarDecl if the type of the VarDecl refers to an 
> > invalid decl? My gut feeling is that it is worth keeping the VarDecl valid, 
> > so that more related AST nodes will be built (for better recovery and 
> > diagnostics), though it seems unsafe. 
> I think keeping the `VarDecl` valid is probably the better choice, to allow 
> us to build downstream uses of it. Also, because variables can be redeclared, 
> we could have something like `struct A; extern A v; struct A { invalid; };` 
> -- and we can't reasonably retroactively mark `v` as invalid in this case, so 
> we can't guarantee that the type of every valid variable is itself valid. (We 
> *could* guarantee that the type of every valid variable *definition* is 
> valid, but that will lead to inconsistencies where defining the variable 
> causes later behavior of references to the variable to change.)
> 
> It's really unfortunate that we don't have a good definition of what "valid" 
> means for a variable, or really any listing of what invariants we maintain in 
> the AST in the presence of invalid nodes. :( This is one of the things I 
> would work on if I had time...
> I think keeping the VarDecl valid is probably the better choice, to allow us 
> to build downstream uses of it. Also, because variables can be redeclared, we 
> could have something like struct A; extern A v; struct A { invalid; }; -- and 
> we can't reasonably retroactively mark v as invalid in this case, so we can't 
> guarantee that the type of every valid variable is itself valid. (We *could* 
> guarantee that the type of every valid variable *definition* is valid, but 
> that will lead to inconsistencies where defining the variable causes later 
> behavior of references to the variable to change.

yeah, that makes sense, thanks for the explanation.

I have updated the patch -- now the `getDefaultInitValue()` does error check. 
If fails, return `APValue()` which will only happen on error paths. Since it 
changes non-trivial amount of code, would be nice if you can take a look.

> It's really unfortunate that we don't have a good definition of what "valid" 
> means for a variable, or really any listing of what 

[PATCH] D81285: [builtins] Change si_int to int in some helper declarations

2020-06-19 Thread Ayke via Phabricator via cfe-commits
aykevl added a comment.

In D81285#2102948 , @atrosinenko wrote:

> On renaming fixed width integer types to their traditional names: I would 
> prefer sending such patch afterwards, it would probably be as simple as just 
> running `sed --in-place` several times.


Yes definitely. It seems best to me to separate refactorings from functional 
changes. If it should indeed be done, I'm not a maintainer of compiler-rt.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81285



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


[clang-tools-extra] 0628705 - [clangd][NFC] Rename FSProvider and getFileSystem

2020-06-19 Thread Kadir Cetinkaya via cfe-commits

Author: Kadir Cetinkaya
Date: 2020-06-19T12:12:03+02:00
New Revision: 0628705efaf7345c82887aeb61bb9bf1e06e5dd9

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

LOG: [clangd][NFC] Rename FSProvider and getFileSystem

Summary:
Clangd uses FSProvider to get threadsafe views into file systems. This
patch changes naming to make that more explicit.

Depends on D81920

Reviewers: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

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

Added: 
clang-tools-extra/clangd/support/ThreadsafeFS.cpp
clang-tools-extra/clangd/support/ThreadsafeFS.h

Modified: 
clang-tools-extra/clangd/ClangdLSPServer.cpp
clang-tools-extra/clangd/ClangdLSPServer.h
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/ClangdServer.h
clang-tools-extra/clangd/CodeComplete.cpp
clang-tools-extra/clangd/Compiler.cpp
clang-tools-extra/clangd/Compiler.h
clang-tools-extra/clangd/ParsedAST.cpp
clang-tools-extra/clangd/Preamble.cpp
clang-tools-extra/clangd/SourceCode.cpp
clang-tools-extra/clangd/SourceCode.h
clang-tools-extra/clangd/fuzzer/clangd-fuzzer.cpp
clang-tools-extra/clangd/index/Background.cpp
clang-tools-extra/clangd/index/Background.h
clang-tools-extra/clangd/support/CMakeLists.txt
clang-tools-extra/clangd/tool/ClangdMain.cpp
clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp
clang-tools-extra/clangd/unittests/ClangdLSPServerTests.cpp
clang-tools-extra/clangd/unittests/ClangdTests.cpp
clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
clang-tools-extra/clangd/unittests/CompilerTests.cpp
clang-tools-extra/clangd/unittests/FileIndexTests.cpp
clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp
clang-tools-extra/clangd/unittests/HeadersTests.cpp
clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
clang-tools-extra/clangd/unittests/PreambleTests.cpp
clang-tools-extra/clangd/unittests/RenameTests.cpp
clang-tools-extra/clangd/unittests/SemanticHighlightingTests.cpp
clang-tools-extra/clangd/unittests/SemanticSelectionTests.cpp
clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
clang-tools-extra/clangd/unittests/TestFS.h
clang-tools-extra/clangd/unittests/TestTU.cpp
clang-tools-extra/clangd/unittests/TestTU.h
clang-tools-extra/clangd/unittests/XRefsTests.cpp

Removed: 
clang-tools-extra/clangd/support/FSProvider.cpp
clang-tools-extra/clangd/support/FSProvider.h



diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp 
b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index db9932a43e5a..a42616116858 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -1340,7 +1340,7 @@ void ClangdLSPServer::onSemanticTokensEdits(
 }
 
 ClangdLSPServer::ClangdLSPServer(
-class Transport , const FileSystemProvider ,
+class Transport , const ThreadsafeFS ,
 const clangd::CodeCompleteOptions ,
 const clangd::RenameOptions ,
 llvm::Optional CompileCommandsDir, bool UseDirBasedCDB,

diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.h 
b/clang-tools-extra/clangd/ClangdLSPServer.h
index c3da2f9a9457..a62f2cebcae2 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.h
+++ b/clang-tools-extra/clangd/ClangdLSPServer.h
@@ -41,7 +41,7 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
   /// for compile_commands.json in all parent directories of each file.
   /// If UseDirBasedCDB is false, compile commands are not read from disk.
   // FIXME: Clean up signature around CDBs.
-  ClangdLSPServer(Transport , const FileSystemProvider ,
+  ClangdLSPServer(Transport , const ThreadsafeFS ,
   const clangd::CodeCompleteOptions ,
   const clangd::RenameOptions ,
   llvm::Optional CompileCommandsDir, bool UseDirBasedCDB,
@@ -207,7 +207,7 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
 notify("$/progress", Params);
   }
 
-  const FileSystemProvider 
+  const ThreadsafeFS 
   /// Options used for code completion
   clangd::CodeCompleteOptions CCOpts;
   /// Options used for rename.

diff  --git a/clang-tools-extra/clangd/ClangdServer.cpp 
b/clang-tools-extra/clangd/ClangdServer.cpp
index 2007f922c9e3..f8c0ee9df3a3 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -27,6 +27,7 @@
 #include "refactor/Tweak.h"
 #include "support/Logger.h"
 #include "support/Markup.h"
+#include "support/ThreadsafeFS.h"
 #include "support/Trace.h"
 #include "clang/Format/Format.h"
 #include 

[clang-tools-extra] 2dc2e47 - [clangd] Change FSProvider::getFileSystem to take CurrentWorkingDirectory

2020-06-19 Thread Kadir Cetinkaya via cfe-commits

Author: Kadir Cetinkaya
Date: 2020-06-19T12:12:02+02:00
New Revision: 2dc2e47e3cb73d1adf40b42d0560af4d77e6e828

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

LOG: [clangd] Change FSProvider::getFileSystem to take CurrentWorkingDirectory

Summary:
We've faced a couple of problems when the returned FS didn't have the
proper working directory. New signature makes the API safer against such
problems.

Reviewers: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

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

Added: 


Modified: 
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/CodeComplete.cpp
clang-tools-extra/clangd/Compiler.cpp
clang-tools-extra/clangd/ParsedAST.cpp
clang-tools-extra/clangd/Preamble.cpp
clang-tools-extra/clangd/SourceCode.cpp
clang-tools-extra/clangd/SourceCode.h
clang-tools-extra/clangd/index/Background.cpp
clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp
clang-tools-extra/clangd/support/FSProvider.cpp
clang-tools-extra/clangd/support/FSProvider.h
clang-tools-extra/clangd/tool/ClangdMain.cpp
clang-tools-extra/clangd/unittests/ClangdTests.cpp
clang-tools-extra/clangd/unittests/FSTests.cpp
clang-tools-extra/clangd/unittests/HeadersTests.cpp
clang-tools-extra/clangd/unittests/PreambleTests.cpp
clang-tools-extra/clangd/unittests/TestFS.h

Removed: 




diff  --git a/clang-tools-extra/clangd/ClangdServer.cpp 
b/clang-tools-extra/clangd/ClangdServer.cpp
index 3539de0e561e..2007f922c9e3 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -183,7 +183,8 @@ void ClangdServer::addDocument(PathRef File, 
llvm::StringRef Contents,
   Opts.ClangTidyOpts = tidy::ClangTidyOptions::getDefaults();
   // FIXME: call tidy options builder on the worker thread, it can do IO.
   if (GetClangTidyOptions)
-Opts.ClangTidyOpts = GetClangTidyOptions(*FSProvider.getFileSystem(), 
File);
+Opts.ClangTidyOpts = GetClangTidyOptions(
+*FSProvider.getFileSystem(/*CWD=*/llvm::None), File);
   Opts.SuggestMissingIncludes = SuggestMissingIncludes;
 
   // Compile command is set asynchronously during update, as it can be slow.
@@ -317,9 +318,9 @@ ClangdServer::formatOnType(llvm::StringRef Code, PathRef 
File, Position Pos,
   llvm::Expected CursorPos = positionToOffset(Code, Pos);
   if (!CursorPos)
 return CursorPos.takeError();
-  auto FS = FSProvider.getFileSystem();
-  auto Style = format::getStyle(format::DefaultFormatStyle, File,
-format::DefaultFallbackStyle, Code, FS.get());
+  auto Style = format::getStyle(
+  format::DefaultFormatStyle, File, format::DefaultFallbackStyle, Code,
+  FSProvider.getFileSystem(/*CWD=*/llvm::None).get());
   if (!Style)
 return Style.takeError();
 
@@ -395,9 +396,8 @@ void ClangdServer::rename(PathRef File, Position Pos, 
llvm::StringRef NewName,
   return CB(Edits.takeError());
 
 if (Opts.WantFormat) {
-  auto Style = getFormatStyleForFile(
-  File, InpAST->Inputs.Contents,
-  InpAST->Inputs.FSProvider->getFileSystem().get());
+  auto Style = getFormatStyleForFile(File, InpAST->Inputs.Contents,
+ *InpAST->Inputs.FSProvider);
   llvm::Error Err = llvm::Error::success();
   for (auto  : *Edits)
 Err =
@@ -473,38 +473,38 @@ void ClangdServer::applyTweak(PathRef File, Range Sel, 
StringRef TweakID,
   static constexpr trace::Metric TweakAttempt(
   "tweak_attempt", trace::Metric::Counter, "tweak_id");
   TweakAttempt.record(1, TweakID);
-  auto Action =
-  [File = File.str(), Sel, TweakID = TweakID.str(), CB = std::move(CB),
-   FS = FSProvider.getFileSystem()](Expected InpAST) mutable 
{
-if (!InpAST)
-  return CB(InpAST.takeError());
-auto Selections = tweakSelection(Sel, *InpAST);
-if (!Selections)
-  return CB(Selections.takeError());
-llvm::Optional> Effect;
-// Try each selection, take the first one that prepare()s.
-// If they all fail, Effect will hold get the last error.
-for (const auto  : *Selections) {
-  auto T = prepareTweak(TweakID, *Selection);
-  if (T) {
-Effect = (*T)->apply(*Selection);
-break;
-  }
-  Effect = T.takeError();
-}
-assert(Effect.hasValue() && "Expected at least one selection");
-if (*Effect) {
-  // Tweaks don't apply clang-format, do that centrally here.
-  for (auto  : (*Effect)->ApplyEdits) {
-Edit  = It.second;
-format::FormatStyle Style =
-

[clang-tools-extra] 8d654df - [clangd] Rename FSProvider to TFS in case of ThreadsafeFS

2020-06-19 Thread Kadir Cetinkaya via cfe-commits

Author: Kadir Cetinkaya
Date: 2020-06-19T12:12:03+02:00
New Revision: 8d654df5b982c97f54aab75852b9150a2bff3634

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

LOG: [clangd] Rename FSProvider to TFS in case of ThreadsafeFS

Summary: Depends on D81998

Reviewers: sammccall

Subscribers: ilya-biryukov, javed.absar, MaskRay, jkorous, arphaman, usaxena95, 
cfe-commits

Tags: #clang

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

Added: 


Modified: 
clang-tools-extra/clangd/ClangdLSPServer.cpp
clang-tools-extra/clangd/ClangdLSPServer.h
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/ClangdServer.h
clang-tools-extra/clangd/CodeComplete.cpp
clang-tools-extra/clangd/Compiler.cpp
clang-tools-extra/clangd/Compiler.h
clang-tools-extra/clangd/ParsedAST.cpp
clang-tools-extra/clangd/Preamble.cpp
clang-tools-extra/clangd/SourceCode.cpp
clang-tools-extra/clangd/SourceCode.h
clang-tools-extra/clangd/index/Background.cpp
clang-tools-extra/clangd/index/Background.h
clang-tools-extra/clangd/tool/ClangdMain.cpp
clang-tools-extra/clangd/unittests/ClangdTests.cpp
clang-tools-extra/clangd/unittests/FileIndexTests.cpp
clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
clang-tools-extra/clangd/unittests/HeadersTests.cpp
clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
clang-tools-extra/clangd/unittests/PreambleTests.cpp
clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
clang-tools-extra/clangd/unittests/TestTU.cpp
clang-tools-extra/clangd/unittests/TestTU.h

Removed: 




diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp 
b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index a42616116858..93f2746bb6f0 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -524,7 +524,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams 
,
 if (NegotiatedOffsetEncoding)
   WithOffsetEncoding.emplace(kCurrentOffsetEncoding,
  *NegotiatedOffsetEncoding);
-Server.emplace(*CDB, FSProvider, ClangdServerOpts,
+Server.emplace(*CDB, TFS, ClangdServerOpts,
static_cast(this));
   }
   applyConfiguration(Params.initializationOptions.ConfigSettings);
@@ -1340,16 +1340,15 @@ void ClangdLSPServer::onSemanticTokensEdits(
 }
 
 ClangdLSPServer::ClangdLSPServer(
-class Transport , const ThreadsafeFS ,
+class Transport , const ThreadsafeFS ,
 const clangd::CodeCompleteOptions ,
 const clangd::RenameOptions ,
 llvm::Optional CompileCommandsDir, bool UseDirBasedCDB,
 llvm::Optional ForcedOffsetEncoding,
 const ClangdServer::Options )
 : BackgroundContext(Context::current().clone()), Transp(Transp),
-  MsgHandler(new MessageHandler(*this)), FSProvider(FSProvider),
-  CCOpts(CCOpts), RenameOpts(RenameOpts),
-  SupportedSymbolKinds(defaultSymbolKinds()),
+  MsgHandler(new MessageHandler(*this)), TFS(TFS), CCOpts(CCOpts),
+  RenameOpts(RenameOpts), SupportedSymbolKinds(defaultSymbolKinds()),
   SupportedCompletionItemKinds(defaultCompletionItemKinds()),
   UseDirBasedCDB(UseDirBasedCDB),
   CompileCommandsDir(std::move(CompileCommandsDir)), 
ClangdServerOpts(Opts),

diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.h 
b/clang-tools-extra/clangd/ClangdLSPServer.h
index a62f2cebcae2..6ccef9500679 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.h
+++ b/clang-tools-extra/clangd/ClangdLSPServer.h
@@ -41,7 +41,7 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
   /// for compile_commands.json in all parent directories of each file.
   /// If UseDirBasedCDB is false, compile commands are not read from disk.
   // FIXME: Clean up signature around CDBs.
-  ClangdLSPServer(Transport , const ThreadsafeFS ,
+  ClangdLSPServer(Transport , const ThreadsafeFS ,
   const clangd::CodeCompleteOptions ,
   const clangd::RenameOptions ,
   llvm::Optional CompileCommandsDir, bool UseDirBasedCDB,
@@ -207,7 +207,7 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
 notify("$/progress", Params);
   }
 
-  const ThreadsafeFS 
+  const ThreadsafeFS 
   /// Options used for code completion
   clangd::CodeCompleteOptions CCOpts;
   /// Options used for rename.

diff  --git a/clang-tools-extra/clangd/ClangdServer.cpp 
b/clang-tools-extra/clangd/ClangdServer.cpp
index f8c0ee9df3a3..6c7255c96963 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -130,9 +130,9 @@ ClangdServer::Options::operator TUScheduler::Options() 
const {
 }
 
 ClangdServer::ClangdServer(const GlobalCompilationDatabase ,
-   

[PATCH] D81998: [clangd][NFC] Rename FSProvider and getFileSystem

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet added inline comments.



Comment at: clang-tools-extra/clangd/unittests/TestFS.h:36
 public:
-  // Prevent name hiding caused by the overload below.
-  using FileSystemProvider::getFileSystem;
-
   IntrusiveRefCntPtr getFileSystem() const {
 return buildTestFS(Files, Timestamps);

sammccall wrote:
> this looks out of place - should it be inlined or renamed?
i thought this had a ton of usage in our tests, apparently that's not the case. 
changed those usages to `view(llvm::None)` instead and inlined this.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81998



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


[PATCH] D82024: [clangd] Rename FSProvider to TFS in case of ThreadsafeFS

2020-06-19 Thread Kadir Cetinkaya via Phabricator via cfe-commits
kadircet updated this revision to Diff 271985.
kadircet marked 2 inline comments as done.
kadircet added a comment.

- Address comments


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82024

Files:
  clang-tools-extra/clangd/ClangdLSPServer.cpp
  clang-tools-extra/clangd/ClangdLSPServer.h
  clang-tools-extra/clangd/ClangdServer.cpp
  clang-tools-extra/clangd/ClangdServer.h
  clang-tools-extra/clangd/CodeComplete.cpp
  clang-tools-extra/clangd/Compiler.cpp
  clang-tools-extra/clangd/Compiler.h
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/Preamble.cpp
  clang-tools-extra/clangd/SourceCode.cpp
  clang-tools-extra/clangd/SourceCode.h
  clang-tools-extra/clangd/index/Background.cpp
  clang-tools-extra/clangd/index/Background.h
  clang-tools-extra/clangd/tool/ClangdMain.cpp
  clang-tools-extra/clangd/unittests/ClangdTests.cpp
  clang-tools-extra/clangd/unittests/FileIndexTests.cpp
  clang-tools-extra/clangd/unittests/FindSymbolsTests.cpp
  clang-tools-extra/clangd/unittests/HeadersTests.cpp
  clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
  clang-tools-extra/clangd/unittests/PreambleTests.cpp
  clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
  clang-tools-extra/clangd/unittests/TestTU.cpp
  clang-tools-extra/clangd/unittests/TestTU.h

Index: clang-tools-extra/clangd/unittests/TestTU.h
===
--- clang-tools-extra/clangd/unittests/TestTU.h
+++ clang-tools-extra/clangd/unittests/TestTU.h
@@ -70,7 +70,7 @@
   // Suppress this behavior by adding an 'error-ok' comment to the code.
   ParsedAST build() const;
   std::shared_ptr preamble() const;
-  ParseInputs inputs(MockFS ) const;
+  ParseInputs inputs(MockFS ) const;
   SymbolSlab headerSymbols() const;
   RefSlab headerRefs() const;
   std::unique_ptr index() const;
Index: clang-tools-extra/clangd/unittests/TestTU.cpp
===
--- clang-tools-extra/clangd/unittests/TestTU.cpp
+++ clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -20,7 +20,7 @@
 namespace clang {
 namespace clangd {
 
-ParseInputs TestTU::inputs(MockFS ) const {
+ParseInputs TestTU::inputs(MockFS ) const {
   std::string FullFilename = testPath(Filename),
   FullHeaderName = testPath(HeaderFilename),
   ImportThunk = testPath("import_thunk.h");
@@ -29,10 +29,10 @@
   // guard without messing up offsets). In this case, use an intermediate file.
   std::string ThunkContents = "#import \"" + FullHeaderName + "\"\n";
 
-  FSProvider.Files = AdditionalFiles;
-  FSProvider.Files[FullFilename] = Code;
-  FSProvider.Files[FullHeaderName] = HeaderCode;
-  FSProvider.Files[ImportThunk] = ThunkContents;
+  FS.Files = AdditionalFiles;
+  FS.Files[FullFilename] = Code;
+  FS.Files[FullHeaderName] = HeaderCode;
+  FS.Files[ImportThunk] = ThunkContents;
 
   ParseInputs Inputs;
   auto  = Inputs.CompileCommand.CommandLine;
@@ -54,7 +54,7 @@
   Inputs.CompileCommand.Filename = FullFilename;
   Inputs.CompileCommand.Directory = testRoot();
   Inputs.Contents = Code;
-  Inputs.FSProvider = 
+  Inputs.TFS = 
   Inputs.Opts = ParseOptions();
   Inputs.Opts.BuildRecoveryAST = true;
   Inputs.Opts.PreserveRecoveryASTType = true;
@@ -67,8 +67,8 @@
 }
 
 std::shared_ptr TestTU::preamble() const {
-  MockFS FSProvider;
-  auto Inputs = inputs(FSProvider);
+  MockFS FS;
+  auto Inputs = inputs(FS);
   IgnoreDiagnostics Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
   assert(CI && "Failed to build compilation invocation.");
@@ -78,8 +78,8 @@
 }
 
 ParsedAST TestTU::build() const {
-  MockFS FSProvider;
-  auto Inputs = inputs(FSProvider);
+  MockFS FS;
+  auto Inputs = inputs(FS);
   StoreDiags Diags;
   auto CI = buildCompilerInvocation(Inputs, Diags);
   assert(CI && "Failed to build compilation invocation.");
Index: clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
===
--- clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
+++ clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
@@ -74,7 +74,7 @@
   ParseInputs getInputs(PathRef File, std::string Contents) {
 ParseInputs Inputs;
 Inputs.CompileCommand = *CDB.getCompileCommand(File);
-Inputs.FSProvider = 
+Inputs.TFS = 
 Inputs.Contents = std::move(Contents);
 Inputs.Opts = ParseOptions();
 return Inputs;
@@ -150,7 +150,7 @@
std::move(CB));
   }
 
-  MockFS FSProvider;
+  MockFS FS;
   MockCompilationDatabase CDB;
 };
 
@@ -161,10 +161,10 @@
   TUScheduler S(CDB, optsForTest());
 
   auto Added = testPath("added.cpp");
-  FSProvider.Files[Added] = "x";
+  FS.Files[Added] = "x";
 
   auto Missing = testPath("missing.cpp");
-  FSProvider.Files[Missing] = "";
+  FS.Files[Missing] = "";
 
   S.update(Added, getInputs(Added, "x"), WantDiagnostics::No);
 
@@ -425,7 +425,7 

[PATCH] D81975: [clangd] Add command line option for ClangTidyConfig

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 abandoned this revision.
njames93 added a comment.

Abandoned in favour of the proposed clangd-config 
.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81975



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


[PATCH] D82011: [clangd] Don't mangle workdir-relevant driver path in compile commands

2020-06-19 Thread Sam McCall via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa3b793401255: [clangd] Dont mangle workdir-relevant 
driver path in compile commands (authored by sammccall).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82011

Files:
  clang-tools-extra/clangd/CompileCommands.cpp
  clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp


Index: clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
===
--- clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
+++ clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
@@ -115,7 +115,7 @@
 
   Cmd = {"foo/unknown-binary", "foo.cc"};
   Mangler.adjust(Cmd);
-  EXPECT_EQ(testPath("fake/unknown-binary"), Cmd.front());
+  EXPECT_EQ("foo/unknown-binary", Cmd.front());
 }
 
 // Only run the PATH/symlink resolving test on unix, we need to fiddle
Index: clang-tools-extra/clangd/CompileCommands.cpp
===
--- clang-tools-extra/clangd/CompileCommands.cpp
+++ clang-tools-extra/clangd/CompileCommands.cpp
@@ -135,6 +135,12 @@
   // First, eliminate relative paths.
   std::string Storage;
   if (!llvm::sys::path::is_absolute(Driver)) {
+// If it's working-dir relative like bin/clang, we can't resolve it.
+// FIXME: we could if we had the working directory here.
+// Let's hope it's not a symlink.
+if (llvm::any_of(Driver,
+ [](char C) { return llvm::sys::path::is_separator(C); }))
+  return Driver.str();
 // If the driver is a generic like "g++" with no path, add clang dir.
 if (ClangPath &&
 (Driver == "clang" || Driver == "clang++" || Driver == "gcc" ||


Index: clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
===
--- clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
+++ clang-tools-extra/clangd/unittests/CompileCommandsTests.cpp
@@ -115,7 +115,7 @@
 
   Cmd = {"foo/unknown-binary", "foo.cc"};
   Mangler.adjust(Cmd);
-  EXPECT_EQ(testPath("fake/unknown-binary"), Cmd.front());
+  EXPECT_EQ("foo/unknown-binary", Cmd.front());
 }
 
 // Only run the PATH/symlink resolving test on unix, we need to fiddle
Index: clang-tools-extra/clangd/CompileCommands.cpp
===
--- clang-tools-extra/clangd/CompileCommands.cpp
+++ clang-tools-extra/clangd/CompileCommands.cpp
@@ -135,6 +135,12 @@
   // First, eliminate relative paths.
   std::string Storage;
   if (!llvm::sys::path::is_absolute(Driver)) {
+// If it's working-dir relative like bin/clang, we can't resolve it.
+// FIXME: we could if we had the working directory here.
+// Let's hope it's not a symlink.
+if (llvm::any_of(Driver,
+ [](char C) { return llvm::sys::path::is_separator(C); }))
+  return Driver.str();
 // If the driver is a generic like "g++" with no path, add clang dir.
 if (ClangPath &&
 (Driver == "clang" || Driver == "clang++" || Driver == "gcc" ||
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D82126: [libTooling] Change Transformer's `cat` to handle some cases of text in macros.

2020-06-19 Thread Yitzhak Mandelbaum via Phabricator via cfe-commits
ymandel added a comment.

In D82126#2103772 , @tdl-g wrote:

> LGTM.  I found the change description confusing, since it talks about the 
> selection() stencil but the code is all about the cat() stencil.  I realize 
> (now) that the former is deprecated in favor of the latter.  But the change 
> description is still confusing.


Whoops, I'd forgotten that we'd deprecated that combinator. Thanks for catching 
that. I've updated the description correspondingly.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82126



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


[PATCH] D82029: [Coroutines] Ensure co_await promise.final_suspend() does not throw

2020-06-19 Thread Xun Li via Phabricator via cfe-commits
lxfind updated this revision to Diff 272109.
lxfind added a comment.

Addressed comments: Updated error message, and sorted notes. The tests are kept 
unchanged.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82029

Files:
  clang/include/clang/Basic/DiagnosticSemaKinds.td
  clang/include/clang/Sema/Sema.h
  clang/lib/Sema/SemaCoroutine.cpp
  clang/lib/Sema/SemaExceptionSpec.cpp
  clang/test/AST/Inputs/std-coroutine.h
  clang/test/AST/coroutine-source-location-crash.cpp
  clang/test/Analysis/more-dtors-cfg-output.cpp
  clang/test/CodeGenCXX/ubsan-coroutines.cpp
  clang/test/CodeGenCoroutines/Inputs/coroutine.h
  clang/test/CodeGenCoroutines/coro-alloc.cpp
  clang/test/CodeGenCoroutines/coro-always-inline.cpp
  clang/test/CodeGenCoroutines/coro-await-domination.cpp
  clang/test/CodeGenCoroutines/coro-await-resume-eh.cpp
  clang/test/CodeGenCoroutines/coro-await.cpp
  clang/test/CodeGenCoroutines/coro-dest-slot.cpp
  clang/test/CodeGenCoroutines/coro-gro-nrvo.cpp
  clang/test/CodeGenCoroutines/coro-newpm-pipeline.cpp
  clang/test/CodeGenCoroutines/coro-params.cpp
  clang/test/CodeGenCoroutines/coro-promise-dtor.cpp
  clang/test/CodeGenCoroutines/coro-ret-void.cpp
  clang/test/CodeGenCoroutines/coro-return-voidtype-initlist.cpp
  clang/test/CodeGenCoroutines/coro-return.cpp
  clang/test/CodeGenCoroutines/coro-unhandled-exception.cpp
  clang/test/Index/coroutines.cpp
  clang/test/SemaCXX/Inputs/std-coroutine.h
  clang/test/SemaCXX/co_await-range-for.cpp
  clang/test/SemaCXX/coreturn-eh.cpp
  clang/test/SemaCXX/coreturn.cpp
  clang/test/SemaCXX/coroutine-final-suspend-noexcept.cpp
  clang/test/SemaCXX/coroutine-rvo.cpp
  clang/test/SemaCXX/coroutine-unhandled_exception-warning.cpp
  clang/test/SemaCXX/coroutine-uninitialized-warning-crash.cpp
  clang/test/SemaCXX/coroutines.cpp

Index: clang/test/SemaCXX/coroutines.cpp
===
--- clang/test/SemaCXX/coroutines.cpp
+++ clang/test/SemaCXX/coroutines.cpp
@@ -52,21 +52,24 @@
 };
 
 struct awaitable {
-  bool await_ready();
-  template  void await_suspend(F);
-  void await_resume();
+  bool await_ready() noexcept;
+  template 
+  void await_suspend(F) noexcept;
+  void await_resume() noexcept;
 } a;
 
 struct suspend_always {
-  bool await_ready() { return false; }
-  template  void await_suspend(F);
-  void await_resume() {}
+  bool await_ready() noexcept { return false; }
+  template 
+  void await_suspend(F) noexcept;
+  void await_resume() noexcept {}
 };
 
 struct suspend_never {
-  bool await_ready() { return true; }
-  template  void await_suspend(F);
-  void await_resume() {}
+  bool await_ready() noexcept { return true; }
+  template 
+  void await_suspend(F) noexcept;
+  void await_resume() noexcept {}
 };
 
 struct auto_await_suspend {
@@ -127,7 +130,7 @@
 struct promise {
   void get_return_object();
   suspend_always initial_suspend();
-  suspend_always final_suspend();
+  suspend_always final_suspend() noexcept;
   awaitable yield_value(int); // expected-note 2{{candidate}}
   awaitable yield_value(yielded_thing); // expected-note 2{{candidate}}
   not_awaitable yield_value(void()); // expected-note 2{{candidate}}
@@ -138,7 +141,7 @@
 struct promise_void {
   void get_return_object();
   suspend_always initial_suspend();
-  suspend_always final_suspend();
+  suspend_always final_suspend() noexcept;
   void return_void();
   void unhandled_exception();
 };
@@ -152,13 +155,13 @@
 namespace experimental {
 template 
 struct coroutine_handle {
-  static coroutine_handle from_address(void *);
+  static coroutine_handle from_address(void *) noexcept;
 };
 template <>
 struct coroutine_handle {
   template 
-  coroutine_handle(coroutine_handle);
-  static coroutine_handle from_address(void *);
+  coroutine_handle(coroutine_handle) noexcept;
+  static coroutine_handle from_address(void *) noexcept;
 };
 }} // namespace std::experimental
 
@@ -402,7 +405,7 @@
 
 namespace adl_ns {
 struct coawait_arg_type {};
-awaitable operator co_await(coawait_arg_type);
+awaitable operator co_await(coawait_arg_type) noexcept;
 }
 
 namespace dependent_operator_co_await_lookup {
@@ -434,7 +437,7 @@
 typedef transform_awaitable await_arg;
 coro get_return_object();
 transformed initial_suspend();
-::adl_ns::coawait_arg_type final_suspend();
+::adl_ns::coawait_arg_type final_suspend() noexcept;
 transformed await_transform(transform_awaitable);
 void unhandled_exception();
 void return_void();
@@ -444,7 +447,7 @@
 typedef AwaitArg await_arg;
 coro get_return_object();
 awaitable initial_suspend();
-awaitable final_suspend();
+awaitable final_suspend() noexcept;
 void unhandled_exception();
 void return_void();
   };
@@ -529,7 +532,7 @@
 void return_value(int());
 
 suspend_never initial_suspend();
-suspend_never final_suspend();
+suspend_never final_suspend() 

[PATCH] D79910: [x86][seses] Add clang flag; Use lvi-cfi with seses

2020-06-19 Thread Zola Bridges via Phabricator via cfe-commits
zbrid added inline comments.



Comment at: 
llvm/lib/Target/X86/X86SpeculativeExecutionSideEffectSuppression.cpp:90
+  const X86Subtarget  = MF.getSubtarget();
+  if (!Subtarget.useSpeculativeExecutionSideEffectSuppression() &&
+  !EnableSpeculativeExecutionSideEffectSuppression)

zbrid wrote:
> sconstab wrote:
> > Is it really necessary to have the target feature and the CLI flag? If 
> > SESES is required for, say, a *.ll file, then `+seses` can always be added 
> > as a target feature.
> I think there should be a way to turn on SESES without lvi-cfi. Similar to 
> how there are flags to turn on SLH in various configurations. I'll see if I 
> can lower the number of flags while still enabling that possibility.
Ah I think I'll change the SESES-only flag to enable-without-lvi-cfi, so it's 
more explicit it's missing functionality/security. Updates will come soon.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79910



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


[PATCH] D79910: [x86][seses] Add clang flag; Use lvi-cfi with seses

2020-06-19 Thread Zola Bridges via Phabricator via cfe-commits
zbrid updated this revision to Diff 272105.
zbrid marked an inline comment as done.
zbrid added a comment.

Update Clang Command Ref with automated tool


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79910

Files:
  clang/docs/ClangCommandLineReference.rst
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/Arch/X86.cpp
  clang/test/Driver/x86-target-features.c
  llvm/lib/Target/X86/X86.td
  llvm/lib/Target/X86/X86SpeculativeExecutionSideEffectSuppression.cpp
  llvm/lib/Target/X86/X86Subtarget.h

Index: llvm/lib/Target/X86/X86Subtarget.h
===
--- llvm/lib/Target/X86/X86Subtarget.h
+++ llvm/lib/Target/X86/X86Subtarget.h
@@ -437,6 +437,9 @@
   /// POP+LFENCE+JMP sequence.
   bool UseLVIControlFlowIntegrity = false;
 
+  /// Enable Speculative Execution Side Effect Suppression
+  bool UseSpeculativeExecutionSideEffectSuppression = false;
+
   /// Insert LFENCE instructions to prevent data speculatively injected into
   /// loads from being used maliciously.
   bool UseLVILoadHardening = false;
@@ -744,6 +747,9 @@
   bool useGLMDivSqrtCosts() const { return UseGLMDivSqrtCosts; }
   bool useLVIControlFlowIntegrity() const { return UseLVIControlFlowIntegrity; }
   bool useLVILoadHardening() const { return UseLVILoadHardening; }
+  bool useSpeculativeExecutionSideEffectSuppression() const {
+return UseSpeculativeExecutionSideEffectSuppression;
+  }
 
   unsigned getPreferVectorWidth() const { return PreferVectorWidth; }
   unsigned getRequiredVectorWidth() const { return RequiredVectorWidth; }
Index: llvm/lib/Target/X86/X86SpeculativeExecutionSideEffectSuppression.cpp
===
--- llvm/lib/Target/X86/X86SpeculativeExecutionSideEffectSuppression.cpp
+++ llvm/lib/Target/X86/X86SpeculativeExecutionSideEffectSuppression.cpp
@@ -86,13 +86,14 @@
 
 bool X86SpeculativeExecutionSideEffectSuppression::runOnMachineFunction(
 MachineFunction ) {
-  if (!EnableSpeculativeExecutionSideEffectSuppression)
+  const X86Subtarget  = MF.getSubtarget();
+  if (!Subtarget.useSpeculativeExecutionSideEffectSuppression() &&
+  !EnableSpeculativeExecutionSideEffectSuppression)
 return false;
 
   LLVM_DEBUG(dbgs() << "** " << getPassName() << " : " << MF.getName()
 << " **\n");
   bool Modified = false;
-  const X86Subtarget  = MF.getSubtarget();
   const X86InstrInfo *TII = Subtarget.getInstrInfo();
   for (MachineBasicBlock  : MF) {
 MachineInstr *FirstTerminator = nullptr;
Index: llvm/lib/Target/X86/X86.td
===
--- llvm/lib/Target/X86/X86.td
+++ llvm/lib/Target/X86/X86.td
@@ -435,6 +435,13 @@
   "ourselves. Only has effect when combined with some other retpoline "
   "feature", [FeatureRetpolineIndirectCalls]>;
 
+// Enable SESES to mitigate speculative execution attacks
+def FeatureSpeculativeExecutionSideEffectSuppression
+: SubtargetFeature<
+  "seses", "UseSpeculativeExecutionSideEffectSuppression", "true",
+  "Prevent speculative execution side channel timing attacks by "
+  "inserting a speculation barrier before memory reads, memory writes, "
+  "and conditional branches.">;
 // Mitigate LVI attacks against indirect calls/branches and call returns
 def FeatureLVIControlFlowIntegrity
 : SubtargetFeature<
Index: clang/test/Driver/x86-target-features.c
===
--- clang/test/Driver/x86-target-features.c
+++ clang/test/Driver/x86-target-features.c
@@ -178,6 +178,27 @@
 // RUN: %clang -target i386-linux-gnu -mlvi-hardening -mretpoline-external-thunk %s -### -o %t.o 2>&1 | FileCheck -check-prefix=LVIHARDENING-RETPOLINE-EXTERNAL-THUNK %s
 // LVIHARDENING-RETPOLINE-EXTERNAL-THUNK: error: invalid argument 'mretpoline-external-thunk' not allowed with 'mlvi-hardening'
 
+// RUN: %clang -target i386-linux-gnu -mseses %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SESES %s
+// RUN: %clang -target i386-linux-gnu -mno-seses %s -### -o %t.o 2>&1 | FileCheck -check-prefix=NO-SESES %s
+// SESES: "-target-feature" "+seses"
+// SESES: "-target-feature" "+lvi-cfi"
+// NO-SESES-NOT: seses
+// NO-SESES-NOT: lvi-cfi
+
+// RUN: %clang -target i386-linux-gnu -mseses -mno-lvi-cfi %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SESES-NOLVICFI %s
+// SESES-NOLVICFI: "-target-feature" "+seses"
+// SESES-NOLVICFI-NOT: lvi-cfi
+
+// RUN: %clang -target i386-linux-gnu -mseses -mspeculative-load-hardening %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SESES-SLH %s
+// SESES-SLH: error: invalid argument 'mspeculative-load-hardening' not allowed with 'mseses'
+// RUN: %clang -target i386-linux-gnu -mseses -mretpoline %s -### -o %t.o 2>&1 | FileCheck -check-prefix=SESES-RETPOLINE %s
+// SESES-RETPOLINE: error: 

[PATCH] D82126: [libTooling] Change Transformer's `cat` to handle some cases of text in macros.

2020-06-19 Thread Yitzhak Mandelbaum via Phabricator via cfe-commits
ymandel added a comment.

Tests show that this breaks the test for the clang tidy 
`abseil-string-find-str-contains`.  Curious if this is a desirable change in 
behavior (in which case I'll update your test file) or the wrong behavior:

https://github.com/llvm/llvm-project/blob/master/clang-tools-extra/test/clang-tidy/checkers/abseil-string-find-str-contains.cpp#L246-L252

  void no_macros() {
 std::string s;
  -  COMPARE_MACRO(s.find("a"), std::string::npos);
  -  FIND_MACRO(s, "a") == std::string::npos;
  -  FIND_COMPARE_MACRO(s, "a", std::string::npos);
  +  !absl::StrContains(s, "a");
  +  !absl::StrContains(s, "a");
  +  !absl::StrContains(s, "a");
   }


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82126



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


[PATCH] D82181: [clang-format] indent in chained conditionals when AlignOperands:DontAlign

2020-06-19 Thread Krasimir Georgiev via Phabricator via cfe-commits
krasimir created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

TODO


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82181

Files:
  clang/lib/Format/ContinuationIndenter.cpp


Index: clang/lib/Format/ContinuationIndenter.cpp
===
--- clang/lib/Format/ContinuationIndenter.cpp
+++ clang/lib/Format/ContinuationIndenter.cpp
@@ -1041,8 +1041,10 @@
   //* not remove the 'lead' ContinuationIndentWidth
   //* always un-indent by the operator when
   //BreakBeforeTernaryOperators=true
-  unsigned Indent =
-  State.Stack.back().Indent - Style.ContinuationIndentWidth;
+  unsigned Indent = State.Stack.back().Indent;
+  if (Style.AlignOperands != FormatStyle::OAS_DontAlign) {
+Indent -= Style.ContinuationIndentWidth;
+  }
   if (Style.BreakBeforeTernaryOperators &&
   State.Stack.back().UnindentOperator)
 Indent -= 2;


Index: clang/lib/Format/ContinuationIndenter.cpp
===
--- clang/lib/Format/ContinuationIndenter.cpp
+++ clang/lib/Format/ContinuationIndenter.cpp
@@ -1041,8 +1041,10 @@
   //* not remove the 'lead' ContinuationIndentWidth
   //* always un-indent by the operator when
   //BreakBeforeTernaryOperators=true
-  unsigned Indent =
-  State.Stack.back().Indent - Style.ContinuationIndentWidth;
+  unsigned Indent = State.Stack.back().Indent;
+  if (Style.AlignOperands != FormatStyle::OAS_DontAlign) {
+Indent -= Style.ContinuationIndentWidth;
+  }
   if (Style.BreakBeforeTernaryOperators &&
   State.Stack.back().UnindentOperator)
 Indent -= 2;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D80753: [clang-tidy] remove duplicate fixes of alias checkers

2020-06-19 Thread Daniel via Phabricator via cfe-commits
Daniel599 updated this revision to Diff 272052.

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

https://reviews.llvm.org/D80753

Files:
  clang-tools-extra/clang-tidy/ClangTidy.cpp
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
  clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
  
clang-tools-extra/test/clang-tidy/infrastructure/duplicate-conflicted-fixes-of-alias-checkers.cpp
  
clang-tools-extra/test/clang-tidy/infrastructure/duplicate-fixes-of-alias-checkers.cpp
  clang-tools-extra/test/clang-tidy/infrastructure/duplicate-reports.cpp
  llvm/include/llvm/ADT/StringMap.h
  llvm/unittests/ADT/StringMapTest.cpp

Index: llvm/unittests/ADT/StringMapTest.cpp
===
--- llvm/unittests/ADT/StringMapTest.cpp
+++ llvm/unittests/ADT/StringMapTest.cpp
@@ -387,6 +387,70 @@
   ASSERT_EQ(B.count("x"), 0u);
 }
 
+TEST_F(StringMapTest, EqualEmpty) {
+  StringMap A;
+  StringMap B;
+  ASSERT_TRUE(A == B);
+  ASSERT_FALSE(A != B);
+  ASSERT_TRUE(A == A); // self check
+}
+
+TEST_F(StringMapTest, EqualWithValues) {
+  StringMap A;
+  A["A"] = 1;
+  A["B"] = 2;
+  A["C"] = 3;
+  A["D"] = 3;
+
+  StringMap B;
+  B["A"] = 1;
+  B["B"] = 2;
+  B["C"] = 3;
+  B["D"] = 3;
+
+  ASSERT_TRUE(A == B);
+  ASSERT_TRUE(B == A);
+  ASSERT_FALSE(A != B);
+  ASSERT_FALSE(B != A);
+  ASSERT_TRUE(A == A); // self check
+}
+
+TEST_F(StringMapTest, NotEqualMissingKeys) {
+  StringMap A;
+  A["A"] = 1;
+  A["B"] = 2;
+
+  StringMap B;
+  B["A"] = 1;
+  B["B"] = 2;
+  B["C"] = 3;
+  B["D"] = 3;
+
+  ASSERT_FALSE(A == B);
+  ASSERT_FALSE(B == A);
+  ASSERT_TRUE(A != B);
+  ASSERT_TRUE(B != A);
+}
+
+TEST_F(StringMapTest, NotEqualWithDifferentValues) {
+  StringMap A;
+  A["A"] = 1;
+  A["B"] = 2;
+  A["C"] = 100;
+  A["D"] = 3;
+
+  StringMap B;
+  B["A"] = 1;
+  B["B"] = 2;
+  B["C"] = 3;
+  B["D"] = 3;
+
+  ASSERT_FALSE(A == B);
+  ASSERT_FALSE(B == A);
+  ASSERT_TRUE(A != B);
+  ASSERT_TRUE(B != A);
+}
+
 struct Countable {
   int 
   int Number;
Index: llvm/include/llvm/ADT/StringMap.h
===
--- llvm/include/llvm/ADT/StringMap.h
+++ llvm/include/llvm/ADT/StringMap.h
@@ -248,6 +248,26 @@
 return count(MapEntry.getKey());
   }
 
+  /// equal - check whether both of the containers are equal.
+  bool operator==(const StringMap ) const {
+if (size() != RHS.size())
+  return false;
+
+for (const auto  : *this) {
+  auto FindInRHS = RHS.find(KeyValue.getKey());
+
+  if (FindInRHS == RHS.end())
+return false;
+
+  if (!(KeyValue.getValue() == FindInRHS->getValue()))
+return false;
+}
+
+return true;
+  }
+
+  bool operator!=(const StringMap ) const { return !(*this == RHS); }
+
   /// insert - Insert the specified key/value pair into the map.  If the key
   /// already exists in the map, return false and ignore the request, otherwise
   /// insert it and return true.
Index: clang-tools-extra/test/clang-tidy/infrastructure/duplicate-reports.cpp
===
--- clang-tools-extra/test/clang-tidy/infrastructure/duplicate-reports.cpp
+++ clang-tools-extra/test/clang-tidy/infrastructure/duplicate-reports.cpp
@@ -2,8 +2,7 @@
 
 void alwaysThrows() {
   int ex = 42;
-  // CHECK-MESSAGES: warning: throw expression should throw anonymous temporary values instead [cert-err09-cpp]
-  // CHECK-MESSAGES: warning: throw expression should throw anonymous temporary values instead [cert-err61-cpp]
+  // CHECK-MESSAGES: warning: throw expression should throw anonymous temporary values instead [cert-err09-cpp,cert-err61-cpp]
   throw ex;
 }
 
Index: clang-tools-extra/test/clang-tidy/infrastructure/duplicate-fixes-of-alias-checkers.cpp
===
--- /dev/null
+++ clang-tools-extra/test/clang-tidy/infrastructure/duplicate-fixes-of-alias-checkers.cpp
@@ -0,0 +1,39 @@
+// RUN: %check_clang_tidy %s cppcoreguidelines-pro-type-member-init,hicpp-member-init,modernize-use-emplace,hicpp-use-emplace %t
+
+namespace std {
+
+template 
+class vector {
+public:
+  void push_back(const T &) {}
+  void push_back(T &&) {}
+
+  template 
+  void emplace_back(Args &&... args){};
+};
+} // namespace std
+
+class Foo {
+public:
+  Foo() : _num1(0)
+  // CHECK-MESSAGES: warning: constructor does not initialize these fields: _num2 [cppcoreguidelines-pro-type-member-init,hicpp-member-init]
+  {
+_num1 = 10;
+  }
+
+  int use_the_members() const {
+return _num1 + _num2;
+  }
+
+private:
+  int _num1;
+  int _num2;
+  // CHECK-FIXES: _num2{};
+};
+
+int should_use_emplace(std::vector ) {
+  v.push_back(Foo());
+  // CHECK-FIXES: v.emplace_back();
+  // CHECK-MESSAGES: warning: use emplace_back instead of push_back [hicpp-use-emplace,modernize-use-emplace]
+}
+
Index: 

[PATCH] D80753: [clang-tidy] remove duplicate fixes of alias checkers

2020-06-19 Thread Daniel via Phabricator via cfe-commits
Daniel599 marked 3 inline comments as done.
Daniel599 added a comment.

I fixed all as your comments suggested, thanks :)
If this patch is ready, can someone commit it on my behalf please? (I don't 
have write permissions)
Thank you.


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

https://reviews.llvm.org/D80753



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


[PATCH] D82182: [AArch64][SVE] Add bfloat16 support to perm and select intrinsics

2020-06-19 Thread Cullen Rhodes via Phabricator via cfe-commits
c-rhodes created this revision.
c-rhodes added reviewers: sdesmalen, efriedma, stuij, david-arm, fpetrogalli, 
kmclaughlin.
Herald added subscribers: danielkiss, psnobl, rkruppe, hiraditya, 
kristof.beyls, tschuett.
Herald added projects: clang, LLVM.

Added for following intrinsics:

- zip1, zip2, zip1q, zip2q
- trn1, trn2, trn1q, trn2q
- uzp1, uzp2, uzp1q, uzp2q
- splice
- rev
- sel


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82182

Files:
  clang/include/clang/Basic/arm_sve.td
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_rev.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_sel.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_splice.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn1-fp64.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn1.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn2-fp64.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_trn2.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp1-fp64.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp1.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp2-fp64.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_uzp2.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip1-fp64.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip1.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip2-fp64.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_zip2.c
  llvm/lib/Target/AArch64/SVEInstrFormats.td
  llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll
  llvm/test/CodeGen/AArch64/sve-intrinsics-sel.ll

Index: llvm/test/CodeGen/AArch64/sve-intrinsics-sel.ll
===
--- llvm/test/CodeGen/AArch64/sve-intrinsics-sel.ll
+++ llvm/test/CodeGen/AArch64/sve-intrinsics-sel.ll
@@ -57,6 +57,16 @@
   ret  %out
 }
 
+define  @sel_bf16( %pg,  %a,  %b) {
+; CHECK-LABEL: sel_bf16:
+; CHECK: sel z0.h, p0, z0.h, z1.h
+; CHECK-NEXT: ret
+  %out = call  @llvm.aarch64.sve.sel.nxv8bf16( %pg,
+%a,
+%b)
+  ret  %out
+}
+
 define  @sel_f16( %pg,  %a,  %b) {
 ; CHECK-LABEL: sel_f16:
 ; CHECK: sel z0.h, p0, z0.h, z1.h
@@ -92,6 +102,7 @@
 declare  @llvm.aarch64.sve.sel.nxv8i16(, , )
 declare  @llvm.aarch64.sve.sel.nxv4i32(, , )
 declare  @llvm.aarch64.sve.sel.nxv2i64(, , )
+declare  @llvm.aarch64.sve.sel.nxv8bf16(, , )
 declare  @llvm.aarch64.sve.sel.nxv8f16(, , )
 declare  @llvm.aarch64.sve.sel.nxv4f32(, , )
 declare  @llvm.aarch64.sve.sel.nxv2f64(, , )
Index: llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll
===
--- llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll
+++ llvm/test/CodeGen/AArch64/sve-intrinsics-perm-select.ll
@@ -803,6 +803,14 @@
   ret  %res
 }
 
+define  @rev_bf16( %a) {
+; CHECK-LABEL: rev_bf16
+; CHECK: rev z0.h, z0.h
+; CHECK-NEXT: ret
+  %res = call  @llvm.aarch64.sve.rev.nxv8bf16( %a)
+  ret  %res
+}
+
 define  @rev_f16( %a) {
 ; CHECK-LABEL: rev_f16
 ; CHECK: rev z0.h, z0.h
@@ -871,6 +879,16 @@
   ret  %out
 }
 
+define  @splice_bf16( %pg,  %a,  %b) {
+; CHECK-LABEL: splice_bf16:
+; CHECK: splice z0.h, p0, z0.h, z1.h
+; CHECK-NEXT: ret
+  %out = call  @llvm.aarch64.sve.splice.nxv8bf16( %pg,
+   %a,
+   %b)
+  ret  %out
+}
+
 define  @splice_f16( %pg,  %a,  %b) {
 ; CHECK-LABEL: splice_f16:
 ; CHECK: splice z0.h, p0, z0.h, z1.h
@@ -1165,6 +1183,15 @@
   ret  %out
 }
 
+define  @trn1_bf16( %a,  %b) {
+; CHECK-LABEL: trn1_bf16:
+; CHECK: trn1 z0.h, z0.h, z1.h
+; CHECK-NEXT: ret
+  %out = call  @llvm.aarch64.sve.trn1.nxv8bf16( %a,
+ %b)
+  ret  %out
+}
+
 define  @trn1_f16( %a,  %b) {
 ; CHECK-LABEL: trn1_f16:
 ; CHECK: trn1 z0.h, z0.h, z1.h
@@ -1277,6 +1304,15 @@
   ret  %out
 }
 
+define  @trn2_bf16( %a,  %b) {
+; CHECK-LABEL: trn2_bf16:
+; CHECK: trn2 z0.h, z0.h, z1.h
+; CHECK-NEXT: ret
+  %out = call  @llvm.aarch64.sve.trn2.nxv8bf16( %a,
+ %b)
+  ret  %out
+}
+
 define  @trn2_f16( %a,  %b) {
 ; CHECK-LABEL: trn2_f16:
 ; CHECK: trn2 z0.h, z0.h, z1.h
@@ -1389,6 +1425,15 @@
   ret  %out
 }
 
+define  @uzp1_bf16( %a,  %b) {
+; CHECK-LABEL: uzp1_bf16:
+; CHECK: uzp1 z0.h, z0.h, z1.h
+; CHECK-NEXT: ret
+  %out = call  @llvm.aarch64.sve.uzp1.nxv8bf16( %a,
+ %b)
+  ret  %out
+}
+
 define  @uzp1_f16( %a,  %b) {
 ; CHECK-LABEL: uzp1_f16:
 ; CHECK: uzp1 z0.h, z0.h, z1.h
@@ -1501,6 +1546,15 @@
   ret  %out
 }
 
+define  @uzp2_bf16( %a,  %b) {
+; CHECK-LABEL: uzp2_bf16:
+; CHECK: uzp2 z0.h, z0.h, z1.h
+; CHECK-NEXT: ret
+  %out = call  

[PATCH] D81385: Fix libdl linking for libclang in standalone mode

2020-06-19 Thread Michał Górny via Phabricator via cfe-commits
mgorny added a comment.

Ping. It'd be nice to have this fixed.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81385



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


[PATCH] D80301: [yaml][clang-tidy] Fix new line YAML serialization

2020-06-19 Thread Dmitry Polukhin via Phabricator via cfe-commits
DmitryPolukhin added a comment.

It looks like there is no support for the proposed solution so I found 
alternative solution that might be even better. We can use double quotation `"` 
for multiline strings. It solves problem because in case of double quotation 
LLVM escapes new line like `\n` so there is no need to double newlines. Escaped 
newlines can be parsed correctly by other YAML parsers like pyyaml. BTW, LLVM 
YAML reading also has issue with not removing leading spaces for multiline 
strings so multiline strings serialised by pyyaml with single quotation cannot 
be parsed correctly by clang-apply-replacements. With double quotation it seems 
to work fine in both directions.

What do you think about using double quotation for multiline strings?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80301



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


[PATCH] D82187: [AArch64][SVE] ACLE: Add bfloat16 to struct load/stores.

2020-06-19 Thread Sander de Smalen via Phabricator via cfe-commits
sdesmalen marked 2 inline comments as done.
sdesmalen added inline comments.



Comment at: clang/include/clang/Basic/AArch64SVEACLETypes.def:69
 
-SVE_VECTOR_TYPE("__SVBFloat16_t", "__SVBFloat16_t", SveBFloat16, 
SveBFloat16Ty, 8, 16, false, false, true)
+SVE_VECTOR_TYPE("__SVBFloat16_t", "__SVBFloat16_t", SveBFloat16, 
SveBFloat16Ty, 8, 16, true, false, true)
 

fpetrogalli wrote:
> Why did you have to set `IsFP = true`? Seems like an unrelated change?
It's more for consistency with the other definitions (svfloat16/svfloat32/..) 
but is otherwise a non-functional change.



Comment at: clang/utils/TableGen/SveEmitter.cpp:541
 Float = false;
+BFloat = false;
 ElementBitwidth /= 4;

fpetrogalli wrote:
> Are these needed? I don't understand the rule for when to be specific on the 
> values of these variables.
For this patch, it's needed for `'l'` because otherwise it will incorrectly 
assume the type is bfloat if the type specifier is `b`.
It similarly applies to all the other modifiers that are defined as being of 
type `integer`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82187



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


[PATCH] D81407: [Analyzer][StreamChecker] Add note tags for file opening.

2020-06-19 Thread Balázs Kéri via Phabricator via cfe-commits
balazske added a comment.

So for this patch it would be OK to have the uniqueing location as it is now. A 
next large change can be to add the global resource leak report uniqueing 
feature, this changes anyway more existing checkers (including this one). 
(Still I want to finish other improvements in the `StreamChecker`.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81407



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


[PATCH] D81736: [openmp] Base of tablegen generated OpenMP common declaration

2020-06-19 Thread Valentin Clement via Phabricator via cfe-commits
clementval added a comment.

@jdoerfert @jdenny Should we wait until Monday to go ahead with this patch? I 
have several other patches that will follow this one.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81736



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


[PATCH] D82186: [AArch64][SVE] Add bfloat16 support to svlen intrinsic

2020-06-19 Thread Cullen Rhodes via Phabricator via cfe-commits
c-rhodes added inline comments.



Comment at: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c:2
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu 
-target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple 
aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns 
-S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu 
-target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -o 
- %s >/dev/null 2>%t
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu 
-target-feature +sve -target-feature +bf16 -fallow-half-arguments-and-returns 
-S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s

fpetrogalli wrote:
> We said `ARM_FEATURE_BF16_SCALAR_ARITHMETIC` is implied by 
> `__ARM_FEATURE_SVE_BF16`, so I think you should remove this macro definition.
that's correct but it's not handled yet, `__ARM_FEATURE_SVE_BF16` isn't enabled 
as the implementation is incomplete, it'll eventually be enabled in the driver, 
but for now we need to explicitly define both macros in all tests.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82186



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


[PATCH] D81736: [openmp] Base of tablegen generated OpenMP common declaration

2020-06-19 Thread Joel E. Denny via Phabricator via cfe-commits
jdenny accepted this revision.
jdenny added a comment.
This revision is now accepted and ready to land.

In D81736#2103822 , @clementval wrote:

> @jdoerfert @jdenny Should we wait until Monday to go ahead with this patch? I 
> have several other patches that will follow this one.


One week is the usual grace period.  If @jdoerfert is happy at this point, I'm 
happy.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81736



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


[PATCH] D82182: [AArch64][SVE] Add bfloat16 support to perm and select intrinsics

2020-06-19 Thread David Sherwood via Phabricator via cfe-commits
david-arm accepted this revision.
david-arm 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/D82182/new/

https://reviews.llvm.org/D82182



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


[PATCH] D82179: Move TestClangConfig into libClangTesting and use it in AST Matchers tests

2020-06-19 Thread Dmitri Gribenko via Phabricator via cfe-commits
gribozavr created this revision.
Herald added subscribers: cfe-commits, sstefan1, jfb.
Herald added a reviewer: jdoerfert.
Herald added a project: clang.
gribozavr2 added a reviewer: ymandel.
gribozavr2 edited the summary of this revision.

Previously, AST Matchers tests were using a custom way to run a test
with a specific C++ standard version. I'm migrating them to a shared
infrastructure to specify a Clang target from libClangTesting. I'm also
changing tests for AST Matchers to run in multiple language standards
versions, and under multiple triples that have different behavior with
regards to templates.

To keep the size of the patch manageable, in this patch I'm only
migrating one file to get the process started and get feedback on this
approach.

One caveat is that increasing the number of test configuration does
significantly increase the runtime of AST Matchers tests. On my machine,
the test runtime increases from 2.0 to 6.0s. I think it is worth the
improved test coverage.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82179

Files:
  clang/include/clang/Testing/TestClangConfig.h
  clang/unittests/ASTMatchers/ASTMatchersNodeTest.cpp
  clang/unittests/ASTMatchers/ASTMatchersTest.h
  clang/unittests/Tooling/Syntax/TreeTest.cpp

Index: clang/unittests/Tooling/Syntax/TreeTest.cpp
===
--- clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -18,6 +18,7 @@
 #include "clang/Frontend/TextDiagnosticPrinter.h"
 #include "clang/Lex/PreprocessorOptions.h"
 #include "clang/Testing/CommandLineArgs.h"
+#include "clang/Testing/TestClangConfig.h"
 #include "clang/Tooling/Core/Replacement.h"
 #include "clang/Tooling/Syntax/BuildTree.h"
 #include "clang/Tooling/Syntax/Mutations.h"
@@ -47,77 +48,6 @@
 T->lastLeaf()->token() + 1);
 }
 
-struct TestClangConfig {
-  TestLanguage Language;
-  std::string Target;
-
-  bool isC99OrLater() const { return Language == Lang_C99; }
-
-  bool isCXX() const {
-return Language == Lang_CXX03 || Language == Lang_CXX11 ||
-   Language == Lang_CXX14 || Language == Lang_CXX17 ||
-   Language == Lang_CXX20;
-  }
-
-  bool isCXX11OrLater() const {
-return Language == Lang_CXX11 || Language == Lang_CXX14 ||
-   Language == Lang_CXX17 || Language == Lang_CXX20;
-  }
-
-  bool isCXX14OrLater() const {
-return Language == Lang_CXX14 || Language == Lang_CXX17 ||
-   Language == Lang_CXX20;
-  }
-
-  bool supportsCXXDynamicExceptionSpecification() const {
-return Language == Lang_CXX03 || Language == Lang_CXX11 ||
-   Language == Lang_CXX14;
-  }
-
-  bool hasDelayedTemplateParsing() const {
-return Target == "x86_64-pc-win32-msvc";
-  }
-
-  std::vector getCommandLineArgs() const {
-std::vector Result = getCommandLineArgsForTesting(Language);
-Result.push_back("-target");
-Result.push_back(Target);
-return Result;
-  }
-
-  std::string toString() const {
-std::string Result;
-llvm::raw_string_ostream OS(Result);
-OS << "{ Language=" << Language << ", Target=" << Target << " }";
-return OS.str();
-  }
-
-  friend std::ostream <<(std::ostream ,
-  const TestClangConfig ) {
-return OS << ClangConfig.toString();
-  }
-
-  static std::vector () {
-static std::vector all_configs = []() {
-  std::vector all_configs;
-  for (TestLanguage lang : {Lang_C89, Lang_C99, Lang_CXX03, Lang_CXX11,
-Lang_CXX14, Lang_CXX17, Lang_CXX20}) {
-TestClangConfig config;
-config.Language = lang;
-config.Target = "x86_64-pc-linux-gnu";
-all_configs.push_back(config);
-
-// Windows target is interesting to test because it enables
-// `-fdelayed-template-parsing`.
-config.Target = "x86_64-pc-win32-msvc";
-all_configs.push_back(config);
-  }
-  return all_configs;
-}();
-return all_configs;
-  }
-};
-
 class SyntaxTreeTest : public ::testing::Test,
public ::testing::WithParamInterface {
 protected:
@@ -3536,7 +3466,24 @@
   EXPECT_TRUE(S->isDetached());
 }
 
+static std::vector allTestClangConfigs() {
+  std::vector all_configs;
+  for (TestLanguage lang : {Lang_C89, Lang_C99, Lang_CXX03, Lang_CXX11,
+Lang_CXX14, Lang_CXX17, Lang_CXX20}) {
+TestClangConfig config;
+config.Language = lang;
+config.Target = "x86_64-pc-linux-gnu";
+all_configs.push_back(config);
+
+// Windows target is interesting to test because it enables
+// `-fdelayed-template-parsing`.
+config.Target = "x86_64-pc-win32-msvc";
+all_configs.push_back(config);
+  }
+  return all_configs;
+}
+
 INSTANTIATE_TEST_CASE_P(SyntaxTreeTests, SyntaxTreeTest,
-testing::ValuesIn(TestClangConfig::allConfigs()), );
+

[PATCH] D78899: [Driver] Add callback to Command execution

2020-06-19 Thread Serge Pavlov via Phabricator via cfe-commits
sepavloff updated this revision to Diff 272047.
sepavloff added a comment.

Rebased patch


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D78899

Files:
  clang/include/clang/Driver/Compilation.h
  clang/lib/Driver/Compilation.cpp
  clang/unittests/Driver/ToolChainTest.cpp


Index: clang/unittests/Driver/ToolChainTest.cpp
===
--- clang/unittests/Driver/ToolChainTest.cpp
+++ clang/unittests/Driver/ToolChainTest.cpp
@@ -259,4 +259,30 @@
   EXPECT_STREQ(Res.DriverMode, "--driver-mode=cl");
   EXPECT_FALSE(Res.TargetIsValid);
 }
+
+TEST(ToolChainTest, PostCallback) {
+  IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions();
+  IntrusiveRefCntPtr DiagID(new DiagnosticIDs());
+  struct TestDiagnosticConsumer : public DiagnosticConsumer {};
+  DiagnosticsEngine Diags(DiagID, &*DiagOpts, new TestDiagnosticConsumer);
+  IntrusiveRefCntPtr InMemoryFileSystem(
+  new llvm::vfs::InMemoryFileSystem);
+
+  // The executable path must not exist.
+  Driver CCDriver("/home/test/bin/clang", "arm-linux-gnueabi", Diags,
+  InMemoryFileSystem);
+  CCDriver.setCheckInputsExist(false);
+  std::unique_ptr CC(
+  CCDriver.BuildCompilation({"/home/test/bin/clang", "foo.cpp"}));
+  bool CallbackHasCalled = false;
+  CC->setPostCallback([&](const Command , int Ret) {
+CallbackHasCalled = true;
+  });
+  const JobList  = CC->getJobs();
+  auto  = Jobs.getJobs().front();
+  const Command *FailingCmd = nullptr;
+  CC->ExecuteCommand(*CmdCompile, FailingCmd);
+  EXPECT_TRUE(CallbackHasCalled);
+}
+
 } // end anonymous namespace.
Index: clang/lib/Driver/Compilation.cpp
===
--- clang/lib/Driver/Compilation.cpp
+++ clang/lib/Driver/Compilation.cpp
@@ -193,6 +193,8 @@
   std::string Error;
   bool ExecutionFailed;
   int Res = C.Execute(Redirects, , );
+  if (PostCallback)
+PostCallback(C, Res);
   if (!Error.empty()) {
 assert(Res && "Error string set with 0 result code!");
 getDriver().Diag(diag::err_drv_command_failure) << Error;
Index: clang/include/clang/Driver/Compilation.h
===
--- clang/include/clang/Driver/Compilation.h
+++ clang/include/clang/Driver/Compilation.h
@@ -115,6 +115,9 @@
   /// Optional redirection for stdin, stdout, stderr.
   std::vector> Redirects;
 
+  /// Callback called after the command has been executed.
+  std::function PostCallback;
+
   /// Whether we're compiling for diagnostic purposes.
   bool ForDiagnostics = false;
 
@@ -212,6 +215,10 @@
 return FailureResultFiles;
   }
 
+  void setPostCallback(const std::function ) {
+PostCallback = CB;
+  }
+
   /// Returns the sysroot path.
   StringRef getSysRoot() const;
 


Index: clang/unittests/Driver/ToolChainTest.cpp
===
--- clang/unittests/Driver/ToolChainTest.cpp
+++ clang/unittests/Driver/ToolChainTest.cpp
@@ -259,4 +259,30 @@
   EXPECT_STREQ(Res.DriverMode, "--driver-mode=cl");
   EXPECT_FALSE(Res.TargetIsValid);
 }
+
+TEST(ToolChainTest, PostCallback) {
+  IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions();
+  IntrusiveRefCntPtr DiagID(new DiagnosticIDs());
+  struct TestDiagnosticConsumer : public DiagnosticConsumer {};
+  DiagnosticsEngine Diags(DiagID, &*DiagOpts, new TestDiagnosticConsumer);
+  IntrusiveRefCntPtr InMemoryFileSystem(
+  new llvm::vfs::InMemoryFileSystem);
+
+  // The executable path must not exist.
+  Driver CCDriver("/home/test/bin/clang", "arm-linux-gnueabi", Diags,
+  InMemoryFileSystem);
+  CCDriver.setCheckInputsExist(false);
+  std::unique_ptr CC(
+  CCDriver.BuildCompilation({"/home/test/bin/clang", "foo.cpp"}));
+  bool CallbackHasCalled = false;
+  CC->setPostCallback([&](const Command , int Ret) {
+CallbackHasCalled = true;
+  });
+  const JobList  = CC->getJobs();
+  auto  = Jobs.getJobs().front();
+  const Command *FailingCmd = nullptr;
+  CC->ExecuteCommand(*CmdCompile, FailingCmd);
+  EXPECT_TRUE(CallbackHasCalled);
+}
+
 } // end anonymous namespace.
Index: clang/lib/Driver/Compilation.cpp
===
--- clang/lib/Driver/Compilation.cpp
+++ clang/lib/Driver/Compilation.cpp
@@ -193,6 +193,8 @@
   std::string Error;
   bool ExecutionFailed;
   int Res = C.Execute(Redirects, , );
+  if (PostCallback)
+PostCallback(C, Res);
   if (!Error.empty()) {
 assert(Res && "Error string set with 0 result code!");
 getDriver().Diag(diag::err_drv_command_failure) << Error;
Index: clang/include/clang/Driver/Compilation.h
===
--- clang/include/clang/Driver/Compilation.h
+++ clang/include/clang/Driver/Compilation.h
@@ -115,6 +115,9 @@
   /// Optional redirection for stdin, stdout, stderr.
   

[PATCH] D82178: [AArch64][SVE] Guard svbfloat16_t with feature macro in ACLE

2020-06-19 Thread Cullen Rhodes via Phabricator via cfe-commits
c-rhodes updated this revision to Diff 272043.
c-rhodes added a comment.

Changes:

- Error if `__ARM_FEATURE_BF16_SCALAR_ARITHMETIC` not defined when defining 
`__ARM_FEATURE_SVE_BF16`.


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

https://reviews.llvm.org/D82178

Files:
  clang/include/clang/Basic/arm_sve.td
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
  clang/utils/TableGen/SveEmitter.cpp


Index: clang/utils/TableGen/SveEmitter.cpp
===
--- clang/utils/TableGen/SveEmitter.cpp
+++ clang/utils/TableGen/SveEmitter.cpp
@@ -1085,8 +1085,15 @@
   OS << "typedef __SVUint16_t svuint16_t;\n";
   OS << "typedef __SVUint32_t svuint32_t;\n";
   OS << "typedef __SVUint64_t svuint64_t;\n";
-  OS << "typedef __SVFloat16_t svfloat16_t;\n";
-  OS << "typedef __SVBFloat16_t svbfloat16_t;\n\n";
+  OS << "typedef __SVFloat16_t svfloat16_t;\n\n";
+
+  OS << "#if defined(__ARM_FEATURE_SVE_BF16)\n";
+  OS << "#if !defined(__ARM_FEATURE_BF16_SCALAR_ARITHMETIC)\n";
+  OS << "#error \"__ARM_FEATURE_BF16_SCALAR_ARITHMETIC must be defined when "
+"__ARM_FEATURE_SVE_BF16 is defined\"\n";
+  OS << "#endif\n";
+  OS << "typedef __SVBFloat16_t svbfloat16_t;\n";
+  OS << "#endif\n\n";
 
   OS << "#ifdef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC\n";
   OS << "typedef __bf16 bfloat16_t;\n";
Index: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
===
--- clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
+++ clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE -triple 
aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 
-fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | 
FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE 
-DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 -D__ARM_FEATURE_SVE_BF16 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE -triple 
aarch64-none-linux-gnu -target-feature +sve -target-feature +bf16 
-fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm -o - %s | 
FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE_MATMUL_FP64 -D__ARM_FEATURE_SVE_BF16 
-D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC -D__ARM_FEATURE_SVE 
-DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
 
 #include 
 
Index: clang/include/clang/Basic/arm_sve.td
===
--- clang/include/clang/Basic/arm_sve.td
+++ clang/include/clang/Basic/arm_sve.td
@@ -484,8 +484,8 @@
 let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64)" in {
   def SVLD1RO : SInst<"svld1ro[_{2}]", "dPc", "csilUcUsUiUlhfd", MergeNone, 
"aarch64_sve_ld1ro">;
 }
-let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64) && 
defined(__ARM_FEATURE_BF16_SCALAR_ARITHMETIC)" in {
-  def SVLD1RO_BF : SInst<"svld1ro[_{2}]", "dPc", "b", MergeNone, 
"aarch64_sve_ld1ro">;
+let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64) && 
defined(__ARM_FEATURE_SVE_BF16)" in {
+  def SVLD1RO_BF16 : SInst<"svld1ro[_{2}]", "dPc", "b", MergeNone, 
"aarch64_sve_ld1ro">;
 }
 

 // Stores


Index: clang/utils/TableGen/SveEmitter.cpp
===
--- clang/utils/TableGen/SveEmitter.cpp
+++ clang/utils/TableGen/SveEmitter.cpp
@@ -1085,8 +1085,15 @@
   OS << "typedef __SVUint16_t svuint16_t;\n";
   OS << "typedef __SVUint32_t svuint32_t;\n";
   OS << "typedef __SVUint64_t svuint64_t;\n";
-  OS << "typedef __SVFloat16_t svfloat16_t;\n";
-  OS << "typedef __SVBFloat16_t svbfloat16_t;\n\n";
+  OS << "typedef __SVFloat16_t svfloat16_t;\n\n";
+
+  OS << "#if defined(__ARM_FEATURE_SVE_BF16)\n";
+  OS << "#if !defined(__ARM_FEATURE_BF16_SCALAR_ARITHMETIC)\n";
+  OS << "#error \"__ARM_FEATURE_BF16_SCALAR_ARITHMETIC must be defined when "
+"__ARM_FEATURE_SVE_BF16 is defined\"\n";
+  OS << "#endif\n";
+  OS << "typedef __SVBFloat16_t svbfloat16_t;\n";
+  OS << "#endif\n\n";
 
   OS << "#ifdef __ARM_FEATURE_BF16_SCALAR_ARITHMETIC\n";
   OS << "typedef __bf16 bfloat16_t;\n";
Index: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
===
--- clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld1ro-bfloat.c
+++ 

[PATCH] D81407: [Analyzer][StreamChecker] Add note tags for file opening.

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ added a comment.

In D81407#2102951 , @Szelethus wrote:

> That could be helped additionally by creating a distinct `LeakBugReport`, 
> derived from `PathSensitiveBugReport`, that would take non-optional uniqueing 
> lambda to find the `ExplodedNode` responsible for the resource acquisition. 
> Or the actual `ExplodedNode` itself.


That's an awesome idea, i'm speechless :)

In D81407#2102641 , @balazske wrote:

> I do not understand fully this "globally". A new option should be added that 
> affects all checkers that detect some kind of resource leak? And then 
> implement that kind of report uniqueness in all checkers that detect resource 
> leak.


Yes, that's probably the best approach. If you want to experiment a lot with 
this stuff, you probably want data from more different checkers than just yours 
(i expect your checker to be relatively quiet compared to, say, MallocChecker 
that'll provide a lot more input to your experiment). I'd only go for an 
ability to configure checkers individually if we have any signal at all that 
they *need* to be configured individually; otherwise enforcing consistent user 
experience is a good thing.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81407



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


[PATCH] D82188: [clang-tidy] Reworked enum options handling(again)

2020-06-19 Thread Nathan James via Phabricator via cfe-commits
njames93 created this revision.
njames93 added reviewers: aaron.ballman, alexfh, gribozavr2.
Herald added subscribers: cfe-commits, arphaman, kbarton, xazax.hun, nemanjai.
Herald added a project: clang.

Following on from D77085 , I was never happy 
with the passing a mapping to the option get/store functions. This patch 
addresses this by using explicit specializations to handle the serializing and 
deserializing of enum options.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82188

Files:
  clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
  clang-tools-extra/clang-tidy/ClangTidyCheck.h
  clang-tools-extra/clang-tidy/abseil/StringFindStartswithCheck.cpp
  clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp
  
clang-tools-extra/clang-tidy/cppcoreguidelines/ProBoundsConstantArrayIndexCheck.cpp
  clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
  clang-tools-extra/clang-tidy/modernize/MakeSmartPtrCheck.cpp
  clang-tools-extra/clang-tidy/modernize/PassByValueCheck.cpp
  clang-tools-extra/clang-tidy/modernize/ReplaceAutoPtrCheck.cpp
  clang-tools-extra/clang-tidy/modernize/ReplaceRandomShuffleCheck.cpp
  clang-tools-extra/clang-tidy/performance/MoveConstructorInitCheck.cpp
  clang-tools-extra/clang-tidy/performance/TypePromotionInMathFnCheck.cpp
  clang-tools-extra/clang-tidy/performance/UnnecessaryValueParamCheck.cpp
  clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
  clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
  clang-tools-extra/clang-tidy/utils/IncludeSorter.cpp
  clang-tools-extra/clang-tidy/utils/IncludeSorter.h
  clang-tools-extra/clang-tidy/utils/TransformerClangTidyCheck.cpp
  clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Index: clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
===
--- clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
+++ clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
@@ -6,6 +6,20 @@
 
 namespace clang {
 namespace tidy {
+
+enum class Colours { Red, Orange, Yellow, Green, Blue, Indigo, Violet };
+
+template <> struct OptionEnumMapping {
+  static llvm::ArrayRef> getEnumMapping() {
+static constexpr std::pair Mapping[] = {
+{Colours::Red, "Red"},   {Colours::Orange, "Orange"},
+{Colours::Yellow, "Yellow"}, {Colours::Green, "Green"},
+{Colours::Blue, "Blue"}, {Colours::Indigo, "Indigo"},
+{Colours::Violet, "Violet"}};
+return makeArrayRef(Mapping);
+  }
+};
+
 namespace test {
 
 TEST(ParseLineFilter, EmptyFilter) {
@@ -209,15 +223,6 @@
 }
 
 TEST(ValidConfiguration, ValidEnumOptions) {
-
-  enum class Colours { Red, Orange, Yellow, Green, Blue, Indigo, Violet };
-  static constexpr std::pair Mapping[] = {
-  {"Red", Colours::Red},   {"Orange", Colours::Orange},
-  {"Yellow", Colours::Yellow}, {"Green", Colours::Green},
-  {"Blue", Colours::Blue}, {"Indigo", Colours::Indigo},
-  {"Violet", Colours::Violet}};
-  static const auto Map = makeArrayRef(Mapping);
-
   ClangTidyOptions Options;
   auto  = Options.CheckOptions;
 
@@ -237,29 +242,30 @@
 #define CHECK_ERROR_ENUM(Name, Expected)   \
   CHECK_ERROR(Name, UnparseableEnumOptionError, Expected)
 
-  CHECK_VAL(TestCheck.getLocal("Valid", Map), Colours::Red);
-  CHECK_VAL(TestCheck.getGlobal("GlobalValid", Map), Colours::Violet);
-  CHECK_VAL(TestCheck.getLocal("ValidWrongCase", Map, /*IgnoreCase*/ true),
-Colours::Red);
+  CHECK_VAL(TestCheck.getIntLocal("Valid"), Colours::Red);
+  CHECK_VAL(TestCheck.getIntGlobal("GlobalValid"), Colours::Violet);
   CHECK_VAL(
-  TestCheck.getGlobal("GlobalValidWrongCase", Map, /*IgnoreCase*/ true),
-  Colours::Violet);
-  CHECK_ERROR_ENUM(TestCheck.getLocal("Invalid", Map),
+  TestCheck.getIntLocal("ValidWrongCase", /*IgnoreCase*/ true),
+  Colours::Red);
+  CHECK_VAL(TestCheck.getIntGlobal("GlobalValidWrongCase",
+/*IgnoreCase*/ true),
+Colours::Violet);
+  CHECK_ERROR_ENUM(TestCheck.getIntLocal("Invalid"),
"invalid configuration value "
"'Scarlet' for option 'test.Invalid'");
-  CHECK_ERROR_ENUM(TestCheck.getLocal("ValidWrongCase", Map),
+  CHECK_ERROR_ENUM(TestCheck.getIntLocal("ValidWrongCase"),
"invalid configuration value 'rED' for option "
"'test.ValidWrongCase'; did you mean 'Red'?");
-  CHECK_ERROR_ENUM(TestCheck.getLocal("NearMiss", Map),
+  CHECK_ERROR_ENUM(TestCheck.getIntLocal("NearMiss"),
"invalid configuration value 'Oragne' for option "
"'test.NearMiss'; did you mean 'Orange'?");
-  CHECK_ERROR_ENUM(TestCheck.getGlobal("GlobalInvalid", Map),
+  CHECK_ERROR_ENUM(TestCheck.getIntGlobal("GlobalInvalid"),
"invalid 

[PATCH] D82186: [AArch64][SVE] Add bfloat16 support to svlen intrinsic

2020-06-19 Thread Cullen Rhodes via Phabricator via cfe-commits
c-rhodes created this revision.
c-rhodes added reviewers: sdesmalen, efriedma, david-arm, fpetrogalli, stuij.
Herald added subscribers: danielkiss, psnobl, rkruppe, kristof.beyls, tschuett.
Herald added a project: clang.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82186

Files:
  clang/include/clang/Basic/arm_sve.td
  clang/lib/CodeGen/CGBuiltin.cpp
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
  clang/utils/TableGen/SveEmitter.cpp


Index: clang/utils/TableGen/SveEmitter.cpp
===
--- clang/utils/TableGen/SveEmitter.cpp
+++ clang/utils/TableGen/SveEmitter.cpp
@@ -643,6 +643,7 @@
 Predicate = false;
 Signed = false;
 Float = false;
+BFloat = false;
 ElementBitwidth = Bitwidth = 64;
 NumVectors = 0;
 break;
Index: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
===
--- clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
+++ clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
@@ -1,7 +1,7 @@
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu 
-target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple 
aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns 
-S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu 
-target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -o 
- %s >/dev/null 2>%t
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu 
-target-feature +sve -target-feature +bf16 -fallow-half-arguments-and-returns 
-S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-o - %s >/dev/null 2>%t
 // RUN: FileCheck --check-prefix=ASM --allow-empty %s <%t
 
 // If this check fails please read test/CodeGen/aarch64-sve-intrinsics/README 
for instructions on how to resolve it.
@@ -113,3 +113,12 @@
   // CHECK: ret i64 %[[SHL]]
   return SVE_ACLE_FUNC(svlen,_f64,,)(op);
 }
+
+uint64_t test_svlen_bf16(svbfloat16_t op)
+{
+  // CHECK-LABEL: test_svlen_bf16
+  // CHECK: %[[VSCALE:.*]] = call i64 @llvm.vscale.i64()
+  // CHECK: %[[SHL:.*]] = shl i64 %[[VSCALE]], 3
+  // CHECK: ret i64 %[[SHL]]
+  return SVE_ACLE_FUNC(svlen,_bf16,,)(op);
+}
Index: clang/lib/CodeGen/CGBuiltin.cpp
===
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -8292,6 +8292,7 @@
   case SVE::BI__builtin_sve_svpfalse_b:
 return ConstantInt::getFalse(Ty);
 
+  case SVE::BI__builtin_sve_svlen_bf16:
   case SVE::BI__builtin_sve_svlen_f16:
   case SVE::BI__builtin_sve_svlen_f32:
   case SVE::BI__builtin_sve_svlen_f64:
Index: clang/include/clang/Basic/arm_sve.td
===
--- clang/include/clang/Basic/arm_sve.td
+++ clang/include/clang/Basic/arm_sve.td
@@ -1205,6 +1205,10 @@
 def SVCNTP : SInst<"svcntp_{d}",  "nPP", "PcPsPiPl",MergeNone, 
"aarch64_sve_cntp">;
 def SVLEN  : SInst<"svlen[_{d}]", "nd",  "csilUcUsUiUlhfd", MergeNone>;
 
+let ArchGuard = "defined(__ARM_FEATURE_SVE_BF16)" in {
+def SVLEN_BF16 : SInst<"svlen[_{d}]", "nd", "b", MergeNone>;
+}
+
 

 // Saturating scalar arithmetic
 


Index: clang/utils/TableGen/SveEmitter.cpp
===
--- clang/utils/TableGen/SveEmitter.cpp
+++ clang/utils/TableGen/SveEmitter.cpp
@@ -643,6 +643,7 @@
 Predicate = false;
 Signed = false;
 Float = false;
+BFloat = false;
 ElementBitwidth = Bitwidth = 64;
 NumVectors = 0;
 break;
Index: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
===
--- clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
+++ clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c
@@ -1,7 +1,7 @@
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -emit-llvm 

[PATCH] D82178: [AArch64][SVE] Guard svbfloat16_t with feature macro in ACLE

2020-06-19 Thread Francesco Petrogalli via Phabricator via cfe-commits
fpetrogalli added inline comments.



Comment at: clang/utils/TableGen/SveEmitter.cpp:1092
+  OS << "#if !defined(__ARM_FEATURE_BF16_SCALAR_ARITHMETIC)\n";
+  OS << "#error \"__ARM_FEATURE_BF16_SCALAR_ARITHMETIC must be defined when "
+"__ARM_FEATURE_SVE_BF16 is defined\"\n";

Does it make sense to add a regression test to make sure this error is raised?


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

https://reviews.llvm.org/D82178



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


[PATCH] D82187: [AArch64][SVE] ACLE: Add bfloat16 to struct load/stores.

2020-06-19 Thread Sander de Smalen via Phabricator via cfe-commits
sdesmalen created this revision.
sdesmalen added reviewers: stuij, efriedma, c-rhodes, fpetrogalli.
Herald added subscribers: llvm-commits, lldb-commits, cfe-commits, danielkiss, 
psnobl, rkruppe, hiraditya, kristof.beyls, tschuett.
Herald added projects: clang, LLDB, LLVM.
sdesmalen added a parent revision: D82178: [AArch64][SVE] Guard svbfloat16_t 
with feature macro in ACLE.

This patch contains:

- Support in LLVM CodeGen for bfloat16 types for ld2/3/4 and st2/3/4.
- New bfloat16 ACLE builtins for svld(2|3|4)[_vnum] and svst(2|3|4)[_vnum]


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82187

Files:
  clang/include/clang/Basic/AArch64SVEACLETypes.def
  clang/include/clang/Basic/arm_sve.td
  clang/lib/CodeGen/CodeGenTypes.cpp
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld2-bfloat.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld3-bfloat.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_ld4-bfloat.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_st2-bfloat.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_st3-bfloat.c
  clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_st4-bfloat.c
  clang/utils/TableGen/SveEmitter.cpp
  lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
  llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp
  llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll
  llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll

Index: llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll
===
--- llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll
+++ llvm/test/CodeGen/AArch64/sve-intrinsics-stores.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 < %s 2>%t | FileCheck %s
 ; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t
 
 ; WARN-NOT: warning
@@ -44,6 +44,17 @@
   ret void
 }
 
+define void @st2h_bf16( %v0,  %v1,  %pred, bfloat* %addr) {
+; CHECK-LABEL: st2h_bf16:
+; CHECK: st2h { z0.h, z1.h }, p0, [x0]
+; CHECK-NEXT: ret
+  call void @llvm.aarch64.sve.st2.nxv8bf16( %v0,
+   %v1,
+   %pred,
+  bfloat* %addr)
+  ret void
+}
+
 ;
 ; ST2W
 ;
@@ -140,6 +151,18 @@
   ret void
 }
 
+define void @st3h_bf16( %v0,  %v1,  %v2,  %pred, bfloat* %addr) {
+; CHECK-LABEL: st3h_bf16:
+; CHECK: st3h { z0.h, z1.h, z2.h }, p0, [x0]
+; CHECK-NEXT: ret
+  call void @llvm.aarch64.sve.st3.nxv8bf16( %v0,
+   %v1,
+   %v2,
+   %pred,
+  bfloat* %addr)
+  ret void
+}
+
 ;
 ; ST3W
 ;
@@ -243,6 +266,19 @@
   ret void
 }
 
+define void @st4h_bf16( %v0,  %v1,  %v2,  %v3,  %pred, bfloat* %addr) {
+; CHECK-LABEL: st4h_bf16:
+; CHECK: st4h { z0.h, z1.h, z2.h, z3.h }, p0, [x0]
+; CHECK-NEXT: ret
+  call void @llvm.aarch64.sve.st4.nxv8bf16( %v0,
+   %v1,
+   %v2,
+   %v3,
+   %pred,
+  bfloat* %addr)
+  ret void
+}
+
 ;
 ; ST4W
 ;
@@ -395,6 +431,7 @@
 declare void @llvm.aarch64.sve.st2.nxv4i32(, , , i32*)
 declare void @llvm.aarch64.sve.st2.nxv2i64(, , , i64*)
 declare void @llvm.aarch64.sve.st2.nxv8f16(, , , half*)
+declare void @llvm.aarch64.sve.st2.nxv8bf16(, , , bfloat*)
 declare void @llvm.aarch64.sve.st2.nxv4f32(, , , float*)
 declare void @llvm.aarch64.sve.st2.nxv2f64(, , , double*)
 
@@ -403,6 +440,7 @@
 declare void @llvm.aarch64.sve.st3.nxv4i32(, , , , i32*)
 declare void @llvm.aarch64.sve.st3.nxv2i64(, , , , i64*)
 declare void @llvm.aarch64.sve.st3.nxv8f16(, , , , half*)
+declare void @llvm.aarch64.sve.st3.nxv8bf16(, , , , bfloat*)
 declare void @llvm.aarch64.sve.st3.nxv4f32(, , , , float*)
 declare void @llvm.aarch64.sve.st3.nxv2f64(, , , , double*)
 
@@ -411,6 +449,7 @@
 declare void @llvm.aarch64.sve.st4.nxv4i32(, , , , , i32*)
 declare void @llvm.aarch64.sve.st4.nxv2i64(, , , , , i64*)
 declare void @llvm.aarch64.sve.st4.nxv8f16(, , , , , half*)
+declare void @llvm.aarch64.sve.st4.nxv8bf16(, , , , , bfloat*)
 declare void @llvm.aarch64.sve.st4.nxv4f32(, , , , , float*)
 declare void @llvm.aarch64.sve.st4.nxv2f64(, , , , , double*)
 
Index: llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll
===
--- llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll
+++ llvm/test/CodeGen/AArch64/sve-intrinsics-loads.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -asm-verbose=0 < %s | FileCheck %s
+; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+bf16 -asm-verbose=0 < %s | FileCheck %s
 
 ;
 ; LD1RQB
@@ -284,6 +284,14 @@
   ret  %res
 }
 
+define  @ld2h_bf16( 

[PATCH] D82185: [Analyzer][WIP] Handle pointer implemented as iterators in iterator checkers

2020-06-19 Thread Balogh , Ádám via Phabricator via cfe-commits
baloghadamsoftware marked an inline comment as done.
baloghadamsoftware added inline comments.



Comment at: clang/lib/StaticAnalyzer/Checkers/IteratorModeling.cpp:256
+  SVal SubVal = State->getSVal(UO->getSubExpr(), C.getLocationContext());
+  SVal Result = State->getSVal(UO, C.getLocationContext());
+

This is the problematic point which is not working. I left the comments 
intentionally in the code.

The problem is that in `postStmt` we are //after//  the operation. Thus the 
value of the operand (`SubExpr`) is not `i` anymore, but the //former value// 
of `i` (a pointer to a symbolic region initially). Instead, the result is `i` 
in case of prefix operators, but also the former value in case of postfix 
operators. This is correct, of course, because here, after the call the value 
of `i` was changed, thus it is not equal to the parameter. However, we need the 
region of `i` here and/or the new value bound to it (e.g. the pointer to an 
element region which is usually the result of a `++` or `--` on a pointer to a 
symbolic region). How to reach that? Of course, in `preStmt` the operand is `i` 
as it should be. The same is true for binary operators `+=` and `-=`. 


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82185



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


[PATCH] D82185: [Analyzer][WIP] Handle pointer implemented as iterators in iterator checkers

2020-06-19 Thread Balogh , Ádám via Phabricator via cfe-commits
baloghadamsoftware created this revision.
baloghadamsoftware added reviewers: NoQ, Szelethus, martong, gamesh411.
baloghadamsoftware added a project: clang.
Herald added subscribers: ASDenysPetrov, steakhal, Charusso, dkrupp, 
donat.nagy, mikhail.ramalho, a.sidorin, rnkovacs, szepet, xazax.hun, whisperity.
baloghadamsoftware marked an inline comment as done.
baloghadamsoftware added inline comments.



Comment at: clang/lib/StaticAnalyzer/Checkers/IteratorModeling.cpp:256
+  SVal SubVal = State->getSVal(UO->getSubExpr(), C.getLocationContext());
+  SVal Result = State->getSVal(UO, C.getLocationContext());
+

This is the problematic point which is not working. I left the comments 
intentionally in the code.

The problem is that in `postStmt` we are //after//  the operation. Thus the 
value of the operand (`SubExpr`) is not `i` anymore, but the //former value// 
of `i` (a pointer to a symbolic region initially). Instead, the result is `i` 
in case of prefix operators, but also the former value in case of postfix 
operators. This is correct, of course, because here, after the call the value 
of `i` was changed, thus it is not equal to the parameter. However, we need the 
region of `i` here and/or the new value bound to it (e.g. the pointer to an 
element region which is usually the result of a `++` or `--` on a pointer to a 
symbolic region). How to reach that? Of course, in `preStmt` the operand is `i` 
as it should be. The same is true for binary operators `+=` and `-=`. 


Iterators are an abstraction of pointers and in some data structures iterators 
may be implemented by pointers. This patch adds support for iterators 
implemented as pointers in all the iterator checkers (including iterator 
modeling).

This patch is work in progress, modeling of lvalue operations do not work yet.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82185

Files:
  clang/lib/StaticAnalyzer/Checkers/InvalidatedIteratorChecker.cpp
  clang/lib/StaticAnalyzer/Checkers/Iterator.cpp
  clang/lib/StaticAnalyzer/Checkers/Iterator.h
  clang/lib/StaticAnalyzer/Checkers/IteratorModeling.cpp
  clang/lib/StaticAnalyzer/Checkers/IteratorRangeChecker.cpp
  clang/lib/StaticAnalyzer/Checkers/MismatchedIteratorChecker.cpp
  clang/test/Analysis/invalidated-iterator.cpp
  clang/test/Analysis/iterator-modeling.cpp
  clang/test/Analysis/iterator-range.cpp
  clang/test/Analysis/mismatched-iterator.cpp

Index: clang/test/Analysis/mismatched-iterator.cpp
===
--- clang/test/Analysis/mismatched-iterator.cpp
+++ clang/test/Analysis/mismatched-iterator.cpp
@@ -118,3 +118,15 @@
 
   if (V1.cbegin() == V2.cbegin()) {} //no-warning
 }
+
+template
+struct cont_with_ptr_iterator {
+  T *begin() const;
+  T *end() const;
+};
+
+void comparison_ptr_iterator(cont_with_ptr_iterator ,
+ cont_with_ptr_iterator ) {
+  if (C1.begin() != C2.end()) {} // expected-warning{{Iterators of different containers used where the same container is expected}}
+}
+
Index: clang/test/Analysis/iterator-range.cpp
===
--- clang/test/Analysis/iterator-range.cpp
+++ clang/test/Analysis/iterator-range.cpp
@@ -854,3 +854,84 @@
   *i; // expected-warning{{Past-the-end iterator dereferenced}}
   // expected-note@-1{{Past-the-end iterator dereferenced}}
 }
+
+template
+struct cont_with_ptr_iterator {
+  T* begin() const;
+  T* end() const;
+};
+
+void deref_end_ptr_iterator(const cont_with_ptr_iterator ) {
+  auto i = c.end();
+  (void) *i; // expected-warning{{Past-the-end iterator dereferenced}}
+ // expected-note@-1{{Past-the-end iterator dereferenced}}
+}
+
+void array_deref_end_ptr_iterator(const cont_with_ptr_iterator ) {
+  auto i = c.end();
+  (void) i[0]; // expected-warning{{Past-the-end iterator dereferenced}}
+   // expected-note@-1{{Past-the-end iterator dereferenced}}
+}
+
+void arrow_deref_end_ptr_iterator(const cont_with_ptr_iterator ) {
+  auto i = c.end();
+  (void) i->n; // expected-warning{{Past-the-end iterator dereferenced}}
+   // expected-note@-1{{Past-the-end iterator dereferenced}}
+}
+
+void arrow_star_deref_end_ptr_iterator(const cont_with_ptr_iterator ,
+   int S::*p) {
+  auto i = c.end();
+  (void)(i->*p); // expected-warning{{Past-the-end iterator dereferenced}}
+ // expected-note@-1{{Past-the-end iterator dereferenced}}
+}
+
+void prefix_incr_end_ptr_iterator(const cont_with_ptr_iterator ) {
+  auto i = c.end();
+  ++i; // expected-warning{{Iterator incremented behind the past-the-end iterator}}
+   // expected-note@-1{{Iterator incremented behind the past-the-end iterator}}
+}
+
+void postfix_incr_end_ptr_iterator(const cont_with_ptr_iterator ) {
+  auto i = c.end();
+  i++; // expected-warning{{Iterator incremented behind the past-the-end iterator}}
+   // 

[PATCH] D81592: [analyzer] SATest: Add a set of initial projects for testing

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ added inline comments.



Comment at: clang/utils/analyzer/projects/box2d/run_static_analyzer.cmd:1
+cmake . -DCMAKE_BUILD_TYPE=Release -Bbuild -GNinja
+cmake --build build

vsavchenko wrote:
> NoQ wrote:
> > Is there a flag to enable assertions or something like that? Usually we 
> > recommend people to enable assertions during analysis. It's also valuable 
> > to test that assertions are actually working.
> > 
> > Disabling assertions is in fact relatively good for reference results 
> > testing because all the false positives that they suppress are suddenly 
> > visible, and therefore the signal we receive from such testing is amplified 
> > significantly. But i wouldn't force such workflow on our 
> > solution-for-everyone because that requires a certain level of masochism in 
> > order to distinguish between "my patch introduced a false positive and it's 
> > bad" and "my patch introduced a false positive but it would have been 
> > suppressed by assertions and we do actually want to emit the warning in 
> > absence of assertions so it's good".
> CMake doesn't have a unified solution for "Release with assertions" type of 
> build.  It is usually done on per-project basis (like in LLVM).  I guess 
> rather than searching for such a flag for every project, we can indeed change 
> it to **Debug**.
Maybe something like `-DCMAKE_C_FLAGS=-UNDEBUG` could also work (or use 
`scan-build --force-analyze-debug-code` which is basically the same thing) but 
choosing `Debug` indeed sounds like the sanest solution.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81592



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


[PATCH] D81601: [analyzer] SATest: Use logger in single-threaded mode as well

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ accepted this revision.
NoQ added a comment.
This revision is now accepted and ready to land.

Aha ok nvm then!


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81601



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


[PATCH] D81571: [analyzer] SATest: Add initial docker infrastructure

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ accepted this revision.
NoQ added a comment.
This revision is now accepted and ready to land.

Ok then!




Comment at: clang/utils/analyzer/entrypoint.py:31
+
+CMAKE_COMMAND = "cmake -G Ninja -DCMAKE_BUILD_TYPE=Release " \
+"-DCMAKE_INSTALL_PREFIX=/analyzer -DLLVM_TARGETS_TO_BUILD=X86 " \

vsavchenko wrote:
> NoQ wrote:
> > `-DLLVM_ENABLE_ASSERTIONS=ON`???
> I was thinking about adding a separate list of options specifically for 
> building.  Assertions can significantly affect performance and I don't know 
> if that should be a default.
I still think assertions should be on by default; it's much worse when somebody 
accidentally tests a logic-related patch without assertions than when somebody 
tests a performance-related patch with assertions.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81571



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


[PATCH] D82092: [analyzer] Handle `\l` symbol in string literals in exploded-graph-rewriter

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ accepted this revision.
NoQ added a comment.
This revision is now accepted and ready to land.

I see what you did here! Great!




Comment at: 
clang/test/Analysis/exploded-graph-rewriter/l_name_starts_with_l.cpp:25
+
+// This test is passed if exploded_graph_rewriter handles dot file without 
errors.
+// CHECK: digraph "ExplodedGraph"

I still wouldn't mind testing the actual output.


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

https://reviews.llvm.org/D82092



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


[PATCH] D82103: [analyzer] Remove forbidden characters from a SourceLocation filename for a graph dump on Windows

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ added inline comments.



Comment at: clang/utils/analyzer/exploded-graph-rewriter.py:383
+# when directory name starts with the letter `l`.
+if sys.platform == 'win32':
+# Find all `\l` (like `,\l`, `}\l`, `[\l`) except `\\l`,

I think this too doesn't need to be platform specific(?)


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

https://reviews.llvm.org/D82103



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


[PATCH] D82081: [z/OS] Add binary format goff and operating system zos to the triple

2020-06-19 Thread Hubert Tong via Phabricator via cfe-commits
hubert.reinterpretcast accepted this revision.
hubert.reinterpretcast added a comment.
This revision is now accepted and ready to land.

LGTM with minor nits.




Comment at: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:4732
+  case Triple::GOFF:
+llvm_unreachable("GOFF is not yet implemented");
   case Triple::XCOFF:

Minor nit: `break` after a function that does not return appears elsewhere in 
this `switch`; please add a `break` here.



Comment at: llvm/lib/Bitcode/Writer/BitcodeWriter.cpp:4750
+  case Triple::GOFF:
+llvm_unreachable("GOFF is not yet implemented");
   case Triple::XCOFF:

Minor nit: `break` after a function that does not return appears elsewhere in 
this `switch`; please add a `break` here.



Comment at: llvm/lib/MC/MCObjectFileInfo.cpp:908
+  case Triple::GOFF:
+report_fatal_error("Cannot initialize MC for GOFF object file format");
   case Triple::XCOFF:

Minor nit: `break` after a function that does not return appears elsewhere in 
this `switch`; please add a `break` here.


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

https://reviews.llvm.org/D82081



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


[PATCH] D82182: [AArch64][SVE] Add bfloat16 support to perm and select intrinsics

2020-06-19 Thread Francesco Petrogalli via Phabricator via cfe-commits
fpetrogalli added inline comments.



Comment at: clang/include/clang/Basic/arm_sve.td:1115
 
+let ArchGuard = "defined(__ARM_FEATURE_SVE_BF16)" in {
+def SVREV_BF16: SInst<"svrev[_{d}]","dd",   "b", MergeNone, 
"aarch64_sve_rev">;

nit: could create a multiclass here like @sdesmalen have done in 
https://reviews.llvm.org/D82187, seems quite a nice way to keep the definition 
of the intrinsics together (look for `multiclass StructLoad`, for example)



Comment at: clang/include/clang/Basic/arm_sve.td:1298
 
+let ArchGuard = "defined(__ARM_FEATURE_SVE_MATMUL_FP64) && 
defined(__ARM_FEATURE_SVE_BF16)" in {
+def SVTRN1Q_BF16  : SInst<"svtrn1q[_{d}]", "ddd",  "b", MergeNone, 
"aarch64_sve_trn1q">;

Same here, could use a multiclass to merge the "regular" intrinsics definition 
with the BF ones.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82182



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


[PATCH] D82199: [clang-format] restore indent in conditionals AlignOperands is DontAlign

2020-06-19 Thread Krasimir Georgiev via Phabricator via cfe-commits
krasimir created this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
krasimir edited the summary of this revision.

After D50078 , we're experiencing unexpected 
un-indent using a style combining `AlignOperands: DontAlign` with 
`BreakBeforeTernaryOperators: false`, such as Google's JavaScript style:

  % bin/clang-format -style=google ~/test.js
  aaa =  ? cc() :
  dd ? ee :
   f;

The issue lies with the interaction of `AlignOperands: DontAlign` and the 
edited code section in ContinuationIndenter.cpp, which de-dents the intent by 
`Style.ContinuationIndentWidth`. From the documentation 

 of AlignOperands: DontAlign:

> The wrapped lines are indented `ContinuationIndentWidth` spaces from the 
> start of the line.

So the de-dent effectively erases the necessary `ContinuationIndentWidth` in 
that case.

This patch restores the `AlignOperands: DontAlign` behavior, producing:

  % bin/clang-format -style=google ~/test.js
  aaa =  ? cc() :
  dd ? ee :
   f;


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82199

Files:
  clang/lib/Format/ContinuationIndenter.cpp
  clang/unittests/Format/FormatTest.cpp


Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -6281,6 +6281,13 @@
"   : bbb ? \n"
" : ;",
Style);
+
+  Style.AlignOperands = FormatStyle::OAS_DontAlign;
+  Style.BreakBeforeTernaryOperators = false;
+  verifyFormat("int x = aaa ? aa :\n"
+   "? cc :\n"
+   "  d;\n",
+   Style);
 }
 
 TEST_F(FormatTest, BreaksConditionalExpressionsAfterOperator) {
Index: clang/lib/Format/ContinuationIndenter.cpp
===
--- clang/lib/Format/ContinuationIndenter.cpp
+++ clang/lib/Format/ContinuationIndenter.cpp
@@ -1041,8 +1041,10 @@
   //* not remove the 'lead' ContinuationIndentWidth
   //* always un-indent by the operator when
   //BreakBeforeTernaryOperators=true
-  unsigned Indent =
-  State.Stack.back().Indent - Style.ContinuationIndentWidth;
+  unsigned Indent = State.Stack.back().Indent;
+  if (Style.AlignOperands != FormatStyle::OAS_DontAlign) {
+Indent -= Style.ContinuationIndentWidth;
+  }
   if (Style.BreakBeforeTernaryOperators &&
   State.Stack.back().UnindentOperator)
 Indent -= 2;


Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -6281,6 +6281,13 @@
"   : bbb ? \n"
" : ;",
Style);
+
+  Style.AlignOperands = FormatStyle::OAS_DontAlign;
+  Style.BreakBeforeTernaryOperators = false;
+  verifyFormat("int x = aaa ? aa :\n"
+   "? cc :\n"
+   "  d;\n",
+   Style);
 }
 
 TEST_F(FormatTest, BreaksConditionalExpressionsAfterOperator) {
Index: clang/lib/Format/ContinuationIndenter.cpp
===
--- clang/lib/Format/ContinuationIndenter.cpp
+++ clang/lib/Format/ContinuationIndenter.cpp
@@ -1041,8 +1041,10 @@
   //* not remove the 'lead' ContinuationIndentWidth
   //* always un-indent by the operator when
   //BreakBeforeTernaryOperators=true
-  unsigned Indent =
-  State.Stack.back().Indent - Style.ContinuationIndentWidth;
+  unsigned Indent = State.Stack.back().Indent;
+  if (Style.AlignOperands != FormatStyle::OAS_DontAlign) {
+Indent -= Style.ContinuationIndentWidth;
+  }
   if (Style.BreakBeforeTernaryOperators &&
   State.Stack.back().UnindentOperator)
 Indent -= 2;
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D67321: Respect CLANG_LINK_CLANG_DYLIB=ON in libclang and c-index-test

2020-06-19 Thread Michał Górny via Phabricator via cfe-commits
mgorny added a comment.

Ping. The current state is that c-index-test crashes for us, and I'd like to 
see it fixed for 10.0.1. I have a patch of my own but it doesn't handle all 
that `_static` magic, so I guess this one's better.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D67321



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


[PATCH] D80025: [ASTMatcher] Correct memoization bug ignoring direction (descendants or ancestors)

2020-06-19 Thread Loïc Joly via Phabricator via cfe-commits
loic-joly-sonarsource added a comment.

Can someone with write access merge this please?
Thank you!


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

https://reviews.llvm.org/D80025



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


[PATCH] D82186: [AArch64][SVE] Add bfloat16 support to svlen intrinsic

2020-06-19 Thread Francesco Petrogalli via Phabricator via cfe-commits
fpetrogalli added inline comments.



Comment at: clang/test/CodeGen/aarch64-sve-intrinsics/acle_sve_len.c:2
 // REQUIRES: aarch64-registered-target
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu 
-target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -DSVE_OVERLOADED_FORMS -triple 
aarch64-none-linux-gnu -target-feature +sve -fallow-half-arguments-and-returns 
-S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s
-// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -triple aarch64-none-linux-gnu 
-target-feature +sve -fallow-half-arguments-and-returns -S -O1 -Werror -Wall -o 
- %s >/dev/null 2>%t
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -triple aarch64-none-linux-gnu -target-feature +sve 
-target-feature +bf16 -fallow-half-arguments-and-returns -S -O1 -Werror -Wall 
-emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -D__ARM_FEATURE_SVE -D__ARM_FEATURE_BF16_SCALAR_ARITHMETIC 
-D__ARM_FEATURE_SVE_BF16 -DSVE_OVERLOADED_FORMS -triple aarch64-none-linux-gnu 
-target-feature +sve -target-feature +bf16 -fallow-half-arguments-and-returns 
-S -O1 -Werror -Wall -emit-llvm -o - %s | FileCheck %s

We said `ARM_FEATURE_BF16_SCALAR_ARITHMETIC` is implied by 
`__ARM_FEATURE_SVE_BF16`, so I think you should remove this macro definition.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82186



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


[PATCH] D82181: [clang-format] indent in chained conditionals when AlignOperands:DontAlign

2020-06-19 Thread Krasimir Georgiev via Phabricator via cfe-commits
krasimir updated this revision to Diff 272084.
krasimir added a comment.

- add a regression test


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82181

Files:
  clang/unittests/Format/FormatTest.cpp


Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -6281,6 +6281,13 @@
"   : bbb ? \n"
" : ;",
Style);
+
+  Style.AlignOperands = FormatStyle::OAS_DontAlign;
+  Style.BreakBeforeTernaryOperators = false;
+  verifyFormat("int x = aaa ? aa :\n"
+   "? cc :\n"
+   "  d;\n",
+   Style);
 }
 
 TEST_F(FormatTest, BreaksConditionalExpressionsAfterOperator) {


Index: clang/unittests/Format/FormatTest.cpp
===
--- clang/unittests/Format/FormatTest.cpp
+++ clang/unittests/Format/FormatTest.cpp
@@ -6281,6 +6281,13 @@
"   : bbb ? \n"
" : ;",
Style);
+
+  Style.AlignOperands = FormatStyle::OAS_DontAlign;
+  Style.BreakBeforeTernaryOperators = false;
+  verifyFormat("int x = aaa ? aa :\n"
+   "? cc :\n"
+   "  d;\n",
+   Style);
 }
 
 TEST_F(FormatTest, BreaksConditionalExpressionsAfterOperator) {
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D82187: [AArch64][SVE] ACLE: Add bfloat16 to struct load/stores.

2020-06-19 Thread Francesco Petrogalli via Phabricator via cfe-commits
fpetrogalli added inline comments.



Comment at: clang/include/clang/Basic/AArch64SVEACLETypes.def:69
 
-SVE_VECTOR_TYPE("__SVBFloat16_t", "__SVBFloat16_t", SveBFloat16, 
SveBFloat16Ty, 8, 16, false, false, true)
+SVE_VECTOR_TYPE("__SVBFloat16_t", "__SVBFloat16_t", SveBFloat16, 
SveBFloat16Ty, 8, 16, true, false, true)
 

Why did you have to set `IsFP = true`? Seems like an unrelated change?



Comment at: clang/utils/TableGen/SveEmitter.cpp:541
 Float = false;
+BFloat = false;
 ElementBitwidth /= 4;

Are these needed? I don't understand the rule for when to be specific on the 
values of these variables.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82187



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


[PATCH] D82184: [MSP430] Update register names

2020-06-19 Thread Anatoly Trosinenko via Phabricator via cfe-commits
atrosinenko created this revision.
atrosinenko added reviewers: echristo, rjmccall, krisb, mskvortsov, pftbest.
Herald added a subscriber: hiraditya.
Herald added projects: clang, LLVM.

When writing a unit test on replacing standard epilogue sequences with `BR 
__mspabi_func_epilog_`, by manually asm-clobbering `rN` - `r10` for N = 
4..10, everything worked well except for seeming inability to clobber r4.

The problem was that MSP430 code generator of LLVM used an obsolete name FP for 
that register. Things were worse because when `llc` read an unknown register 
name, it silently ignored it.

Example: take the following source:

name=test-regs.c
  void f(void)
  {
asm volatile ("" : : : "r0");
asm volatile ("" : : : "r1");
asm volatile ("" : : : "r2");
asm volatile ("" : : : "r3");
asm volatile ("" : : : "r4");
asm volatile ("" : : : "r5");
  }
  
  void g(void)
  {
asm volatile ("" : : : "pc");
asm volatile ("" : : : "sp");
asm volatile ("" : : : "sr");
asm volatile ("" : : : "cg");
asm volatile ("" : : : "fp");
asm volatile ("" : : : "r5");
  }

and execute:

  $ $sysroot/bin/msp430-elf-gcc --version
  msp430-elf-gcc (Mitto Systems Limited - msp430-gcc 8.3.1.25) 8.3.1
  Copyright (C) 2018 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  $ $sysroot/bin/msp430-elf-gcc -c test-regs.c
  test-regs.c: In function 'g':
  test-regs.c:14:3: error: unknown register name 'pc' in 'asm'
 asm volatile ("" : : : "pc");
 ^~~
  test-regs.c:15:3: error: unknown register name 'sp' in 'asm'
 asm volatile ("" : : : "sp");
 ^~~
  test-regs.c:16:3: error: unknown register name 'sr' in 'asm'
 asm volatile ("" : : : "sr");
 ^~~
  test-regs.c:17:3: error: unknown register name 'cg' in 'asm'
 asm volatile ("" : : : "cg");
 ^~~
  test-regs.c:18:3: error: unknown register name 'fp' in 'asm'
 asm volatile ("" : : : "fp");
 ^~~
  $ clang --version
  clang version 10.0.0-4ubuntu1 
  Target: x86_64-pc-linux-gnu
  Thread model: posix
  InstalledDir: /usr/bin
  $ clang -target msp430 -c test-regs.c 
  test-regs.c:14:26: error: unknown register name 'pc' in asm
asm volatile ("" : : : "pc");
   ^
  test-regs.c:15:26: error: unknown register name 'sp' in asm
asm volatile ("" : : : "sp");
   ^
  test-regs.c:16:26: error: unknown register name 'sr' in asm
asm volatile ("" : : : "sr");
   ^
  test-regs.c:17:26: error: unknown register name 'cg' in asm
asm volatile ("" : : : "cg");
   ^
  test-regs.c:18:26: error: unknown register name 'fp' in asm
asm volatile ("" : : : "fp");
   ^
  5 errors generated.

No differences at all. Now, let's drop `g()` function, to make it valid source.

  $ clang -target msp430 test-regs.c -S -emit-llvm -o-
  ...
  ; Function Attrs: noinline nounwind optnone
  define dso_local void @f() #0 {
call void asm sideeffect "", "~{r0}"() #1, !srcloc !2
call void asm sideeffect "", "~{r1}"() #1, !srcloc !3
call void asm sideeffect "", "~{r2}"() #1, !srcloc !4
call void asm sideeffect "", "~{r3}"() #1, !srcloc !5
call void asm sideeffect "", "~{r4}"() #1, !srcloc !6
call void asm sideeffect "", "~{r5}"() #1, !srcloc !7
ret void
  }
  ...

Everything looks good, again.

  $ clang -target msp430 test-regs.c -S -mllvm -stop-after=finalize-isel -o-
  ...
  body: |
bb.0 (%ir-block.0):
  INLINEASM &"", 1, !2
  INLINEASM &"", 1, !3
  INLINEASM &"", 1, !4
  INLINEASM &"", 1, !5
  INLINEASM &"", 1, !6
  INLINEASM &"", 1, 12, implicit-def early-clobber $r5, !7
  RET

That is, I cannot use `fp` register name from the C code because Clang does not 
accept it (exactly like GCC). But the accepted name `r4` is not recognised by 
`llc` (it can be used in listings passed to `llvm-mc` and even `fp` is replace 
to `r4` by `llvm-mc`). So I can specify any of `fp` or `r4` for the string 
literal of `asm(...)` but nothing in the clobber list.

This patch replaces `MSP430::FP` with `MSP430::R4` in the backend code (even 
[MSP430 EABI](doesn't mention FP as a register name)). The R0 - R3 
 registers, on the other hand, are left 
as is in the backend code (after all, they have some special meaning on the ISA 
level). It is just ensured clang is renaming them as expected by the downstream 
tools. There is probably not much sense in **marking them clobbered** but 
rename them //just in case// for use at potentially different contexts.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D82184

Files:
  clang/lib/Basic/Targets/MSP430.h
  clang/test/CodeGen/msp430-register-names.c
  llvm/lib/Target/MSP430/AsmParser/MSP430AsmParser.cpp
  

[PATCH] D82122: [analyzer][Liveness][RFC][NFC] Propose to turn statement liveness into expression liveness

2020-06-19 Thread Artem Dergachev via Phabricator via cfe-commits
NoQ added a comment.

I think you're right, this entire thing only makes sense for expressions. I 
think `Environment` occasionally carries values of `ReturnStmt`s (by which it 
means values of their sub-expressions) but even then liveness analysis doesn't 
need to be aware of that flex.

> no lit tests crashed on the added asserts



> the only non-expression statement it queries are `ObjCForCollectionStmt`s

Wait, how did you figure that out if not through crashing tests?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82122



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


[PATCH] D82126: [libTooling] Change `selection` stencil to handle some cases of text in macros.

2020-06-19 Thread Tom Lokovic via Phabricator via cfe-commits
tdl-g added a comment.

LGTM.  I found the change description confusing, since it talks about the 
selection() stencil but the code is all about the cat() stencil.  I realize 
(now) that the former is deprecated in favor of the latter.  But the change 
description is still confusing.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D82126



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


  1   2   >