From 38ecb9767c1485abe0eb210ceeb827a884bc55c9 Mon Sep 17 00:00:00 2001 From: "Manna, Soumi" Date: Mon, 24 Apr 2023 14:16:32 -0700 Subject: [PATCH] [NFC][clang] Fix Coverity bugs with AUTO_CAUSES_COPY Reported by Coverity: AUTO_CAUSES_COPY Unnecessary object copies can affect performance. 1. Inside "ExtractAPIVisitor.h" file, in clang::extractapi::impl::ExtractAPIVisitorBase<::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 ::Intrinsic::Intrinsic(llvm::Record *, llvm::StringRef, llvm::StringRef, ::TypeSpec, ::TypeSpec, ::ClassKind, llvm::ListInit *, ::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 ::MSRTTIBuilder::getClassHierarchyDescriptor(): Using the auto keyword without an & causes the copy of an object of type MSRTTIClass. 4. 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. 5. 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. 6. Inside "ComputeDependence.cpp" file, in clang::computeDependence(clang::DesignatedInitExpr *): Using the auto keyword without an & causes the copy of an object of type Designator. 7. Inside "Format.cpp" file, In clang::format::affectsRange(llvm::ArrayRef, unsigned int, unsigned int): Using the auto keyword without an & causes the copy of an object of type Range. Reviewed By: tahonermann Differential Revision: https://reviews.llvm.org/D149074 --- clang/include/clang/ExtractAPI/ExtractAPIVisitor.h | 2 +- clang/lib/AST/ComputeDependence.cpp | 2 +- clang/lib/CodeGen/CGGPUBuiltin.cpp | 2 +- clang/lib/CodeGen/MicrosoftCXXABI.cpp | 2 +- clang/lib/Format/Format.cpp | 2 +- clang/lib/Sema/SemaDeclAttr.cpp | 2 +- clang/utils/TableGen/NeonEmitter.cpp | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h b/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h index 57f2c41..8b3721a 100644 --- a/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h +++ b/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h @@ -179,7 +179,7 @@ bool ExtractAPIVisitorBase::VisitFunctionDecl( return true; // Skip methods in records. - for (auto P : Context.getParents(*Method)) { + for (const auto &P : Context.getParents(*Method)) { if (P.template get()) return true; } diff --git a/clang/lib/AST/ComputeDependence.cpp b/clang/lib/AST/ComputeDependence.cpp index c561f04..5a301c1 100644 --- a/clang/lib/AST/ComputeDependence.cpp +++ b/clang/lib/AST/ComputeDependence.cpp @@ -663,7 +663,7 @@ ExprDependence clang::computeDependence(GenericSelectionExpr *E, 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(); diff --git a/clang/lib/CodeGen/CGGPUBuiltin.cpp b/clang/lib/CodeGen/CGGPUBuiltin.cpp index c39e0cc..1183c2d 100644 --- a/clang/lib/CodeGen/CGGPUBuiltin.cpp +++ b/clang/lib/CodeGen/CGGPUBuiltin.cpp @@ -189,7 +189,7 @@ RValue CodeGenFunction::EmitAMDGPUDevicePrintfCallExpr(const CallExpr *E) { /* ParamsToSkip = */ 0); SmallVector 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"); diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index c521812..e5a2b35 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp @@ -3757,7 +3757,7 @@ llvm::GlobalVariable *MSRTTIBuilder::getClassHierarchyDescriptor() { 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 diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 087ac8f..dbab367 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -2806,7 +2806,7 @@ struct JavaImportDirective { // Determines whether 'Ranges' intersects with ('Start', 'End'). static bool affectsRange(ArrayRef 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; diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 27cfde2..2517dd5 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -447,7 +447,7 @@ static bool threadSafetyCheckIsSmartPointer(Sema &S, const RecordType* RT) { if (!CXXRecord) return false; - for (auto BaseSpecifier : CXXRecord->bases()) { + for (const auto &BaseSpecifier : CXXRecord->bases()) { if (!foundStarOperator) foundStarOperator = IsOverloadedOperatorPresent( BaseSpecifier.getType()->getAsRecordDecl(), OO_Star); diff --git a/clang/utils/TableGen/NeonEmitter.cpp b/clang/utils/TableGen/NeonEmitter.cpp index 8f46b08..51bb774 100644 --- a/clang/utils/TableGen/NeonEmitter.cpp +++ b/clang/utils/TableGen/NeonEmitter.cpp @@ -389,7 +389,7 @@ public: 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. -- 2.7.4