mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-22 13:05:52 -04:00

Summary: This check flags all access to members of unions. Passing unions as a whole is not flagged. Reading from a union member assumes that member was the last one written, and writing to a union member assumes another member with a nontrivial destructor had its destructor called. This is fragile because it cannot generally be enforced to be safe in the language and so relies on programmer discipline to get it right. This rule is part of the "Type safety" profile of the C++ Core Guidelines, see https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#-type7-avoid-accessing-members-of-raw-unions-prefer-variant-instead Reviewers: alexfh, sbenza, bkramer, aaron.ballman Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D13784 llvm-svn: 250537
58 lines
2.3 KiB
C++
58 lines
2.3 KiB
C++
//===--- CppCoreGuidelinesModule.cpp - clang-tidy -------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "../ClangTidy.h"
|
|
#include "../ClangTidyModule.h"
|
|
#include "../ClangTidyModuleRegistry.h"
|
|
#include "../cert/VariadicFunctionDefCheck.h"
|
|
#include "../misc/AssignOperatorSignatureCheck.h"
|
|
#include "ProBoundsPointerArithmeticCheck.h"
|
|
#include "ProTypeConstCastCheck.h"
|
|
#include "ProTypeReinterpretCastCheck.h"
|
|
#include "ProTypeStaticCastDowncastCheck.h"
|
|
#include "ProTypeUnionAccessCheck.h"
|
|
|
|
namespace clang {
|
|
namespace tidy {
|
|
namespace cppcoreguidelines {
|
|
|
|
/// A module containing checks of the C++ Core Guidelines
|
|
class CppCoreGuidelinesModule : public ClangTidyModule {
|
|
public:
|
|
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
|
|
CheckFactories.registerCheck<ProBoundsPointerArithmeticCheck>(
|
|
"cppcoreguidelines-pro-bounds-pointer-arithmetic");
|
|
CheckFactories.registerCheck<ProTypeConstCastCheck>(
|
|
"cppcoreguidelines-pro-type-const-cast");
|
|
CheckFactories.registerCheck<VariadicFunctionDefCheck>(
|
|
"cppcoreguidelines-pro-type-vararg-def");
|
|
CheckFactories.registerCheck<ProTypeReinterpretCastCheck>(
|
|
"cppcoreguidelines-pro-type-reinterpret-cast");
|
|
CheckFactories.registerCheck<ProTypeStaticCastDowncastCheck>(
|
|
"cppcoreguidelines-pro-type-static-cast-downcast");
|
|
CheckFactories.registerCheck<ProTypeUnionAccessCheck>(
|
|
"cppcoreguidelines-pro-type-union-access");
|
|
CheckFactories.registerCheck<misc::AssignOperatorSignatureCheck>(
|
|
"cppcoreguidelines-c-copy-assignment-signature");
|
|
}
|
|
};
|
|
|
|
// Register the LLVMTidyModule using this statically initialized variable.
|
|
static ClangTidyModuleRegistry::Add<CppCoreGuidelinesModule>
|
|
X("cppcoreguidelines-module", "Adds checks for the C++ Core Guidelines.");
|
|
|
|
} // namespace cppcoreguidelines
|
|
|
|
// This anchor is used to force the linker to link in the generated object file
|
|
// and thus register the CppCoreGuidelinesModule.
|
|
volatile int CppCoreGuidelinesModuleAnchorSource = 0;
|
|
|
|
} // namespace tidy
|
|
} // namespace clang
|