[PATCH] D147708: [NFC][clang] Fix static analyzer tool remarks about large copies by values

Soumi Manna via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 6 07:00:32 PDT 2023


Manna created this revision.
Manna added reviewers: erichkeane, aaron.ballman.
Herald added subscribers: manas, ASDenysPetrov, dkrupp, donat.nagy, Szelethus, arphaman, a.sidorin, baloghadamsoftware.
Herald added a project: All.
Manna requested review of this revision.
Herald added a project: clang.

Reported by 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 "SemaConcept.cpp" file, in subsumes<clang::​Sema::​MaybeEmitAmbiguousAtomicConstraintsDiagnostic(clang::​NamedDecl *, llvm::​ArrayRef<clang::​Expr const *>, clang::​NamedDecl *, llvm::​ArrayRef<clang::​Expr const *>)::​[lambda(clang::​AtomicConstraint const &, clang::​AtomicConstraint const &) (instance 2)]>(llvm::​SmallVector<llvm::​SmallVector<clang::​AtomicConstraint *, 2u>, 4u>, llvm::​SmallVector<llvm::​SmallVector<clang::​AtomicConstraint *, 2u>, 4u>, T1): A large function call parameter exceeding the low threshold is passed by value.

  i. pass_by_value: Passing parameter PDNF of type NormalForm (size 144 bytes) by value, which exceeds the low threshold of 128 bytes. ii. pass_by_value: Passing parameter QCNF of type NormalForm (size 144 bytes) by value, which exceeds the low threshold of 128 bytes.

2. Inside "CodeGenAction.cpp" file, in clang::​reportOptRecordError(llvm::​Error, clang::​DiagnosticsEngine &, clang::​CodeGenOptions): A very large function call parameter exceeding the high threshold is passed by value.

i. pass_by_value: Passing parameter CodeGenOpts of type clang::CodeGenOptions const (size 1560 bytes) by value, which exceeds the high threshold of 512 bytes.

3. Inside "CodeCompleteConsumer.cpp" file, in clang::​PrintingCodeCompleteConsumer::​ProcessCodeCompleteResults(clang::​Sema &, clang::​CodeCompletionContext, clang::​CodeCompletionResult *, unsigned int): A large function call parameter exceeding the low threshold is passed by value.

i. pass_by_value: Passing parameter Context of type clang::CodeCompletionContext (size 200 bytes) by value, which exceeds the low threshold of 128 bytes.

4. Inside "GlobalModuleIndex.cpp" file, in clang::​GlobalModuleIndex::​GlobalModuleIndex(std::​unique_ptr<llvm::​MemoryBuffer, std::​default_delete<llvm::​MemoryBuffer>>, llvm::​BitstreamCursor): A large function call parameter exceeding the medium threshold is passed by value.

i. pass_by_value: Passing parameter Cursor of type llvm::BitstreamCursor (size 352 bytes) by value, which exceeds the medium threshold of 256 bytes.

5. 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.

6. 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.

i. pass_by_value: Passing parameter CodeGenOpts of type clang::CodeGenOptions const (size 2008 bytes) by value, which exceeds the high threshold of 512 bytes.

7. Inside "SemaCodeComplete.cpp" file, in HandleCodeCompleteResults(clang::​Sema *, clang::​CodeCompleteConsumer *, clang::​CodeCompletionContext, clang::​CodeCompletionResult *, unsigned int): A large function call parameter exceeding the low threshold is passed by value.

i. pass_by_value: Passing parameter Context of type clang::CodeCompletionContext (size 200 bytes) by value, which exceeds the low threshold of 128 bytes.

8. 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.

9. Inside "ASTUnit.cpp" file, in <unnamed>::​AugmentedCodeCompleteConsumer::​ProcessCodeCompleteResults(clang::​Sema &, clang::​CodeCompletionContext, clang::​CodeCompletionResult *, unsigned int): A large function call parameter exceeding the low threshold is passed by value.

i. pass_by_value: Passing parameter Context of type clang::CodeCompletionContext (size 200 bytes) by value, which exceeds the low threshold of 128 bytes.

10. Inside "SemaConcept.cpp" file, in <unnamed>::​SatisfactionStackRAII::​SatisfactionStackRAII(clang::​Sema &, clang::​NamedDecl const *, llvm::​FoldingSetNodeID): A large function call parameter exceeding the low threshold is passed by value.

i. pass_by_value: Passing parameter FSNID of type llvm::FoldingSetNodeID (size 144 bytes) by value, which exceeds the low threshold of 128 bytes.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D147708

Files:
  clang/lib/CodeGen/CGGPUBuiltin.cpp
  clang/lib/CodeGen/CGNonTrivialStruct.cpp
  clang/lib/CodeGen/CodeGenAction.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/lib/Frontend/ASTUnit.cpp
  clang/lib/Sema/CodeCompleteConsumer.cpp
  clang/lib/Sema/SemaCodeComplete.cpp
  clang/lib/Sema/SemaConcept.cpp
  clang/lib/Sema/SemaInit.cpp
  clang/lib/Serialization/GlobalModuleIndex.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147708.511398.patch
Type: text/x-patch
Size: 6211 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230406/99bcd514/attachment.bin>


More information about the cfe-commits mailing list