CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
377 lines
21 KiB
C++
377 lines
21 KiB
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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "../ClangTidy.h"
|
|
#include "../ClangTidyModule.h"
|
|
#include "../bugprone/AssignmentInSelectionStatementCheck.h"
|
|
#include "../bugprone/BadSignalToKillThreadCheck.h"
|
|
#include "../bugprone/CommandProcessorCheck.h"
|
|
#include "../bugprone/CopyConstructorMutatesArgumentCheck.h"
|
|
#include "../bugprone/DefaultOperatorNewOnOveralignedTypeCheck.h"
|
|
#include "../bugprone/ExceptionCopyConstructorThrowsCheck.h"
|
|
#include "../bugprone/FloatLoopCounterCheck.h"
|
|
#include "../bugprone/PointerArithmeticOnPolymorphicObjectCheck.h"
|
|
#include "../bugprone/RandomGeneratorSeedCheck.h"
|
|
#include "../bugprone/RawMemoryCallOnNonTrivialTypeCheck.h"
|
|
#include "../bugprone/ReservedIdentifierCheck.h"
|
|
#include "../bugprone/SignalHandlerCheck.h"
|
|
#include "../bugprone/SignedCharMisuseCheck.h"
|
|
#include "../bugprone/SizeofExpressionCheck.h"
|
|
#include "../bugprone/SpuriouslyWakeUpFunctionsCheck.h"
|
|
#include "../bugprone/StdNamespaceModificationCheck.h"
|
|
#include "../bugprone/SuspiciousMemoryComparisonCheck.h"
|
|
#include "../bugprone/ThrowingStaticInitializationCheck.h"
|
|
#include "../bugprone/UncheckedStringToNumberConversionCheck.h"
|
|
#include "../bugprone/UnhandledSelfAssignmentCheck.h"
|
|
#include "../bugprone/UnsafeFunctionsCheck.h"
|
|
#include "../bugprone/UnusedReturnValueCheck.h"
|
|
#include "../concurrency/ThreadCanceltypeAsynchronousCheck.h"
|
|
#include "../misc/AnonymousNamespaceInHeaderCheck.h"
|
|
#include "../misc/NewDeleteOverloadsCheck.h"
|
|
#include "../misc/NonCopyableObjectsCheck.h"
|
|
#include "../misc/PredictableRandCheck.h"
|
|
#include "../misc/StaticAssertCheck.h"
|
|
#include "../misc/ThrowByValueCatchByReferenceCheck.h"
|
|
#include "../modernize/AvoidSetjmpLongjmpCheck.h"
|
|
#include "../modernize/AvoidVariadicFunctionsCheck.h"
|
|
#include "../performance/MoveConstructorInitCheck.h"
|
|
#include "../readability/EnumInitialValueCheck.h"
|
|
#include "../readability/UppercaseLiteralSuffixCheck.h"
|
|
|
|
namespace clang::tidy {
|
|
|
|
// Checked functions for cert-err33-c.
|
|
// The following functions are deliberately excluded because they can be
|
|
// called with NULL argument and in this case the check is not applicable:
|
|
// `mblen, mbrlen, mbrtowc, mbtowc, wctomb, wctomb_s`.
|
|
// FIXME: The check can be improved to handle such cases.
|
|
static constexpr StringRef CertErr33CCheckedFunctions = "^::aligned_alloc$;"
|
|
"^::asctime_s$;"
|
|
"^::at_quick_exit$;"
|
|
"^::atexit$;"
|
|
"^::bsearch$;"
|
|
"^::bsearch_s$;"
|
|
"^::btowc$;"
|
|
"^::c16rtomb$;"
|
|
"^::c32rtomb$;"
|
|
"^::calloc$;"
|
|
"^::clock$;"
|
|
"^::cnd_broadcast$;"
|
|
"^::cnd_init$;"
|
|
"^::cnd_signal$;"
|
|
"^::cnd_timedwait$;"
|
|
"^::cnd_wait$;"
|
|
"^::ctime_s$;"
|
|
"^::fclose$;"
|
|
"^::fflush$;"
|
|
"^::fgetc$;"
|
|
"^::fgetpos$;"
|
|
"^::fgets$;"
|
|
"^::fgetwc$;"
|
|
"^::fopen$;"
|
|
"^::fopen_s$;"
|
|
"^::fprintf$;"
|
|
"^::fprintf_s$;"
|
|
"^::fputc$;"
|
|
"^::fputs$;"
|
|
"^::fputwc$;"
|
|
"^::fputws$;"
|
|
"^::fread$;"
|
|
"^::freopen$;"
|
|
"^::freopen_s$;"
|
|
"^::fscanf$;"
|
|
"^::fscanf_s$;"
|
|
"^::fseek$;"
|
|
"^::fsetpos$;"
|
|
"^::ftell$;"
|
|
"^::fwprintf$;"
|
|
"^::fwprintf_s$;"
|
|
"^::fwrite$;"
|
|
"^::fwscanf$;"
|
|
"^::fwscanf_s$;"
|
|
"^::getc$;"
|
|
"^::getchar$;"
|
|
"^::getenv$;"
|
|
"^::getenv_s$;"
|
|
"^::gets_s$;"
|
|
"^::getwc$;"
|
|
"^::getwchar$;"
|
|
"^::gmtime$;"
|
|
"^::gmtime_s$;"
|
|
"^::localtime$;"
|
|
"^::localtime_s$;"
|
|
"^::malloc$;"
|
|
"^::mbrtoc16$;"
|
|
"^::mbrtoc32$;"
|
|
"^::mbsrtowcs$;"
|
|
"^::mbsrtowcs_s$;"
|
|
"^::mbstowcs$;"
|
|
"^::mbstowcs_s$;"
|
|
"^::memchr$;"
|
|
"^::mktime$;"
|
|
"^::mtx_init$;"
|
|
"^::mtx_lock$;"
|
|
"^::mtx_timedlock$;"
|
|
"^::mtx_trylock$;"
|
|
"^::mtx_unlock$;"
|
|
"^::printf_s$;"
|
|
"^::putc$;"
|
|
"^::putwc$;"
|
|
"^::raise$;"
|
|
"^::realloc$;"
|
|
"^::remove$;"
|
|
"^::rename$;"
|
|
"^::scanf$;"
|
|
"^::scanf_s$;"
|
|
"^::setlocale$;"
|
|
"^::setvbuf$;"
|
|
"^::signal$;"
|
|
"^::snprintf$;"
|
|
"^::snprintf_s$;"
|
|
"^::sprintf$;"
|
|
"^::sprintf_s$;"
|
|
"^::sscanf$;"
|
|
"^::sscanf_s$;"
|
|
"^::strchr$;"
|
|
"^::strerror_s$;"
|
|
"^::strftime$;"
|
|
"^::strpbrk$;"
|
|
"^::strrchr$;"
|
|
"^::strstr$;"
|
|
"^::strtod$;"
|
|
"^::strtof$;"
|
|
"^::strtoimax$;"
|
|
"^::strtok$;"
|
|
"^::strtok_s$;"
|
|
"^::strtol$;"
|
|
"^::strtold$;"
|
|
"^::strtoll$;"
|
|
"^::strtoul$;"
|
|
"^::strtoull$;"
|
|
"^::strtoumax$;"
|
|
"^::strxfrm$;"
|
|
"^::swprintf$;"
|
|
"^::swprintf_s$;"
|
|
"^::swscanf$;"
|
|
"^::swscanf_s$;"
|
|
"^::thrd_create$;"
|
|
"^::thrd_detach$;"
|
|
"^::thrd_join$;"
|
|
"^::thrd_sleep$;"
|
|
"^::time$;"
|
|
"^::timespec_get$;"
|
|
"^::tmpfile$;"
|
|
"^::tmpfile_s$;"
|
|
"^::tmpnam$;"
|
|
"^::tmpnam_s$;"
|
|
"^::tss_create$;"
|
|
"^::tss_get$;"
|
|
"^::tss_set$;"
|
|
"^::ungetc$;"
|
|
"^::ungetwc$;"
|
|
"^::vfprintf$;"
|
|
"^::vfprintf_s$;"
|
|
"^::vfscanf$;"
|
|
"^::vfscanf_s$;"
|
|
"^::vfwprintf$;"
|
|
"^::vfwprintf_s$;"
|
|
"^::vfwscanf$;"
|
|
"^::vfwscanf_s$;"
|
|
"^::vprintf_s$;"
|
|
"^::vscanf$;"
|
|
"^::vscanf_s$;"
|
|
"^::vsnprintf$;"
|
|
"^::vsnprintf_s$;"
|
|
"^::vsprintf$;"
|
|
"^::vsprintf_s$;"
|
|
"^::vsscanf$;"
|
|
"^::vsscanf_s$;"
|
|
"^::vswprintf$;"
|
|
"^::vswprintf_s$;"
|
|
"^::vswscanf$;"
|
|
"^::vswscanf_s$;"
|
|
"^::vwprintf_s$;"
|
|
"^::vwscanf$;"
|
|
"^::vwscanf_s$;"
|
|
"^::wcrtomb$;"
|
|
"^::wcschr$;"
|
|
"^::wcsftime$;"
|
|
"^::wcspbrk$;"
|
|
"^::wcsrchr$;"
|
|
"^::wcsrtombs$;"
|
|
"^::wcsrtombs_s$;"
|
|
"^::wcsstr$;"
|
|
"^::wcstod$;"
|
|
"^::wcstof$;"
|
|
"^::wcstoimax$;"
|
|
"^::wcstok$;"
|
|
"^::wcstok_s$;"
|
|
"^::wcstol$;"
|
|
"^::wcstold$;"
|
|
"^::wcstoll$;"
|
|
"^::wcstombs$;"
|
|
"^::wcstombs_s$;"
|
|
"^::wcstoul$;"
|
|
"^::wcstoull$;"
|
|
"^::wcstoumax$;"
|
|
"^::wcsxfrm$;"
|
|
"^::wctob$;"
|
|
"^::wctrans$;"
|
|
"^::wctype$;"
|
|
"^::wmemchr$;"
|
|
"^::wprintf_s$;"
|
|
"^::wscanf$;"
|
|
"^::wscanf_s$;";
|
|
|
|
namespace cert {
|
|
namespace {
|
|
|
|
class CERTModule : public ClangTidyModule {
|
|
public:
|
|
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
|
|
// C++ checkers
|
|
// CON
|
|
CheckFactories.registerCheck<bugprone::SpuriouslyWakeUpFunctionsCheck>(
|
|
"cert-con54-cpp");
|
|
// CTR
|
|
CheckFactories
|
|
.registerCheck<bugprone::PointerArithmeticOnPolymorphicObjectCheck>(
|
|
"cert-ctr56-cpp");
|
|
// DCL
|
|
CheckFactories.registerCheck<modernize::AvoidVariadicFunctionsCheck>(
|
|
"cert-dcl50-cpp");
|
|
CheckFactories.registerCheck<bugprone::ReservedIdentifierCheck>(
|
|
"cert-dcl51-cpp");
|
|
CheckFactories.registerCheck<misc::NewDeleteOverloadsCheck>(
|
|
"cert-dcl54-cpp");
|
|
CheckFactories.registerCheck<bugprone::StdNamespaceModificationCheck>(
|
|
"cert-dcl58-cpp");
|
|
CheckFactories.registerCheck<misc::AnonymousNamespaceInHeaderCheck>(
|
|
"cert-dcl59-cpp");
|
|
// ERR
|
|
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
|
|
"cert-err09-cpp");
|
|
CheckFactories.registerCheck<modernize::AvoidSetjmpLongjmpCheck>(
|
|
"cert-err52-cpp");
|
|
CheckFactories.registerCheck<bugprone::ThrowingStaticInitializationCheck>(
|
|
"cert-err58-cpp");
|
|
CheckFactories.registerCheck<bugprone::ExceptionCopyConstructorThrowsCheck>(
|
|
"cert-err60-cpp");
|
|
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
|
|
"cert-err61-cpp");
|
|
// MEM
|
|
CheckFactories
|
|
.registerCheck<bugprone::DefaultOperatorNewOnOveralignedTypeCheck>(
|
|
"cert-mem57-cpp");
|
|
// MSC
|
|
CheckFactories.registerCheck<misc::PredictableRandCheck>("cert-msc50-cpp");
|
|
CheckFactories.registerCheck<bugprone::RandomGeneratorSeedCheck>(
|
|
"cert-msc51-cpp");
|
|
CheckFactories.registerCheck<bugprone::SignalHandlerCheck>(
|
|
"cert-msc54-cpp");
|
|
// OOP
|
|
CheckFactories.registerCheck<performance::MoveConstructorInitCheck>(
|
|
"cert-oop11-cpp");
|
|
CheckFactories.registerCheck<bugprone::UnhandledSelfAssignmentCheck>(
|
|
"cert-oop54-cpp");
|
|
CheckFactories.registerCheck<bugprone::RawMemoryCallOnNonTrivialTypeCheck>(
|
|
"cert-oop57-cpp");
|
|
CheckFactories.registerCheck<bugprone::CopyConstructorMutatesArgumentCheck>(
|
|
"cert-oop58-cpp");
|
|
|
|
// C checkers
|
|
// ARR
|
|
CheckFactories.registerCheck<bugprone::SizeofExpressionCheck>(
|
|
"cert-arr39-c");
|
|
// CON
|
|
CheckFactories.registerCheck<bugprone::SpuriouslyWakeUpFunctionsCheck>(
|
|
"cert-con36-c");
|
|
// DCL
|
|
CheckFactories.registerCheck<misc::StaticAssertCheck>("cert-dcl03-c");
|
|
CheckFactories.registerCheck<readability::UppercaseLiteralSuffixCheck>(
|
|
"cert-dcl16-c");
|
|
CheckFactories.registerCheck<bugprone::ReservedIdentifierCheck>(
|
|
"cert-dcl37-c");
|
|
// ENV
|
|
CheckFactories.registerCheck<bugprone::CommandProcessorCheck>(
|
|
"cert-env33-c");
|
|
// ERR
|
|
CheckFactories.registerCheck<bugprone::UnusedReturnValueCheck>(
|
|
"cert-err33-c");
|
|
CheckFactories
|
|
.registerCheck<bugprone::UncheckedStringToNumberConversionCheck>(
|
|
"cert-err34-c");
|
|
// EXP
|
|
CheckFactories.registerCheck<bugprone::SuspiciousMemoryComparisonCheck>(
|
|
"cert-exp42-c");
|
|
CheckFactories.registerCheck<bugprone::AssignmentInSelectionStatementCheck>(
|
|
"cert-exp45-c");
|
|
// FLP
|
|
CheckFactories.registerCheck<bugprone::FloatLoopCounterCheck>(
|
|
"cert-flp30-c");
|
|
CheckFactories.registerCheck<bugprone::SuspiciousMemoryComparisonCheck>(
|
|
"cert-flp37-c");
|
|
// FIO
|
|
CheckFactories.registerCheck<misc::NonCopyableObjectsCheck>("cert-fio38-c");
|
|
// INT
|
|
CheckFactories.registerCheck<readability::EnumInitialValueCheck>(
|
|
"cert-int09-c");
|
|
// MSC
|
|
CheckFactories.registerCheck<bugprone::UnsafeFunctionsCheck>(
|
|
"cert-msc24-c");
|
|
CheckFactories.registerCheck<misc::PredictableRandCheck>("cert-msc30-c");
|
|
CheckFactories.registerCheck<bugprone::RandomGeneratorSeedCheck>(
|
|
"cert-msc32-c");
|
|
CheckFactories.registerCheck<bugprone::UnsafeFunctionsCheck>(
|
|
"cert-msc33-c");
|
|
// POS
|
|
CheckFactories.registerCheck<bugprone::BadSignalToKillThreadCheck>(
|
|
"cert-pos44-c");
|
|
CheckFactories
|
|
.registerCheck<concurrency::ThreadCanceltypeAsynchronousCheck>(
|
|
"cert-pos47-c");
|
|
// SIG
|
|
CheckFactories.registerCheck<bugprone::SignalHandlerCheck>("cert-sig30-c");
|
|
// STR
|
|
CheckFactories.registerCheck<bugprone::SignedCharMisuseCheck>(
|
|
"cert-str34-c");
|
|
}
|
|
|
|
ClangTidyOptions getModuleOptions() override {
|
|
ClangTidyOptions Options;
|
|
ClangTidyOptions::OptionMap &Opts = Options.CheckOptions;
|
|
Opts["cert-arr39-c.WarnOnSizeOfConstant"] = "false";
|
|
Opts["cert-arr39-c.WarnOnSizeOfIntegerExpression"] = "false";
|
|
Opts["cert-arr39-c.WarnOnSizeOfThis"] = "false";
|
|
Opts["cert-arr39-c.WarnOnSizeOfCompareToConstant"] = "false";
|
|
Opts["cert-arr39-c.WarnOnSizeOfPointer"] = "false";
|
|
Opts["cert-arr39-c.WarnOnSizeOfPointerToAggregate"] = "false";
|
|
Opts["cert-dcl16-c.NewSuffixes"] = "L;LL;LU;LLU";
|
|
Opts["cert-err33-c.CheckedFunctions"] = CertErr33CCheckedFunctions;
|
|
Opts["cert-err33-c.CheckedReturnTypes"] = "";
|
|
Opts["cert-err33-c.AllowCastToVoid"] = "true";
|
|
Opts["cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField"] = "false";
|
|
Opts["cert-str34-c.DiagnoseSignedUnsignedCharComparisons"] = "false";
|
|
return Options;
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
} // namespace cert
|
|
|
|
// Register the MiscTidyModule using this statically initialized variable.
|
|
static ClangTidyModuleRegistry::Add<cert::CERTModule>
|
|
X("cert-module",
|
|
"Adds lint checks corresponding to CERT secure coding guidelines.");
|
|
|
|
// This anchor is used to force the linker to link in the generated object file
|
|
// and thus register the CERTModule.
|
|
volatile int CERTModuleAnchorSource = 0; // NOLINT(misc-use-internal-linkage)
|
|
|
|
} // namespace clang::tidy
|