llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb

@llvm/pr-subscribers-clang-static-analyzer-1

Author: Shengxin Pei (TPPPP72)

<details>
<summary>Changes</summary>

Fixed a FIXME in `Decl.h` and removed the existing heap allocation API.

This is the first time making such extensive changes, so it might take some 
time to adjust.

Assisted by Claude.

---

Patch is 120.31 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/218264.diff


80 Files Affected:

- (modified) clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp 
(+82-25) 
- (modified) clang-tools-extra/clang-doc/Serialize.cpp (+56-26) 
- (modified) clang-tools-extra/clang-move/Move.cpp (+6-1) 
- (modified) 
clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp 
(+6-1) 
- (modified) clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp 
(+6-1) 
- (modified) 
clang-tools-extra/clang-tidy/bugprone/DerivedMethodShadowingBaseMethodCheck.cpp 
(+7-1) 
- (modified) clang-tools-extra/clang-tidy/bugprone/StandaloneEmptyCheck.cpp 
(+8-5) 
- (modified) clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp 
(+13-2) 
- (modified) clang-tools-extra/clang-tidy/fuchsia/TemporaryObjectsCheck.cpp 
(+6-2) 
- (modified) clang-tools-extra/clang-tidy/modernize/AvoidBindCheck.cpp (+6-1) 
- (modified) clang-tools-extra/clang-tidy/modernize/LoopConvertCheck.cpp 
(+11-7) 
- (modified) 
clang-tools-extra/clang-tidy/modernize/MinMaxUseInitializerListCheck.cpp 
(+10-3) 
- (modified) clang-tools-extra/clang-tidy/modernize/UseAutoCheck.cpp (+11-5) 
- (modified) clang-tools-extra/clang-tidy/modernize/UseEmplaceCheck.cpp (+11-6) 
- (modified) clang-tools-extra/clang-tidy/readability/EnumInitialValueCheck.cpp 
(+4-1) 
- (modified) clang-tools-extra/clang-tidy/readability/NamedParameterCheck.cpp 
(+15-6) 
- (modified) clang-tools-extra/clang-tidy/utils/Matchers.h (+17-4) 
- (modified) clang-tools-extra/clangd/refactor/Rename.cpp (+8-3) 
- (modified) clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp (+14-8) 
- (modified) clang-tools-extra/clangd/unittests/HeaderSourceSwitchTests.cpp 
(+8-2) 
- (modified) clang-tools-extra/clangd/unittests/IncludeCleanerTests.cpp (+10-2) 
- (modified) clang-tools-extra/clangd/unittests/QualityTests.cpp (+29-7) 
- (modified) clang-tools-extra/clangd/unittests/XRefsTests.cpp (+8-2) 
- (modified) clang-tools-extra/include-cleaner/lib/Types.cpp (+10-5) 
- (modified) clang/include/clang/AST/Decl.h (-3) 
- (modified) clang/include/clang/AST/StmtDataCollectors.td (+15-7) 
- (modified) clang/include/clang/ASTMatchers/ASTMatchers.h (+4-4) 
- (modified) clang/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h 
(+1-3) 
- (modified) clang/include/clang/StaticAnalyzer/Checkers/SValExplainer.h 
(+46-30) 
- (modified) clang/lib/AST/ASTDiagnostic.cpp (+19-5) 
- (modified) clang/lib/AST/ByteCode/Function.h (+5-1) 
- (modified) clang/lib/AST/Decl.cpp (+16-12) 
- (modified) clang/lib/AST/DeclPrinter.cpp (+2-2) 
- (modified) clang/lib/AST/VTableBuilder.cpp (+13-4) 
- (modified) clang/lib/Analysis/AnalysisDeclContext.cpp (+2-2) 
- (modified) clang/lib/Analysis/CFG.cpp (+2-2) 
- (modified) clang/lib/Analysis/IssueHash.cpp (+25-13) 
- (modified) clang/lib/Analysis/LifetimeSafety/Facts.cpp (+5-2) 
- (modified) clang/lib/Analysis/LifetimeSafety/LifetimeSafety.cpp (+16-11) 
- (modified) clang/lib/Analysis/ProgramPoint.cpp (+9-8) 
- (modified) clang/lib/CodeGen/CGClass.cpp (+19-6) 
- (modified) clang/lib/CodeGen/CGOpenMPRuntime.cpp (+9-5) 
- (modified) clang/lib/CodeGen/HLSLBufferLayoutBuilder.cpp (+7-2) 
- (modified) clang/lib/Frontend/ASTConsumers.cpp (+6-2) 
- (modified) clang/lib/Interpreter/InterpreterValuePrinter.cpp (+4-5) 
- (modified) clang/lib/Parse/ParseDeclCXX.cpp (+22-9) 
- (modified) clang/lib/Sema/AnalysisBasedWarnings.cpp (+8-8) 
- (modified) clang/lib/Sema/SemaAccess.cpp (+14-3) 
- (modified) clang/lib/Sema/SemaBoundsSafety.cpp (+7-7) 
- (modified) clang/lib/Sema/SemaChecking.cpp (+8-2) 
- (modified) clang/lib/Sema/SemaExpr.cpp (+7-2) 
- (modified) clang/lib/Sema/SemaOverload.cpp (+9-4) 
- (modified) clang/lib/Sema/SemaTemplate.cpp (+7-3) 
- (modified) clang/lib/StaticAnalyzer/Checkers/AnalysisOrderChecker.cpp (+16-6) 
- (modified) clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (+9-6) 
- (modified) clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp (+13-11) 
- (modified) clang/lib/StaticAnalyzer/Checkers/NoOwnershipChangeVisitor.cpp 
(+6-2) 
- (modified) 
clang/lib/StaticAnalyzer/Checkers/RetainCountChecker/RetainCountDiagnostics.cpp 
(+6-2) 
- (modified) clang/lib/StaticAnalyzer/Core/MemRegion.cpp (+7-5) 
- (modified) clang/lib/StaticAnalyzer/Core/SVals.cpp (+5-2) 
- (modified) clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp (+10-3) 
- (modified) clang/lib/Tooling/ASTDiff/ASTDiff.cpp (+36-19) 
- (modified) clang/lib/Tooling/Refactoring/Lookup.cpp (+17-6) 
- (modified) clang/lib/Tooling/Refactoring/Rename/USRFinder.cpp (+14-3) 
- (modified) clang/test/Analysis/Inputs/expected-plists/cxx-for-range.cpp.plist 
(+1-1) 
- (modified) clang/unittests/AST/ASTImporterTest.cpp (+6-1) 
- (modified) clang/unittests/AST/DeclTest.cpp (-16) 
- (modified) clang/unittests/Frontend/FrontendActionTest.cpp (+6-4) 
- (modified) clang/unittests/Index/IndexTests.cpp (+8-4) 
- (modified) clang/unittests/Interpreter/InterpreterTest.cpp (+22-5) 
- (modified) clang/unittests/Sema/CodeCompleteTest.cpp (+10-5) 
- (modified) clang/unittests/Tooling/LookupTest.cpp (+18-3) 
- (modified) clang/unittests/Tooling/QualTypeNamesTest.cpp (+6-1) 
- (modified) 
clang/unittests/Tooling/RecursiveASTVisitorTestPostOrderVisitor.cpp (+20-4) 
- (modified) clang/unittests/Tooling/RecursiveASTVisitorTests/CXXMemberCall.cpp 
(+6-2) 
- (modified) lldb/source/Plugins/ExpressionParser/Clang/CxxModuleHandler.cpp 
(+10-4) 
- (modified) lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp 
(+6-1) 
- (modified) lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilderClang.cpp 
(+16-8) 
- (modified) lldb/unittests/Expression/ClangExpressionDeclMapTest.cpp (+8-1) 
- (modified) lldb/unittests/Symbol/TestClangASTImporter.cpp (+60-8) 


``````````diff
diff --git a/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp 
b/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
index 471ca45fb5a53..0db8dbae4ff9d 100644
--- a/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
+++ b/clang-tools-extra/clang-change-namespace/ChangeNamespace.cpp
@@ -748,25 +748,45 @@ void 
ChangeNamespaceTool::replaceQualifiedSymbolInDeclContext(
     // Note that `FromDecl` must not be defined in the old namespace (according
     // to `DeclMatcher`), so its fully-qualified name will not change after
     // changing the namespace.
-    addReplacementOrDie(Start, End, FromDecl->getQualifiedNameAsString(),
+    SmallString<128> FromDeclNameBuf;
+    {
+      llvm::raw_svector_ostream OS(FromDeclNameBuf);
+      FromDecl->printQualifiedName(OS);
+    }
+    addReplacementOrDie(Start, End, FromDeclNameBuf.str(),
                         *Result.SourceManager, &FileToReplacements);
     return;
   }
   const auto *NsDecl = llvm::cast<NamespaceDecl>(NsDeclContext);
+
   // Calculate the name of the `NsDecl` after it is moved to new namespace.
-  std::string OldNs = NsDecl->getQualifiedNameAsString();
-  llvm::StringRef Postfix = OldNs;
+  SmallString<128> OldNsBuf;
+  {
+    llvm::raw_svector_ostream OS(OldNsBuf);
+    NsDecl->printQualifiedName(OS);
+  }
+  llvm::StringRef Postfix = OldNsBuf.str();
   bool Consumed = Postfix.consume_front(OldNamespace);
   assert(Consumed && "Expect OldNS to start with OldNamespace.");
   (void)Consumed;
-  const std::string NewNs = (NewNamespace + Postfix).str();
+  SmallString<128> NewNsBuf;
+  {
+    llvm::raw_svector_ostream OS(NewNsBuf);
+    OS << NewNamespace << Postfix;
+  }
+  llvm::StringRef NewNs = NewNsBuf.str();
 
   llvm::StringRef NestedName = Lexer::getSourceText(
       CharSourceRange::getTokenRange(
           Result.SourceManager->getSpellingLoc(Start),
           Result.SourceManager->getSpellingLoc(End)),
       *Result.SourceManager, Result.Context->getLangOpts());
-  std::string FromDeclName = FromDecl->getQualifiedNameAsString();
+  SmallString<128> FromDeclNameBuf;
+  {
+    llvm::raw_svector_ostream OS(FromDeclNameBuf);
+    FromDecl->printQualifiedName(OS);
+  }
+  llvm::StringRef FromDeclName = FromDeclNameBuf.str();
   for (llvm::Regex &RE : AllowedSymbolRegexes)
     if (RE.match(FromDeclName))
       return;
@@ -778,9 +798,13 @@ void 
ChangeNamespaceTool::replaceQualifiedSymbolInDeclContext(
     if (!isDeclVisibleAtLocation(*Result.SourceManager, UsingNamespace, 
DeclCtx,
                                  Start))
       continue;
-    StringRef FromDeclNameRef = FromDeclName;
-    if (FromDeclNameRef.consume_front(UsingNamespace->getNominatedNamespace()
-                                          ->getQualifiedNameAsString())) {
+    llvm::StringRef FromDeclNameRef = FromDeclName;
+    SmallString<128> NominatedNsBuf;
+    {
+      llvm::raw_svector_ostream OS(NominatedNsBuf);
+      UsingNamespace->getNominatedNamespace()->printQualifiedName(OS);
+    }
+    if (FromDeclNameRef.consume_front(NominatedNsBuf.str())) {
       FromDeclNameRef = FromDeclNameRef.drop_front(2);
       if (FromDeclNameRef.size() < ReplaceName.size())
         ReplaceName = std::string(FromDeclNameRef);
@@ -792,28 +816,41 @@ void 
ChangeNamespaceTool::replaceQualifiedSymbolInDeclContext(
     if (!isDeclVisibleAtLocation(*Result.SourceManager, NamespaceAlias, 
DeclCtx,
                                  Start))
       continue;
-    StringRef FromDeclNameRef = FromDeclName;
-    if (FromDeclNameRef.consume_front(
-            NamespaceAlias->getNamespace()->getQualifiedNameAsString() +
-            "::")) {
+    llvm::StringRef FromDeclNameRef = FromDeclName;
+    SmallString<128> AliasNsBuf;
+    {
+      llvm::raw_svector_ostream OS(AliasNsBuf);
+      NamespaceAlias->getNamespace()->printQualifiedName(OS);
+    }
+    AliasNsBuf.append("::");
+    if (FromDeclNameRef.consume_front(AliasNsBuf.str())) {
       std::string AliasName = NamespaceAlias->getNameAsString();
-      std::string AliasQualifiedName =
-          NamespaceAlias->getQualifiedNameAsString();
+      SmallString<128> AliasQualifiedNameBuf;
+      {
+        llvm::raw_svector_ostream OS(AliasQualifiedNameBuf);
+        NamespaceAlias->printQualifiedName(OS);
+      }
+      llvm::StringRef AliasQualifiedName = AliasQualifiedNameBuf.str();
       // We only consider namespace aliases define in the global namespace or
       // in namespaces that are directly visible from the reference, i.e.
       // ancestor of the `OldNs`. Note that declarations in ancestor namespaces
       // but not visible in the new namespace is filtered out by
       // "IsVisibleInNewNs" matcher.
       if (AliasQualifiedName != AliasName) {
-        // The alias is defined in some namespace.
-        assert(StringRef(AliasQualifiedName).ends_with("::" + AliasName));
+        assert(AliasQualifiedName.ends_with(AliasName) &&
+               AliasQualifiedName.drop_back(AliasName.size()).ends_with("::"));
         llvm::StringRef AliasNs =
-            StringRef(AliasQualifiedName).drop_back(AliasName.size() + 2);
-        if (!llvm::StringRef(OldNs).starts_with(AliasNs))
+            AliasQualifiedName.drop_back(AliasName.size() + 2);
+        if (!OldNsBuf.str().starts_with(AliasNs))
           continue;
       }
+      SmallString<128> NameWithAliasNamespaceBuf;
+      {
+        llvm::raw_svector_ostream OS(NameWithAliasNamespaceBuf);
+        OS << AliasName << "::" << FromDeclNameRef;
+      }
       std::string NameWithAliasNamespace =
-          (AliasName + "::" + FromDeclNameRef).str();
+          NameWithAliasNamespaceBuf.str().str();
       if (NameWithAliasNamespace.size() < ReplaceName.size())
         ReplaceName = NameWithAliasNamespace;
     }
@@ -827,8 +864,16 @@ void 
ChangeNamespaceTool::replaceQualifiedSymbolInDeclContext(
     if (isDeclVisibleAtLocation(*Result.SourceManager, Using, DeclCtx, Start)) 
{
       for (const auto *UsingShadow : Using->shadows()) {
         const auto *TargetDecl = UsingShadow->getTargetDecl();
-        if (TargetDecl->getQualifiedNameAsString() ==
-            FromDecl->getQualifiedNameAsString()) {
+
+        SmallString<128> TargetDeclNameBuf, FromDeclNameCheckBuf;
+        {
+          llvm::raw_svector_ostream OS1(TargetDeclNameBuf);
+          TargetDecl->printQualifiedName(OS1);
+          llvm::raw_svector_ostream OS2(FromDeclNameCheckBuf);
+          FromDecl->printQualifiedName(OS2);
+        }
+
+        if (TargetDeclNameBuf.str() == FromDeclNameCheckBuf.str()) {
           ReplaceName = FromDecl->getNameAsString();
           Matched = true;
           break;
@@ -869,7 +914,12 @@ void ChangeNamespaceTool::fixTypeLoc(
   // `hasDeclaration` gives underlying declaration, but if the type is
   // a typedef type, we need to use the typedef type instead.
   auto IsInMovedNs = [&](const NamedDecl *D) {
-    if (!llvm::StringRef(D->getQualifiedNameAsString())
+    SmallString<128> QualifiedNameBuf;
+    {
+      llvm::raw_svector_ostream OS(QualifiedNameBuf);
+      D->printQualifiedName(OS);
+    }
+    if (!llvm::StringRef(QualifiedNameBuf.str())
              .starts_with(OldNamespace + "::"))
       return false;
     auto ExpansionLoc = 
Result.SourceManager->getExpansionLoc(D->getBeginLoc());
@@ -912,12 +962,19 @@ void ChangeNamespaceTool::fixUsingShadowDecl(
   // FIXME: it might not be always accurate to use the first using-decl.
   const NamedDecl *TargetDecl =
       UsingDeclaration->shadow_begin()->getTargetDecl();
-  std::string TargetDeclName = TargetDecl->getQualifiedNameAsString();
+
+  SmallString<128> ReplacementBuf;
+  {
+    llvm::raw_svector_ostream OS(ReplacementBuf);
+    OS << "using ::";
+    TargetDecl->printQualifiedName(OS);
+  }
+
   // FIXME: check if target_decl_name is in moved ns, which doesn't make much
   // sense. If this happens, we need to use name with the new namespace.
   // Use fully qualified name in UsingDecl for now.
-  addReplacementOrDie(Start, End, "using ::" + TargetDeclName,
-                      *Result.SourceManager, &FileToReplacements);
+  addReplacementOrDie(Start, End, ReplacementBuf.str(), *Result.SourceManager,
+                      &FileToReplacements);
 }
 
 void ChangeNamespaceTool::fixDeclRefExpr(
diff --git a/clang-tools-extra/clang-doc/Serialize.cpp 
b/clang-tools-extra/clang-doc/Serialize.cpp
index e490ae1d08bfb..546bbec374aae 100644
--- a/clang-tools-extra/clang-doc/Serialize.cpp
+++ b/clang-tools-extra/clang-doc/Serialize.cpp
@@ -648,24 +648,36 @@ void Serializer::parseBases(RecordInfo &I, const 
CXXRecordDecl *D) {
       const TemplateDecl *D = Ty->getTemplateName().getAsTemplateDecl();
       LocalParents.emplace_back(getUSRForDecl(D), B.getType().getAsString(),
                                 InfoType::IT_record, 
B.getType().getAsString());
-    } else if (const RecordDecl *P = getRecordDeclForType(B.getType()))
-      LocalParents.emplace_back(
-          getUSRForDecl(P), P->getNameAsString(), InfoType::IT_record,
-          P->getQualifiedNameAsString(), internString(getInfoRelativePath(P)));
-    else
+    } else if (const RecordDecl *P = getRecordDeclForType(B.getType())) {
+      SmallString<128> QualifiedNameBuf;
+      {
+        llvm::raw_svector_ostream OS(QualifiedNameBuf);
+        P->printQualifiedName(OS);
+      }
+      LocalParents.emplace_back(getUSRForDecl(P), P->getNameAsString(),
+                                InfoType::IT_record, QualifiedNameBuf.str(),
+                                internString(getInfoRelativePath(P)));
+    } else {
       LocalParents.emplace_back(SymbolID(), B.getType().getAsString());
+    }
   }
   if (!LocalParents.empty())
     I.Parents = allocateArray<Reference>(LocalParents, getTransientArena());
 
   llvm::SmallVector<Reference, 4> LocalVirtualParents;
   for (const CXXBaseSpecifier &B : D->vbases()) {
-    if (const RecordDecl *P = getRecordDeclForType(B.getType()))
+    if (const RecordDecl *P = getRecordDeclForType(B.getType())) {
+      SmallString<128> QualifiedNameBuf;
+      {
+        llvm::raw_svector_ostream OS(QualifiedNameBuf);
+        P->printQualifiedName(OS);
+      }
       LocalVirtualParents.emplace_back(
           getUSRForDecl(P), P->getNameAsString(), InfoType::IT_record,
-          P->getQualifiedNameAsString(), internString(getInfoRelativePath(P)));
-    else
+          QualifiedNameBuf.str(), internString(getInfoRelativePath(P)));
+    } else {
       LocalVirtualParents.emplace_back(SymbolID(), B.getType().getAsString());
+    }
   }
   if (!LocalVirtualParents.empty())
     I.VirtualParents =
@@ -678,27 +690,34 @@ void Serializer::populateParentNamespaces(
     bool &IsInAnonymousNamespace) {
   const DeclContext *DC = D->getDeclContext();
   do {
+    SmallString<128> QualifiedNameBuf;
+    {
+      llvm::raw_svector_ostream OS(QualifiedNameBuf);
+      if (const auto *N = dyn_cast<NamedDecl>(DC))
+        N->printQualifiedName(OS);
+    }
+    llvm::StringRef QualifiedName = QualifiedNameBuf.str();
+
     if (const auto *N = dyn_cast<NamespaceDecl>(DC)) {
       std::string Namespace;
       if (N->isAnonymousNamespace()) {
         Namespace = "@nonymous_namespace";
         IsInAnonymousNamespace = true;
-      } else
+      } else {
         Namespace = N->getNameAsString();
+      }
       Namespaces.emplace_back(getUSRForDecl(N), Namespace,
-                              InfoType::IT_namespace,
-                              N->getQualifiedNameAsString());
-    } else if (const auto *N = dyn_cast<RecordDecl>(DC))
+                              InfoType::IT_namespace, QualifiedName);
+    } else if (const auto *N = dyn_cast<RecordDecl>(DC)) {
       Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
-                              InfoType::IT_record,
-                              N->getQualifiedNameAsString());
-    else if (const auto *N = dyn_cast<FunctionDecl>(DC))
+                              InfoType::IT_record, QualifiedName);
+    } else if (const auto *N = dyn_cast<FunctionDecl>(DC)) {
       Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
-                              InfoType::IT_function,
-                              N->getQualifiedNameAsString());
-    else if (const auto *N = dyn_cast<EnumDecl>(DC))
+                              InfoType::IT_function, QualifiedName);
+    } else if (const auto *N = dyn_cast<EnumDecl>(DC)) {
       Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
-                              InfoType::IT_enum, 
N->getQualifiedNameAsString());
+                              InfoType::IT_enum, QualifiedName);
+    }
   } while ((DC = DC->getParent()));
   // The global namespace should be added to the list of namespaces if the decl
   // corresponds to a Record and if it doesn't have any namespace (because this
@@ -1064,10 +1083,15 @@ void Serializer::parseFriends(RecordInfo &RI, const 
CXXRecordDecl *D) {
                                         FuncDecl->getLangOpts());
     }
 
-    F.Ref =
-        Reference(getUSRForDecl(ActualDecl), ActualDecl->getNameAsString(),
-                  InfoType::IT_default, ActualDecl->getQualifiedNameAsString(),
-                  getInfoRelativePath(ActualDecl));
+    SmallString<128> QualifiedNameBuf;
+    {
+      llvm::raw_svector_ostream OS(QualifiedNameBuf);
+      ActualDecl->printQualifiedName(OS);
+    }
+
+    F.Ref = Reference(getUSRForDecl(ActualDecl), ActualDecl->getNameAsString(),
+                      InfoType::IT_default, QualifiedNameBuf.str(),
+                      getInfoRelativePath(ActualDecl));
 
     populateMemberTypeInfo(F, ActualDecl);
     LocalFriends.push_back(std::move(F));
@@ -1195,9 +1219,15 @@ std::pair<Info *, Info *> Serializer::emitInfo(const 
CXXMethodDecl *D,
     Parent = D->getParent();
 
   SymbolID ParentUSR = getUSRForDecl(Parent);
-  Func->Parent =
-      Reference{ParentUSR, Parent->getNameAsString(), InfoType::IT_record,
-                Parent->getQualifiedNameAsString()};
+
+  SmallString<128> QualifiedNameBuf;
+  {
+    llvm::raw_svector_ostream OS(QualifiedNameBuf);
+    Parent->printQualifiedName(OS);
+  }
+
+  Func->Parent = Reference{ParentUSR, Parent->getNameAsString(),
+                           InfoType::IT_record, QualifiedNameBuf.str()};
   Func->Access = D->getAccess();
 
   // Info is wrapped in its parent scope so is returned in the second position.
diff --git a/clang-tools-extra/clang-move/Move.cpp 
b/clang-tools-extra/clang-move/Move.cpp
index 1f966b3119620..58801e7058b8c 100644
--- a/clang-tools-extra/clang-move/Move.cpp
+++ b/clang-tools-extra/clang-move/Move.cpp
@@ -882,7 +882,12 @@ void ClangMoveTool::onEndOfTranslationUnit() {
     for (const auto *Decl : UnremovedDeclsInOldHeader) {
       auto Kind = Decl->getKind();
       bool Templated = Decl->isTemplated();
-      const std::string QualifiedName = Decl->getQualifiedNameAsString();
+      SmallString<128> QualifiedNameBuf;
+      {
+        llvm::raw_svector_ostream OS(QualifiedNameBuf);
+        Decl->printQualifiedName(OS);
+      }
+      llvm::StringRef QualifiedName = QualifiedNameBuf.str();
       if (Kind == Decl::Kind::Var)
         Reporter->reportDeclaration(QualifiedName, "Variable", Templated);
       else if (Kind == Decl::Kind::Function ||
diff --git 
a/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
index a78af8aa2fea3..3d2604fa15932 100644
--- 
a/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
+++ 
b/clang-tools-extra/clang-tidy/bugprone/CapturingThisInMemberVariableCheck.cpp
@@ -129,11 +129,16 @@ void CapturingThisInMemberVariableCheck::check(
   } else if (const auto *Bind = Result.Nodes.getNodeAs<CallExpr>("bind")) {
     const auto *Callee = Result.Nodes.getNodeAs<FunctionDecl>("callee");
     assert(Callee);
+    SmallString<128> Buf;
+    {
+      llvm::raw_svector_ostream OS(Buf);
+      Callee->printQualifiedName(OS);
+    }
     diag(Bind->getBeginLoc(),
          "'this' captured by a '%0' call and stored in a class member "
          "variable; disable implicit class copying/moving to prevent potential 
"
          "use-after-free")
-        << Callee->getQualifiedNameAsString();
+        << Buf.str();
   }
 
   const auto *Field = Result.Nodes.getNodeAs<FieldDecl>("field");
diff --git a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
index c95ad2beed3a9..e699c48b0bb64 100644
--- a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp
@@ -170,9 +170,14 @@ void DanglingHandleCheck::registerMatchers(MatchFinder 
*Finder) {
 
 void DanglingHandleCheck::check(const MatchFinder::MatchResult &Result) {
   auto *Handle = Result.Nodes.getNodeAs<CXXRecordDecl>("handle");
+  SmallString<128> Buf;
+  {
+    llvm::raw_svector_ostream OS(Buf);
+    Handle->printQualifiedName(OS);
+  }
   diag(Result.Nodes.getNodeAs<Stmt>("bad_stmt")->getBeginLoc(),
        "%0 outlives its value")
-      << Handle->getQualifiedNameAsString();
+      << Buf.str();
 }
 
 } // namespace clang::tidy::bugprone
diff --git 
a/clang-tools-extra/clang-tidy/bugprone/DerivedMethodShadowingBaseMethodCheck.cpp
 
b/clang-tools-extra/clang-tidy/bugprone/DerivedMethodShadowingBaseMethodCheck.cpp
index 904685cb8416d..81f654ecd8c8e 100644
--- 
a/clang-tools-extra/clang-tidy/bugprone/DerivedMethodShadowingBaseMethodCheck.cpp
+++ 
b/clang-tools-extra/clang-tidy/bugprone/DerivedMethodShadowingBaseMethodCheck.cpp
@@ -119,9 +119,15 @@ void DerivedMethodShadowingBaseMethodCheck::check(
   if (!ShadowingMethod || !DerivedClass || !BaseMethod)
     llvm_unreachable("Required binding not found");
 
+  SmallString<128> Buf;
+  {
+    llvm::raw_svector_ostream OS(Buf);
+    ShadowingMethod->printQualifiedName(OS);
+  }
+
   diag(ShadowingMethod->getBeginLoc(),
        "'%0' shadows method with the same name in class %1")
-      << ShadowingMethod->getQualifiedNameAsString() << 
BaseMethod->getParent();
+      << Buf.str() << BaseMethod->getParent();
   diag(BaseMethod->getBeginLoc(), "previous definition of %0 is here",
        DiagnosticIDs::Note)
       << ShadowingMethod;
diff --git a/clang-tools-extra/clang-tidy/bugprone/StandaloneEmptyCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/StandaloneEmptyCheck.cpp
index 1d72f3e9f387b..907295e4cb5ca 100644
--- a/clang-tools-extra/clang-tidy/bugprone/StandaloneEmptyCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/StandaloneEmptyCheck.cpp
@@ -183,6 +183,12 @@ void StandaloneEmptyCheck::check(const 
MatchFinder::MatchResult &Result) {
         });
 
     const bool HasClear = !Candidates.empty();
+    SmallString<128> Buf;
+    {
+      llvm::raw_svector_ostream OS(Buf);
+      dyn_cast<NamedDecl>(NonMemberCall->getCalleeDecl())
+          ->printQualifiedName(OS);
+    }
 
     if (HasClear) {
       const auto *Clear = cast<CXXMethodDecl>(Candidates.at(0));
@@ -199,16 +205,13 @@ void StandaloneEmptyCheck::check(const 
MatchFinder::MatchResult &Result) {
             SourceRange(NonMemberLoc, NonMemberEndLoc);
         diag(NonMemberLoc,
              "ignoring the result of '%0'; did you mean 'clear()'?")
-            << dyn_cast<NamedDecl>(NonMemberCall->getCalleeDecl())
-                   ->getQualifiedNameAsString()
+            << Buf.str()
             << FixItHint::CreateReplacement(ReplacementRange, ReplacementText);
         return;
       }
     }
 
-    diag(NonMemberLoc, "ignoring the result of '%0'")
-        << dyn_cast<NamedDecl>(NonMemberCall->getCalleeDecl())
-               ->getQualifiedNameAsString();
+    diag(NonMemberLoc, "ignoring the result of '%0'") << Buf.str();
   }
 }
 
diff --git a/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp 
b/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
index 07dc77b5dee0a..536526744038b 100644
--- a/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
@@ -249,12 +249,23 @@ void VirtualNearMissCheck::check(const 
MatchFinder::MatchResult &Result) {
 
           const bool ApplyFix = !BaseMD->isTemplateInstantiation() &&
                                 !DerivedMD->isTemplateInstantiation();
+          SmallString<128> DerivedNameBuf;
+          {
+            ll...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/218264
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to