================ @@ -333,11 +333,55 @@ template <typename T> static bool isStandardNewDelete(const T &FD) { return isStandardDelete(FD) || isStandardNew(FD); } +namespace { + //===----------------------------------------------------------------------===// -// Definition of the MallocChecker class. +// Utility classes that provide access to the bug types and can model that some +// of the bug types are shared by multiple checker frontends. //===----------------------------------------------------------------------===// -namespace { +#define BUGTYPE_PROVIDER(NAME, DEF) \ + struct NAME : virtual public CheckerFrontend { \ + BugType NAME##Bug{this, DEF, categories::MemoryError}; \ + }; + +BUGTYPE_PROVIDER(DoubleFree, "Double free") +// TODO: Remove DoubleDelete as a separate bug type and when it would be +// emitted, emit DoubleFree reports instead. (Note that DoubleFree is already +// used for all allocation families, not just malloc/free.) +BUGTYPE_PROVIDER(DoubleDelete, "Double delete") + +struct Leak : virtual public CheckerFrontend { + // Leaks should not be reported if they are post-dominated by a sink: + // (1) Sinks are higher importance bugs. + // (2) NoReturnFunctionChecker uses sink nodes to represent paths ending + // with __noreturn functions such as assert() or exit(). We choose not + // to report leaks on such paths. + BugType LeakBug{this, "Memory leak", categories::MemoryError, + /*SuppressOnSink=*/true}; +}; + +BUGTYPE_PROVIDER(UseFree, "Use-after-free") +BUGTYPE_PROVIDER(BadFree, "Bad free") +BUGTYPE_PROVIDER(FreeAlloca, "Free 'alloca()'") +BUGTYPE_PROVIDER(MismatchedDealloc, "Bad deallocator") +BUGTYPE_PROVIDER(OffsetFree, "Offset free") +BUGTYPE_PROVIDER(UseZeroAllocated, "Use of zero allocated") + ---------------- NagyDonat wrote:
Done in https://github.com/llvm/llvm-project/pull/147080/commits/43eb9222e92dd75b246cd0a786fcce377d95793f https://github.com/llvm/llvm-project/pull/147080 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits