[clang-tools-extra] [clang-tidy] Create bugprone-bit-cast-pointers check (PR #108083)
Julian Schmidt via cfe-commits
cfe-commits at lists.llvm.org
Sun Sep 15 13:44:42 PDT 2024
================
@@ -0,0 +1,34 @@
+//===--- BitCastPointersCheck.h - clang-tidy --------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_BITCASTPOINTERSCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_BUGPRONE_BITCASTPOINTERSCHECK_H
+
+#include "../ClangTidyCheck.h"
+
+namespace clang::tidy::bugprone {
+
+/// Warns about usage of ``std::bit_cast`` when the input and output types are
+/// pointers.
+///
+/// For the user-facing documentation see:
+/// http://clang.llvm.org/extra/clang-tidy/checks/bugprone/bit-cast-pointers.html
+class BitCastPointersCheck : public ClangTidyCheck {
+public:
+ BitCastPointersCheck(StringRef Name, ClangTidyContext *Context)
+ : ClangTidyCheck(Name, Context) {}
+ void registerMatchers(ast_matchers::MatchFinder *Finder) override;
+ void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
+ bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
+ return LangOpts.CPlusPlus20;
+ }
+};
----------------
5chmidti wrote:
Actually, if it were changed, template instantiations are ignored, so this shouldn't be done in this case, my bad.
TLDR: The `IgnoreUnlessSpelledInSource` traversal will ignore everything that the compiler will have to generate. E.g., implicit casts, generated special member functions, template instantiations, lambda structs,.... This allows for simpler matchers because they may not have to consider implicit casts, but can also improve performance because less analysis will be done.
> Should the default traversal kind be changed in the add_new_check.py script?
IMO no, because the default case is checking everything and including every AST node.
https://github.com/llvm/llvm-project/pull/108083
More information about the cfe-commits
mailing list