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