[PATCH] D96719: [clang-tidy] Add new check 'bugprone-thread-canceltype-asynchronous' and alias 'cert-pos47-c'.

Balázs Kéri via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 18 00:41:08 PST 2021


balazske added inline comments.


================
Comment at: clang-tools-extra/clang-tidy/bugprone/BugproneTidyModule.cpp:169
         "bugprone-terminating-continue");
+    CheckFactories.registerCheck<ThreadCanceltypeAsynchronousCheck>(
+        "bugprone-thread-canceltype-asynchronous");
----------------
aaron.ballman wrote:
> I think this check is likely better surfaced in the `concurrency` module. WDYT?
It is really better in ``concurrency``, I was not aware of that module (it contains only one check).


================
Comment at: clang-tools-extra/clang-tidy/bugprone/ThreadCanceltypeAsynchronousCheck.cpp:29
+
+static Preprocessor *PP;
+
----------------
aaron.ballman wrote:
> Any particular reason to use a global variable here rather than making it a member of `ThreadCanceltypeAsynchronousCheck`?
Member is better, I just copied the code from another file (that was added not long ago) and assumed that it is correct even if it looks not good.


================
Comment at: clang-tools-extra/clang-tidy/bugprone/ThreadCanceltypeAsynchronousCheck.cpp:38
+    };
+    const auto TryExpandAsInteger =
+        [](Preprocessor::macro_iterator It) -> Optional<unsigned> {
----------------
aaron.ballman wrote:
> Do we know that POSIX implementations always use a simple integer here, or do we have to worry about code like:
> ```
> #define PTHREAD_CANCEL_ASYNCHRONOUS (1 << 0)
> ```
> or
> ```
> #define PTHREAD_CANCEL_ASYNCHRONOUS SOME_OTHER_MACRO
> ```
Theoretically it is possible that the macro is defined not as a simple number ([[https://pubs.opengroup.org/onlinepubs/9699919799/ | at this page ]] see "Symbolic Constant"). But I am not sure if it is possible to get the value from the preprocessor for any constant expression.

There is a similar function `tryExpandAsInteger` already in clang (CheckerHelpers.cpp) that can be reused here, probably it retrieves the macro definition better. The function could be put into one of the "utils" files, maybe **LexerUtils.h**, it is already needed at 2 places (bad-signal-to-kill-thread and here).



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96719/new/

https://reviews.llvm.org/D96719



More information about the cfe-commits mailing list