This is an archive of the discontinued LLVM Phabricator instance.

[clang-tidy] ObjC ARC objects should not trigger performance-unnecessary-value-param
ClosedPublic

Authored by benhamilton on Feb 1 2018, 12:46 PM.

Details

Summary

The following Objective-C code currently incorrectly triggers
clang-tidy's performance-unnecessary-value-param check:

% cat /tmp/performance-unnecessary-value-param-arc.m
void foo(id object) { }

clang-tidy /tmp/performance-unnecessary-value-param-arc.m
-checks=-\*,performance-unnecessary-value-param -- -xobjective-c
-fobjc-abi-version=2 -fobjc-arc
1 warning generated.
/src/llvm/tools/clang/tools/extra/test/clang-tidy/performance-unnecessary-value-param-arc.m:10:13:
warning: the parameter 'object' is copied for each invocation but only
used as a const reference; consider making it a const reference
[performance-unnecessary-value-param]
void foo(id object) { }
         ~~ ^
         const &

This is wrong for a few reasons:

  1. Objective-C doesn't have references, so const & is not going to help
  2. ARC heavily optimizes the "expensive" copy which triggers the warning

This fixes the issue by disabling the warning for non-C++, as well as
disabling it for objects under ARC memory management for
Objective-C++.

Fixes https://bugs.llvm.org/show_bug.cgi?id=32075

Test Plan: New tests added. Ran tests with make -j12 check-clang-tools.

Diff Detail

Repository
rL LLVM

Event Timeline

benhamilton created this revision.Feb 1 2018, 12:46 PM
benhamilton edited the summary of this revision. (Show Details)Feb 1 2018, 12:48 PM
hokein accepted this revision.Feb 2 2018, 1:54 AM

LGTM

This revision is now accepted and ready to land.Feb 2 2018, 1:54 AM
This revision was automatically updated to reflect the committed changes.