[clang-tidy] Avoid C arrays check
authorRoman Lebedev <lebedev.ri@gmail.com>
Wed, 14 Nov 2018 09:01:08 +0000 (09:01 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Wed, 14 Nov 2018 09:01:08 +0000 (09:01 +0000)
commit2634bd599567842385e11d1fd70f5486c166f935
treec13cfe7924c2bba879b708b6e08d87342629610b
parent789cc8170d15c208308c28a24d9f8978ead18a9a
[clang-tidy] Avoid C arrays check

Summary:
[[ https://bugs.llvm.org/show_bug.cgi?id=39224 | PR39224 ]]
As discussed, we can't always do the transform automatically due to that array-to-pointer decay of C array.
In order to detect whether we can do said transform, we'd need to be able to see all usages of said array,
which is, i would say, rather impossible if e.g. it is in the header.
Thus right now no fixit exists.

Exceptions: `extern "C"` code.

References:
* [[ https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#es27-use-stdarray-or-stack_array-for-arrays-on-the-stack | CPPCG ES.27: Use std::array or stack_array for arrays on the stack ]]
* [[ https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#slcon1-prefer-using-stl-array-or-vector-instead-of-a-c-array | CPPCG SL.con.1: Prefer using STL array or vector instead of a C array ]]
* HICPP `4.1.1 Ensure that a function argument does not undergo an array-to-pointer conversion`
* MISRA `5-2-12 An identifier with array type passed as a function argument shall not decay to a pointer`

Reviewers: aaron.ballman, JonasToth, alexfh, hokein, xazax.hun

Reviewed By: JonasToth

Subscribers: Eugene.Zelenko, mgorny, rnkovacs, cfe-commits

Tags: #clang-tools-extra

Differential Revision: https://reviews.llvm.org/D53771

llvm-svn: 346835
13 files changed:
clang-tools-extra/clang-tidy/cppcoreguidelines/CMakeLists.txt
clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp
clang-tools-extra/clang-tidy/hicpp/HICPPTidyModule.cpp
clang-tools-extra/clang-tidy/modernize/AvoidCArraysCheck.cpp [new file with mode: 0644]
clang-tools-extra/clang-tidy/modernize/AvoidCArraysCheck.h [new file with mode: 0644]
clang-tools-extra/clang-tidy/modernize/CMakeLists.txt
clang-tools-extra/clang-tidy/modernize/ModernizeTidyModule.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-avoid-c-arrays.rst [new file with mode: 0644]
clang-tools-extra/docs/clang-tidy/checks/hicpp-avoid-c-arrays.rst [new file with mode: 0644]
clang-tools-extra/docs/clang-tidy/checks/list.rst
clang-tools-extra/docs/clang-tidy/checks/modernize-avoid-c-arrays.rst [new file with mode: 0644]
clang-tools-extra/test/clang-tidy/modernize-avoid-c-arrays.cpp [new file with mode: 0644]