Author: Manna, Soumi Date: 2023-04-28T12:17:10-07:00 New Revision: 4faf3fcf3fb253cb3e68d6ae7b124e7a39f9ccff
URL: https://github.com/llvm/llvm-project/commit/4faf3fcf3fb253cb3e68d6ae7b124e7a39f9ccff DIFF: https://github.com/llvm/llvm-project/commit/4faf3fcf3fb253cb3e68d6ae7b124e7a39f9ccff.diff LOG: [NFC][CLANG] Fix coverity remarks about large copy by values Reported By Static Analyzer Tool, Coverity: Big parameter passed by value Copying large values is inefficient, consider passing by reference; Low, medium, and high size thresholds for detection can be adjusted. 1. Inside "CodeGenModule.cpp" file, in clang::CodeGen::CodeGenModule::EmitBackendOptionsMetadata(clang::CodeGenOptions): A very large function call parameter exceeding the high threshold is passed by value. pass_by_value: Passing parameter CodeGenOpts of type clang::CodeGenOptions const (size 2168 bytes) by value, which exceeds the high threshold of 512 bytes. 2. Inside "SemaType.cpp" file, in IsNoDerefableChunk(clang::DeclaratorChunk): A large function call parameter exceeding the low threshold is passed by value. pass_by_value: Passing parameter Chunk of type clang::DeclaratorChunk (size 176 bytes) by value, which exceeds the low threshold of 128 bytes. 3. Inside "CGNonTrivialStruct.cpp" file, in <unnamed>::getParamAddrs<1ull, <0ull...>>(std::integer_sequence<unsigned long long, T2...>, std::array<clang::CharUnits, T1>, clang::CodeGen::FunctionArgList, clang::CodeGen::CodeGenFunction *): A large function call parameter exceeding the low threshold is passed by value. .i. pass_by_value: Passing parameter Args of type clang::CodeGen::FunctionArgList (size 144 bytes) by value, which exceeds the low threshold of 128 bytes. 4. Inside "CGGPUBuiltin.cpp" file, in <unnamed>::containsNonScalarVarargs(clang::CodeGen::CodeGenFunction *, clang::CodeGen::CallArgList): A very large function call parameter exceeding the high threshold is passed by value. i. pass_by_value: Passing parameter Args of type clang::CodeGen::CallArgList (size 1176 bytes) by value, which exceeds the high threshold of 512 bytes. Reviewed By: tahonermann Differential Revision: https://reviews.llvm.org/D149163 Added: Modified: clang/lib/CodeGen/CGGPUBuiltin.cpp clang/lib/CodeGen/CGNonTrivialStruct.cpp clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenModule.h clang/lib/Sema/SemaType.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/CGGPUBuiltin.cpp b/clang/lib/CodeGen/CGGPUBuiltin.cpp index 1183c2d7b5437..8451ebebfc0b7 100644 --- a/clang/lib/CodeGen/CGGPUBuiltin.cpp +++ b/clang/lib/CodeGen/CGGPUBuiltin.cpp @@ -125,7 +125,7 @@ packArgsIntoNVPTXFormatBuffer(CodeGenFunction *CGF, const CallArgList &Args) { } } -bool containsNonScalarVarargs(CodeGenFunction *CGF, CallArgList Args) { +bool containsNonScalarVarargs(CodeGenFunction *CGF, const CallArgList &Args) { return llvm::any_of(llvm::drop_begin(Args), [&](const CallArg &A) { return !A.getRValue(*CGF).isScalar(); }); diff --git a/clang/lib/CodeGen/CGNonTrivialStruct.cpp b/clang/lib/CodeGen/CGNonTrivialStruct.cpp index a10e51b8cb441..98378e1386414 100644 --- a/clang/lib/CodeGen/CGNonTrivialStruct.cpp +++ b/clang/lib/CodeGen/CGNonTrivialStruct.cpp @@ -323,7 +323,7 @@ static const CGFunctionInfo &getFunctionInfo(CodeGenModule &CGM, template <size_t N, size_t... Ints> static std::array<Address, N> getParamAddrs(std::index_sequence<Ints...> IntSeq, std::array<CharUnits, N> Alignments, - FunctionArgList Args, + const FunctionArgList &Args, CodeGenFunction *CGF) { return std::array<Address, N>{ {Address(CGF->Builder.CreateLoad(CGF->GetAddrOfLocalVar(Args[Ints])), diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index b8c45bc226ee1..367f802253e01 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -990,7 +990,7 @@ void CodeGenModule::EmitOpenCLMetadata() { } void CodeGenModule::EmitBackendOptionsMetadata( - const CodeGenOptions CodeGenOpts) { + const CodeGenOptions &CodeGenOpts) { if (getTriple().isRISCV()) { getModule().addModuleFlag(llvm::Module::Min, "SmallDataLimit", CodeGenOpts.SmallDataLimit); diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index 64c2902572376..0a0fdc89202f1 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -1711,7 +1711,7 @@ class CodeGenModule : public CodeGenTypeCache { /// Emit the module flag metadata used to pass options controlling the /// the backend to LLVM. - void EmitBackendOptionsMetadata(const CodeGenOptions CodeGenOpts); + void EmitBackendOptionsMetadata(const CodeGenOptions &CodeGenOpts); /// Emits OpenCL specific Metadata e.g. OpenCL version. void EmitOpenCLMetadata(); diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index be44803947501..7fdfadd9a34d2 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -4553,7 +4553,7 @@ static bool hasOuterPointerLikeChunk(const Declarator &D, unsigned endIndex) { return false; } -static bool IsNoDerefableChunk(DeclaratorChunk Chunk) { +static bool IsNoDerefableChunk(const DeclaratorChunk &Chunk) { return (Chunk.Kind == DeclaratorChunk::Pointer || Chunk.Kind == DeclaratorChunk::Array); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits