Author: Manna, Soumi
Date: 2023-04-24T14:52:55-07:00
New Revision: 38ecb9767c1485abe0eb210ceeb827a884bc55c9

URL: 
https://github.com/llvm/llvm-project/commit/38ecb9767c1485abe0eb210ceeb827a884bc55c9
DIFF: 
https://github.com/llvm/llvm-project/commit/38ecb9767c1485abe0eb210ceeb827a884bc55c9.diff

LOG: [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<<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 "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<clang::tooling::Range>, 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

Added: 
    

Modified: 
    clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
    clang/lib/AST/ComputeDependence.cpp
    clang/lib/CodeGen/CGGPUBuiltin.cpp
    clang/lib/CodeGen/MicrosoftCXXABI.cpp
    clang/lib/Format/Format.cpp
    clang/lib/Sema/SemaDeclAttr.cpp
    clang/utils/TableGen/NeonEmitter.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h 
b/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
index 57f2c413545c0..8b3721a4d7adb 100644
--- a/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
+++ b/clang/include/clang/ExtractAPI/ExtractAPIVisitor.h
@@ -179,7 +179,7 @@ bool ExtractAPIVisitorBase<Derived>::VisitFunctionDecl(
       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;
     }

diff  --git a/clang/lib/AST/ComputeDependence.cpp 
b/clang/lib/AST/ComputeDependence.cpp
index c561f0462ed05..5a301c10aca6d 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 c39e0cc75f2d3..1183c2d7b5437 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<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");

diff  --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp 
b/clang/lib/CodeGen/MicrosoftCXXABI.cpp
index c5218129b0fb7..e5a2b35c0b396 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 087ac8f627331..dbab367bdb88c 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<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;

diff  --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 27cfde2ed2161..2517dd501efe8 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 8f46b08b1366f..51bb774c6da99 100644
--- a/clang/utils/TableGen/NeonEmitter.cpp
+++ b/clang/utils/TableGen/NeonEmitter.cpp
@@ -389,7 +389,7 @@ class Intrinsic {
       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.


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to