Manna created this revision.
Manna added a reviewer: tahonermann.
Herald added subscribers: kosarev, tpr.
Herald added a reviewer: aaron.ballman.
Herald added a reviewer: ributzka.
Herald added projects: All, clang, clang-format.
Herald added reviewers: rymiel, HazardyKnusperkeks, owenpan, MyDeveloperDay.
Manna requested review of this revision.
Herald added a reviewer: dang.

Reported by Coverity:
AUTO_CAUSES_COPY
Unnecessary object copies can affect performance.

1. Inside "ExtractAPIVisitor.h" file, in 
clang::​extractapi::​impl::​ExtractAPIVisitorBase<<unnamed>::​BatchExtractAPIVisitor>::​VisitFunctionDecl(clang::​FunctionDecl
 const *): Using the auto keyword without an & causes the copy of an object of 
type DynTypedNode.

2. Inside "NeonEmitter.cpp" file, in 
<unnamed>::​Intrinsic::​Intrinsic(llvm::​Record *, llvm::​StringRef, 
llvm::​StringRef, <unnamed>::​TypeSpec, <unnamed>::​TypeSpec, 
<unnamed>::​ClassKind, llvm::​ListInit *, <unnamed>::​NeonEmitter &, 
llvm::​StringRef, llvm::​StringRef, bool, bool): Using the auto keyword without 
an & causes the copy of an object of type Type.

3. Inside "MicrosoftCXXABI.cpp" file, in 
<unnamed>::​MSRTTIBuilder::​getClassHierarchyDescriptor(): Using the auto 
keyword without an & causes the copy of an object of type MSRTTIClass.

4. Inside "Registry.cpp" file, in 
clang::​ast_matchers::​dynamic::​Registry::​getAcceptedCompletionTypes(llvm::​ArrayRef<std::​pair<clang::​ast_matchers::​dynamic::​internal::​MatcherDescriptor
 const *, unsigned int>>): Using the auto keyword without an & causes he copy 
of an object of type ASTNodeKind.

5. Inside "Tokens.cpp" file, in 
clang::​syntax::​TokenBuffer::​macroExpansions(clang::​FileID): Using the auto 
keyword without an & causes he copy of an object of type Mapping.

6. Inside "CGGPUBuiltin.cpp" file, in 
clang::​CodeGen::​CodeGenFunction::​EmitAMDGPUDevicePrintfCallExpr(clang::​CallExpr
 const *): Using the auto keyword without an & causes the copy of an object of 
type CallArg.

7. Inside "SemaDeclAttr.cpp" file, in 
threadSafetyCheckIsSmartPointer(clang::​Sema &, clang::​RecordType const *): 
Using the auto keyword without an & causes the copy of an object of type 
CXXBaseSpecifier.

8. Inside "ComputeDependence.cpp" file, in 
clang::​computeDependence(clang::​DesignatedInitExpr *): Using the auto keyword 
without an & causes the copy of an object of type Designator.

9. Inside "Format.cpp" file, In 
clang::​format::​affectsRange(llvm::​ArrayRef<clang::​tooling::​Range>, 
unsigned int, unsigned int): Using the auto keyword without an & causes the 
copy of an object of type Range.

10. Inside "SemaLookup.cpp" file, In 
clang::​TypoCorrectionConsumer::​addNamespaces(llvm::​MapVector<clang::​NamespaceDecl
 *, bool, llvm::​DenseMap<clang::​NamespaceDecl *, unsigned int, 
llvm::​DenseMapInfo<clang::​NamespaceDecl *, void>, 
llvm::​detail::​DenseMapPair<clang::​NamespaceDecl *, unsigned int>>, 
std::​vector<std::​pair<clang::​NamespaceDecl *, bool>, 
std::​allocator<std::​pair<clang::​NamespaceDecl *, bool>>>> const &): Using 
the auto keyword without an & causes  the copy of an object of type pair.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D149074

Files:
  clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
  clang/lib/AST/ComputeDependence.cpp
  clang/lib/ASTMatchers/Dynamic/Registry.cpp
  clang/lib/CodeGen/CGGPUBuiltin.cpp
  clang/lib/CodeGen/MicrosoftCXXABI.cpp
  clang/lib/Format/Format.cpp
  clang/lib/Sema/SemaDeclAttr.cpp
  clang/lib/Sema/SemaLookup.cpp
  clang/lib/Tooling/Syntax/Tokens.cpp
  clang/utils/TableGen/NeonEmitter.cpp

Index: clang/utils/TableGen/NeonEmitter.cpp
===================================================================
--- clang/utils/TableGen/NeonEmitter.cpp
+++ clang/utils/TableGen/NeonEmitter.cpp
@@ -389,7 +389,7 @@
       Mods = getNextModifiers(Proto, Pos);
     }
 
-    for (auto Type : Types) {
+    for (const auto &Type : Types) {
       // If this builtin takes an immediate argument, we need to #define it rather
       // than use a standard declaration, so that SemaChecking can range check
       // the immediate passed by the user.
Index: clang/lib/Tooling/Syntax/Tokens.cpp
===================================================================
--- clang/lib/Tooling/Syntax/Tokens.cpp
+++ clang/lib/Tooling/Syntax/Tokens.cpp
@@ -609,7 +609,7 @@
   auto &File = FileIt->second;
   std::vector<const syntax::Token *> Expansions;
   auto &Spelled = File.SpelledTokens;
-  for (auto Mapping : File.Mappings) {
+  for (const auto &Mapping : File.Mappings) {
     const syntax::Token *Token = &Spelled[Mapping.BeginSpelled];
     if (Token->kind() == tok::TokenKind::identifier)
       Expansions.push_back(Token);
Index: clang/lib/Sema/SemaLookup.cpp
===================================================================
--- clang/lib/Sema/SemaLookup.cpp
+++ clang/lib/Sema/SemaLookup.cpp
@@ -4659,7 +4659,7 @@
     const llvm::MapVector<NamespaceDecl *, bool> &KnownNamespaces) {
   SearchNamespaces = true;
 
-  for (auto KNPair : KnownNamespaces)
+  for (const auto &KNPair : KnownNamespaces)
     Namespaces.addNameSpecifier(KNPair.first);
 
   bool SSIsTemplate = false;
Index: clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- clang/lib/Sema/SemaDeclAttr.cpp
+++ clang/lib/Sema/SemaDeclAttr.cpp
@@ -447,7 +447,7 @@
   if (!CXXRecord)
     return false;
 
-  for (auto BaseSpecifier : CXXRecord->bases()) {
+  for (const auto &BaseSpecifier : CXXRecord->bases()) {
     if (!foundStarOperator)
       foundStarOperator = IsOverloadedOperatorPresent(
           BaseSpecifier.getType()->getAsRecordDecl(), OO_Star);
Index: clang/lib/Format/Format.cpp
===================================================================
--- clang/lib/Format/Format.cpp
+++ clang/lib/Format/Format.cpp
@@ -2806,7 +2806,7 @@
 // Determines whether 'Ranges' intersects with ('Start', 'End').
 static bool affectsRange(ArrayRef<tooling::Range> Ranges, unsigned Start,
                          unsigned End) {
-  for (auto Range : Ranges) {
+  for (const auto &Range : Ranges) {
     if (Range.getOffset() < End &&
         Range.getOffset() + Range.getLength() > Start) {
       return true;
Index: clang/lib/CodeGen/MicrosoftCXXABI.cpp
===================================================================
--- clang/lib/CodeGen/MicrosoftCXXABI.cpp
+++ clang/lib/CodeGen/MicrosoftCXXABI.cpp
@@ -3757,7 +3757,7 @@
   Classes.front().initialize(/*Parent=*/nullptr, /*Specifier=*/nullptr);
   detectAmbiguousBases(Classes);
   int Flags = 0;
-  for (auto Class : Classes) {
+  for (const MSRTTIClass &Class : Classes) {
     if (Class.RD->getNumBases() > 1)
       Flags |= HasBranchingHierarchy;
     // Note: cl.exe does not calculate "HasAmbiguousBases" correctly.  We
Index: clang/lib/CodeGen/CGGPUBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGGPUBuiltin.cpp
+++ clang/lib/CodeGen/CGGPUBuiltin.cpp
@@ -189,7 +189,7 @@
                /* ParamsToSkip = */ 0);
 
   SmallVector<llvm::Value *, 8> Args;
-  for (auto A : CallArgs) {
+  for (const auto &A : CallArgs) {
     // We don't know how to emit non-scalar varargs.
     if (!A.getRValue(*this).isScalar()) {
       CGM.ErrorUnsupported(E, "non-scalar arg to printf");
Index: clang/lib/ASTMatchers/Dynamic/Registry.cpp
===================================================================
--- clang/lib/ASTMatchers/Dynamic/Registry.cpp
+++ clang/lib/ASTMatchers/Dynamic/Registry.cpp
@@ -658,7 +658,7 @@
   // Starting with the above seed of acceptable top-level matcher types, compute
   // the acceptable type set for the argument indicated by each context element.
   std::set<ArgKind> TypeSet;
-  for (auto IT : InitialTypes) {
+  for (const auto &IT : InitialTypes) {
     TypeSet.insert(ArgKind::MakeMatcherArg(IT));
   }
   for (const auto &CtxEntry : Context) {
Index: clang/lib/AST/ComputeDependence.cpp
===================================================================
--- clang/lib/AST/ComputeDependence.cpp
+++ clang/lib/AST/ComputeDependence.cpp
@@ -663,7 +663,7 @@
 
 ExprDependence clang::computeDependence(DesignatedInitExpr *E) {
   auto Deps = E->getInit()->getDependence();
-  for (auto D : E->designators()) {
+  for (const auto &D : E->designators()) {
     auto DesignatorDeps = ExprDependence::None;
     if (D.isArrayDesignator())
       DesignatorDeps |= E->getArrayIndex(D)->getDependence();
Index: clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
===================================================================
--- clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
+++ clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
@@ -179,7 +179,7 @@
       return true;
 
     // Skip methods in records.
-    for (auto P : Context.getParents(*Method)) {
+    for (const auto &P : Context.getParents(*Method)) {
       if (P.template get<CXXRecordDecl>())
         return true;
     }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to