This is an archive of the discontinued LLVM Phabricator instance.

[clang-tidy] performance-unnecessary-copy-initialization: Disable structured bindings.
ClosedPublic

Authored by flx on Jul 9 2021, 1:00 PM.

Details

Summary

Structured bindings can currently trigger the check and lead to a wrong
fix. Because the DecompositionDecl itself is not used and the check does not
iterate through its the decl's bindings to verify whether the bindings' holding
vars are used this leads to the whole statement to be deleted.

To support structured bindings properly 3 cases would need to be considered.

  1. All holding vars are not used -> The statement can be deleted.
  2. All holding vars are used as const or not used -> auto can be converted to const auto&.
  3. Neither case is true -> leave unchanged.

In the check we'll have to separate the logic that determines this from the code
that produces the diagnostic and fixes and first determine which of the cases
we're dealing with before creating fixes.

Since this is a bigger refactoring we'll disable structured bindings for now to
prevent incorrect fixes.

Diff Detail

Event Timeline

flx created this revision.Jul 9 2021, 1:00 PM
flx requested review of this revision.Jul 9 2021, 1:00 PM
Herald added a project: Restricted Project. · View Herald TranscriptJul 9 2021, 1:00 PM
Herald added a subscriber: cfe-commits. · View Herald Transcript
ymandel accepted this revision.Jul 12 2021, 5:50 AM
This revision is now accepted and ready to land.Jul 12 2021, 5:50 AM