[llvm-branch-commits] [clang-tools-extra] release/19.x: [clang-tidy] Fix crash in C language in readability-non-const-parameter (#100461) (PR #101878)

2024-08-04 Thread Nathan James via llvm-branch-commits

njames93 wrote:

@nikic Do you mind updating the release notes to document the fix

https://github.com/llvm/llvm-project/pull/101878
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang-tools-extra] release/19.x: [clang-tidy] Fix crash in C language in readability-non-const-parameter (#100461) (PR #101878)

2024-08-10 Thread Nathan James via llvm-branch-commits

https://github.com/njames93 approved this pull request.


https://github.com/llvm/llvm-project/pull/101878
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits


[llvm-branch-commits] [clang-tools-extra] f05b492 - [clangd][NFC] Simplify handing on methods with no params

2021-01-25 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-25T19:08:10Z
New Revision: f05b492aae4d4a741ec59f19518df91a3012824c

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

LOG: [clangd][NFC] Simplify handing on methods with no params

Add bind methods handling the case when a method has an empty params interface 
and when it has no parameters.

Remove ShutdownParams and ExitParams from Protocol, In LSP they aren't defined, 
instead the methods are defined to have void as the params. This signature now 
better reflects that.

Reviewed By: sammccall

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

Added: 


Modified: 
clang-tools-extra/clangd/ClangdLSPServer.cpp
clang-tools-extra/clangd/ClangdLSPServer.h
clang-tools-extra/clangd/Protocol.h

Removed: 




diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp 
b/clang-tools-extra/clangd/ClangdLSPServer.cpp
index 24d3a3509ca8..930cc3f6c5d9 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.cpp
+++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp
@@ -258,6 +258,15 @@ class ClangdLSPServer::MessageHandler : public 
Transport::MessageHandler {
 };
   }
 
+  template 
+  void bind(const char *Method,
+void (ClangdLSPServer::*Handler)(Callback)) {
+Calls[Method] = [Handler, this](llvm::json::Value RawParams,
+ReplyOnce Reply) {
+  (Server.*Handler)(std::move(Reply));
+};
+  }
+
   // Bind a reply callback to a request. The callback will be invoked when
   // clangd receives the reply from the LSP client.
   // Return a call id of the request.
@@ -301,6 +310,20 @@ class ClangdLSPServer::MessageHandler : public 
Transport::MessageHandler {
 };
   }
 
+  void bind(const char *Method, void (ClangdLSPServer::*Handler)()) {
+Notifications[Method] = [Handler, this](llvm::json::Value RawParams) {
+  (Server.*Handler)();
+};
+  }
+
+  template <>
+  void bind(const char *Method,
+  void (ClangdLSPServer::*Handler)(const NoParams &)) {
+Notifications[Method] = [Handler, this](llvm::json::Value RawParams) {
+  (Server.*Handler)(NoParams{});
+};
+  }
+
 private:
   // Function object to reply to an LSP call.
   // Each instance must be called exactly once, otherwise:
@@ -647,8 +670,7 @@ void ClangdLSPServer::onInitialize(const InitializeParams 
&Params,
 
 void ClangdLSPServer::onInitialized(const InitializedParams &Params) {}
 
-void ClangdLSPServer::onShutdown(const ShutdownParams &Params,
- Callback Reply) {
+void ClangdLSPServer::onShutdown(Callback Reply) {
   // Do essentially nothing, just say we're ready to exit.
   ShutdownRequestReceived = true;
   Reply(nullptr);
@@ -656,8 +678,7 @@ void ClangdLSPServer::onShutdown(const ShutdownParams 
&Params,
 
 // sync is a clangd extension: it blocks until all background work completes.
 // It blocks the calling thread, so no messages are processed until it returns!
-void ClangdLSPServer::onSync(const NoParams &Params,
- Callback Reply) {
+void ClangdLSPServer::onSync(Callback Reply) {
   if (Server->blockUntilIdleForTest(/*TimeoutSeconds=*/60))
 Reply(nullptr);
   else
@@ -1445,8 +1466,7 @@ void ClangdLSPServer::onSemanticTokensDelta(
   });
 }
 
-void ClangdLSPServer::onMemoryUsage(const NoParams &,
-Callback Reply) {
+void ClangdLSPServer::onMemoryUsage(Callback Reply) {
   llvm::BumpPtrAllocator DetailAlloc;
   MemoryTree MT(&DetailAlloc);
   profile(MT);

diff  --git a/clang-tools-extra/clangd/ClangdLSPServer.h 
b/clang-tools-extra/clangd/ClangdLSPServer.h
index 3a46bd7b1bea..d8ce2dbe53db 100644
--- a/clang-tools-extra/clangd/ClangdLSPServer.h
+++ b/clang-tools-extra/clangd/ClangdLSPServer.h
@@ -93,8 +93,8 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
   // Calls have signature void(const Params&, Callback).
   void onInitialize(const InitializeParams &, Callback);
   void onInitialized(const InitializedParams &);
-  void onShutdown(const ShutdownParams &, Callback);
-  void onSync(const NoParams &, Callback);
+  void onShutdown(Callback);
+  void onSync(Callback);
   void onDocumentDidOpen(const DidOpenTextDocumentParams &);
   void onDocumentDidChange(const DidChangeTextDocumentParams &);
   void onDocumentDidClose(const DidCloseTextDocumentParams &);
@@ -161,7 +161,7 @@ class ClangdLSPServer : private ClangdServer::Callbacks {
  Callback);
   /// This is a clangd extension. Provides a json tree representing memory 
usage
   /// hierarchy.
-  void onMemoryUsage(const NoParams &, Callback);
+  void onMemoryUsage(Callback);
 
   std::vector getFixes(StringRef File, const clangd::Diagnostic &D);
 

diff  --git a/clang-tools-extra/clangd/Pr

[llvm-branch-commits] [llvm] a7130d8 - [ADT][NFC] Use empty base optimisation in BumpPtrAllocatorImpl

2021-01-12 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-12T22:43:48Z
New Revision: a7130d85e4b9e47b18a89eac3d47fd8c19d449c1

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

LOG: [ADT][NFC] Use empty base optimisation in BumpPtrAllocatorImpl

Most uses of this class just use the default MallocAllocator.
As this contains no fields, we can use the empty base optimisation for 
BumpPtrAllocatorImpl and save 8 bytes of padding for most use cases.

This prevents using a class that is marked as `final` as the `AllocatorT` 
template argument.
In one must use an allocator that has been marked as `final`, the simplest way 
around this is a proxy class.
The class should have all the methods that `AllocaterBase` expects and should 
forward the calls to your own allocator instance.

Reviewed By: dblaikie

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

Added: 


Modified: 
llvm/include/llvm/Support/Allocator.h

Removed: 




diff  --git a/llvm/include/llvm/Support/Allocator.h 
b/llvm/include/llvm/Support/Allocator.h
index 40c967ccc485..245432debce6 100644
--- a/llvm/include/llvm/Support/Allocator.h
+++ b/llvm/include/llvm/Support/Allocator.h
@@ -66,7 +66,8 @@ template 
 class BumpPtrAllocatorImpl
 : public AllocatorBase> {
+SizeThreshold, GrowthDelay>>,
+  private AllocatorT {
 public:
   static_assert(SizeThreshold <= SlabSize,
 "The SizeThreshold must be at most the SlabSize to ensure "
@@ -80,15 +81,15 @@ class BumpPtrAllocatorImpl
 
   template 
   BumpPtrAllocatorImpl(T &&Allocator)
-  : Allocator(std::forward(Allocator)) {}
+  : AllocatorT(std::forward(Allocator)) {}
 
   // Manually implement a move constructor as we must clear the old allocator's
   // slabs as a matter of correctness.
   BumpPtrAllocatorImpl(BumpPtrAllocatorImpl &&Old)
-  : CurPtr(Old.CurPtr), End(Old.End), Slabs(std::move(Old.Slabs)),
+  : AllocatorT(static_cast(Old)), CurPtr(Old.CurPtr),
+End(Old.End), Slabs(std::move(Old.Slabs)),
 CustomSizedSlabs(std::move(Old.CustomSizedSlabs)),
-BytesAllocated(Old.BytesAllocated), RedZoneSize(Old.RedZoneSize),
-Allocator(std::move(Old.Allocator)) {
+BytesAllocated(Old.BytesAllocated), RedZoneSize(Old.RedZoneSize) {
 Old.CurPtr = Old.End = nullptr;
 Old.BytesAllocated = 0;
 Old.Slabs.clear();
@@ -110,7 +111,7 @@ class BumpPtrAllocatorImpl
 RedZoneSize = RHS.RedZoneSize;
 Slabs = std::move(RHS.Slabs);
 CustomSizedSlabs = std::move(RHS.CustomSizedSlabs);
-Allocator = std::move(RHS.Allocator);
+AllocatorT::operator=(static_cast(RHS));
 
 RHS.CurPtr = RHS.End = nullptr;
 RHS.BytesAllocated = 0;
@@ -170,7 +171,8 @@ class BumpPtrAllocatorImpl
 // If Size is really big, allocate a separate slab for it.
 size_t PaddedSize = SizeToAllocate + Alignment.value() - 1;
 if (PaddedSize > SizeThreshold) {
-  void *NewSlab = Allocator.Allocate(PaddedSize, 
alignof(std::max_align_t));
+  void *NewSlab =
+  AllocatorT::Allocate(PaddedSize, alignof(std::max_align_t));
   // We own the new slab and don't want anyone reading anyting other than
   // pieces returned from this method.  So poison the whole slab.
   __asan_poison_memory_region(NewSlab, PaddedSize);
@@ -315,9 +317,6 @@ class BumpPtrAllocatorImpl
   /// a sanitizer.
   size_t RedZoneSize = 1;
 
-  /// The allocator instance we use to get slabs of memory.
-  AllocatorT Allocator;
-
   static size_t computeSlabSize(unsigned SlabIdx) {
 // Scale the actual allocated slab size based on the number of slabs
 // allocated. Every GrowthDelay slabs allocated, we double
@@ -333,7 +332,7 @@ class BumpPtrAllocatorImpl
 size_t AllocatedSlabSize = computeSlabSize(Slabs.size());
 
 void *NewSlab =
-Allocator.Allocate(AllocatedSlabSize, alignof(std::max_align_t));
+AllocatorT::Allocate(AllocatedSlabSize, alignof(std::max_align_t));
 // We own the new slab and don't want anyone reading anything other than
 // pieces returned from this method.  So poison the whole slab.
 __asan_poison_memory_region(NewSlab, AllocatedSlabSize);
@@ -349,7 +348,7 @@ class BumpPtrAllocatorImpl
 for (; I != E; ++I) {
   size_t AllocatedSlabSize =
   computeSlabSize(std::distance(Slabs.begin(), I));
-  Allocator.Deallocate(*I, AllocatedSlabSize, alignof(std::max_align_t));
+  AllocatorT::Deallocate(*I, AllocatedSlabSize, alignof(std::max_align_t));
 }
   }
 
@@ -358,7 +357,7 @@ class BumpPtrAllocatorImpl
 for (auto &PtrAndSize : CustomSizedSlabs) {
   void *Ptr = PtrAndSize.first;
   size_t Size = PtrAndSize.second;
-  Allocator.Deallocate(Ptr, Size, alignof(std::max_align_t));
+  AllocatorT::Dea

[llvm-branch-commits] [llvm] ceb9379 - [ADT] Fix join_impl using the wrong size when calculating total length

2021-01-13 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-13T11:36:49Z
New Revision: ceb9379a90f5a320d19f5694ef00b4d1164fa7d6

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

LOG: [ADT] Fix join_impl using the wrong size when calculating total length

Reviewed By: dblaikie

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

Added: 


Modified: 
llvm/include/llvm/ADT/StringExtras.h

Removed: 




diff  --git a/llvm/include/llvm/ADT/StringExtras.h 
b/llvm/include/llvm/ADT/StringExtras.h
index 1fea700efe0c..0178539bc402 100644
--- a/llvm/include/llvm/ADT/StringExtras.h
+++ b/llvm/include/llvm/ADT/StringExtras.h
@@ -384,13 +384,16 @@ inline std::string join_impl(IteratorT Begin, IteratorT 
End,
 
   size_t Len = (std::distance(Begin, End) - 1) * Separator.size();
   for (IteratorT I = Begin; I != End; ++I)
-Len += (*Begin).size();
+Len += I->size();
   S.reserve(Len);
+  size_t PrevCapacity = S.capacity();
+  (void)PrevCapacity;
   S += (*Begin);
   while (++Begin != End) {
 S += Separator;
 S += (*Begin);
   }
+  assert(PrevCapacity == S.capacity() && "String grew during building");
   return S;
 }
 



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


[llvm-branch-commits] [llvm] af1bb4b - Fix build errors after ceb9379a9

2021-01-13 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-13T12:19:53Z
New Revision: af1bb4bc823f823df9869d354f639ee86b83d747

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

LOG: Fix build errors after ceb9379a9

For some reason some builds dont like the arrow operator access. using the 
deref then access should fix the issue.

/home/buildbots/ppc64le-flang-mlir-rhel-test/ppc64le-flang-rhel-clang-build/llvm-project/llvm/include/llvm/ADT/iterator.h:171:34:
 error: taking the address of a temporary object of type 'llvm::StringRef' 
[-Waddress-of-temporary]
  PointerT operator->() { return &static_cast(this)->operator*(); }
 ^~~
/home/buildbots/ppc64le-flang-mlir-rhel-test/ppc64le-flang-rhel-clang-build/llvm-project/llvm/include/llvm/ADT/StringExtras.h:387:13:
 note: in instantiation of member function 
'llvm::iterator_facade_base, std::random_access_iterator_tag, llvm::StringRef, long, 
llvm::StringRef *, llvm::StringRef &>::operator->' requested here
Len += I->size();

Added: 


Modified: 
llvm/include/llvm/ADT/StringExtras.h

Removed: 




diff  --git a/llvm/include/llvm/ADT/StringExtras.h 
b/llvm/include/llvm/ADT/StringExtras.h
index 0178539bc402..caa1ed547bb2 100644
--- a/llvm/include/llvm/ADT/StringExtras.h
+++ b/llvm/include/llvm/ADT/StringExtras.h
@@ -384,7 +384,7 @@ inline std::string join_impl(IteratorT Begin, IteratorT End,
 
   size_t Len = (std::distance(Begin, End) - 1) * Separator.size();
   for (IteratorT I = Begin; I != End; ++I)
-Len += I->size();
+Len += (*I).size();
   S.reserve(Len);
   size_t PrevCapacity = S.capacity();
   (void)PrevCapacity;



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


[llvm-branch-commits] [clang] d18c3c7 - [CodeComplete] Add ranged for loops code pattern.

2021-01-22 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-22T23:40:35Z
New Revision: d18c3c7b18e9e78145d701c4687682848071ab98

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

LOG: [CodeComplete] Add ranged for loops code pattern.

Add code pattersn for c++ `range for` loops and objective c `for...in` loops.

Reviewed By: kadircet

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

Added: 


Modified: 
clang/lib/Sema/SemaCodeComplete.cpp

Removed: 




diff  --git a/clang/lib/Sema/SemaCodeComplete.cpp 
b/clang/lib/Sema/SemaCodeComplete.cpp
index 243f68d16462..d77c9e43a9bd 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -2294,6 +2294,29 @@ static void 
AddOrdinaryNameResults(Sema::ParserCompletionContext CCC, Scope *S,
   Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
   Builder.AddChunk(CodeCompletionString::CK_RightBrace);
   Results.AddResult(Result(Builder.TakeString()));
+
+  if (SemaRef.getLangOpts().CPlusPlus11 || SemaRef.getLangOpts().ObjC) {
+// for ( range_declaration (:|in) range_expression ) { statements }
+Builder.AddTypedTextChunk("for");
+Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+Builder.AddChunk(CodeCompletionString::CK_LeftParen);
+Builder.AddPlaceholderChunk("range-declaration");
+Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+if (SemaRef.getLangOpts().ObjC)
+  Builder.AddTextChunk("in");
+else
+  Builder.AddChunk(CodeCompletionString::CK_Colon);
+Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+Builder.AddPlaceholderChunk("range-expression");
+Builder.AddChunk(CodeCompletionString::CK_RightParen);
+Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
+Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
+Builder.AddPlaceholderChunk("statements");
+Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
+Builder.AddChunk(CodeCompletionString::CK_RightBrace);
+Results.AddResult(Result(Builder.TakeString()));
+  }
 }
 
 if (S->getContinueParent()) {



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


[llvm-branch-commits] [clang-tools-extra] 7af6a13 - [NFC] Switch up some dyn_cast calls

2021-01-02 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-02T19:56:27Z
New Revision: 7af6a134508cd1c7f75c6e3441ce436f220f30a4

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

LOG: [NFC] Switch up some dyn_cast calls

Added: 


Modified: 
clang-tools-extra/clangd/AST.cpp
clang-tools-extra/clangd/DumpAST.cpp
clang-tools-extra/clangd/FindTarget.cpp
clang-tools-extra/clangd/refactor/Rename.cpp
clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp
clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp
clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/AST.cpp 
b/clang-tools-extra/clangd/AST.cpp
index c5f87af86319..39ab48843b28 100644
--- a/clang-tools-extra/clangd/AST.cpp
+++ b/clang-tools-extra/clangd/AST.cpp
@@ -367,7 +367,7 @@ class DeducedTypeVisitor : public 
RecursiveASTVisitor {
 // Loc of auto in return type (c++14).
 auto CurLoc = D->getReturnTypeSourceRange().getBegin();
 // Loc of "auto" in operator auto()
-if (CurLoc.isInvalid() && dyn_cast(D))
+if (CurLoc.isInvalid() && isa(D))
   CurLoc = D->getTypeSourceInfo()->getTypeLoc().getBeginLoc();
 // Loc of "auto" in function with trailing return type (c++11).
 if (CurLoc.isInvalid())

diff  --git a/clang-tools-extra/clangd/DumpAST.cpp 
b/clang-tools-extra/clangd/DumpAST.cpp
index 12698b42ef3e..588bcfcf2424 100644
--- a/clang-tools-extra/clangd/DumpAST.cpp
+++ b/clang-tools-extra/clangd/DumpAST.cpp
@@ -242,9 +242,8 @@ class DumpVisitor : public RecursiveASTVisitor 
{
 return "const";
   return "";
 }
-if (isa(S) || isa(S) ||
-isa(S) || isa(S) ||
-isa(S) || isa(S))
+if (isa(S))
   return toString([&](raw_ostream &OS) {
 S->printPretty(OS, nullptr, Ctx.getPrintingPolicy());
   });

diff  --git a/clang-tools-extra/clangd/FindTarget.cpp 
b/clang-tools-extra/clangd/FindTarget.cpp
index 3afd65522680..9a502a84e36f 100644
--- a/clang-tools-extra/clangd/FindTarget.cpp
+++ b/clang-tools-extra/clangd/FindTarget.cpp
@@ -843,7 +843,7 @@ llvm::SmallVector refInStmt(const Stmt *S) {
 void VisitMemberExpr(const MemberExpr *E) {
   // Skip destructor calls to avoid duplication: TypeLoc within will be
   // visited separately.
-  if (llvm::dyn_cast(E->getFoundDecl().getDecl()))
+  if (llvm::isa(E->getFoundDecl().getDecl()))
 return;
   Refs.push_back(ReferenceLoc{E->getQualifierLoc(),
   E->getMemberNameInfo().getLoc(),

diff  --git a/clang-tools-extra/clangd/refactor/Rename.cpp 
b/clang-tools-extra/clangd/refactor/Rename.cpp
index 8ed5811c88b2..d3c7da96a441 100644
--- a/clang-tools-extra/clangd/refactor/Rename.cpp
+++ b/clang-tools-extra/clangd/refactor/Rename.cpp
@@ -119,7 +119,7 @@ const NamedDecl *canonicalRenameDecl(const NamedDecl *D) {
 // declaration.
 while (Method->isVirtual() && Method->size_overridden_methods())
   Method = *Method->overridden_methods().begin();
-return dyn_cast(Method->getCanonicalDecl());
+return Method->getCanonicalDecl();
   }
   if (const auto *Function = dyn_cast(D))
 if (const FunctionTemplateDecl *Template = Function->getPrimaryTemplate())

diff  --git a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp 
b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp
index c214695c5f07..cb87cc764bc3 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp
@@ -111,7 +111,7 @@ Expected ExpandAutoType::apply(const 
Selection& Inputs) {
 
   // if it's a lambda expression, return an error message
   if (isa(*DeducedType) &&
-  dyn_cast(*DeducedType)->getDecl()->isLambda()) {
+  cast(*DeducedType)->getDecl()->isLambda()) {
 return error("Could not expand type of lambda expression");
   }
 

diff  --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp 
b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
index bcf9bbe00f7c..c603861c3d69 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp
@@ -79,7 +79,7 @@ computeReferencedDecls(const clang::Expr *Expr) {
 }
   };
   FindDeclRefsVisitor Visitor;
-  Visitor.TraverseStmt(const_cast(dyn_cast(Expr)));
+  Visitor.TraverseStmt(const_cast(cast(Expr)));
   return Visitor.ReferencedDecls;
 }
 

diff  --git a/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp 
b/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp
index 25fab244e30c..35d8605d 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingName

[llvm-branch-commits] [clang-tools-extra] 59810c5 - [clang-tidy] Fix windows tests

2021-01-03 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-04T00:39:34Z
New Revision: 59810c51e761f241f23f45a120d5c3518983d2d8

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

LOG: [clang-tidy] Fix windows tests

Attempt to fix the 2 failing tests identifier in 48646.
Appears that python3 doesn't like nested double quotes in single quoted 
strings, hopefully nested single quotes in double quoted strings is a-ok.

Reviewed By: thakis

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

Added: 


Modified: 

clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-macro-usage-custom.cpp

clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-ignored-regexp.cpp

Removed: 




diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-macro-usage-custom.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-macro-usage-custom.cpp
index b3075324efdb..5e70aa00d40e 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-macro-usage-custom.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-macro-usage-custom.cpp
@@ -1,9 +1,6 @@
-// FIXME: PR48646
-// UNSUPPORTED: system-windows
-
 // RUN: %check_clang_tidy %s cppcoreguidelines-macro-usage %t \
-// RUN: -config='{CheckOptions: \
-// RUN:  [{key: cppcoreguidelines-macro-usage.AllowedRegexp, value: 
"DEBUG_*|TEST_*"}]}' --
+// RUN: -config="{CheckOptions: \
+// RUN:  [{key: cppcoreguidelines-macro-usage.AllowedRegexp, value: 
'DEBUG_*|TEST_*'}]}" --
 
 #ifndef INCLUDE_GUARD
 #define INCLUDE_GUARD

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-ignored-regexp.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-ignored-regexp.cpp
index 625b7dc9134a..22a8c7159a99 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-ignored-regexp.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-ignored-regexp.cpp
@@ -1,15 +1,12 @@
-// FIXME: PR48646
-// UNSUPPORTED: system-windows
-
 // RUN: %check_clang_tidy %s readability-identifier-naming %t -- \
-// RUN:   -config='{CheckOptions: [ \
+// RUN:   -config="{CheckOptions: [ \
 // RUN: {key: readability-identifier-naming.ParameterCase, value: 
CamelCase}, \
-// RUN: {key: readability-identifier-naming.ParameterIgnoredRegexp, value: 
"^[a-z]{1,2}$"}, \
+// RUN: {key: readability-identifier-naming.ParameterIgnoredRegexp, value: 
'^[a-z]{1,2}$'}, \
 // RUN: {key: readability-identifier-naming.ClassCase, value: CamelCase}, \
-// RUN: {key: readability-identifier-naming.ClassIgnoredRegexp, value: 
"^fo$|^fooo$"}, \
+// RUN: {key: readability-identifier-naming.ClassIgnoredRegexp, value: 
'^fo$|^fooo$'}, \
 // RUN: {key: readability-identifier-naming.StructCase, value: CamelCase}, 
\
-// RUN: {key: readability-identifier-naming.StructIgnoredRegexp, value: 
"sooo|so|soo|$invalidregex["} \
-// RUN:  ]}'
+// RUN: {key: readability-identifier-naming.StructIgnoredRegexp, value: 
'sooo|so|soo|$invalidregex['} \
+// RUN:  ]}"
 
 int testFunc(int a, char **b);
 int testFunc(int ab, char **ba);



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


[llvm-branch-commits] [clang-tools-extra] 0bfe100 - [NFC] Test case refactor

2021-01-06 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-06T20:00:15Z
New Revision: 0bfe100145634988e4a914da776b55509ba0bec0

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

LOG: [NFC] Test case refactor

Added: 


Modified: 
clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp 
b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
index a51067896432..c87c1be6f8e9 100644
--- a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
@@ -1042,7 +1042,7 @@ TEST_F(TUSchedulerTests, CommandLineWarnings) {
 
 TEST(DebouncePolicy, Compute) {
   namespace c = std::chrono;
-  std::vector History = {
+  DebouncePolicy::clock::duration History[] = {
   c::seconds(0),
   c::seconds(5),
   c::seconds(10),
@@ -1053,8 +1053,9 @@ TEST(DebouncePolicy, Compute) {
   Policy.Max = c::seconds(25);
   // Call Policy.compute(History) and return seconds as a float.
   auto Compute = [&](llvm::ArrayRef History) {
-using FloatingSeconds = c::duration;
-return static_cast(Policy.compute(History) / FloatingSeconds(1));
+return c::duration_cast>(
+   Policy.compute(History))
+.count();
   };
   EXPECT_NEAR(10, Compute(History), 0.01) << "(upper) median = 10";
   Policy.RebuildRatio = 1.5;



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


[llvm-branch-commits] [clang-tools-extra] 3505d8d - [clangd][NFC] Use PathRef for getCorrespondingHeaderOrSource

2021-01-06 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-07T02:41:19Z
New Revision: 3505d8dc07427b3d9165538d8f1cee574ea66804

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

LOG: [clangd][NFC] Use PathRef for getCorrespondingHeaderOrSource

Added: 


Modified: 
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/HeaderSourceSwitch.cpp
clang-tools-extra/clangd/HeaderSourceSwitch.h
clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/ClangdServer.cpp 
b/clang-tools-extra/clangd/ClangdServer.cpp
index b760b31c0b87..d5e21cfb063e 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -549,8 +549,8 @@ void ClangdServer::switchSourceHeader(
   // the same directory.
   //  2) if 1) fails, we use the AST&Index approach, it is slower but supports
   // 
diff erent code layout.
-  if (auto CorrespondingFile = getCorrespondingHeaderOrSource(
-  std::string(Path), TFS.view(llvm::None)))
+  if (auto CorrespondingFile =
+  getCorrespondingHeaderOrSource(Path, TFS.view(llvm::None)))
 return CB(std::move(CorrespondingFile));
   auto Action = [Path = Path.str(), CB = std::move(CB),
  this](llvm::Expected InpAST) mutable {

diff  --git a/clang-tools-extra/clangd/HeaderSourceSwitch.cpp 
b/clang-tools-extra/clangd/HeaderSourceSwitch.cpp
index d6b0b98f8d42..cd493a72b242 100644
--- a/clang-tools-extra/clangd/HeaderSourceSwitch.cpp
+++ b/clang-tools-extra/clangd/HeaderSourceSwitch.cpp
@@ -17,8 +17,7 @@ namespace clang {
 namespace clangd {
 
 llvm::Optional getCorrespondingHeaderOrSource(
-const Path &OriginalFile,
-llvm::IntrusiveRefCntPtr VFS) {
+PathRef OriginalFile, llvm::IntrusiveRefCntPtr VFS) 
{
   llvm::StringRef SourceExtensions[] = {".cpp", ".c", ".cc", ".cxx",
 ".c++", ".m", ".mm"};
   llvm::StringRef HeaderExtensions[] = {".h", ".hh", ".hpp", ".hxx", ".inc"};
@@ -51,25 +50,23 @@ llvm::Optional getCorrespondingHeaderOrSource(
 NewExts = SourceExtensions;
 
   // Storage for the new path.
-  llvm::SmallString<128> NewPath = llvm::StringRef(OriginalFile);
+  llvm::SmallString<128> NewPath = OriginalFile;
 
   // Loop through switched extension candidates.
   for (llvm::StringRef NewExt : NewExts) {
 llvm::sys::path::replace_extension(NewPath, NewExt);
 if (VFS->exists(NewPath))
-  return NewPath.str().str(); // First str() to convert from SmallString to
-  // StringRef, second to convert from 
StringRef
-  // to std::string
+  return Path(NewPath);
 
 // Also check NewExt in upper-case, just in case.
 llvm::sys::path::replace_extension(NewPath, NewExt.upper());
 if (VFS->exists(NewPath))
-  return NewPath.str().str();
+  return Path(NewPath);
   }
   return None;
 }
 
-llvm::Optional getCorrespondingHeaderOrSource(const Path &OriginalFile,
+llvm::Optional getCorrespondingHeaderOrSource(PathRef OriginalFile,
 ParsedAST &AST,
 const SymbolIndex *Index) {
   if (!Index) {
@@ -121,7 +118,7 @@ llvm::Optional getCorrespondingHeaderOrSource(const 
Path &OriginalFile,
   // candidates.
   Best = It;
   }
-  return Path(std::string(Best->first()));
+  return Path(Best->first());
 }
 
 std::vector getIndexableLocalDecls(ParsedAST &AST) {

diff  --git a/clang-tools-extra/clangd/HeaderSourceSwitch.h 
b/clang-tools-extra/clangd/HeaderSourceSwitch.h
index a971b385d74c..8cdd3f028280 100644
--- a/clang-tools-extra/clangd/HeaderSourceSwitch.h
+++ b/clang-tools-extra/clangd/HeaderSourceSwitch.h
@@ -18,12 +18,11 @@ namespace clangd {
 /// Given a header file, returns the best matching source file, and vice visa.
 /// It only uses the filename heuristics to do the inference.
 llvm::Optional getCorrespondingHeaderOrSource(
-const Path &OriginalFile,
-llvm::IntrusiveRefCntPtr VFS);
+PathRef OriginalFile, llvm::IntrusiveRefCntPtr VFS);
 
 /// Given a header file, returns the best matching source file, and vice visa.
 /// The heuristics incorporate with the AST and the index (if provided).
-llvm::Optional getCorrespondingHeaderOrSource(const Path &OriginalFile,
+llvm::Optional getCorrespondingHeaderOrSource(PathRef OriginalFile,
 ParsedAST &AST,
 const SymbolIndex *Index);
 

diff  --git a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp 
b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp
index 6f7ad2e2a541..7a40ffae3d1c 100644
--- a/clang-tools-extra/clangd/re

[llvm-branch-commits] [clang-tools-extra] 467cbd2 - [clangd][NFC] Remove unnecessary copy in CodeComplete

2021-01-08 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-09T02:32:23Z
New Revision: 467cbd2981840745a84dda07855c4e41501f6903

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

LOG: [clangd][NFC] Remove unnecessary copy in CodeComplete

All tests still pass with ASAN so fairly confident no use-after-free going on 
here.

Added: 


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

Removed: 




diff  --git a/clang-tools-extra/clangd/CodeComplete.cpp 
b/clang-tools-extra/clangd/CodeComplete.cpp
index 1a8474f6c53d..53c647a68788 100644
--- a/clang-tools-extra/clangd/CodeComplete.cpp
+++ b/clang-tools-extra/clangd/CodeComplete.cpp
@@ -,8 +,8 @@ bool 
semaCodeComplete(std::unique_ptr Consumer,
   offsetToClangLineColumn(Input.ParseInput.Contents, Input.Offset);
 
   std::unique_ptr ContentsBuffer =
-  llvm::MemoryBuffer::getMemBufferCopy(Input.ParseInput.Contents,
-   Input.FileName);
+  llvm::MemoryBuffer::getMemBuffer(Input.ParseInput.Contents,
+   Input.FileName);
   // The diagnostic options must be set before creating a CompilerInstance.
   CI->getDiagnosticOpts().IgnoreWarnings = true;
   // We reuse the preamble whether it's valid or not. This is a



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


[llvm-branch-commits] [clang-tools-extra] 31732e6 - [clangd] Remove ScratchFS from tests

2021-01-11 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-11T16:14:26Z
New Revision: 31732e6f52c8e5e722d3e4cca053db793dae3b8c

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

LOG: [clangd] Remove ScratchFS from tests

This can lead to issues if files in the tmp directory we don't care about / 
control are found.
This was partially addressed in D94321, but this is a more permanent fix.
Fixes https://github.com/clangd/clangd/issues/354

Reviewed By: adamcz, sammccall

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

Added: 


Modified: 
clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp

Removed: 




diff  --git 
a/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp 
b/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp
index 12c986572d8b..63b1b731656a 100644
--- a/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp
+++ b/clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp
@@ -169,48 +169,6 @@ TEST_F(OverlayCDBTest, Adjustments) {
"-DFallback", "-DAdjust_baz.cc"));
 }
 
-// Allows placement of files for tests and cleans them up after.
-// FIXME: GlobalCompilationDatabase is mostly VFS-clean now, switch to MockFS?
-class ScratchFS {
-  llvm::SmallString<128> Root;
-
-public:
-  ScratchFS() {
-EXPECT_FALSE(llvm::sys::fs::createUniqueDirectory("clangd-cdb-test", Root))
-<< "Failed to create unique directory";
-  }
-
-  ~ScratchFS() {
-EXPECT_FALSE(llvm::sys::fs::remove_directories(Root))
-<< "Failed to cleanup " << Root;
-  }
-
-  llvm::StringRef root() const { return Root; }
-
-  void write(PathRef RelativePath, llvm::StringRef Contents) {
-std::string AbsPath = path(RelativePath);
-EXPECT_FALSE(llvm::sys::fs::create_directories(
-llvm::sys::path::parent_path(AbsPath)))
-<< "Failed to create directories for: " << AbsPath;
-
-std::error_code EC;
-llvm::raw_fd_ostream OS(AbsPath, EC);
-EXPECT_FALSE(EC) << "Failed to open " << AbsPath << " for writing";
-OS << llvm::formatv(Contents.data(),
-llvm::sys::path::convert_to_slash(Root));
-OS.close();
-
-EXPECT_FALSE(OS.has_error());
-  }
-
-  std::string path(PathRef RelativePath) const {
-llvm::SmallString<128> AbsPath(Root);
-llvm::sys::path::append(AbsPath, RelativePath);
-llvm::sys::path::native(AbsPath);
-return AbsPath.str().str();
-  }
-};
-
 TEST(GlobalCompilationDatabaseTest, DiscoveryWithNestedCDBs) {
   const char *const CDBOuter =
   R"cdb(
@@ -242,34 +200,35 @@ TEST(GlobalCompilationDatabaseTest, 
DiscoveryWithNestedCDBs) {
 }
   ]
   )cdb";
-  ScratchFS FS;
-  RealThreadsafeFS TFS;
-  FS.write("compile_commands.json", CDBOuter);
-  FS.write("build/compile_commands.json", CDBInner);
+  MockFS FS;
+  FS.Files[testPath("compile_commands.json")] =
+  llvm::formatv(CDBOuter, llvm::sys::path::convert_to_slash(testRoot()));
+  FS.Files[testPath("build/compile_commands.json")] =
+  llvm::formatv(CDBInner, llvm::sys::path::convert_to_slash(testRoot()));
 
   // Note that gen2.cc goes missing with our following model, not sure this
   // happens in practice though.
   {
-DirectoryBasedGlobalCompilationDatabase DB(TFS);
+DirectoryBasedGlobalCompilationDatabase DB(FS);
 std::vector DiscoveredFiles;
 auto Sub =
 DB.watch([&DiscoveredFiles](const std::vector Changes) {
   DiscoveredFiles = Changes;
 });
 
-DB.getCompileCommand(FS.path("build/../a.cc"));
+DB.getCompileCommand(testPath("build/../a.cc"));
 EXPECT_THAT(DiscoveredFiles, UnorderedElementsAre(AllOf(
  EndsWith("a.cc"), Not(HasSubstr("..");
 DiscoveredFiles.clear();
 
-DB.getCompileCommand(FS.path("build/gen.cc"));
+DB.getCompileCommand(testPath("build/gen.cc"));
 EXPECT_THAT(DiscoveredFiles, UnorderedElementsAre(EndsWith("gen.cc")));
   }
 
   // With a custom compile commands dir.
   {
-DirectoryBasedGlobalCompilationDatabase::Options Opts(TFS);
-Opts.CompileCommandsDir = FS.root().str();
+DirectoryBasedGlobalCompilationDatabase::Options Opts(FS);
+Opts.CompileCommandsDir = testRoot();
 DirectoryBasedGlobalCompilationDatabase DB(Opts);
 std::vector DiscoveredFiles;
 auto Sub =
@@ -277,24 +236,23 @@ TEST(GlobalCompilationDatabaseTest, 
DiscoveryWithNestedCDBs) {
   DiscoveredFiles = Changes;
 });
 
-DB.getCompileCommand(FS.path("a.cc"));
+DB.getCompileCommand(testPath("a.cc"));
 EXPECT_THAT(DiscoveredFiles,
 UnorderedElementsAre(EndsWith("a.cc"), EndsWith("gen.cc"),
  EndsWith("gen2.cc")));
 DiscoveredFiles.

[llvm-branch-commits] [llvm] d3ff24c - [ADT] Add makeIntrusiveRefCnt helper function

2021-01-11 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2021-01-11T20:12:53Z
New Revision: d3ff24cbf87224b23a0c99c74ed50744711909b2

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

LOG: [ADT] Add makeIntrusiveRefCnt helper function

Works like std::make_unique but for IntrusiveRefCntPtr objects.
See https://lists.llvm.org/pipermail/llvm-dev/2021-January/147729.html

Reviewed By: dblaikie, MaskRay

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

Added: 


Modified: 
llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
llvm/unittests/ADT/IntrusiveRefCntPtrTest.cpp

Removed: 




diff  --git a/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h 
b/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
index dcd35253c5f2..ca4c40db48b9 100644
--- a/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
+++ b/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
@@ -297,6 +297,12 @@ template  struct simplify_type> {
   }
 };
 
+/// Factory function for creating intrusive ref counted pointers.
+template 
+IntrusiveRefCntPtr makeIntrusiveRefCnt(Args &&...A) {
+  return IntrusiveRefCntPtr(new T(std::forward(A)...));
+}
+
 } // end namespace llvm
 
 #endif // LLVM_ADT_INTRUSIVEREFCNTPTR_H

diff  --git a/llvm/unittests/ADT/IntrusiveRefCntPtrTest.cpp 
b/llvm/unittests/ADT/IntrusiveRefCntPtrTest.cpp
index f69239162e3a..5dbc1b53d3fe 100644
--- a/llvm/unittests/ADT/IntrusiveRefCntPtrTest.cpp
+++ b/llvm/unittests/ADT/IntrusiveRefCntPtrTest.cpp
@@ -53,6 +53,22 @@ TYPED_TEST(IntrusiveRefCntPtrTest, InteropsWithUniquePtr) {
   EXPECT_EQ(0, NumInstances);
 }
 
+TYPED_TEST(IntrusiveRefCntPtrTest, MakeIntrusiveRefCnt) {
+  EXPECT_EQ(0, NumInstances);
+  {
+auto S1 = makeIntrusiveRefCnt();
+auto S2 = makeIntrusiveRefCnt();
+EXPECT_EQ(2, NumInstances);
+static_assert(
+std::is_same>::value,
+"Non-const type mismatch");
+static_assert(
+std::is_same>::value,
+"Const type mismatch");
+  }
+  EXPECT_EQ(0, NumInstances);
+}
+
 struct InterceptRefCounted : public RefCountedBase {
   InterceptRefCounted(bool *Released, bool *Retained)
 : Released(Released), Retained(Retained) {}



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


[llvm-branch-commits] [clang] 8acb5f2 - [clang][driver][NFC] Use StringRef instead of std::string

2020-12-15 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-15T16:19:12Z
New Revision: 8acb5f2723ecaf0f1904a085ad79d0623cec38f6

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

LOG: [clang][driver][NFC] Use StringRef instead of std::string

Added: 


Modified: 
clang/lib/Driver/Driver.cpp

Removed: 




diff  --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index 5e4eb8c4e6c5..dc9ec1b9c362 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -779,10 +779,9 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation 
&C,
 /// by Dirs.
 ///
 static bool searchForFile(SmallVectorImpl &FilePath,
-  ArrayRef Dirs,
-  StringRef FileName) {
+  ArrayRef Dirs, StringRef FileName) {
   SmallString<128> WPath;
-  for (const std::string &Dir : Dirs) {
+  for (const StringRef &Dir : Dirs) {
 if (Dir.empty())
   continue;
 WPath.clear();
@@ -807,7 +806,7 @@ bool Driver::readConfigFile(StringRef FileName) {
   // Read options from config file.
   llvm::SmallString<128> CfgFileName(FileName);
   llvm::sys::path::native(CfgFileName);
-  ConfigFile = std::string(CfgFileName.str());
+  ConfigFile = std::string(CfgFileName);
   bool ContainErrors;
   CfgOptions = std::make_unique(
   ParseArgStrings(NewCfgArgs, IsCLMode(), ContainErrors));
@@ -864,9 +863,10 @@ bool Driver::loadConfigFile() {
 std::vector ConfigFiles =
 CLOptions->getAllArgValues(options::OPT_config);
 if (ConfigFiles.size() > 1) {
-  if (!std::all_of(
-  ConfigFiles.begin(), ConfigFiles.end(),
-  [ConfigFiles](std::string s) { return s == ConfigFiles[0]; })) {
+  if (!std::all_of(ConfigFiles.begin(), ConfigFiles.end(),
+   [ConfigFiles](const std::string &s) {
+ return s == ConfigFiles[0];
+   })) {
 Diag(diag::err_drv_duplicate_config);
 return true;
   }
@@ -939,10 +939,7 @@ bool Driver::loadConfigFile() {
   }
 
   // Prepare list of directories where config file is searched for.
-  SmallVector CfgFileSearchDirs;
-  CfgFileSearchDirs.push_back(UserConfigDir);
-  CfgFileSearchDirs.push_back(SystemConfigDir);
-  CfgFileSearchDirs.push_back(Dir);
+  StringRef CfgFileSearchDirs[] = {UserConfigDir, SystemConfigDir, Dir};
 
   // Try to find config file. First try file with corrected architecture.
   llvm::SmallString<128> CfgFilePath;
@@ -973,7 +970,7 @@ bool Driver::loadConfigFile() {
   // --config. If it was deduced from executable name, it is not an error.
   if (FileSpecifiedExplicitly) {
 Diag(diag::err_drv_config_file_not_found) << CfgFileName;
-for (const std::string &SearchDir : CfgFileSearchDirs)
+for (const StringRef &SearchDir : CfgFileSearchDirs)
   if (!SearchDir.empty())
 Diag(diag::note_drv_config_file_searched_in) << SearchDir;
 return true;



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


[llvm-branch-commits] [clang-tools-extra] cfa1010 - [clangd] Provide suggestions with invalid config keys

2020-12-15 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-15T18:16:17Z
New Revision: cfa1010c42429f689186125270dfbad7d6a1c01d

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

LOG: [clangd] Provide suggestions with invalid config keys

Update the config file warning when an unknown key is detected which is likely 
a typo by suggesting the likely key.
This won't suggest a key that has already been seen in the block.

Appends the fix to the diag, however right now there is no support for 
presenting that fix to the user.

Reviewed By: sammccall

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

Added: 


Modified: 
clang-tools-extra/clangd/ConfigYAML.cpp
clang-tools-extra/clangd/test/config.test
clang-tools-extra/clangd/unittests/ConfigProviderTests.cpp
clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/ConfigYAML.cpp 
b/clang-tools-extra/clangd/ConfigYAML.cpp
index 022d890a9687..20cdc0b2c001 100644
--- a/clang-tools-extra/clangd/ConfigYAML.cpp
+++ b/clang-tools-extra/clangd/ConfigYAML.cpp
@@ -24,6 +24,29 @@ using llvm::yaml::Node;
 using llvm::yaml::ScalarNode;
 using llvm::yaml::SequenceNode;
 
+llvm::Optional
+bestGuess(llvm::StringRef Search,
+  llvm::ArrayRef AllowedValues) {
+  unsigned MaxEdit = (Search.size() + 1) / 3;
+  if (!MaxEdit)
+return llvm::None;
+  llvm::Optional Result;
+  for (const auto &AllowedValue : AllowedValues) {
+unsigned EditDistance = Search.edit_distance(AllowedValue, true, MaxEdit);
+// We can't do better than an edit distance of 1, so just return this and
+// save computing other values.
+if (EditDistance == 1U)
+  return AllowedValue;
+if (EditDistance == MaxEdit && !Result) {
+  Result = AllowedValue;
+} else if (EditDistance < MaxEdit) {
+  Result = AllowedValue;
+  MaxEdit = EditDistance;
+}
+  }
+  return Result;
+}
+
 class Parser {
   llvm::SourceMgr &SM;
   bool HadError = false;
@@ -167,6 +190,7 @@ class Parser {
 return;
   }
   llvm::SmallSet Seen;
+  llvm::SmallVector, 0> UnknownKeys;
   // We *must* consume all items, even on error, or the parser will assert.
   for (auto &KV : llvm::cast(N)) {
 auto *K = KV.getKey();
@@ -198,9 +222,30 @@ class Parser {
 Warn = UnknownHandler(
 Located(**Key, K->getSourceRange()), *Value);
   if (Warn)
-Outer->warning("Unknown " + Description + " key " + **Key, *K);
+UnknownKeys.push_back(std::move(*Key));
 }
   }
+  if (!UnknownKeys.empty())
+warnUnknownKeys(UnknownKeys, Seen);
+}
+
+  private:
+void warnUnknownKeys(llvm::ArrayRef> UnknownKeys,
+ const llvm::SmallSet &SeenKeys) const 
{
+  llvm::SmallVector UnseenKeys;
+  for (const auto &KeyAndHandler : Keys)
+if (!SeenKeys.count(KeyAndHandler.first.str()))
+  UnseenKeys.push_back(KeyAndHandler.first);
+
+  for (const Located &UnknownKey : UnknownKeys)
+if (auto BestGuess = bestGuess(*UnknownKey, UnseenKeys))
+  Outer->warning("Unknown " + Description + " key '" + *UnknownKey +
+ "'; did you mean '" + *BestGuess + "'?",
+ UnknownKey.Range);
+else
+  Outer->warning("Unknown " + Description + " key '" + *UnknownKey +
+ "'",
+ UnknownKey.Range);
 }
   };
 
@@ -238,16 +283,20 @@ class Parser {
   }
 
   // Report a "hard" error, reflecting a config file that can never be valid.
-  void error(const llvm::Twine &Msg, const Node &N) {
+  void error(const llvm::Twine &Msg, llvm::SMRange Range) {
 HadError = true;
-SM.PrintMessage(N.getSourceRange().Start, llvm::SourceMgr::DK_Error, Msg,
-N.getSourceRange());
+SM.PrintMessage(Range.Start, llvm::SourceMgr::DK_Error, Msg, Range);
+  }
+  void error(const llvm::Twine &Msg, const Node &N) {
+return error(Msg, N.getSourceRange());
   }
 
   // Report a "soft" error that could be caused by e.g. version skew.
+  void warning(const llvm::Twine &Msg, llvm::SMRange Range) {
+SM.PrintMessage(Range.Start, llvm::SourceMgr::DK_Warning, Msg, Range);
+  }
   void warning(const llvm::Twine &Msg, const Node &N) {
-SM.PrintMessage(N.getSourceRange().Start, llvm::SourceMgr::DK_Warning, Msg,
-N.getSourceRange());
+return warning(Msg, N.getSourceRange());
   }
 };
 

diff  --git a/clang-tools-extra/clangd/test/config.test 
b/clang-tools-extra/clangd/test/config.test
index eb556feefd95..3d5e2bbfc0c8 100644
--- a/clang-tools-extra/clangd/test/config.test
+++ b/clang-tools-extra/clangd/test/config.test
@@ -19,7 +19,7 @@
 # CHECK-NEXT:  "params":

[llvm-branch-commits] [clang-tools-extra] dfac97d - [clangd] Validate clang-tidy Checks in clangd config.

2020-12-15 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-15T21:10:57Z
New Revision: dfac97d557690dd4b1f2fab798680234b238d11f

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

LOG: [clangd] Validate clang-tidy Checks in clangd config.

Add instrumentation in ConfigCompile to validate that items in 
ClangTidy:[Add|Remove] correspond to actual clang-tidy checks.
If they don't a warning will be presented to the user.

This is especially useful for catching typos in the glob items.

Reviewed By: sammccall

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

Added: 


Modified: 
clang-tools-extra/clangd/ConfigCompile.cpp
clang-tools-extra/clangd/TidyProvider.cpp
clang-tools-extra/clangd/TidyProvider.h
clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/ConfigCompile.cpp 
b/clang-tools-extra/clangd/ConfigCompile.cpp
index b1189e286826..2040ea4649fe 100644
--- a/clang-tools-extra/clangd/ConfigCompile.cpp
+++ b/clang-tools-extra/clangd/ConfigCompile.cpp
@@ -28,6 +28,7 @@
 #include "ConfigFragment.h"
 #include "ConfigProvider.h"
 #include "Features.inc"
+#include "TidyProvider.h"
 #include "support/Logger.h"
 #include "support/Trace.h"
 #include "llvm/ADT/None.h"
@@ -349,13 +350,19 @@ struct FragmentCompiler {
 
   void appendTidyCheckSpec(std::string &CurSpec,
const Located &Arg, bool IsPositive) {
-StringRef Str = *Arg;
+StringRef Str = StringRef(*Arg).trim();
 // Don't support negating here, its handled if the item is in the Add or
 // Remove list.
 if (Str.startswith("-") || Str.contains(',')) {
   diag(Error, "Invalid clang-tidy check name", Arg.Range);
   return;
 }
+if (!Str.contains('*') && !isRegisteredTidyCheck(Str)) {
+  diag(Warning,
+   llvm::formatv("clang-tidy check '{0}' was not found", Str).str(),
+   Arg.Range);
+  return;
+}
 CurSpec += ',';
 if (!IsPositive)
   CurSpec += '-';

diff  --git a/clang-tools-extra/clangd/TidyProvider.cpp 
b/clang-tools-extra/clangd/TidyProvider.cpp
index 730a402b5df1..c6ee09ae16d2 100644
--- a/clang-tools-extra/clangd/TidyProvider.cpp
+++ b/clang-tools-extra/clangd/TidyProvider.cpp
@@ -7,6 +7,7 @@
 
//===--===//
 
 #include "TidyProvider.h"
+#include "../clang-tidy/ClangTidyModuleRegistry.h"
 #include "Config.h"
 #include "support/FileCache.h"
 #include "support/Logger.h"
@@ -14,6 +15,8 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/ADT/StringSet.h"
+#include "llvm/Support/Allocator.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/Process.h"
 #include "llvm/Support/VirtualFileSystem.h"
@@ -266,5 +269,25 @@ tidy::ClangTidyOptions 
getTidyOptionsForFile(TidyProviderRef Provider,
 Provider(Opts, Filename);
   return Opts;
 }
+
+bool isRegisteredTidyCheck(llvm::StringRef Check) {
+  assert(!Check.empty());
+  assert(!Check.contains('*') && !Check.contains(',') &&
+ "isRegisteredCheck doesn't support globs");
+  assert(Check.ltrim().front() != '-');
+
+  static const llvm::StringSet AllChecks = [] {
+llvm::StringSet Result;
+tidy::ClangTidyCheckFactories Factories;
+for (tidy::ClangTidyModuleRegistry::entry E :
+ tidy::ClangTidyModuleRegistry::entries())
+  E.instantiate()->addCheckFactories(Factories);
+for (const auto &Factory : Factories)
+  Result.insert(Factory.getKey());
+return Result;
+  }();
+
+  return AllChecks.contains(Check);
+}
 } // namespace clangd
 } // namespace clang

diff  --git a/clang-tools-extra/clangd/TidyProvider.h 
b/clang-tools-extra/clangd/TidyProvider.h
index f3f679c3f0d5..b295a9b05eff 100644
--- a/clang-tools-extra/clangd/TidyProvider.h
+++ b/clang-tools-extra/clangd/TidyProvider.h
@@ -13,6 +13,7 @@
 #include "support/ThreadsafeFS.h"
 #include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringRef.h"
 
 namespace clang {
 namespace clangd {
@@ -56,6 +57,10 @@ TidyProviderRef provideClangdConfig();
 tidy::ClangTidyOptions getTidyOptionsForFile(TidyProviderRef Provider,
  llvm::StringRef Filename);
 
+/// Returns if \p Check is a registered clang-tidy check
+/// \pre \p must not be empty, must not contain '*' or ',' or start with '-'.
+bool isRegisteredTidyCheck(llvm::StringRef Check);
+
 } // namespace clangd
 } // namespace clang
 

diff  --git a/clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp 
b/clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
index a2423094b17a..578f69821e4d 100644
--- a/clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
+++ b/cla

[llvm-branch-commits] [clang-tools-extra] 68e642c - [clang-tidy] Support all YAML supported spellings for bools in CheckOptions.

2020-12-15 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-15T21:15:16Z
New Revision: 68e642cad02468ce3efb18e7648cf82f2611e7a3

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

LOG: [clang-tidy] Support all YAML supported spellings for bools in 
CheckOptions.

Depends on D92755

Reviewed By: aaron.ballman

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
index af19da2419ab..3567aac42c06 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
@@ -11,6 +11,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/WithColor.h"
+#include "llvm/Support/YAMLParser.h"
 #include "llvm/Support/raw_ostream.h"
 
 namespace clang {
@@ -108,13 +109,14 @@ ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef 
LocalName) const {
 
 static llvm::Expected getAsBool(StringRef Value,
   const llvm::Twine &LookupName) {
-  if (Value == "true")
-return true;
-  if (Value == "false")
-return false;
-  bool Result;
-  if (!Value.getAsInteger(10, Result))
-return Result;
+
+  if (llvm::Optional Parsed = llvm::yaml::parseBool(Value))
+return *Parsed;
+  // To maintain backwards compatability, we support parsing numbers as
+  // booleans, even though its not supported in YAML.
+  long long Number;
+  if (!Value.getAsInteger(10, Number))
+return Number != 0;
   return llvm::make_error(LookupName.str(),
  Value.str(), true);
 }

diff  --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 062216697111..a15ca304070e 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -73,6 +73,9 @@ Improvements to clang-tidy
   ` and
   :doc:`modernize-make-unique `.
 
+- CheckOptions that take boolean values now support all spellings supported in 
+  the `YAML format `_.
+
 New modules
 ^^^
 

diff  --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp 
b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
index 40cd9a5eff15..db9624684dfe 100644
--- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
@@ -195,8 +195,9 @@ TEST(CheckOptionsValidation, ValidIntOptions) {
   CheckOptions["test.BoolIFalseValue"] = "0";
   CheckOptions["test.BoolTrueValue"] = "true";
   CheckOptions["test.BoolFalseValue"] = "false";
+  CheckOptions["test.BoolTrueShort"] = "Y";
+  CheckOptions["test.BoolFalseShort"] = "N";
   CheckOptions["test.BoolUnparseable"] = "Nothing";
-  CheckOptions["test.BoolCaseMismatch"] = "True";
 
   ClangTidyContext Context(std::make_unique(
   ClangTidyGlobalOptions(), Options));
@@ -227,12 +228,11 @@ TEST(CheckOptionsValidation, ValidIntOptions) {
   CHECK_VAL(TestCheck.getIntLocal("BoolIFalseValue"), false);
   CHECK_VAL(TestCheck.getIntLocal("BoolTrueValue"), true);
   CHECK_VAL(TestCheck.getIntLocal("BoolFalseValue"), false);
+  CHECK_VAL(TestCheck.getIntLocal("BoolTrueShort"), true);
+  CHECK_VAL(TestCheck.getIntLocal("BoolFalseShort"), false);
   CHECK_ERROR_INT(TestCheck.getIntLocal("BoolUnparseable"),
   "invalid configuration value 'Nothing' for option "
   "'test.BoolUnparseable'; expected a bool");
-  CHECK_ERROR_INT(TestCheck.getIntLocal("BoolCaseMismatch"),
-  "invalid configuration value 'True' for option "
-  "'test.BoolCaseMismatch'; expected a bool");
 
 #undef CHECK_ERROR_INT
 }



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


[llvm-branch-commits] [clang] c415e70 - [ASTMatchers][NFC] Strip prefixes eagerly in dynamic matcher arg traits.

2020-12-15 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-16T01:56:30Z
New Revision: c415e709e9926b4aed897b55931f319a5f512e85

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

LOG: [ASTMatchers][NFC] Strip prefixes eagerly in dynamic matcher arg traits.

Added: 


Modified: 
clang/lib/ASTMatchers/Dynamic/Marshallers.h

Removed: 




diff  --git a/clang/lib/ASTMatchers/Dynamic/Marshallers.h 
b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
index 9758d36b0dc6..a4f9b7c34081 100644
--- a/clang/lib/ASTMatchers/Dynamic/Marshallers.h
+++ b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
@@ -161,8 +161,10 @@ template <> struct ArgTypeTraits {
 template <> struct ArgTypeTraits {
 private:
   static Optional getAttrKind(llvm::StringRef AttrKind) {
+if (!AttrKind.consume_front("attr::"))
+  return llvm::None;
 return llvm::StringSwitch>(AttrKind)
-#define ATTR(X) .Case("attr::" #X, attr:: X)
+#define ATTR(X) .Case(#X, attr::X)
 #include "clang/Basic/AttrList.inc"
 .Default(llvm::None);
   }
@@ -189,8 +191,10 @@ template <> struct ArgTypeTraits {
 template <> struct ArgTypeTraits {
 private:
   static Optional getCastKind(llvm::StringRef AttrKind) {
+if (!AttrKind.consume_front("CK_"))
+  return llvm::None;
 return llvm::StringSwitch>(AttrKind)
-#define CAST_OPERATION(Name) .Case("CK_" #Name, CK_##Name)
+#define CAST_OPERATION(Name) .Case(#Name, CK_##Name)
 #include "clang/AST/OperationKinds.def"
 .Default(llvm::None);
   }
@@ -265,11 +269,12 @@ template <> struct ArgTypeTraits {
 private:
   static Optional
   getUnaryOrTypeTraitKind(llvm::StringRef ClauseKind) {
+if (!ClauseKind.consume_front("UETT_"))
+  return llvm::None;
 return llvm::StringSwitch>(ClauseKind)
-#define UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key)  
\
-  .Case("UETT_" #Name, UETT_##Name)
+#define UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key) .Case(#Name, UETT_##Name)
 #define CXX11_UNARY_EXPR_OR_TYPE_TRAIT(Spelling, Name, Key)
\
-  .Case("UETT_" #Name, UETT_##Name)
+  .Case(#Name, UETT_##Name)
 #include "clang/Basic/TokenKinds.def"
 .Default(llvm::None);
   }



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


[llvm-branch-commits] [clang-tools-extra] ddffcdf - [clang-tidy] Add a diagnostic callback to parseConfiguration

2020-12-16 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-17T00:24:58Z
New Revision: ddffcdf0a6603747a6734dcf23dfe81476b5523c

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

LOG: [clang-tidy] Add a diagnostic callback to parseConfiguration

Currently errors detected when parsing the YAML for .clang-tidy files are 
always printed to errs.
For clang-tidy binary workflows this usually isn't an issue, but using 
clang-tidy as a library for integrations may want to handle displaying those 
errors in their own specific way.

Reviewed By: aaron.ballman

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
clang-tools-extra/clang-tidy/ClangTidyOptions.h
clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
index f17ef716d60f..197552acf927 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
@@ -13,6 +13,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/Errc.h"
 #include "llvm/Support/FileSystem.h"
+#include "llvm/Support/MemoryBufferRef.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/YAMLTraits.h"
 #include "llvm/Support/raw_ostream.h"
@@ -390,6 +391,22 @@ parseConfiguration(llvm::MemoryBufferRef Config) {
   return Options;
 }
 
+static void diagHandlerImpl(const llvm::SMDiagnostic &Diag, void *Ctx) {
+  (*reinterpret_cast(Ctx))(Diag);
+};
+
+llvm::ErrorOr
+parseConfigurationWithDiags(llvm::MemoryBufferRef Config,
+DiagCallback Handler) {
+  llvm::yaml::Input Input(Config, nullptr, Handler ? diagHandlerImpl : nullptr,
+  &Handler);
+  ClangTidyOptions Options;
+  Input >> Options;
+  if (Input.error())
+return Input.error();
+  return Options;
+}
+
 std::string configurationAsText(const ClangTidyOptions &Options) {
   std::string Text;
   llvm::raw_string_ostream Stream(Text);

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.h 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.h
index e7cd89951ff9..d8a4a14f5b52 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.h
@@ -14,6 +14,7 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/ErrorOr.h"
+#include "llvm/Support/MemoryBufferRef.h"
 #include "llvm/Support/VirtualFileSystem.h"
 #include 
 #include 
@@ -311,6 +312,11 @@ std::error_code parseLineFilter(llvm::StringRef LineFilter,
 llvm::ErrorOr
 parseConfiguration(llvm::MemoryBufferRef Config);
 
+using DiagCallback = llvm::function_ref;
+
+llvm::ErrorOr
+parseConfigurationWithDiags(llvm::MemoryBufferRef Config, DiagCallback 
Handler);
+
 /// Serializes configuration to a YAML-encoded string.
 std::string configurationAsText(const ClangTidyOptions &Options);
 

diff  --git a/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt 
b/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
index 5b0cbac3a61e..be35b71d15cf 100644
--- a/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
+++ b/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
@@ -1,6 +1,7 @@
 set(LLVM_LINK_COMPONENTS
   FrontendOpenMP
   Support
+  TestingSupport
   )
 
 get_filename_component(CLANG_LINT_SOURCE_DIR

diff  --git a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp 
b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
index db9624684dfe..6447f34661e9 100644
--- a/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
+++ b/clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp
@@ -2,6 +2,9 @@
 #include "ClangTidyCheck.h"
 #include "ClangTidyDiagnosticConsumer.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/Support/ScopedPrinter.h"
+#include "llvm/Testing/Support/Annotations.h"
+#include "gmock/gmock.h"
 #include "gtest/gtest.h"
 
 namespace clang {
@@ -123,6 +126,100 @@ TEST(ParseConfiguration, MergeConfigurations) {
   EXPECT_TRUE(*Options.UseColor);
 }
 
+namespace {
+class DiagCollecter {
+public:
+  struct Diag {
+  private:
+static size_t posToOffset(const llvm::SMLoc Loc,
+  const llvm::SourceMgr *Src) {
+  return Loc.getPointer() -
+ Src->getMemoryBuffer(Src->FindBufferContainingLoc(Loc))
+ ->getBufferStart();
+}
+
+  public:
+Diag(const llvm::SMDiagnostic &D)
+: Message(D.getMessage()), Kind(D.getKind()),
+  Pos(posToOffset(D.getLoc(), D.getSourceMgr())) {
+  if (!D.getRanges().empty()) {
+// Ranges are stored as column numbers on the line tha

[llvm-branch-commits] [clang-tools-extra] 64badec - [clang-tidy][NFC] Reduce copies of Intrusive..FileSystem

2020-12-17 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-17T14:09:08Z
New Revision: 64badecd447f2358812a2e747b2683d34071f5a5

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

LOG: [clang-tidy][NFC] Reduce copies of Intrusive..FileSystem

Swapped a few instances where a move is more optimal or the target doesn't need 
to hold a reference.

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidy.cpp
clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp 
b/clang-tools-extra/clang-tidy/ClangTidy.cpp
index b5f2a1c0fbdb..633655e5e24a 100644
--- a/clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -101,7 +101,8 @@ class ErrorReporter {
 public:
   ErrorReporter(ClangTidyContext &Context, bool ApplyFixes,
 llvm::IntrusiveRefCntPtr BaseFS)
-  : Files(FileSystemOptions(), BaseFS), DiagOpts(new DiagnosticOptions()),
+  : Files(FileSystemOptions(), std::move(BaseFS)),
+DiagOpts(new DiagnosticOptions()),
 DiagPrinter(new TextDiagnosticPrinter(llvm::outs(), &*DiagOpts)),
 Diags(IntrusiveRefCntPtr(new DiagnosticIDs), &*DiagOpts,
   DiagPrinter),
@@ -319,7 +320,7 @@ class ClangTidyASTConsumer : public MultiplexConsumer {
 ClangTidyASTConsumerFactory::ClangTidyASTConsumerFactory(
 ClangTidyContext &Context,
 IntrusiveRefCntPtr OverlayFS)
-: Context(Context), OverlayFS(OverlayFS),
+: Context(Context), OverlayFS(std::move(OverlayFS)),
   CheckFactories(new ClangTidyCheckFactories) {
   for (ClangTidyModuleRegistry::entry E : ClangTidyModuleRegistry::entries()) {
 std::unique_ptr Module = E.instantiate();
@@ -328,15 +329,16 @@ ClangTidyASTConsumerFactory::ClangTidyASTConsumerFactory(
 }
 
 #if CLANG_TIDY_ENABLE_STATIC_ANALYZER
-static void setStaticAnalyzerCheckerOpts(const ClangTidyOptions &Opts,
- AnalyzerOptionsRef AnalyzerOptions) {
+static void
+setStaticAnalyzerCheckerOpts(const ClangTidyOptions &Opts,
+ clang::AnalyzerOptions &AnalyzerOptions) {
   StringRef AnalyzerPrefix(AnalyzerCheckNamePrefix);
   for (const auto &Opt : Opts.CheckOptions) {
 StringRef OptName(Opt.getKey());
 if (!OptName.consume_front(AnalyzerPrefix))
   continue;
 // Analyzer options are always local options so we can ignore priority.
-AnalyzerOptions->Config[OptName] = Opt.getValue().Value;
+AnalyzerOptions.Config[OptName] = Opt.getValue().Value;
   }
 }
 
@@ -432,7 +434,7 @@ ClangTidyASTConsumerFactory::CreateASTConsumer(
   AnalyzerOptions->CheckersAndPackages = getAnalyzerCheckersAndPackages(
   Context, Context.canEnableAnalyzerAlphaCheckers());
   if (!AnalyzerOptions->CheckersAndPackages.empty()) {
-setStaticAnalyzerCheckerOpts(Context.getOptions(), AnalyzerOptions);
+setStaticAnalyzerCheckerOpts(Context.getOptions(), *AnalyzerOptions);
 AnalyzerOptions->AnalysisStoreOpt = RegionStoreModel;
 AnalyzerOptions->AnalysisDiagOpt = PD_NONE;
 AnalyzerOptions->AnalyzeNestedBlocks = true;
@@ -539,7 +541,7 @@ runClangTidy(clang::tidy::ClangTidyContext &Context,
   public:
 ActionFactory(ClangTidyContext &Context,
   IntrusiveRefCntPtr BaseFS)
-: ConsumerFactory(Context, BaseFS) {}
+: ConsumerFactory(Context, std::move(BaseFS)) {}
 std::unique_ptr create() override {
   return std::make_unique(&ConsumerFactory);
 }
@@ -570,7 +572,7 @@ runClangTidy(clang::tidy::ClangTidyContext &Context,
 ClangTidyASTConsumerFactory ConsumerFactory;
   };
 
-  ActionFactory Factory(Context, BaseFS);
+  ActionFactory Factory(Context, std::move(BaseFS));
   Tool.run(&Factory);
   return DiagConsumer.take();
 }
@@ -579,7 +581,7 @@ void handleErrors(llvm::ArrayRef Errors,
   ClangTidyContext &Context, bool Fix,
   unsigned &WarningsAsErrorsCount,
   llvm::IntrusiveRefCntPtr BaseFS) {
-  ErrorReporter Reporter(Context, Fix, BaseFS);
+  ErrorReporter Reporter(Context, Fix, std::move(BaseFS));
   llvm::vfs::FileSystem &FileSystem =
   Reporter.getSourceManager().getFileManager().getVirtualFileSystem();
   auto InitialWorkingDir = FileSystem.getCurrentWorkingDirectory();

diff  --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp 
b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
index 2748fd9f74a5..2466b647c68c 100644
--- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
+++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
@@ -393,7 +393,7 @@ int clangTidyMain(int argc, const char **argv) {
 getVfsFromFile(VfsOverlay, BaseFS);
 if (!VfsFromFile)
   return 1;
-BaseFS->pushOverlay(VfsFromFile);
+BaseFS->pushOv

[llvm-branch-commits] [clang-tools-extra] 2808f59 - [clangd] Print .clang-tidy configuration parsing errors using [ev]?log.

2020-12-17 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-18T02:07:27Z
New Revision: 2808f597f872e68a8bd69d5b53f5d583665b4c4f

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

LOG: [clangd] Print .clang-tidy configuration parsing errors using [ev]?log.

Currently warnings when parsing .clang-tidy are printed directly to errs.
This is less than ideal as there is no synchronisation printing to errs, 
leading to potential races.

Reviewed By: sammccall

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

Added: 


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

Removed: 




diff  --git a/clang-tools-extra/clangd/TidyProvider.cpp 
b/clang-tools-extra/clangd/TidyProvider.cpp
index c6ee09ae16d2..c12dab7e2e5e 100644
--- a/clang-tools-extra/clangd/TidyProvider.cpp
+++ b/clang-tools-extra/clangd/TidyProvider.cpp
@@ -19,6 +19,7 @@
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/Process.h"
+#include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/VirtualFileSystem.h"
 #include 
 
@@ -44,8 +45,25 @@ class DotClangTidyCache : private FileCache {
 [this](llvm::Optional Data) {
   Value.reset();
   if (Data && !Data->empty()) {
-if (auto Parsed = tidy::parseConfiguration(
-llvm::MemoryBufferRef(*Data, path(
+tidy::DiagCallback Diagnostics = [](const llvm::SMDiagnostic &D) {
+  switch (D.getKind()) {
+  case llvm::SourceMgr::DK_Error:
+elog("tidy-config error at {0}:{1}:{2}: {3}", D.getFilename(),
+ D.getLineNo(), D.getColumnNo(), D.getMessage());
+break;
+  case llvm::SourceMgr::DK_Warning:
+log("tidy-config warning at {0}:{1}:{2}: {3}", D.getFilename(),
+D.getLineNo(), D.getColumnNo(), D.getMessage());
+break;
+  case llvm::SourceMgr::DK_Note:
+  case llvm::SourceMgr::DK_Remark:
+vlog("tidy-config note at {0}:{1}:{2}: {3}", D.getFilename(),
+ D.getLineNo(), D.getColumnNo(), D.getMessage());
+break;
+  }
+};
+if (auto Parsed = tidy::parseConfigurationWithDiags(
+llvm::MemoryBufferRef(*Data, path()), Diagnostics))
   Value = std::make_shared(
   std::move(*Parsed));
 else



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


[llvm-branch-commits] [clang-tools-extra] 4b3633c - [clangd] Reuse buffer for JSONTransport::sendMessage

2020-12-22 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-22T11:30:56Z
New Revision: 4b3633cf2cb67220763494427f6db250bbd87494

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

LOG: [clangd] Reuse buffer for JSONTransport::sendMessage

Allocate a Buffer in the JSONTransport to be used when sending messages to the 
client.
This gets reused each time a message is sent, reducing in fewer malloc, which 
is always a bonus.

Reviewed By: sammccall

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

Added: 


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

Removed: 




diff  --git a/clang-tools-extra/clangd/JSONTransport.cpp 
b/clang-tools-extra/clangd/JSONTransport.cpp
index eb5a83882b2b..662e5df4e27b 100644
--- a/clang-tools-extra/clangd/JSONTransport.cpp
+++ b/clang-tools-extra/clangd/JSONTransport.cpp
@@ -126,13 +126,13 @@ class JSONTransport : public Transport {
   bool handleMessage(llvm::json::Value Message, MessageHandler &Handler);
   // Writes outgoing message to Out stream.
   void sendMessage(llvm::json::Value Message) {
-std::string S;
-llvm::raw_string_ostream OS(S);
+OutputBuffer.clear();
+llvm::raw_svector_ostream OS(OutputBuffer);
 OS << llvm::formatv(Pretty ? "{0:2}" : "{0}", Message);
-OS.flush();
-Out << "Content-Length: " << S.size() << "\r\n\r\n" << S;
+Out << "Content-Length: " << OutputBuffer.size() << "\r\n\r\n"
+<< OutputBuffer;
 Out.flush();
-vlog(">>> {0}\n", S);
+vlog(">>> {0}\n", OutputBuffer);
   }
 
   // Read raw string messages from input stream.
@@ -143,6 +143,7 @@ class JSONTransport : public Transport {
   llvm::Optional readDelimitedMessage();
   llvm::Optional readStandardMessage();
 
+  llvm::SmallVector OutputBuffer;
   std::FILE *In;
   llvm::raw_ostream &Out;
   llvm::raw_ostream &InMirror;



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


[llvm-branch-commits] [llvm] 5d10b8a - [ADT] Add resize_for_overwrite method to SmallVector.

2020-12-22 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-22T17:18:59Z
New Revision: 5d10b8ad595da87bec8c66ad70a8daf86cd9266b

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

LOG: [ADT] Add resize_for_overwrite method to SmallVector.

Analagous to the std::make_(unqiue|shared)_for_overwrite added in c++20.
If T is POD, and the container gets larger, any new values added wont be 
initialized.
This is useful when using SmallVector as a buffer where its planned to 
overwrite any potential new values added.
If T is not POD, `new (Storage) T` functions identically to `new (Storage) T()` 
so this will function identically to `resize(size_type)`.

Reviewed By: dexonsmith

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

Added: 


Modified: 
llvm/include/llvm/ADT/SmallVector.h
llvm/unittests/ADT/SmallVectorTest.cpp

Removed: 




diff  --git a/llvm/include/llvm/ADT/SmallVector.h 
b/llvm/include/llvm/ADT/SmallVector.h
index 0a0f09c68060..3bbde2d9c0fb 100644
--- a/llvm/include/llvm/ADT/SmallVector.h
+++ b/llvm/include/llvm/ADT/SmallVector.h
@@ -460,7 +460,8 @@ class SmallVectorImpl : public SmallVectorTemplateBase {
 this->Size = 0;
   }
 
-  void resize(size_type N) {
+private:
+  template  void resizeImpl(size_type N) {
 if (N < this->size()) {
   this->destroy_range(this->begin()+N, this->end());
   this->set_size(N);
@@ -468,11 +469,20 @@ class SmallVectorImpl : public SmallVectorTemplateBase 
{
   if (this->capacity() < N)
 this->grow(N);
   for (auto I = this->end(), E = this->begin() + N; I != E; ++I)
-new (&*I) T();
+if (ForOverwrite)
+  new (&*I) T;
+else
+  new (&*I) T();
   this->set_size(N);
 }
   }
 
+public:
+  void resize(size_type N) { resizeImpl(N); }
+
+  /// Like resize, but \ref T is POD, the new values won't be initialized.
+  void resize_for_overwrite(size_type N) { resizeImpl(N); }
+
   void resize(size_type N, const T &NV) {
 if (N == this->size())
   return;

diff  --git a/llvm/unittests/ADT/SmallVectorTest.cpp 
b/llvm/unittests/ADT/SmallVectorTest.cpp
index 957412f3083f..e02c3e709667 100644
--- a/llvm/unittests/ADT/SmallVectorTest.cpp
+++ b/llvm/unittests/ADT/SmallVectorTest.cpp
@@ -341,6 +341,31 @@ TYPED_TEST(SmallVectorTest, ResizeFillTest) {
   this->assertValuesInOrder(this->theVector, 3u, 77, 77, 77);
 }
 
+TEST(SmallVectorTest, ResizeForOverwrite) {
+  {
+// Heap allocated storage.
+SmallVector V;
+V.push_back(5);
+V.pop_back();
+V.resize_for_overwrite(V.size() + 1);
+EXPECT_EQ(5, V.back());
+V.pop_back();
+V.resize(V.size() + 1);
+EXPECT_EQ(0, V.back());
+  }
+  {
+// Inline storage.
+SmallVector V;
+V.push_back(5);
+V.pop_back();
+V.resize_for_overwrite(V.size() + 1);
+EXPECT_EQ(5, V.back());
+V.pop_back();
+V.resize(V.size() + 1);
+EXPECT_EQ(0, V.back());
+  }
+}
+
 // Overflow past fixed size.
 TYPED_TEST(SmallVectorTest, OverflowTest) {
   SCOPED_TRACE("OverflowTest");



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


[llvm-branch-commits] [llvm] f507148 - [ADT] Fix some tests after 5d10b8ad

2020-12-22 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-22T18:06:19Z
New Revision: f5071489ea8cf2771d7375534c122467a000b356

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

LOG: [ADT] Fix some tests after 5d10b8ad

Some bots were failing due to signed/unsigned comparison.

Added: 


Modified: 
llvm/unittests/ADT/SmallVectorTest.cpp

Removed: 




diff  --git a/llvm/unittests/ADT/SmallVectorTest.cpp 
b/llvm/unittests/ADT/SmallVectorTest.cpp
index e02c3e709667..d97ab577524f 100644
--- a/llvm/unittests/ADT/SmallVectorTest.cpp
+++ b/llvm/unittests/ADT/SmallVectorTest.cpp
@@ -345,24 +345,24 @@ TEST(SmallVectorTest, ResizeForOverwrite) {
   {
 // Heap allocated storage.
 SmallVector V;
-V.push_back(5);
+V.push_back(5U);
 V.pop_back();
-V.resize_for_overwrite(V.size() + 1);
-EXPECT_EQ(5, V.back());
+V.resize_for_overwrite(V.size() + 1U);
+EXPECT_EQ(5U, V.back());
 V.pop_back();
 V.resize(V.size() + 1);
-EXPECT_EQ(0, V.back());
+EXPECT_EQ(0U, V.back());
   }
   {
 // Inline storage.
 SmallVector V;
-V.push_back(5);
+V.push_back(5U);
 V.pop_back();
-V.resize_for_overwrite(V.size() + 1);
-EXPECT_EQ(5, V.back());
+V.resize_for_overwrite(V.size() + 1U);
+EXPECT_EQ(5U, V.back());
 V.pop_back();
 V.resize(V.size() + 1);
-EXPECT_EQ(0, V.back());
+EXPECT_EQ(0U, V.back());
   }
 }
 



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


[llvm-branch-commits] [clang] eb9483b - [format] Add overload to parseConfiguration that accept llvm::MemoryBufferRef

2020-12-23 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-23T12:08:29Z
New Revision: eb9483b21053656b885f13ccfe41bfa76eb3df45

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

LOG: [format] Add overload to parseConfiguration that accept 
llvm::MemoryBufferRef

This overload should be used for better diagnostics when parsing configurations.
Now a failure to parse will list the filename (or ) instead of 
just `YAML`.

Reviewed By: MyDeveloperDay

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

Added: 


Modified: 
clang/include/clang/Format/Format.h
clang/lib/Format/Format.cpp
clang/test/Format/error-config.cpp

Removed: 




diff  --git a/clang/include/clang/Format/Format.h 
b/clang/include/clang/Format/Format.h
index fd5c0e32c5c2..208fc105d4b6 100644
--- a/clang/include/clang/Format/Format.h
+++ b/clang/include/clang/Format/Format.h
@@ -2879,7 +2879,8 @@ struct FormatStyle {
 private:
   FormatStyleSet StyleSet;
 
-  friend std::error_code parseConfiguration(StringRef Text, FormatStyle *Style,
+  friend std::error_code parseConfiguration(llvm::MemoryBufferRef Config,
+FormatStyle *Style,
 bool AllowUnknownOptions);
 };
 
@@ -2938,9 +2939,17 @@ bool getPredefinedStyle(StringRef Name, 
FormatStyle::LanguageKind Language,
 ///
 /// If AllowUnknownOptions is true, no errors are emitted if unknown
 /// format options are occured.
-std::error_code parseConfiguration(StringRef Text, FormatStyle *Style,
+std::error_code parseConfiguration(llvm::MemoryBufferRef Config,
+   FormatStyle *Style,
bool AllowUnknownOptions = false);
 
+/// Like above but accepts an unnamed buffer.
+inline std::error_code parseConfiguration(StringRef Config, FormatStyle *Style,
+  bool AllowUnknownOptions = false) {
+  return parseConfiguration(llvm::MemoryBufferRef(Config, "YAML"), Style,
+AllowUnknownOptions);
+}
+
 /// Gets configuration in a YAML string.
 std::string configurationAsText(const FormatStyle &Style);
 

diff  --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 23eee19b1640..55abc12c61c4 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1327,16 +1327,17 @@ bool getPredefinedStyle(StringRef Name, 
FormatStyle::LanguageKind Language,
   return true;
 }
 
-std::error_code parseConfiguration(StringRef Text, FormatStyle *Style,
+std::error_code parseConfiguration(llvm::MemoryBufferRef Config,
+   FormatStyle *Style,
bool AllowUnknownOptions) {
   assert(Style);
   FormatStyle::LanguageKind Language = Style->Language;
   assert(Language != FormatStyle::LK_None);
-  if (Text.trim().empty())
+  if (Config.getBuffer().trim().empty())
 return make_error_code(ParseError::Error);
   Style->StyleSet.Clear();
   std::vector Styles;
-  llvm::yaml::Input Input(Text);
+  llvm::yaml::Input Input(Config);
   // DocumentListTraits> uses the context to get default
   // values for the fields, keys for which are missing from the configuration.
   // Mapping also uses the context to get the language to find the correct
@@ -2864,8 +2865,9 @@ llvm::Expected getStyle(StringRef StyleName, 
StringRef FileName,
 
   if (StyleName.startswith("{")) {
 // Parse YAML/JSON style from the command line.
-if (std::error_code ec =
-parseConfiguration(StyleName, &Style, AllowUnknownOptions))
+if (std::error_code ec = parseConfiguration(
+llvm::MemoryBufferRef(StyleName, ""), &Style,
+AllowUnknownOptions))
   return make_string_error("Error parsing -style: " + ec.message());
 return Style;
   }
@@ -2909,8 +2911,8 @@ llvm::Expected getStyle(StringRef StyleName, 
StringRef FileName,
 FS->getBufferForFile(ConfigFile.str());
 if (std::error_code EC = Text.getError())
   return make_string_error(EC.message());
-if (std::error_code ec = parseConfiguration(
-Text.get()->getBuffer(), &Style, AllowUnknownOptions)) {
+if (std::error_code ec =
+parseConfiguration(*Text.get(), &Style, AllowUnknownOptions)) {
   if (ec == ParseError::Unsuitable) {
 if (!UnsuitableConfigFiles.empty())
   UnsuitableConfigFiles.append(", ");

diff  --git a/clang/test/Format/error-config.cpp 
b/clang/test/Format/error-config.cpp
index 7fbc869f3a3c..9f73a9eb9507 100644
--- a/clang/test/Format/error-config.cpp
+++ b/clang/test/Format/error-config.cpp
@@ -1,10 +1,10 @@
 // RUN: clang-format %s --Wno-error=unknown --style="{UnknownKey: true}" 2>&1 
| FileCheck %s -check-prefix=C

[llvm-branch-commits] [clang] c7e825b - [format][NFC] Use unsigned char as the base of all enums in FormatStyle

2020-12-23 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-23T20:27:44Z
New Revision: c7e825b910a96c42bda1de4e7fb34c369da76625

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

LOG: [format][NFC] Use unsigned char as the base of all enums in FormatStyle

This removes alot of unnecessary padding, trimming the size of the struct from 
728->608 on 64 bit platforms.

Reviewed By: MyDeveloperDay

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

Added: 


Modified: 
clang/docs/tools/dump_format_style.py
clang/include/clang/Format/Format.h

Removed: 




diff  --git a/clang/docs/tools/dump_format_style.py 
b/clang/docs/tools/dump_format_style.py
index 61167979b3e6..d01c823a9a20 100755
--- a/clang/docs/tools/dump_format_style.py
+++ b/clang/docs/tools/dump_format_style.py
@@ -144,7 +144,7 @@ class State(object):
 comment += clean_comment_line(line)
   elif line.startswith('enum'):
 state = State.InEnum
-name = re.sub(r'enum\s+(\w+)\s*\{', '\\1', line)
+name = re.sub(r'enum\s+(\w+)\s*(:((\s*\w+)+)\s*)?\{', '\\1', line)
 enum = Enum(name, comment)
   elif line.startswith('struct'):
 state = State.InNestedStruct

diff  --git a/clang/include/clang/Format/Format.h 
b/clang/include/clang/Format/Format.h
index 208fc105d4b6..9b8309213261 100644
--- a/clang/include/clang/Format/Format.h
+++ b/clang/include/clang/Format/Format.h
@@ -56,7 +56,7 @@ struct FormatStyle {
   int AccessModifierOffset;
 
   /// Different styles for aligning after open brackets.
-  enum BracketAlignmentStyle {
+  enum BracketAlignmentStyle : unsigned char {
 /// Align parameters on the open bracket, e.g.:
 /// \code
 ///   someLongFunction(argument1,
@@ -131,7 +131,7 @@ struct FormatStyle {
   bool AlignConsecutiveDeclarations;
 
   /// Different styles for aligning escaped newlines.
-  enum EscapedNewlineAlignmentStyle {
+  enum EscapedNewlineAlignmentStyle : unsigned char {
 /// Don't align escaped newlines.
 /// \code
 ///   #define A \
@@ -165,7 +165,7 @@ struct FormatStyle {
   EscapedNewlineAlignmentStyle AlignEscapedNewlines;
 
   /// Different styles for aligning operands.
-  enum OperandAlignmentStyle {
+  enum OperandAlignmentStyle : unsigned char {
 /// Do not align operands of binary and ternary expressions.
 /// The wrapped lines are indented ``ContinuationIndentWidth`` spaces from
 /// the start of the line.
@@ -275,7 +275,7 @@ struct FormatStyle {
 
   /// Different styles for merging short blocks containing at most one
   /// statement.
-  enum ShortBlockStyle {
+  enum ShortBlockStyle : unsigned char {
 /// Never merge blocks into a single line.
 /// \code
 ///   while (true) {
@@ -320,7 +320,7 @@ struct FormatStyle {
 
   /// Different styles for merging short functions containing at most one
   /// statement.
-  enum ShortFunctionStyle {
+  enum ShortFunctionStyle : unsigned char {
 /// Never merge functions into a single line.
 SFS_None,
 /// Only merge functions defined inside a class. Same as "inline",
@@ -371,7 +371,7 @@ struct FormatStyle {
   ShortFunctionStyle AllowShortFunctionsOnASingleLine;
 
   /// Different styles for handling short if lines
-  enum ShortIfStyle {
+  enum ShortIfStyle : unsigned char {
 /// Never put short ifs on the same line.
 /// \code
 ///   if (a)
@@ -405,7 +405,7 @@ struct FormatStyle {
 
   /// Different styles for merging short lambdas containing at most one
   /// statement.
-  enum ShortLambdaStyle {
+  enum ShortLambdaStyle : unsigned char {
 /// Never merge lambdas into a single line.
 SLS_None,
 /// Only merge empty lambdas.
@@ -442,7 +442,7 @@ struct FormatStyle {
 
   /// Different ways to break after the function definition return type.
   /// This option is **deprecated** and is retained for backwards 
compatibility.
-  enum DefinitionReturnTypeBreakingStyle {
+  enum DefinitionReturnTypeBreakingStyle : unsigned char {
 /// Break after return type automatically.
 /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
 DRTBS_None,
@@ -454,7 +454,7 @@ struct FormatStyle {
 
   /// Different ways to break after the function definition or
   /// declaration return type.
-  enum ReturnTypeBreakingStyle {
+  enum ReturnTypeBreakingStyle : unsigned char {
 /// Break after return type automatically.
 /// ``PenaltyReturnTypeOnItsOwnLine`` is taken into account.
 /// \code
@@ -545,7 +545,7 @@ struct FormatStyle {
   bool AlwaysBreakBeforeMultilineStrings;
 
   /// Different ways to break after the template declaration.
-  enum BreakTemplateDeclarationsStyle {
+  enum BreakTemplateDeclarationsStyle : unsigned char {
 /// Do not force break before declaration.
 /// ``PenaltyBreakTemplateDeclaration`` is ta

[llvm-branch-commits] [llvm] 62beac7 - [NFC] Refactor some SourceMgr code

2020-12-26 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-26T17:53:32Z
New Revision: 62beac7ed7c620c93e46c690ecc404143a124ea7

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

LOG: [NFC] Refactor some SourceMgr code

Added: 


Modified: 
llvm/lib/Support/SourceMgr.cpp

Removed: 




diff  --git a/llvm/lib/Support/SourceMgr.cpp b/llvm/lib/Support/SourceMgr.cpp
index e50cf5b4a834..499d9810677e 100644
--- a/llvm/lib/Support/SourceMgr.cpp
+++ b/llvm/lib/Support/SourceMgr.cpp
@@ -267,7 +267,7 @@ SMDiagnostic SourceMgr::GetMessage(SMLoc Loc, 
SourceMgr::DiagKind Kind,
   SmallVector, 4> ColRanges;
   std::pair LineAndCol;
   StringRef BufferID = "";
-  std::string LineStr;
+  StringRef LineStr;
 
   if (Loc.isValid()) {
 unsigned CurBuf = FindBufferContainingLoc(Loc);
@@ -288,7 +288,7 @@ SMDiagnostic SourceMgr::GetMessage(SMLoc Loc, 
SourceMgr::DiagKind Kind,
 const char *BufEnd = CurMB->getBufferEnd();
 while (LineEnd != BufEnd && LineEnd[0] != '\n' && LineEnd[0] != '\r')
   ++LineEnd;
-LineStr = std::string(LineStart, LineEnd);
+LineStr = StringRef(LineStart, LineEnd - LineStart);
 
 // Convert any ranges to column ranges that only intersect the line of the
 // location.
@@ -370,8 +370,8 @@ SMDiagnostic::SMDiagnostic(const SourceMgr &sm, SMLoc L, 
StringRef FN, int Line,
ArrayRef> Ranges,
ArrayRef Hints)
 : SM(&sm), Loc(L), Filename(std::string(FN)), LineNo(Line), ColumnNo(Col),
-  Kind(Kind), Message(std::string(Msg)), 
LineContents(std::string(LineStr)),
-  Ranges(Ranges.vec()), FixIts(Hints.begin(), Hints.end()) {
+  Kind(Kind), Message(Msg), LineContents(LineStr), Ranges(Ranges.vec()),
+  FixIts(Hints.begin(), Hints.end()) {
   llvm::sort(FixIts);
 }
 
@@ -386,13 +386,12 @@ static void buildFixItLine(std::string &CaretLine, 
std::string &FixItLine,
 
   size_t PrevHintEndCol = 0;
 
-  for (ArrayRef::iterator I = FixIts.begin(), E = FixIts.end(); I != 
E;
-   ++I) {
+  for (const llvm::SMFixIt &Fixit : FixIts) {
 // If the fixit contains a newline or tab, ignore it.
-if (I->getText().find_first_of("\n\r\t") != StringRef::npos)
+if (Fixit.getText().find_first_of("\n\r\t") != StringRef::npos)
   continue;
 
-SMRange R = I->getRange();
+SMRange R = Fixit.getRange();
 
 // If the line doesn't contain any part of the range, then ignore it.
 if (R.Start.getPointer() > LineEnd || R.End.getPointer() < LineStart)
@@ -421,16 +420,15 @@ static void buildFixItLine(std::string &CaretLine, 
std::string &FixItLine,
 // FIXME: This assertion is intended to catch unintended use of multibyte
 // characters in fixits. If we decide to do this, we'll have to track
 // separate byte widths for the source and fixit lines.
-assert((size_t)sys::locale::columnWidth(I->getText()) ==
-   I->getText().size());
+assert((size_t)sys::locale::columnWidth(Fixit.getText()) ==
+   Fixit.getText().size());
 
 // This relies on one byte per column in our fixit hints.
-unsigned LastColumnModified = HintCol + I->getText().size();
+unsigned LastColumnModified = HintCol + Fixit.getText().size();
 if (LastColumnModified > FixItLine.size())
   FixItLine.resize(LastColumnModified, ' ');
 
-std::copy(I->getText().begin(), I->getText().end(),
-  FixItLine.begin() + HintCol);
+llvm::copy(Fixit.getText(), FixItLine.begin() + HintCol);
 
 PrevHintEndCol = LastColumnModified;
 
@@ -534,11 +532,9 @@ void SMDiagnostic::print(const char *ProgName, raw_ostream 
&OS, bool ShowColors,
   std::string CaretLine(NumColumns + 1, ' ');
 
   // Expand any ranges.
-  for (unsigned r = 0, e = Ranges.size(); r != e; ++r) {
-std::pair R = Ranges[r];
+  for (const std::pair &R : Ranges)
 std::fill(&CaretLine[R.first],
   &CaretLine[std::min((size_t)R.second, CaretLine.size())], '~');
-  }
 
   // Add any fix-its.
   // FIXME: Find the beginning of the line properly for multibyte characters.



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


[llvm-branch-commits] [clang-tools-extra] c3b9d85 - [clang-tidy][NFC] Remove unnecessary headers

2020-12-28 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-28T15:01:51Z
New Revision: c3b9d85bd4b7249af9efe3594c6c152a032f83f8

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

LOG: [clang-tidy][NFC] Remove unnecessary headers

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidy.cpp
clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
clang-tools-extra/clang-tidy/ClangTidyModule.h
clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp 
b/clang-tools-extra/clang-tidy/ClangTidy.cpp
index 633655e5e24a..12d2134026c4 100644
--- a/clang-tools-extra/clang-tidy/ClangTidy.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp
@@ -22,13 +22,10 @@
 #include "ExpandModularHeadersPPCallbacks.h"
 #include "clang-tidy-config.h"
 #include "clang/AST/ASTConsumer.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/AST/Decl.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
 #include "clang/Format/Format.h"
 #include "clang/Frontend/ASTConsumers.h"
 #include "clang/Frontend/CompilerInstance.h"
-#include "clang/Frontend/FrontendActions.h"
 #include "clang/Frontend/FrontendDiagnostic.h"
 #include "clang/Frontend/MultiplexConsumer.h"
 #include "clang/Frontend/TextDiagnosticPrinter.h"
@@ -43,7 +40,6 @@
 #include "clang/Tooling/ReplacementsYaml.h"
 #include "clang/Tooling/Tooling.h"
 #include "llvm/Support/Process.h"
-#include "llvm/Support/Signals.h"
 #include 
 #include 
 

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
index 3567aac42c06..e1bea430a89a 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
@@ -10,9 +10,7 @@
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Error.h"
-#include "llvm/Support/WithColor.h"
 #include "llvm/Support/YAMLParser.h"
-#include "llvm/Support/raw_ostream.h"
 
 namespace clang {
 namespace tidy {

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
index 2c3f51a4034e..346fa66a662a 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
@@ -23,7 +23,6 @@
 #include "clang/AST/Attr.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/DiagnosticOptions.h"
-#include "clang/Basic/FileManager.h"
 #include "clang/Basic/SourceManager.h"
 #include "clang/Frontend/DiagnosticRenderer.h"
 #include "clang/Tooling/Core/Diagnostic.h"
@@ -31,7 +30,6 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringMap.h"
-#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/Regex.h"
 #include 
@@ -39,6 +37,10 @@
 using namespace clang;
 using namespace tidy;
 
+#ifdef LLVM_CLANG_AST_ATTR_H
+//#error
+#endif
+
 namespace {
 class ClangTidyDiagnosticRenderer : public DiagnosticRenderer {
 public:

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyModule.h 
b/clang-tools-extra/clang-tidy/ClangTidyModule.h
index 7fd16c2a7b3c..dd21a8dbc6a4 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyModule.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyModule.h
@@ -13,9 +13,7 @@
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include 
-#include 
 #include 
-#include 
 
 namespace clang {
 namespace tidy {

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
index 197552acf927..472123f8b306 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
@@ -16,7 +16,6 @@
 #include "llvm/Support/MemoryBufferRef.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/YAMLTraits.h"
-#include "llvm/Support/raw_ostream.h"
 #include 
 
 #define DEBUG_TYPE "clang-tidy-options"

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
index e60332d599a5..b107dd7385c6 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyProfiling.cpp
@@ -7,11 +7,9 @@
 
//===--===//
 
 #include "ClangTidyProfiling.h"
-#include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
-#include "llvm/Support/YAMLTraits.h"
 #include "llvm/Support/raw_ostream.h"
 #include 
 #include 




[llvm-branch-commits] [clang-tools-extra] 20b69af - [clangd] Add clang-tidy options to config

2020-11-22 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-11-22T10:04:01Z
New Revision: 20b69af7c9c8bd9a621b05203f944bf94a3a4c26

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

LOG: [clangd] Add clang-tidy options to config

First step of implementing clang-tidy configuration into clangd config.
This is just adding support for reading and verifying the clang tidy options 
from the config fragments.
No support is added for actually using the options within clang-tidy yet.

That will be added in a follow up as its a little more involved.

Reviewed By: sammccall

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

Added: 


Modified: 
clang-tools-extra/clangd/Config.h
clang-tools-extra/clangd/ConfigCompile.cpp
clang-tools-extra/clangd/ConfigFragment.h
clang-tools-extra/clangd/ConfigYAML.cpp
clang-tools-extra/clangd/unittests/ConfigCompileTests.cpp
clang-tools-extra/clangd/unittests/ConfigYAMLTests.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/Config.h 
b/clang-tools-extra/clangd/Config.h
index 087dc4fb805d..ff285d34633b 100644
--- a/clang-tools-extra/clangd/Config.h
+++ b/clang-tools-extra/clangd/Config.h
@@ -26,6 +26,7 @@
 
 #include "support/Context.h"
 #include "llvm/ADT/FunctionExtras.h"
+#include "llvm/ADT/StringMap.h"
 #include 
 #include 
 
@@ -70,6 +71,14 @@ struct Config {
 // ::). All nested namespaces are affected as well.
 std::vector FullyQualifiedNamespaces;
   } Style;
+
+  /// Configures what clang-tidy checks to run and options to use with them.
+  struct {
+// A comma-seperated list of globs to specify which clang-tidy checks to
+// run.
+std::string Checks;
+llvm::StringMap CheckOptions;
+  } ClangTidy;
 };
 
 } // namespace clangd

diff  --git a/clang-tools-extra/clangd/ConfigCompile.cpp 
b/clang-tools-extra/clangd/ConfigCompile.cpp
index e2823894dd11..ff031238418d 100644
--- a/clang-tools-extra/clangd/ConfigCompile.cpp
+++ b/clang-tools-extra/clangd/ConfigCompile.cpp
@@ -157,6 +157,7 @@ struct FragmentCompiler {
 compile(std::move(F.If));
 compile(std::move(F.CompileFlags));
 compile(std::move(F.Index));
+compile(std::move(F.ClangTidy));
   }
 
   void compile(Fragment::IfBlock &&F) {
@@ -264,6 +265,49 @@ struct FragmentCompiler {
 }
   }
 
+  void appendTidyCheckSpec(std::string &CurSpec,
+   const Located &Arg, bool IsPositive) {
+StringRef Str = *Arg;
+// Don't support negating here, its handled if the item is in the Add or
+// Remove list.
+if (Str.startswith("-") || Str.contains(',')) {
+  diag(Error, "Invalid clang-tidy check name", Arg.Range);
+  return;
+}
+CurSpec += ',';
+if (!IsPositive)
+  CurSpec += '-';
+CurSpec += Str;
+  }
+
+  void compile(Fragment::ClangTidyBlock &&F) {
+std::string Checks;
+for (auto &CheckGlob : F.Add)
+  appendTidyCheckSpec(Checks, CheckGlob, true);
+
+for (auto &CheckGlob : F.Remove)
+  appendTidyCheckSpec(Checks, CheckGlob, false);
+
+if (!Checks.empty())
+  Out.Apply.push_back(
+  [Checks = std::move(Checks)](const Params &, Config &C) {
+C.ClangTidy.Checks.append(
+Checks, C.ClangTidy.Checks.empty() ? /*skip comma*/ 1 : 0);
+  });
+if (!F.CheckOptions.empty()) {
+  std::vector> CheckOptions;
+  for (auto &Opt : F.CheckOptions)
+CheckOptions.emplace_back(std::move(*Opt.first),
+  std::move(*Opt.second));
+  Out.Apply.push_back(
+  [CheckOptions = std::move(CheckOptions)](const Params &, Config &C) {
+for (auto &StringPair : CheckOptions)
+  C.ClangTidy.CheckOptions.insert_or_assign(StringPair.first,
+StringPair.second);
+  });
+}
+  }
+
   constexpr static llvm::SourceMgr::DiagKind Error = llvm::SourceMgr::DK_Error;
   constexpr static llvm::SourceMgr::DiagKind Warning =
   llvm::SourceMgr::DK_Warning;

diff  --git a/clang-tools-extra/clangd/ConfigFragment.h 
b/clang-tools-extra/clangd/ConfigFragment.h
index 65772715095f..766463e11e25 100644
--- a/clang-tools-extra/clangd/ConfigFragment.h
+++ b/clang-tools-extra/clangd/ConfigFragment.h
@@ -174,6 +174,29 @@ struct Fragment {
 std::vector> FullyQualifiedNamespaces;
   };
   StyleBlock Style;
+
+  /// Controls how clang-tidy will run over the code base.
+  ///
+  /// The settings are merged with any settings found in .clang-tidy
+  /// configiration files with these ones taking precedence.
+  struct ClangTidyBlock {
+std::vector> Add;
+/// List of checks to disable.
+/// Takes precedence over Add. To enable all llvm checks except include
+/// order:
+///   Add: llvm-*
+///   Remove: llvm-include-

[llvm-branch-commits] [clang-tools-extra] 82c22f1 - [clangd] Fix compile error after 20b69af7

2020-11-22 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-11-22T10:48:48Z
New Revision: 82c22f124816d1f260dc8f0626d56b459d1358b8

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

LOG: [clangd] Fix compile error after 20b69af7

Some of the buildbots were failing due to what seems to be them using a non 
c++14 compilant std::string implementation.
Since c++14 std::basic_string::append(const basic_string, size_t, size_t) has a 
defaulted 3rd paramater, but some of the build bots were reporting that it 
wasn't defaulted in their implementation.

Added: 


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

Removed: 




diff  --git a/clang-tools-extra/clangd/ConfigCompile.cpp 
b/clang-tools-extra/clangd/ConfigCompile.cpp
index ff031238418d..3f4dcd3c036d 100644
--- a/clang-tools-extra/clangd/ConfigCompile.cpp
+++ b/clang-tools-extra/clangd/ConfigCompile.cpp
@@ -292,7 +292,8 @@ struct FragmentCompiler {
   Out.Apply.push_back(
   [Checks = std::move(Checks)](const Params &, Config &C) {
 C.ClangTidy.Checks.append(
-Checks, C.ClangTidy.Checks.empty() ? /*skip comma*/ 1 : 0);
+Checks, C.ClangTidy.Checks.empty() ? /*skip comma*/ 1 : 0,
+std::string::npos);
   });
 if (!F.CheckOptions.empty()) {
   std::vector> CheckOptions;



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


[llvm-branch-commits] [clang-tools-extra] 9f3edc3 - [clang-tidy] Fix RenamerClangTidy checks trying to emit a fix that isnt a valid identifier

2020-11-23 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-11-23T20:04:51Z
New Revision: 9f3edc323a88c1a179a0a5a9dc9a87a2964c0d48

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

LOG: [clang-tidy] Fix RenamerClangTidy checks trying to emit a fix that isnt a 
valid identifier

Addresses https://bugs.llvm.org/show_bug.cgi?id=48230.
Handle the case when the Fixup suggested isn't a valid c/c++ identifer.

Reviewed By: aaron.ballman, gribozavr2

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h

clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-bugfix-name-conflicts.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp 
b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
index 6a25813eb748..2bb97eca14ab 100644
--- a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
@@ -10,6 +10,7 @@
 #include "ASTUtils.h"
 #include "clang/AST/CXXInheritance.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Basic/CharInfo.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/Preprocessor.h"
@@ -463,6 +464,8 @@ void RenamerClangTidyCheck::check(const 
MatchFinder::MatchResult &Result) {
 Failure.FixStatus = ShouldFixStatus::ConflictsWithKeyword;
   else if (Ident->hasMacroDefinition())
 Failure.FixStatus = ShouldFixStatus::ConflictsWithMacroDefinition;
+} else if (!isValidIdentifier(Info.Fixup)) {
+  Failure.FixStatus = ShouldFixStatus::FixInvalidIdentifier;
 }
 
 Failure.Info = std::move(Info);
@@ -503,7 +506,8 @@ void RenamerClangTidyCheck::expandMacro(const Token 
&MacroNameTok,
 static std::string
 getDiagnosticSuffix(const RenamerClangTidyCheck::ShouldFixStatus FixStatus,
 const std::string &Fixup) {
-  if (Fixup.empty())
+  if (Fixup.empty() ||
+  FixStatus == 
RenamerClangTidyCheck::ShouldFixStatus::FixInvalidIdentifier)
 return "; cannot be fixed automatically";
   if (FixStatus == RenamerClangTidyCheck::ShouldFixStatus::ShouldFix)
 return {};
@@ -517,7 +521,6 @@ getDiagnosticSuffix(const 
RenamerClangTidyCheck::ShouldFixStatus FixStatus,
   RenamerClangTidyCheck::ShouldFixStatus::ConflictsWithMacroDefinition)
 return "; cannot be fixed because '" + Fixup +
"' would conflict with a macro definition";
-
   llvm_unreachable("invalid ShouldFixStatus");
 }
 

diff  --git a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h 
b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h
index aabb80133939..fd5b32075cbe 100644
--- a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h
+++ b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.h
@@ -59,6 +59,9 @@ class RenamerClangTidyCheck : public ClangTidyCheck {
 /// automatically.
 ConflictsWithMacroDefinition,
 
+/// The fixup results in an identifier that is not a valid c/c++ 
identifier.
+FixInvalidIdentifier,
+
 /// Values pass this threshold will be ignored completely
 /// i.e no message, no fixup.
 IgnoreFailureThreshold,

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-bugfix-name-conflicts.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-bugfix-name-conflicts.cpp
index 12ddcf55c119..bee93c99976b 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-bugfix-name-conflicts.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-bugfix-name-conflicts.cpp
@@ -25,3 +25,13 @@ int func2(int Foo) {
 
   return 0;
 }
+
+int func3(int _0Bad) {
+  // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: invalid case style for 
parameter '_0Bad'; cannot be fixed automatically [readability-identifier-naming]
+  // CHECK-FIXES: {{^}}int func3(int _0Bad) {{{$}}
+  if (_0Bad == 1) {
+// CHECK-FIXES: {{^}}  if (_0Bad == 1) {{{$}}
+return 2;
+  }
+  return 0;
+}



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


[llvm-branch-commits] [clang-tools-extra] 269ef31 - [clang-tidy] Use compiled regex for AllowedRegexp in macro usage check

2020-11-23 Thread Nathan James via llvm-branch-commits

Author: smhc
Date: 2020-11-23T20:46:43Z
New Revision: 269ef315d1beaff534a038b60389226b0f0f5d4f

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

LOG: [clang-tidy] Use compiled regex for AllowedRegexp in macro usage check

Current check compiles the regex on every attempt at matching. The check also 
populates and enables a regex value by default so the default behaviour results 
in regex re-compilation for every macro - if the check is enabled. If people 
used this check there's a reasonable chance they would have relatively complex 
regexes in use.

This is a quick and simple fix to store and use the compiled regex.

Reviewed By: njames93

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp

Removed: 




diff  --git 
a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
index febc295d78e6..eb21bb44f63d 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
@@ -32,8 +32,8 @@ bool isCapsOnly(StringRef Name) {
 class MacroUsageCallbacks : public PPCallbacks {
 public:
   MacroUsageCallbacks(MacroUsageCheck *Check, const SourceManager &SM,
-  StringRef RegExp, bool CapsOnly, bool IgnoreCommandLine)
-  : Check(Check), SM(SM), RegExp(RegExp), CheckCapsOnly(CapsOnly),
+  StringRef RegExpStr, bool CapsOnly, bool 
IgnoreCommandLine)
+  : Check(Check), SM(SM), RegExp(RegExpStr), CheckCapsOnly(CapsOnly),
 IgnoreCommandLineMacros(IgnoreCommandLine) {}
   void MacroDefined(const Token &MacroNameTok,
 const MacroDirective *MD) override {
@@ -47,7 +47,7 @@ class MacroUsageCallbacks : public PPCallbacks {
   return;
 
 StringRef MacroName = MacroNameTok.getIdentifierInfo()->getName();
-if (!CheckCapsOnly && !llvm::Regex(RegExp).match(MacroName))
+if (!CheckCapsOnly && !RegExp.match(MacroName))
   Check->warnMacro(MD, MacroName);
 
 if (CheckCapsOnly && !isCapsOnly(MacroName))
@@ -57,7 +57,7 @@ class MacroUsageCallbacks : public PPCallbacks {
 private:
   MacroUsageCheck *Check;
   const SourceManager &SM;
-  StringRef RegExp;
+  const llvm::Regex RegExp;
   bool CheckCapsOnly;
   bool IgnoreCommandLineMacros;
 };



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


[llvm-branch-commits] [clang-tools-extra] 9c4df9e - [clang-tidy] Support IgnoredRegexp configuration to selectively suppress identifier naming checks

2020-11-24 Thread Nathan James via llvm-branch-commits

Author: smhc
Date: 2020-11-25T01:18:44Z
New Revision: 9c4df9eecb6ca6b53d919cec9b460de46dd40302

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

LOG: [clang-tidy] Support IgnoredRegexp configuration to selectively suppress 
identifier naming checks

The idea of suppressing naming checks for variables is to support code bases 
that allow short variables named e.g 'x' and 'i' without prefix/suffixes or 
casing styles. This was originally proposed as a 'ShortSizeThreshold' however 
has been made more generic with a regex to suppress identifier naming checks 
for those that match.

Reviewed By: njames93, aaron.ballman

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

Added: 

clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-ignored-regexp.cpp

Modified: 
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst

Removed: 




diff  --git 
a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index d7160d52750f..efc683c6c05d 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -122,14 +122,32 @@ static StringRef const StyleNames[] = {
 #undef NAMING_KEYS
 // clang-format on
 
+IdentifierNamingCheck::NamingStyle::NamingStyle(
+llvm::Optional Case,
+const std::string &Prefix, const std::string &Suffix,
+const std::string &IgnoredRegexpStr)
+: Case(Case), Prefix(Prefix), Suffix(Suffix),
+  IgnoredRegexpStr(IgnoredRegexpStr) {
+  if (!IgnoredRegexpStr.empty()) {
+IgnoredRegexp =
+llvm::Regex(llvm::SmallString<128>({"^", IgnoredRegexpStr, "$"}));
+if (!IgnoredRegexp.isValid())
+  llvm::errs() << "Invalid IgnoredRegexp regular expression: "
+   << IgnoredRegexpStr;
+  }
+}
+
 static IdentifierNamingCheck::FileStyle
 getFileStyleFromOptions(const ClangTidyCheck::OptionsView &Options) {
-  SmallVector, 0> Styles(
-  SK_Count);
+  SmallVector, 0> Styles;
+  Styles.resize(SK_Count);
   SmallString<64> StyleString;
   for (unsigned I = 0; I < SK_Count; ++I) {
 StyleString = StyleNames[I];
 size_t StyleSize = StyleString.size();
+StyleString.append("IgnoredRegexp");
+std::string IgnoredRegexpStr = Options.get(StyleString, "");
+StyleString.resize(StyleSize);
 StyleString.append("Prefix");
 std::string Prefix(Options.get(StyleString, ""));
 // Fast replacement of [Pre]fix -> [Suf]fix.
@@ -141,9 +159,10 @@ getFileStyleFromOptions(const ClangTidyCheck::OptionsView 
&Options) {
 auto CaseOptional =
 Options.getOptional(StyleString);
 
-if (CaseOptional || !Prefix.empty() || !Postfix.empty())
+if (CaseOptional || !Prefix.empty() || !Postfix.empty() ||
+!IgnoredRegexpStr.empty())
   Styles[I].emplace(std::move(CaseOptional), std::move(Prefix),
-std::move(Postfix));
+std::move(Postfix), std::move(IgnoredRegexpStr));
   }
   bool IgnoreMainLike = Options.get("IgnoreMainLikeFunctions", false);
   return {std::move(Styles), IgnoreMainLike};
@@ -175,6 +194,9 @@ void 
IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
   continue;
 StyleString = StyleNames[I];
 size_t StyleSize = StyleString.size();
+StyleString.append("IgnoredRegexp");
+Options.store(Opts, StyleString, Styles[I]->IgnoredRegexpStr);
+StyleString.resize(StyleSize);
 StyleString.append("Prefix");
 Options.store(Opts, StyleString, Styles[I]->Prefix);
 // Fast replacement of [Pre]fix -> [Suf]fix.
@@ -194,7 +216,7 @@ void 
IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
 }
 
 static bool matchesStyle(StringRef Name,
- IdentifierNamingCheck::NamingStyle Style) {
+ const IdentifierNamingCheck::NamingStyle &Style) {
   static llvm::Regex Matchers[] = {
   llvm::Regex("^.*$"),
   llvm::Regex("^[a-z][a-z0-9_]*$"),
@@ -681,6 +703,9 @@ static llvm::Optional 
getFailureInfo(
 return None;
 
   const IdentifierNamingCheck::NamingStyle &Style = *NamingStyles[SK];
+  if (Style.IgnoredRegexp.isValid() && Style.IgnoredRegexp.match(Name))
+return None;
+
   if (matchesStyle(Name, Style))
 return None;
 

diff  --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h 
b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
index 77c03f77d91d..565eb9d11474 100644
--- a/clang-tools-extra/clang-tidy/readabi

[llvm-branch-commits] [clang-tools-extra] 73fdd99 - [clangd] Implement clang-tidy options from config

2020-11-25 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-11-25T18:35:35Z
New Revision: 73fdd998701cce3aa6c4d8d2a73ab97351a0313b

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

LOG: [clangd] Implement clang-tidy options from config

Added some new ClangTidyOptionsProvider like classes designed for clangd work 
flow.
These providers are designed to source the options on the worker thread but in 
a thread safe manner.
This is done through making the options getter take a pointer to the filesystem 
used by the worker thread which natuarally is from a ThreadsafeFS.
Internal caching in the providers is also guarded.

The providers don't inherit from `ClangTidyOptionsProvider` instead they share 
a base class which is able to create a provider for the `ClangTidyContext` 
using a specific FileSystem.
This approach means one provider can be used for multiple contexts even though 
`ClangTidyContext` owns its provider.

Depends on D90531

Reviewed By: sammccall

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

Added: 
clang-tools-extra/clangd/TidyProvider.cpp
clang-tools-extra/clangd/TidyProvider.h

Modified: 
clang-tools-extra/clangd/CMakeLists.txt
clang-tools-extra/clangd/ClangdServer.cpp
clang-tools-extra/clangd/ClangdServer.h
clang-tools-extra/clangd/Compiler.h
clang-tools-extra/clangd/ParsedAST.cpp
clang-tools-extra/clangd/tool/Check.cpp
clang-tools-extra/clangd/tool/ClangdMain.cpp
clang-tools-extra/clangd/unittests/ClangdTests.cpp
clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
clang-tools-extra/clangd/unittests/ParsedASTTests.cpp
clang-tools-extra/clangd/unittests/TestTU.cpp
clang-tools-extra/clangd/unittests/TestTU.h

Removed: 




diff  --git a/clang-tools-extra/clangd/CMakeLists.txt 
b/clang-tools-extra/clangd/CMakeLists.txt
index 2ce5d31e623e..919457f216c1 100644
--- a/clang-tools-extra/clangd/CMakeLists.txt
+++ b/clang-tools-extra/clangd/CMakeLists.txt
@@ -81,6 +81,7 @@ add_clang_library(clangDaemon
   SemanticSelection.cpp
   SourceCode.cpp
   QueryDriverDatabase.cpp
+  TidyProvider.cpp
   TUScheduler.cpp
   URI.cpp
   XRefs.cpp

diff  --git a/clang-tools-extra/clangd/ClangdServer.cpp 
b/clang-tools-extra/clangd/ClangdServer.cpp
index 502078c776db..aa19a9485e17 100644
--- a/clang-tools-extra/clangd/ClangdServer.cpp
+++ b/clang-tools-extra/clangd/ClangdServer.cpp
@@ -114,40 +114,6 @@ struct UpdateIndexCallbacks : public ParsingCallbacks {
   bool TheiaSemanticHighlighting;
 };
 
-// Set of clang-tidy checks that don't work well in clangd, either due to
-// crashes or false positives.
-// Returns a clang-tidy filter string: -check1,-check2.
-llvm::StringRef getUnusableTidyChecks() {
-  static const std::string FalsePositives =
-  llvm::join_items(", ",
-   // Check relies on seeing ifndef/define/endif 
directives,
-   // clangd doesn't replay those when using a preamble.
-   "-llvm-header-guard");
-  static const std::string CrashingChecks =
-  llvm::join_items(", ",
-   // Check can choke on invalid (intermediate) c++ code,
-   // which is often the case when clangd tries to build an
-   // AST.
-   "-bugprone-use-after-move");
-  static const std::string UnusableTidyChecks =
-  llvm::join_items(", ", FalsePositives, CrashingChecks);
-  return UnusableTidyChecks;
-}
-
-// Returns a clang-tidy options string: check1,check2.
-llvm::StringRef getDefaultTidyChecks() {
-  // These default checks are chosen for:
-  //  - low false-positive rate
-  //  - providing a lot of value
-  //  - being reasonably efficient
-  static const std::string DefaultChecks = llvm::join_items(
-  ",", "readability-misleading-indentation", "readability-deleted-default",
-  "bugprone-integer-division", "bugprone-sizeof-expression",
-  "bugprone-suspicious-missing-comma", "bugprone-unused-raii",
-  "bugprone-unused-return-value", "misc-unused-using-decls",
-  "misc-unused-alias-decls", "misc-definitions-in-headers");
-  return DefaultChecks;
-}
 } // namespace
 
 ClangdServer::Options ClangdServer::optsForTest() {
@@ -178,7 +144,7 @@ ClangdServer::ClangdServer(const GlobalCompilationDatabase 
&CDB,
  ? new FileIndex(Opts.HeavyweightDynamicSymbolIndex,
  Opts.CollectMainFileRefs)
  : nullptr),
-  GetClangTidyOptions(Opts.GetClangTidyOptions),
+  ClangTidyProvider(Opts.ClangTidyProvider),
   SuggestMissingIncludes(Opts.SuggestMissingIncludes),
   BuildRecoveryAST(Opts.BuildRecoveryAST),
   PreserveRecoveryASTType(Opts.PreserveRecoveryASTType),
@@ -236,20 +202,6 @@ void ClangdServer::addDocument(PathRef Fi

[llvm-branch-commits] [clang-tools-extra] ca64c89 - [NFC] SmallVector to SmallString<...>

2020-11-27 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-11-27T20:36:09Z
New Revision: ca64c8948f495ccdfb33f30675e72b7362b390ff

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

LOG: [NFC] SmallVector to SmallString<...>

Added: 


Modified: 
clang-tools-extra/clang-move/Move.cpp

clang-tools-extra/clang-tidy/readability/InconsistentDeclarationParameterNameCheck.cpp
clang-tools-extra/clangd/tool/ClangdMain.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-move/Move.cpp 
b/clang-tools-extra/clang-move/Move.cpp
index 24f819ca4ca2..8e0ec0f73c4d 100644
--- a/clang-tools-extra/clang-move/Move.cpp
+++ b/clang-tools-extra/clang-move/Move.cpp
@@ -691,11 +691,10 @@ void ClangMoveTool::addIncludes(llvm::StringRef 
IncludeHeader, bool IsAngled,
 llvm::StringRef FileName,
 CharSourceRange IncludeFilenameRange,
 const SourceManager &SM) {
-  SmallVector HeaderWithSearchPath;
+  SmallString<128> HeaderWithSearchPath;
   llvm::sys::path::append(HeaderWithSearchPath, SearchPath, IncludeHeader);
   std::string AbsoluteIncludeHeader =
-  MakeAbsolutePath(SM, llvm::StringRef(HeaderWithSearchPath.data(),
-   HeaderWithSearchPath.size()));
+  MakeAbsolutePath(SM, HeaderWithSearchPath);
   std::string IncludeLine =
   IsAngled ? ("#include <" + IncludeHeader + ">\n").str()
: ("#include \"" + IncludeHeader + "\"\n").str();

diff  --git 
a/clang-tools-extra/clang-tidy/readability/InconsistentDeclarationParameterNameCheck.cpp
 
b/clang-tools-extra/clang-tidy/readability/InconsistentDeclarationParameterNameCheck.cpp
index f95b1c9cb2ad..43d2f6a69cd1 100644
--- 
a/clang-tools-extra/clang-tidy/readability/InconsistentDeclarationParameterNameCheck.cpp
+++ 
b/clang-tools-extra/clang-tidy/readability/InconsistentDeclarationParameterNameCheck.cpp
@@ -196,18 +196,16 @@ getParameterSourceDeclaration(const FunctionDecl 
*OriginalDeclaration) {
 std::string joinParameterNames(
 const DifferingParamsContainer &DifferingParams,
 llvm::function_ref ChooseParamName) 
{
-  llvm::SmallVector Buffer;
-  llvm::raw_svector_ostream Str(Buffer);
+  llvm::SmallString<40> Str;
   bool First = true;
   for (const DifferingParamInfo &ParamInfo : DifferingParams) {
 if (First)
   First = false;
 else
-  Str << ", ";
-
-Str << "'" << ChooseParamName(ParamInfo).str() << "'";
+  Str += ", ";
+Str.append({"'", ChooseParamName(ParamInfo), "'"});
   }
-  return Str.str().str();
+  return std::string(Str);
 }
 
 void formatDifferingParamsDiagnostic(

diff  --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp 
b/clang-tools-extra/clangd/tool/ClangdMain.cpp
index d0eab3650750..331241115302 100644
--- a/clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -529,10 +529,10 @@ class TestScheme : public URIScheme {
   "Expect URI body to be an absolute path starting with '/': {0}",
   Body);
 Body = Body.ltrim('/');
-llvm::SmallVector Path(Body.begin(), Body.end());
+llvm::SmallString<16> Path(Body);
 path::native(Path);
 fs::make_absolute(TestScheme::TestDir, Path);
-return std::string(Path.begin(), Path.end());
+return std::string(Path);
   }
 
   llvm::Expected



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


[llvm-branch-commits] [clang] aa11556 - [ASTMatchers][NFC] Made variadic operator funcs static

2020-12-03 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-03T15:47:54Z
New Revision: aa1155634fe41a53988a277ca7668a8d69f59f94

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

LOG: [ASTMatchers][NFC] Made variadic operator funcs static

Fix naming style while were here too.

Added: 


Modified: 
clang/lib/ASTMatchers/ASTMatchersInternal.cpp

Removed: 




diff  --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp 
b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
index 215afcd29b64..257a893ccaa6 100644
--- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
+++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
@@ -49,26 +49,30 @@ AST_MATCHER_P(ObjCMessageExpr, hasAnySelectorMatcher, 
std::vector,
 
 namespace internal {
 
-bool NotUnaryOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder,
-  BoundNodesTreeBuilder *Builder,
-  ArrayRef InnerMatchers);
-
-bool AllOfVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder,
-   BoundNodesTreeBuilder *Builder,
-   ArrayRef InnerMatchers);
-
-bool EachOfVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder 
*Finder,
-BoundNodesTreeBuilder *Builder,
-ArrayRef InnerMatchers);
-
-bool AnyOfVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder,
-   BoundNodesTreeBuilder *Builder,
-   ArrayRef InnerMatchers);
-
-bool OptionallyVariadicOperator(const DynTypedNode &DynNode,
-ASTMatchFinder *Finder,
-BoundNodesTreeBuilder *Builder,
-ArrayRef InnerMatchers);
+static bool notUnaryOperator(const DynTypedNode &DynNode,
+ ASTMatchFinder *Finder,
+ BoundNodesTreeBuilder *Builder,
+ ArrayRef InnerMatchers);
+
+static bool allOfVariadicOperator(const DynTypedNode &DynNode,
+  ASTMatchFinder *Finder,
+  BoundNodesTreeBuilder *Builder,
+  ArrayRef InnerMatchers);
+
+static bool eachOfVariadicOperator(const DynTypedNode &DynNode,
+   ASTMatchFinder *Finder,
+   BoundNodesTreeBuilder *Builder,
+   ArrayRef InnerMatchers);
+
+static bool anyOfVariadicOperator(const DynTypedNode &DynNode,
+  ASTMatchFinder *Finder,
+  BoundNodesTreeBuilder *Builder,
+  ArrayRef InnerMatchers);
+
+static bool optionallyVariadicOperator(const DynTypedNode &DynNode,
+   ASTMatchFinder *Finder,
+   BoundNodesTreeBuilder *Builder,
+   ArrayRef 
InnerMatchers);
 
 bool matchesAnyBase(const CXXRecordDecl &Node,
 const Matcher &BaseSpecMatcher,
@@ -225,21 +229,21 @@ 
DynTypedMatcher::constructVariadic(DynTypedMatcher::VariadicOperator Op,
 }
 return DynTypedMatcher(
 SupportedKind, RestrictKind,
-new VariadicMatcher(std::move(InnerMatchers)));
+new VariadicMatcher(std::move(InnerMatchers)));
 
   case VO_AnyOf:
 return DynTypedMatcher(
 SupportedKind, RestrictKind,
-new VariadicMatcher(std::move(InnerMatchers)));
+new VariadicMatcher(std::move(InnerMatchers)));
 
   case VO_EachOf:
 return DynTypedMatcher(
 SupportedKind, RestrictKind,
-new VariadicMatcher(std::move(InnerMatchers)));
+new VariadicMatcher(std::move(InnerMatchers)));
 
   case VO_Optionally:
 return DynTypedMatcher(SupportedKind, RestrictKind,
-   new VariadicMatcher(
+   new VariadicMatcher(
std::move(InnerMatchers)));
 
   case VO_UnaryNot:
@@ -247,7 +251,7 @@ 
DynTypedMatcher::constructVariadic(DynTypedMatcher::VariadicOperator Op,
 // vector.
 return DynTypedMatcher(
 SupportedKind, RestrictKind,
-new VariadicMatcher(std::move(InnerMatchers)));
+new VariadicMatcher(std::move(InnerMatchers)));
   }
   llvm_unreachable("Invalid Op value.");
 }
@@ -354,9 +358,10 @@ void BoundNodesTreeBuilder::addMatch(const 
BoundNodesTreeBuilder &Other) {
   Bindings.append(Other.Bindings.begin(), Other.Bindings.end());
 }
 
-bool NotUnaryOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder,
-  BoundNodesTreeBuilder *Builder,
-  ArrayRef InnerMatchers) {
+static bool notUnaryOperator(const DynTyped

[llvm-branch-commits] [clang-tools-extra] 9806181 - [clang-tidy][docs] Update check options with boolean values instead of non-zero/0/1

2020-12-07 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-07T12:13:57Z
New Revision: 980618145bf00a8e212cf3c6db46fb0a83081d69

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

LOG: [clang-tidy][docs] Update check options with boolean values instead of 
non-zero/0/1

Using bools instead of integers better conveys the expected value of the option.

Reviewed By: Eugene.Zelenko, aaron.ballman

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

Added: 


Modified: 
clang-tools-extra/docs/clang-tidy/checks/bugprone-argument-comment.rst

clang-tools-extra/docs/clang-tidy/checks/bugprone-misplaced-widening-cast.rst

clang-tools-extra/docs/clang-tidy/checks/bugprone-not-null-terminated-result.rst
clang-tools-extra/docs/clang-tidy/checks/bugprone-reserved-identifier.rst
clang-tools-extra/docs/clang-tidy/checks/bugprone-signed-char-misuse.rst
clang-tools-extra/docs/clang-tidy/checks/bugprone-sizeof-expression.rst
clang-tools-extra/docs/clang-tidy/checks/bugprone-string-constructor.rst

clang-tools-extra/docs/clang-tidy/checks/bugprone-suspicious-string-compare.rst

clang-tools-extra/docs/clang-tidy/checks/bugprone-unhandled-self-assignment.rst
clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-macro-usage.rst

clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-narrowing-conversions.rst

clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-prefer-member-initializer.rst

clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-pro-type-member-init.rst

clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-special-member-functions.rst
clang-tools-extra/docs/clang-tidy/checks/hicpp-multiway-paths-covered.rst
clang-tools-extra/docs/clang-tidy/checks/misc-definitions-in-headers.rst

clang-tools-extra/docs/clang-tidy/checks/misc-throw-by-value-catch-by-reference.rst
clang-tools-extra/docs/clang-tidy/checks/misc-unused-parameters.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-avoid-bind.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-make-shared.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-make-unique.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-pass-by-value.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-auto.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-bool-literals.rst

clang-tools-extra/docs/clang-tidy/checks/modernize-use-default-member-init.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-emplace.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-equals-default.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-equals-delete.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-noexcept.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst

clang-tools-extra/docs/clang-tidy/checks/modernize-use-transparent-functors.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-use-using.rst
clang-tools-extra/docs/clang-tidy/checks/performance-for-range-copy.rst

clang-tools-extra/docs/clang-tidy/checks/performance-inefficient-string-concatenation.rst

clang-tools-extra/docs/clang-tidy/checks/performance-inefficient-vector-operation.rst
clang-tools-extra/docs/clang-tidy/checks/performance-move-const-arg.rst
clang-tools-extra/docs/clang-tidy/checks/portability-simd-intrinsics.rst
clang-tools-extra/docs/clang-tidy/checks/readability-identifier-naming.rst

clang-tools-extra/docs/clang-tidy/checks/readability-implicit-bool-conversion.rst

clang-tools-extra/docs/clang-tidy/checks/readability-inconsistent-declaration-parameter-name.rst
clang-tools-extra/docs/clang-tidy/checks/readability-qualified-auto.rst

clang-tools-extra/docs/clang-tidy/checks/readability-redundant-access-specifiers.rst

clang-tools-extra/docs/clang-tidy/checks/readability-redundant-declaration.rst

clang-tools-extra/docs/clang-tidy/checks/readability-redundant-member-init.rst

clang-tools-extra/docs/clang-tidy/checks/readability-redundant-smartptr-get.rst

clang-tools-extra/docs/clang-tidy/checks/readability-simplify-boolean-expr.rst

clang-tools-extra/docs/clang-tidy/checks/readability-uppercase-literal-suffix.rst

Removed: 




diff  --git 
a/clang-tools-extra/docs/clang-tidy/checks/bugprone-argument-comment.rst 
b/clang-tools-extra/docs/clang-tidy/checks/bugprone-argument-comment.rst
index 8c59541b8d42..ab7e668b971c 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/bugprone-argument-comment.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/bugprone-argument-comment.rst
@@ -24,17 +24,17 @@ Options
 
 .. option:: StrictMode
 
-   When zero (default value), the check will ignore leading and trailing
+   When `false` (default valu

[llvm-branch-commits] [clang-tools-extra] 8625f5b - [clang-tidy][NFC] Streamline CheckOptions error reporting.

2020-12-07 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-07T14:05:49Z
New Revision: 8625f5bc799f4ee1c85126bd007166fe6dff14a1

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

LOG: [clang-tidy][NFC] Streamline CheckOptions error reporting.

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidyCheck.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
index c99931e0aa3a..be68dfbedb29 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
@@ -21,28 +21,22 @@ char UnparseableEnumOptionError::ID;
 char UnparseableIntegerOptionError::ID;
 
 std::string MissingOptionError::message() const {
-  llvm::SmallString<128> Buffer;
-  llvm::raw_svector_ostream Output(Buffer);
-  Output << "option not found '" << OptionName << '\'';
+  llvm::SmallString<128> Buffer({"option not found '", OptionName, "'"});
   return std::string(Buffer);
 }
 
 std::string UnparseableEnumOptionError::message() const {
-  llvm::SmallString<128> Buffer;
-  llvm::raw_svector_ostream Output(Buffer);
-  Output << "invalid configuration value '" << LookupValue << "' for option '"
- << LookupName << '\'';
+  llvm::SmallString<256> Buffer({"invalid configuration value '", LookupValue,
+ "' for option '", LookupName, "'"});
   if (SuggestedValue)
-Output << "; did you mean '" << *SuggestedValue << "'?";
+Buffer.append({"; did you mean '", *SuggestedValue, "'?"});
   return std::string(Buffer);
 }
 
 std::string UnparseableIntegerOptionError::message() const {
-  llvm::SmallString<128> Buffer;
-  llvm::raw_svector_ostream Output(Buffer);
-  Output << "invalid configuration value '" << LookupValue << "' for option '"
- << LookupName << "'; expected "
- << (IsBoolean ? "a bool" : "an integer value");
+  llvm::SmallString<256> Buffer({"invalid configuration value '", LookupValue,
+ "' for option '", LookupName, "'; expected ",
+ (IsBoolean ? "a bool" : "an integer value")});
   return std::string(Buffer);
 }
 



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


[llvm-branch-commits] [clang] dc361d5 - [llvm] Add asserts in (ThreadSafe)?RefCountedBase destructors

2020-12-07 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-07T20:20:08Z
New Revision: dc361d5c2a2dd34839ff4cd48844cf1bf9a87c62

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

LOG: [llvm] Add asserts in (ThreadSafe)?RefCountedBase destructors

Added a trivial destructor in release mode and in debug mode a destructor that 
asserts RefCount is indeed zero.
This ensure people aren't manually (maybe accidentally) destroying these 
objects like in this contrived example.
```lang=c++
{
  std::unique_ptr Object;
  holdIntrusiveOwnership(Object.get());
  // Object Destructor called here will assert.
}
```

Reviewed By: dblaikie

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

Added: 


Modified: 
clang/lib/ASTMatchers/ASTMatchersInternal.cpp
llvm/include/llvm/ADT/IntrusiveRefCntPtr.h

Removed: 




diff  --git a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp 
b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
index 257a893ccaa6..7f96f4bc03af 100644
--- a/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
+++ b/clang/lib/ASTMatchers/ASTMatchersInternal.cpp
@@ -150,15 +150,9 @@ class IdDynMatcher : public DynMatcherInterface {
 };
 
 /// A matcher that always returns true.
-///
-/// We only ever need one instance of this matcher, so we create a global one
-/// and reuse it to reduce the overhead of the matcher and increase the chance
-/// of cache hits.
 class TrueMatcherImpl : public DynMatcherInterface {
 public:
-  TrueMatcherImpl() {
-Retain(); // Reference count will never become zero.
-  }
+  TrueMatcherImpl() = default;
 
   bool dynMatches(const DynTypedNode &, ASTMatchFinder *,
   BoundNodesTreeBuilder *) const override {
@@ -193,8 +187,6 @@ class DynTraversalMatcherImpl : public DynMatcherInterface {
 
 } // namespace
 
-static llvm::ManagedStatic TrueMatcherInstance;
-
 bool ASTMatchFinder::isTraversalIgnoringImplicitNodes() const {
   return getASTContext().getParentMapContext().getTraversalKind() ==
  TK_IgnoreUnlessSpelledInSource;
@@ -273,7 +265,12 @@ 
DynTypedMatcher::withTraversalKind(ast_type_traits::TraversalKind TK) {
 }
 
 DynTypedMatcher DynTypedMatcher::trueMatcher(ASTNodeKind NodeKind) {
-  return DynTypedMatcher(NodeKind, NodeKind, &*TrueMatcherInstance);
+  // We only ever need one instance of TrueMatcherImpl, so we create a static
+  // instance and reuse it to reduce the overhead of the matcher and increase
+  // the chance of cache hits.
+  static const llvm::IntrusiveRefCntPtr Instance =
+  new TrueMatcherImpl();
+  return DynTypedMatcher(NodeKind, NodeKind, Instance);
 }
 
 bool DynTypedMatcher::canMatchNodesOfKind(ASTNodeKind Kind) const {

diff  --git a/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h 
b/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
index 41e5e6b9f8ed..7e6585378ec4 100644
--- a/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
+++ b/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
@@ -75,6 +75,18 @@ template  class RefCountedBase {
   RefCountedBase(const RefCountedBase &) {}
   RefCountedBase &operator=(const RefCountedBase &) = delete;
 
+#ifndef NDEBUG
+  ~RefCountedBase() {
+assert(RefCount == 0 &&
+   "Destruction occured when there are still references to this.");
+  }
+#else
+  // Default the destructor in release builds, A trivial destructor may enable
+  // better codegen.
+  ~RefCountedBase() = default;
+#endif
+
+public:
   void Retain() const { ++RefCount; }
 
   void Release() const {
@@ -94,6 +106,17 @@ template  class ThreadSafeRefCountedBase {
   ThreadSafeRefCountedBase &
   operator=(const ThreadSafeRefCountedBase &) = delete;
 
+#ifndef NDEBUG
+  ~ThreadSafeRefCountedBase() {
+assert(RefCount == 0 &&
+   "Destruction occured when there are still references to this.");
+  }
+#else
+  // Default the destructor in release builds, A trivial destructor may enable
+  // better codegen.
+  ~ThreadSafeRefCountedBase() = default;
+#endif
+
 public:
   void Retain() const { RefCount.fetch_add(1, std::memory_order_relaxed); }
 



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


[llvm-branch-commits] [llvm] a61d508 - [llvm][NFC] Made RefCountBase constructors protected

2020-12-07 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-07T20:23:11Z
New Revision: a61d5084735a6990d895825262d4870ede0535ef

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

LOG: [llvm][NFC] Made RefCountBase constructors protected

Matches ThreadSafeRefCountBase and forces the class to be inherited.

Added: 


Modified: 
llvm/include/llvm/ADT/IntrusiveRefCntPtr.h

Removed: 




diff  --git a/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h 
b/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
index 7e6585378ec4..173fad3aeafa 100644
--- a/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
+++ b/llvm/include/llvm/ADT/IntrusiveRefCntPtr.h
@@ -70,7 +70,7 @@ namespace llvm {
 template  class RefCountedBase {
   mutable unsigned RefCount = 0;
 
-public:
+protected:
   RefCountedBase() = default;
   RefCountedBase(const RefCountedBase &) {}
   RefCountedBase &operator=(const RefCountedBase &) = delete;



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


[llvm-branch-commits] [clang-tools-extra] 4a0528e - [clangd][NFC] Small tweak to combined provider

2020-12-08 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-08T17:12:56Z
New Revision: 4a0528e4a0e3e4504db8650bf2bf7d6977ffa018

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

LOG: [clangd][NFC] Small tweak to combined provider

This should address the FIXME about clang3.9 dervied to base unique_ptr 
constructor not working.

Reviewed By: sammccall

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

Added: 


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

Removed: 




diff  --git a/clang-tools-extra/clangd/ConfigProvider.cpp 
b/clang-tools-extra/clangd/ConfigProvider.cpp
index 0933e7e2c283..05b2ba50566d 100644
--- a/clang-tools-extra/clangd/ConfigProvider.cpp
+++ b/clang-tools-extra/clangd/ConfigProvider.cpp
@@ -144,7 +144,7 @@ Provider::fromAncestorRelativeYAMLFiles(llvm::StringRef 
RelPath,
 
 std::unique_ptr
 Provider::combine(std::vector Providers) {
-  struct CombinedProvider : Provider {
+  class CombinedProvider : public Provider {
 std::vector Providers;
 
 std::vector
@@ -156,14 +156,13 @@ Provider::combine(std::vector 
Providers) {
   }
   return Result;
 }
+
+  public:
+CombinedProvider(std::vector Providers)
+: Providers(std::move(Providers)) {}
   };
-  auto Result = std::make_unique();
-  Result->Providers = std::move(Providers);
-  // FIXME: This is a workaround for a bug in older versions of clang (< 3.9)
-  //   The constructor that is supposed to allow for Derived to Base
-  //   conversion does not work. Remove this if we drop support for such
-  //   configurations.
-  return std::unique_ptr(Result.release());
+
+  return std::make_unique(std::move(Providers));
 }
 
 Config Provider::getConfig(const Params &P, DiagnosticCallback DC) const {



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


[llvm-branch-commits] [clang-tools-extra] 2755393 - [clang-tidy] Add support for diagnostics with no location

2020-12-08 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-08T20:29:31Z
New Revision: 27553933a8693d508eb7f7c24a14f66b3d006d2c

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

LOG: [clang-tidy] Add support for diagnostics with no location

Add methods for emitting diagnostics with no location as well as a special 
diagnostic for configuration errors.
These show up in the errors as [clang-tidy-config].
The reason to use a custom name rather than the check name is to distinguish 
the error isn't the same category as the check that reported it.

Reviewed By: aaron.ballman

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
clang-tools-extra/clang-tidy/ClangTidyCheck.h
clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.cpp
clang-tools-extra/clang-tidy/ClangTidyDiagnosticConsumer.h
clang-tools-extra/clang-tidy/bugprone/DynamicStaticInitializersCheck.cpp
clang-tools-extra/clang-tidy/bugprone/SuspiciousIncludeCheck.cpp

clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
clang-tools-extra/clang-tidy/google/GlobalNamesInHeadersCheck.cpp
clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.cpp
clang-tools-extra/clang-tidy/misc/DefinitionsInHeadersCheck.cpp
clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp

clang-tools-extra/test/clang-tidy/checkers/readability-identifier-naming-case-violation.cpp
clang-tools-extra/unittests/clang-tidy/ClangTidyDiagnosticConsumerTest.cpp
clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
index be68dfbedb29..af19da2419ab 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyCheck.cpp
@@ -42,7 +42,7 @@ std::string UnparseableIntegerOptionError::message() const {
 
 ClangTidyCheck::ClangTidyCheck(StringRef CheckName, ClangTidyContext *Context)
 : CheckName(CheckName), Context(Context),
-  Options(CheckName, Context->getOptions().CheckOptions) {
+  Options(CheckName, Context->getOptions().CheckOptions, Context) {
   assert(Context != nullptr);
   assert(!CheckName.empty());
 }
@@ -52,6 +52,17 @@ DiagnosticBuilder ClangTidyCheck::diag(SourceLocation Loc, 
StringRef Message,
   return Context->diag(CheckName, Loc, Message, Level);
 }
 
+DiagnosticBuilder ClangTidyCheck::diag(StringRef Message,
+   DiagnosticIDs::Level Level) {
+  return Context->diag(CheckName, Message, Level);
+}
+
+DiagnosticBuilder
+ClangTidyCheck::configurationDiag(StringRef Description,
+  DiagnosticIDs::Level Level) {
+  return Context->configurationDiag(Description, Level);
+}
+
 void ClangTidyCheck::run(const ast_matchers::MatchFinder::MatchResult &Result) 
{
   // For historical reasons, checks don't implement the MatchFinder run()
   // callback directly. We keep the run()/check() distinction to avoid 
interface
@@ -59,9 +70,11 @@ void ClangTidyCheck::run(const 
ast_matchers::MatchFinder::MatchResult &Result) {
   check(Result);
 }
 
-ClangTidyCheck::OptionsView::OptionsView(StringRef CheckName,
- const ClangTidyOptions::OptionMap &CheckOptions)
-: NamePrefix(CheckName.str() + "."), CheckOptions(CheckOptions) {}
+ClangTidyCheck::OptionsView::OptionsView(
+StringRef CheckName, const ClangTidyOptions::OptionMap &CheckOptions,
+ClangTidyContext *Context)
+: NamePrefix(CheckName.str() + "."), CheckOptions(CheckOptions),
+  Context(Context) {}
 
 llvm::Expected
 ClangTidyCheck::OptionsView::get(StringRef LocalName) const {
@@ -121,7 +134,7 @@ bool ClangTidyCheck::OptionsView::get(StringRef 
LocalName,
   llvm::Expected ValueOr = get(LocalName);
   if (ValueOr)
 return *ValueOr;
-  logIfOptionParsingError(ValueOr.takeError());
+  reportOptionParsingError(ValueOr.takeError());
   return Default;
 }
 
@@ -140,7 +153,7 @@ bool 
ClangTidyCheck::OptionsView::getLocalOrGlobal(StringRef LocalName,
   llvm::Expected ValueOr = getLocalOrGlobal(LocalName);
   if (ValueOr)
 return *ValueOr;
-  logIfOptionParsingError(ValueOr.takeError());
+  reportOptionParsingError(ValueOr.takeError());
   return Default;
 }
 
@@ -199,11 +212,11 @@ llvm::Expected 
ClangTidyCheck::OptionsView::getEnumInt(
   Iter->getValue().Value);
 }
 
-void ClangTidyCheck::OptionsView::logIfOptionParsingError(llvm::Error &&Err) {
+void ClangTidyCheck::OptionsView::reportOptionParsingError(
+llvm::Error &&Err) const {
   if (auto Re

[llvm-branch-commits] [clang-tools-extra] 86436a4 - [clang-tidy][NFC] Made Globlist::contains const

2020-12-08 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-08T22:26:55Z
New Revision: 86436a4343628f0f98d72169a013cf99a3be5973

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

LOG: [clang-tidy][NFC] Made Globlist::contains const

Added: 


Modified: 
clang-tools-extra/clang-tidy/GlobList.cpp
clang-tools-extra/clang-tidy/GlobList.h

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/GlobList.cpp 
b/clang-tools-extra/clang-tidy/GlobList.cpp
index 88e6ea22d675..5b70b8d8c577 100644
--- a/clang-tools-extra/clang-tidy/GlobList.cpp
+++ b/clang-tools-extra/clang-tidy/GlobList.cpp
@@ -52,7 +52,7 @@ GlobList::GlobList(StringRef Globs) {
   } while (!Globs.empty());
 }
 
-bool GlobList::contains(StringRef S) {
+bool GlobList::contains(StringRef S) const {
   // Iterating the container backwards as the last match determins if S is in
   // the list.
   for (const GlobListItem &Item : llvm::reverse(Items)) {

diff  --git a/clang-tools-extra/clang-tidy/GlobList.h 
b/clang-tools-extra/clang-tidy/GlobList.h
index 5acb6a5b878c..fe68a3497c92 100644
--- a/clang-tools-extra/clang-tidy/GlobList.h
+++ b/clang-tools-extra/clang-tidy/GlobList.h
@@ -33,7 +33,7 @@ class GlobList {
 
   /// Returns \c true if the pattern matches \p S. The result is the last
   /// matching glob's Positive flag.
-  bool contains(StringRef S);
+  bool contains(StringRef S) const;
 
 private:
 



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


[llvm-branch-commits] [clang-tools-extra] bedf3a0 - [clang-tidy][NFC] Use moves instead of copies when constructing OptionsProviders.

2020-12-10 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-10T11:34:57Z
New Revision: bedf3a0f507113bb09acaa317c533d85fe52518a

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

LOG: [clang-tidy][NFC] Use moves instead of copies when constructing 
OptionsProviders.

Reviewed By: aaron.ballman

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

Added: 


Modified: 
clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
clang-tools-extra/clang-tidy/ClangTidyOptions.h
clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
index 950a64f4c274..1de1b1baccb5 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
@@ -195,14 +195,13 @@ DefaultOptionsProvider::getRawOptions(llvm::StringRef 
FileName) {
 }
 
 ConfigOptionsProvider::ConfigOptionsProvider(
-const ClangTidyGlobalOptions &GlobalOptions,
-const ClangTidyOptions &DefaultOptions,
-const ClangTidyOptions &ConfigOptions,
-const ClangTidyOptions &OverrideOptions,
+ClangTidyGlobalOptions GlobalOptions, ClangTidyOptions DefaultOptions,
+ClangTidyOptions ConfigOptions, ClangTidyOptions OverrideOptions,
 llvm::IntrusiveRefCntPtr FS)
-: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
-  FS),
-  ConfigOptions(ConfigOptions) {}
+: FileOptionsBaseProvider(std::move(GlobalOptions),
+  std::move(DefaultOptions),
+  std::move(OverrideOptions), std::move(FS)),
+  ConfigOptions(std::move(ConfigOptions)) {}
 
 std::vector
 ConfigOptionsProvider::getRawOptions(llvm::StringRef FileName) {
@@ -227,24 +226,25 @@ ConfigOptionsProvider::getRawOptions(llvm::StringRef 
FileName) {
 }
 
 FileOptionsBaseProvider::FileOptionsBaseProvider(
-const ClangTidyGlobalOptions &GlobalOptions,
-const ClangTidyOptions &DefaultOptions,
-const ClangTidyOptions &OverrideOptions,
+ClangTidyGlobalOptions GlobalOptions, ClangTidyOptions DefaultOptions,
+ClangTidyOptions OverrideOptions,
 llvm::IntrusiveRefCntPtr VFS)
-: DefaultOptionsProvider(GlobalOptions, DefaultOptions),
-  OverrideOptions(OverrideOptions), FS(std::move(VFS)) {
+: DefaultOptionsProvider(std::move(GlobalOptions),
+ std::move(DefaultOptions)),
+  OverrideOptions(std::move(OverrideOptions)), FS(std::move(VFS)) {
   if (!FS)
 FS = llvm::vfs::getRealFileSystem();
   ConfigHandlers.emplace_back(".clang-tidy", parseConfiguration);
 }
 
 FileOptionsBaseProvider::FileOptionsBaseProvider(
-const ClangTidyGlobalOptions &GlobalOptions,
-const ClangTidyOptions &DefaultOptions,
-const ClangTidyOptions &OverrideOptions,
-const FileOptionsBaseProvider::ConfigFileHandlers &ConfigHandlers)
-: DefaultOptionsProvider(GlobalOptions, DefaultOptions),
-  OverrideOptions(OverrideOptions), ConfigHandlers(ConfigHandlers) {}
+ClangTidyGlobalOptions GlobalOptions, ClangTidyOptions DefaultOptions,
+ClangTidyOptions OverrideOptions,
+FileOptionsBaseProvider::ConfigFileHandlers ConfigHandlers)
+: DefaultOptionsProvider(std::move(GlobalOptions),
+ std::move(DefaultOptions)),
+  OverrideOptions(std::move(OverrideOptions)),
+  ConfigHandlers(std::move(ConfigHandlers)) {}
 
 void FileOptionsBaseProvider::addRawFileOptions(
 llvm::StringRef AbsolutePath, std::vector &CurOptions) {
@@ -286,20 +286,20 @@ void FileOptionsBaseProvider::addRawFileOptions(
 }
 
 FileOptionsProvider::FileOptionsProvider(
-const ClangTidyGlobalOptions &GlobalOptions,
-const ClangTidyOptions &DefaultOptions,
-const ClangTidyOptions &OverrideOptions,
+ClangTidyGlobalOptions GlobalOptions, ClangTidyOptions DefaultOptions,
+ClangTidyOptions OverrideOptions,
 llvm::IntrusiveRefCntPtr VFS)
-: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
-  VFS){}
+: FileOptionsBaseProvider(std::move(GlobalOptions),
+  std::move(DefaultOptions),
+  std::move(OverrideOptions), std::move(VFS)) {}
 
 FileOptionsProvider::FileOptionsProvider(
-const ClangTidyGlobalOptions &GlobalOptions,
-const ClangTidyOptions &DefaultOptions,
-const ClangTidyOptions &OverrideOptions,
-const FileOptionsBaseProvider::ConfigFileHandlers &ConfigHandlers)
-: FileOptionsBaseProvider(GlobalOptions, DefaultOptions, OverrideOptions,
-  ConfigHandlers) {}
+ClangTidyGlobalOptions GlobalOptions, ClangTidyOptions DefaultOptions,
+ClangTidyOptions Overr

[llvm-branch-commits] [clang-tools-extra] 34d2688 - [clang-tidy] Use a MemoryBufferRef when parsing configuration files.

2020-12-10 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-10T14:52:45Z
New Revision: 34d2688a50f23b4b15bdeab054e28e033ece9363

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

LOG: [clang-tidy] Use a MemoryBufferRef when parsing configuration files.

Using a MemoryBufferRef, If there is an error parsing, we can point the user to 
the location of the file.

Reviewed By: aaron.ballman

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

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/clangd/TidyProvider.cpp
clang-tools-extra/unittests/clang-tidy/ClangTidyOptionsTest.cpp

Removed: 




diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
index 1de1b1baccb5..f17ef716d60f 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.cpp
@@ -360,7 +360,7 @@ FileOptionsBaseProvider::tryReadConfigFile(StringRef 
Directory) {
 if ((*Text)->getBuffer().empty())
   continue;
 llvm::ErrorOr ParsedOptions =
-ConfigHandler.second((*Text)->getBuffer());
+ConfigHandler.second({(*Text)->getBuffer(), ConfigFile});
 if (!ParsedOptions) {
   if (ParsedOptions.getError())
 llvm::errs() << "Error parsing " << ConfigFile << ": "
@@ -380,7 +380,8 @@ std::error_code parseLineFilter(StringRef LineFilter,
   return Input.error();
 }
 
-llvm::ErrorOr parseConfiguration(StringRef Config) {
+llvm::ErrorOr
+parseConfiguration(llvm::MemoryBufferRef Config) {
   llvm::yaml::Input Input(Config);
   ClangTidyOptions Options;
   Input >> Options;

diff  --git a/clang-tools-extra/clang-tidy/ClangTidyOptions.h 
b/clang-tools-extra/clang-tidy/ClangTidyOptions.h
index b4a00f68d6cf..e7cd89951ff9 100644
--- a/clang-tools-extra/clang-tidy/ClangTidyOptions.h
+++ b/clang-tools-extra/clang-tidy/ClangTidyOptions.h
@@ -192,7 +192,7 @@ class FileOptionsBaseProvider : public 
DefaultOptionsProvider {
   // A pair of configuration file base name and a function parsing
   // configuration from text in the corresponding format.
   typedef std::pair(
- llvm::StringRef)>>
+ llvm::MemoryBufferRef)>>
   ConfigFileHandler;
 
   /// Configuration file handlers listed in the order of priority.
@@ -308,7 +308,8 @@ std::error_code parseLineFilter(llvm::StringRef LineFilter,
 
 /// Parses configuration from JSON and returns \c ClangTidyOptions or an
 /// error.
-llvm::ErrorOr parseConfiguration(llvm::StringRef Config);
+llvm::ErrorOr
+parseConfiguration(llvm::MemoryBufferRef Config);
 
 /// Serializes configuration to a YAML-encoded string.
 std::string configurationAsText(const ClangTidyOptions &Options);

diff  --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp 
b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
index beef79e17769..2748fd9f74a5 100644
--- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
+++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp
@@ -312,10 +312,11 @@ static std::unique_ptr 
createOptionsProvider(
   if (UseColor.getNumOccurrences() > 0)
 OverrideOptions.UseColor = UseColor;
 
-  auto LoadConfig = [&](StringRef Configuration)
-  -> std::unique_ptr {
+  auto LoadConfig =
+  [&](StringRef Configuration,
+  StringRef Source) -> std::unique_ptr {
 llvm::ErrorOr ParsedConfig =
-parseConfiguration(Configuration);
+parseConfiguration(MemoryBufferRef(Configuration, Source));
 if (ParsedConfig)
   return std::make_unique(
   std::move(GlobalOptions),
@@ -334,18 +335,18 @@ static std::unique_ptr 
createOptionsProvider(
 }
 
 llvm::ErrorOr> Text =
-llvm::MemoryBuffer::getFile(ConfigFile.c_str());
+llvm::MemoryBuffer::getFile(ConfigFile);
 if (std::error_code EC = Text.getError()) {
   llvm::errs() << "Error: can't read config-file '" << ConfigFile
<< "': " << EC.message() << "\n";
   return nullptr;
 }
 
-return LoadConfig((*Text)->getBuffer());
+return LoadConfig((*Text)->getBuffer(), ConfigFile);
   }
 
   if (Config.getNumOccurrences() > 0)
-return LoadConfig(Config);
+return LoadConfig(Config, "");
 
   return std::make_unique(
   std::move(GlobalOptions), std::move(DefaultOptions),

diff  --git a/clang-tools-extra/clangd/TidyProvider.cpp 
b/clang-tools-extra/clangd/TidyProvider.cpp
index f51ac91aaf36..730a402b5df1 100644
--- a/clang-tools-extra/clangd/TidyProvider.cpp
+++ b/clang-tools-extra/clangd/TidyProvider.cpp
@@ -41,7 +41,8 @@ class DotClangTidyCache : private FileCache {
 [this](l

[llvm-branch-commits] [clang-tools-extra] a0cf2b8 - [clangd][NFC] Remove unnecessary vector.

2020-12-10 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-10T14:59:17Z
New Revision: a0cf2b8f712e0bca9185d77cf1def8160f165548

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

LOG: [clangd][NFC] Remove unnecessary vector.

As pointed out in D92788.

Reviewed By: kbobyrev

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

Added: 


Modified: 
clang-tools-extra/clangd/unittests/TestTU.cpp

Removed: 




diff  --git a/clang-tools-extra/clangd/unittests/TestTU.cpp 
b/clang-tools-extra/clangd/unittests/TestTU.cpp
index 27019403ae85..3b1130444671 100644
--- a/clang-tools-extra/clangd/unittests/TestTU.cpp
+++ b/clang-tools-extra/clangd/unittests/TestTU.cpp
@@ -187,9 +187,6 @@ const Symbol &findSymbol(const SymbolSlab &Slab, 
llvm::StringRef QName) {
 }
 
 const NamedDecl &findDecl(ParsedAST &AST, llvm::StringRef QName) {
-  llvm::SmallVector Components;
-  QName.split(Components, "::");
-
   auto &Ctx = AST.getASTContext();
   auto LookupDecl = [&Ctx](const DeclContext &Scope,
llvm::StringRef Name) -> const NamedDecl & {
@@ -200,11 +197,13 @@ const NamedDecl &findDecl(ParsedAST &AST, llvm::StringRef 
QName) {
   };
 
   const DeclContext *Scope = Ctx.getTranslationUnitDecl();
-  for (auto NameIt = Components.begin(), End = Components.end() - 1;
-   NameIt != End; ++NameIt) {
-Scope = &cast(LookupDecl(*Scope, *NameIt));
+
+  StringRef Cur, Rest;
+  for (std::tie(Cur, Rest) = QName.split("::"); !Rest.empty();
+   std::tie(Cur, Rest) = Rest.split("::")) {
+Scope = &cast(LookupDecl(*Scope, Cur));
   }
-  return LookupDecl(*Scope, Components.back());
+  return LookupDecl(*Scope, Cur);
 }
 
 const NamedDecl &findDecl(ParsedAST &AST,



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


[llvm-branch-commits] [clang-tools-extra] 62b4a69 - [clangd] Use enumMember instead of enumConstant

2020-12-11 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-11T14:46:13Z
New Revision: 62b4a69969c38158ce0c49803c50c32a76bbbe14

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

LOG: [clangd] Use enumMember instead of enumConstant

We should be using enumMember as thats defined in LSP, enumConstant is non 
standard so clients aren't likely to support it
Fixes https://github.com/clangd/clangd/issues/622n

Reviewed By: sammccall

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

Added: 


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

Removed: 




diff  --git a/clang-tools-extra/clangd/SemanticHighlighting.cpp 
b/clang-tools-extra/clangd/SemanticHighlighting.cpp
index 1022ccd0b15f..be0a5437cde6 100644
--- a/clang-tools-extra/clangd/SemanticHighlighting.cpp
+++ b/clang-tools-extra/clangd/SemanticHighlighting.cpp
@@ -571,7 +571,7 @@ llvm::StringRef toSemanticTokenType(HighlightingKind Kind) {
   case HighlightingKind::Enum:
 return "enum";
   case HighlightingKind::EnumConstant:
-return "enumConstant"; // nonstandard
+return "enumMember";
   case HighlightingKind::Typedef:
 return "type";
   case HighlightingKind::DependentType:



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


[llvm-branch-commits] [llvm] d380c38 - [YAML] Use correct source location for unknown key errors.

2020-12-11 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-11T16:34:06Z
New Revision: d380c38e3470c5b02a3002a7ea8d836f44086b31

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

LOG: [YAML] Use correct source location for unknown key errors.

Currently unknown keys when inputting mapping traits have the location set to 
the Value.
Example:
```
YAML:1:14: error: unknown key 'UnknownKey'
{UnknownKey: SomeValue}
 ^
```
This is unhelpful for a user as it draws them to fix the wrong item.

Reviewed By: silvas

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

Added: 


Modified: 
llvm/include/llvm/Support/YAMLParser.h
llvm/include/llvm/Support/YAMLTraits.h
llvm/lib/Support/YAMLParser.cpp
llvm/lib/Support/YAMLTraits.cpp
llvm/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-aliased.mir
llvm/test/CodeGen/MIR/X86/spill-slot-fixed-stack-object-immutable.mir
llvm/test/CodeGen/MIR/X86/variable-sized-stack-object-size-error.mir
llvm/test/Object/nm-tapi-invalids.test
llvm/unittests/TextAPI/TextStubV1Tests.cpp
llvm/unittests/TextAPI/TextStubV2Tests.cpp
llvm/unittests/TextAPI/TextStubV3Tests.cpp
llvm/unittests/TextAPI/TextStubV4Tests.cpp

Removed: 




diff  --git a/llvm/include/llvm/Support/YAMLParser.h 
b/llvm/include/llvm/Support/YAMLParser.h
index 6e98de0843f2..a449d35abfd8 100644
--- a/llvm/include/llvm/Support/YAMLParser.h
+++ b/llvm/include/llvm/Support/YAMLParser.h
@@ -102,6 +102,8 @@ class Stream {
 
   void printError(Node *N, const Twine &Msg,
   SourceMgr::DiagKind Kind = SourceMgr::DK_Error);
+  void printError(const SMRange &Range, const Twine &Msg,
+  SourceMgr::DiagKind Kind = SourceMgr::DK_Error);
 
 private:
   friend class Document;

diff  --git a/llvm/include/llvm/Support/YAMLTraits.h 
b/llvm/include/llvm/Support/YAMLTraits.h
index 40a9c0b5ab3f..586cd64284ce 100644
--- a/llvm/include/llvm/Support/YAMLTraits.h
+++ b/llvm/include/llvm/Support/YAMLTraits.h
@@ -18,6 +18,7 @@
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/Regex.h"
+#include "llvm/Support/SMLoc.h"
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/VersionTuple.h"
 #include "llvm/Support/YAMLParser.h"
@@ -1471,9 +1472,10 @@ class Input : public IO {
 
 static bool classof(const MapHNode *) { return true; }
 
-using NameToNode = StringMap>;
+using NameToNodeAndLoc =
+StringMap, SMRange>>;
 
-NameToNode Mapping;
+NameToNodeAndLoc Mapping;
 SmallVector ValidKeys;
   };
 
@@ -1495,9 +1497,11 @@ class Input : public IO {
   std::unique_ptr createHNodes(Node *node);
   void setError(HNode *hnode, const Twine &message);
   void setError(Node *node, const Twine &message);
+  void setError(const SMRange &Range, const Twine &message);
 
   void reportWarning(HNode *hnode, const Twine &message);
   void reportWarning(Node *hnode, const Twine &message);
+  void reportWarning(const SMRange &Range, const Twine &message);
 
 public:
   // These are only used by operator>>. They could be private

diff  --git a/llvm/lib/Support/YAMLParser.cpp b/llvm/lib/Support/YAMLParser.cpp
index 755f93cde171..3111c7198958 100644
--- a/llvm/lib/Support/YAMLParser.cpp
+++ b/llvm/lib/Support/YAMLParser.cpp
@@ -1774,7 +1774,11 @@ Stream::~Stream() = default;
 bool Stream::failed() { return scanner->failed(); }
 
 void Stream::printError(Node *N, const Twine &Msg, SourceMgr::DiagKind Kind) {
-  SMRange Range = N ? N->getSourceRange() : SMRange();
+  printError(N ? N->getSourceRange() : SMRange(), Msg, Kind);
+}
+
+void Stream::printError(const SMRange &Range, const Twine &Msg,
+SourceMgr::DiagKind Kind) {
   scanner->printError(Range.Start, Kind, Msg, Range);
 }
 

diff  --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp
index 1b5c79f6b592..5b24e08e4453 100644
--- a/llvm/lib/Support/YAMLTraits.cpp
+++ b/llvm/lib/Support/YAMLTraits.cpp
@@ -175,7 +175,7 @@ bool Input::preflightKey(const char *Key, bool Required, 
bool, bool &UseDefault,
 return false;
   }
   MN->ValidKeys.push_back(Key);
-  HNode *Value = MN->Mapping[Key].get();
+  HNode *Value = MN->Mapping[Key].first.get();
   if (!Value) {
 if (Required)
   setError(CurrentNode, Twine("missing required key '") + Key + "'");
@@ -201,12 +201,12 @@ void Input::endMapping() {
 return;
   for (const auto &NN : MN->Mapping) {
 if (!is_contained(MN->ValidKeys, NN.first())) {
-  HNode *ReportNode = NN.second.get();
+  const SMRange &ReportLoc = NN.second.second;
   if (!AllowUnknownKeys) {
-setError(ReportNode, Twine("unknown key '") + NN.first() + "'");
+setError(ReportLoc, Twine("unknown key '") + NN.first() + "'");
 break;
   } els

[llvm-branch-commits] [llvm] 0e5bfff - [YAML] Support extended spellings when parsing bools.

2020-12-12 Thread Nathan James via llvm-branch-commits

Author: Nathan James
Date: 2020-12-12T12:50:34Z
New Revision: 0e5bfffb1361727eb163c4ecdd5836818064240f

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

LOG: [YAML] Support extended spellings when parsing bools.

Support all the spellings of boolean datatypes according to 
https://yaml.org/type/bool.html

Reviewed By: silvas

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

Added: 


Modified: 
llvm/include/llvm/Support/YAMLParser.h
llvm/include/llvm/Support/YAMLTraits.h
llvm/lib/Support/YAMLParser.cpp
llvm/lib/Support/YAMLTraits.cpp
llvm/unittests/Support/YAMLParserTest.cpp

Removed: 




diff  --git a/llvm/include/llvm/Support/YAMLParser.h 
b/llvm/include/llvm/Support/YAMLParser.h
index a449d35abfd8..759e11afd447 100644
--- a/llvm/include/llvm/Support/YAMLParser.h
+++ b/llvm/include/llvm/Support/YAMLParser.h
@@ -78,6 +78,9 @@ bool scanTokens(StringRef Input);
 /// escaped, but emitted verbatim.
 std::string escape(StringRef Input, bool EscapePrintable = true);
 
+/// Parse \p S as a bool according to https://yaml.org/type/bool.html.
+llvm::Optional parseBool(StringRef S);
+
 /// This class represents a YAML stream potentially containing multiple
 ///documents.
 class Stream {

diff  --git a/llvm/include/llvm/Support/YAMLTraits.h 
b/llvm/include/llvm/Support/YAMLTraits.h
index 586cd64284ce..92fc4cff7e45 100644
--- a/llvm/include/llvm/Support/YAMLTraits.h
+++ b/llvm/include/llvm/Support/YAMLTraits.h
@@ -638,6 +638,7 @@ inline bool isNull(StringRef S) {
 }
 
 inline bool isBool(StringRef S) {
+  // FIXME: using parseBool is causing multiple tests to fail.
   return S.equals("true") || S.equals("True") || S.equals("TRUE") ||
  S.equals("false") || S.equals("False") || S.equals("FALSE");
 }

diff  --git a/llvm/lib/Support/YAMLParser.cpp b/llvm/lib/Support/YAMLParser.cpp
index 3111c7198958..d037cdf850ef 100644
--- a/llvm/lib/Support/YAMLParser.cpp
+++ b/llvm/lib/Support/YAMLParser.cpp
@@ -746,6 +746,92 @@ std::string yaml::escape(StringRef Input, bool 
EscapePrintable) {
   return EscapedInput;
 }
 
+llvm::Optional yaml::parseBool(StringRef S) {
+  switch (S.size()) {
+  case 1:
+switch (S.front()) {
+case 'y':
+case 'Y':
+  return true;
+case 'n':
+case 'N':
+  return false;
+default:
+  return None;
+}
+  case 2:
+switch (S.front()) {
+case 'O':
+  if (S[1] == 'N') // ON
+return true;
+  LLVM_FALLTHROUGH;
+case 'o':
+  if (S[1] == 'n') //[Oo]n
+return true;
+  return None;
+case 'N':
+  if (S[1] == 'O') // NO
+return false;
+  LLVM_FALLTHROUGH;
+case 'n':
+  if (S[1] == 'o') //[Nn]o
+return false;
+  return None;
+default:
+  return None;
+}
+  case 3:
+switch (S.front()) {
+case 'O':
+  if (S.drop_front() == "FF") // OFF
+return false;
+  LLVM_FALLTHROUGH;
+case 'o':
+  if (S.drop_front() == "ff") //[Oo]ff
+return false;
+  return None;
+case 'Y':
+  if (S.drop_front() == "ES") // YES
+return true;
+  LLVM_FALLTHROUGH;
+case 'y':
+  if (S.drop_front() == "es") //[Yy]es
+return true;
+  return None;
+default:
+  return None;
+}
+  case 4:
+switch (S.front()) {
+case 'T':
+  if (S.drop_front() == "RUE") // TRUE
+return true;
+  LLVM_FALLTHROUGH;
+case 't':
+  if (S.drop_front() == "rue") //[Tt]rue
+return true;
+  return None;
+default:
+  return None;
+}
+  case 5:
+switch (S.front()) {
+case 'F':
+  if (S.drop_front() == "ALSE") // FALSE
+return false;
+  LLVM_FALLTHROUGH;
+case 'f':
+  if (S.drop_front() == "alse") //[Ff]alse
+return false;
+  return None;
+default:
+  return None;
+}
+  default:
+return None;
+  }
+}
+
 Scanner::Scanner(StringRef Input, SourceMgr &sm, bool ShowColors,
  std::error_code *EC)
 : SM(sm), ShowColors(ShowColors), EC(EC) {

diff  --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp
index 5b24e08e4453..b00357cc3b7e 100644
--- a/llvm/lib/Support/YAMLTraits.cpp
+++ b/llvm/lib/Support/YAMLTraits.cpp
@@ -885,11 +885,8 @@ void ScalarTraits::output(const bool &Val, void *, 
raw_ostream &Out) {
 }
 
 StringRef ScalarTraits::input(StringRef Scalar, void *, bool &Val) {
-  if (Scalar.equals("true")) {
-Val = true;
-return StringRef();
-  } else if (Scalar.equals("false")) {
-Val = false;
+  if (llvm::Optional Parsed = parseBool(Scalar)) {
+Val = *Parsed;
 return StringRef();
   }
   return "invalid boolean";

diff  --git a/llvm/unittests/Support/YAMLParserTest.cpp 
b/llvm/unittests/Support/YAMLParserTest.cpp
index 938a6

[llvm-branch-commits] [clang-tools-extra] release/19.x: [clang-tidy] Fix crash in modernize-use-ranges (#100427) (PR #101482)

2024-10-06 Thread Nathan James via llvm-branch-commits

njames93 wrote:

That crash is addressed in #111318. Basically the check works fine when run in 
clang-tidy with 1 source file, but failed when ran multiple times from one 
process.

https://github.com/llvm/llvm-project/pull/101482
___
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits