[clang-tidy] New check to warn when storing dispatch_once_t in non-static, non-global...
authorStephane Moore <mog@google.com>
Thu, 26 Sep 2019 23:04:59 +0000 (23:04 +0000)
committerStephane Moore <mog@google.com>
Thu, 26 Sep 2019 23:04:59 +0000 (23:04 +0000)
commitaa7d6544c14ce5aa3644a5a07999953c6bc552dc
treec4f58211d7be4adc6df16011867c88ba3db4412a
parent0ab4290e8639747d1b173a59611f020606811c5c
[clang-tidy] New check to warn when storing dispatch_once_t in non-static, non-global storage

Summary:
Creates a new darwin ClangTidy module and adds the darwin-dispatch-once-nonstatic check that warns about dispatch_once_t variables not in static or global storage. This catches a missing static for local variables in e.g. singleton initialization behavior, and also warns on storing dispatch_once_t values in Objective-C instance variables. C/C++ struct/class instances may potentially live in static/global storage, and are ignored for this check.

The osx.API static analysis checker can find the non-static storage use of dispatch_once_t; I thought it useful to also catch this issue in clang-tidy when possible.

Contributed By: mwyman

Reviewers: benhamilton, hokein, stephanemoore, aaron.ballman, gribozavr

Reviewed By: stephanemoore, gribozavr

Subscribers: jkorous, arphaman, kadircet, usaxena95, NoQ, xazax.hun, lebedev.ri, mgorny, cfe-commits

Tags: #clang, #clang-tools-extra

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

llvm-svn: 373028
13 files changed:
clang-tools-extra/clang-tidy/CMakeLists.txt
clang-tools-extra/clang-tidy/ClangTidyForceLinker.h
clang-tools-extra/clang-tidy/darwin/CMakeLists.txt [new file with mode: 0644]
clang-tools-extra/clang-tidy/darwin/DarwinTidyModule.cpp [new file with mode: 0644]
clang-tools-extra/clang-tidy/darwin/DispatchOnceNonstaticCheck.cpp [new file with mode: 0644]
clang-tools-extra/clang-tidy/darwin/DispatchOnceNonstaticCheck.h [new file with mode: 0644]
clang-tools-extra/clang-tidy/plugin/CMakeLists.txt
clang-tools-extra/clang-tidy/tool/CMakeLists.txt
clang-tools-extra/clangd/CMakeLists.txt
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/docs/clang-tidy/checks/darwin-dispatch-once-nonstatic.rst [new file with mode: 0644]
clang-tools-extra/docs/clang-tidy/checks/list.rst
clang-tools-extra/test/clang-tidy/darwin-dispatch-once-nonstatic.mm [new file with mode: 0644]