Manna created this revision.
Manna added reviewers: tahonermann, aaron.ballman.
Herald added subscribers: steakhal, manas, ASDenysPetrov, martong, dkrupp, 
donat.nagy, Szelethus, a.sidorin, baloghadamsoftware, kristof.beyls.
Herald added a reviewer: NoQ.
Herald added a project: All.
Manna requested review of this revision.
Herald added a project: clang.

Reported by Coverity:

AUTO_CAUSES_COPY
Unnecessary object copies can affect performance

1. Inside "SemaInit.cpp" file, in 
isVarOnPath(llvm::​SmallVectorImpl<<unnamed>::​IndirectLocalPathEntry> &, 
clang::​VarDecl *): Using the auto keyword without an & causes the copy of an 
object of type IndirectLocalPathEntry

2. Inside "ODRHash.cpp" file, in 
clang::​ODRHash::​AddCXXRecordDecl(clang::​CXXRecordDecl const *): Using the 
auto keyword without an & causes the copy of an object of type CXXBaseSpecifier.

3. Inside "CGExpr.cpp" file, in 
clang::​CodeGen::​CodeGenFunction::​EmitCfiCheckFail(): Using the auto keyword 
without an & causes the copy of an object of type pair.

4. Inside "ASTReader.cpp" file, in clang::​ASTReader::​finishPendingActions(): 
Using the auto keyword without an & causes the copy of an object of type pair.

5. Inside "ExprEngine.cpp" file, in 
clang::​ento::​ExprEngine::​removeDead(clang::​ento::​ExplodedNode *, 
clang::​ento::​ExplodedNodeSet &, clang::​Stmt const *, clang::​LocationContext 
const *, clang::​Stmt const *, clang::​ProgramPoint::​Kind): Using the auto 
keyword without an & causes the copy of an object of type pair.

6. Inside "CGVTables.cpp" file, *in 
clang::​CodeGen::​CodeGenModule::​EmitVTableTypeMetadata(clang::​CXXRecordDecl 
const *, llvm::​GlobalVariable *, clang::​VTableLayout const &): Using the auto 
keyword without an & causes the copy of an object of type pair.

7. Inside "ExprConstant.cpp" file, in EvaluateArgs(llvm::​ArrayRef<clang::​Expr 
const *>, <unnamed>::​CallRef, <unnamed>::​EvalInfo &, clang::​FunctionDecl 
const *, bool): Using the auto keyword without an & causes the copy of an 
object of type ParamIdx.

8. Inside "ARM.cpp" file, in 
clang::​targets::​ARMTargetInfo::​initFeatureMap(llvm::​StringMap<bool, 
llvm::​MallocAllocator> &, clang::​DiagnosticsEngine &, llvm::​StringRef, 
std::​vector<std::​basic_string<char, std::​char_traits<char>, 
std::​allocator<char>>, std::​allocator<std::​basic_string<char, 
std::​char_traits<char>, std::​allocator<char>>>> const &): Using the auto 
keyword without an & causes the copy of an object of type StringRef.

9. Inside "Tokens.cpp" file, in 
clang::​syntax::​TokenBuffer::​dumpForTests[abi:cxx11](): Using the auto 
keyword without an & causes the copy of an object of type DenseMapPair.

10. Inside "TargetID.cpp" file, in 
clang::​getCanonicalTargetID[abi:cxx11](llvm::​StringRef, 
llvm::​StringMap<bool, llvm::​MallocAllocator> 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/D148639

Files:
  clang/lib/AST/ExprConstant.cpp
  clang/lib/AST/ODRHash.cpp
  clang/lib/Basic/TargetID.cpp
  clang/lib/Basic/Targets/ARM.cpp
  clang/lib/CodeGen/CGExpr.cpp
  clang/lib/CodeGen/CGVTables.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Serialization/ASTReader.cpp
  clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
  clang/lib/Tooling/Syntax/Tokens.cpp

Index: clang/lib/Tooling/Syntax/Tokens.cpp
===================================================================
--- clang/lib/Tooling/Syntax/Tokens.cpp
+++ clang/lib/Tooling/Syntax/Tokens.cpp
@@ -986,7 +986,7 @@
   OS << "\n";
 
   std::vector<FileID> Keys;
-  for (auto F : Files)
+  for (const auto &F : Files)
     Keys.push_back(F.first);
   llvm::sort(Keys);
 
Index: clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -1050,7 +1050,7 @@
   const StackFrameContext *SFC = LC ? LC->getStackFrame() : nullptr;
   SymbolReaper SymReaper(SFC, ReferenceStmt, SymMgr, getStoreManager());
 
-  for (auto I : CleanedState->get<ObjectsUnderConstruction>()) {
+  for (const auto &I : CleanedState->get<ObjectsUnderConstruction>()) {
     if (SymbolRef Sym = I.second.getAsSymbol())
       SymReaper.markLive(Sym);
     if (const MemRegion *MR = I.second.getAsRegion())
Index: clang/lib/Serialization/ASTReader.cpp
===================================================================
--- clang/lib/Serialization/ASTReader.cpp
+++ clang/lib/Serialization/ASTReader.cpp
@@ -9409,7 +9409,7 @@
           /*ErrorOnTagTypeMismatch =*/true);
       if (Ctx.IsEquivalent(ExtensionsPair.first, ExtensionsPair.second)) {
         // Merge redeclared ivars with their predecessors.
-        for (auto IvarPair : DuplicateIvars) {
+        for (const auto &IvarPair : DuplicateIvars) {
           ObjCIvarDecl *Ivar = IvarPair.first, *PrevIvar = IvarPair.second;
           // Change semantic DeclContext but keep the lexical one.
           Ivar->setDeclContextsImpl(PrevIvar->getDeclContext(),
Index: clang/lib/Sema/SemaInit.cpp
===================================================================
--- clang/lib/Sema/SemaInit.cpp
+++ clang/lib/Sema/SemaInit.cpp
@@ -7168,7 +7168,7 @@
 }
 
 static bool isVarOnPath(IndirectLocalPath &Path, VarDecl *VD) {
-  for (auto E : Path)
+  for (const auto &E : Path)
     if (E.Kind == IndirectLocalPathEntry::VarInit && E.D == VD)
       return true;
   return false;
Index: clang/lib/CodeGen/CGVTables.cpp
===================================================================
--- clang/lib/CodeGen/CGVTables.cpp
+++ clang/lib/CodeGen/CGVTables.cpp
@@ -1326,7 +1326,7 @@
   });
 
   ArrayRef<VTableComponent> Comps = VTLayout.vtable_components();
-  for (auto AP : AddressPoints) {
+  for (const auto &AP : AddressPoints) {
     // Create type metadata for the address point.
     AddVTableTypeMetadata(VTable, ComponentWidth * AP.second, AP.first);
 
Index: clang/lib/CodeGen/CGExpr.cpp
===================================================================
--- clang/lib/CodeGen/CGExpr.cpp
+++ clang/lib/CodeGen/CGExpr.cpp
@@ -3545,7 +3545,7 @@
       {CFITCK_ICall, SanitizerKind::CFIICall}};
 
   SmallVector<std::pair<llvm::Value *, SanitizerMask>, 5> Checks;
-  for (auto CheckKindMaskPair : CheckKinds) {
+  for (const auto &CheckKindMaskPair : CheckKinds) {
     int Kind = CheckKindMaskPair.first;
     SanitizerMask Mask = CheckKindMaskPair.second;
     llvm::Value *Cond =
Index: clang/lib/Basic/Targets/ARM.cpp
===================================================================
--- clang/lib/Basic/Targets/ARM.cpp
+++ clang/lib/Basic/Targets/ARM.cpp
@@ -460,7 +460,7 @@
   uint64_t Extensions = llvm::ARM::getDefaultExtensions(CPU, Arch);
   llvm::ARM::getExtensionFeatures(Extensions, TargetFeatures);
 
-  for (auto Feature : TargetFeatures)
+  for (const auto &Feature : TargetFeatures)
     if (Feature[0] == '+')
       Features[Feature.drop_front(1)] = true;
 
Index: clang/lib/Basic/TargetID.cpp
===================================================================
--- clang/lib/Basic/TargetID.cpp
+++ clang/lib/Basic/TargetID.cpp
@@ -133,7 +133,7 @@
   std::map<const llvm::StringRef, bool> OrderedMap;
   for (const auto &F : Features)
     OrderedMap[F.first()] = F.second;
-  for (auto F : OrderedMap)
+  for (const auto &F : OrderedMap)
     TargetID = TargetID + ':' + F.first.str() + (F.second ? "+" : "-");
   return TargetID;
 }
Index: clang/lib/AST/ODRHash.cpp
===================================================================
--- clang/lib/AST/ODRHash.cpp
+++ clang/lib/AST/ODRHash.cpp
@@ -594,7 +594,7 @@
 
   ID.AddInteger(Record->getNumBases());
   auto Bases = Record->bases();
-  for (auto Base : Bases) {
+  for (const auto &Base : Bases) {
     AddQualType(Base.getType());
     ID.AddInteger(Base.isVirtual());
     ID.AddInteger(Base.getAccessSpecifierAsWritten());
Index: clang/lib/AST/ExprConstant.cpp
===================================================================
--- clang/lib/AST/ExprConstant.cpp
+++ clang/lib/AST/ExprConstant.cpp
@@ -6114,7 +6114,7 @@
         ForbiddenNullArgs.set();
         break;
       } else
-        for (auto Idx : Attr->args()) {
+        for (const auto &Idx : Attr->args()) {
           unsigned ASTIdx = Idx.getASTIndex();
           if (ASTIdx >= Args.size())
             continue;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to