================ @@ -0,0 +1,339 @@ +//===- DestroyedAsWrongTypeChecker.cpp --------------------------*- 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 +// +//===----------------------------------------------------------------------===// +// +// Defines a checker that finds storage reused by placement new for an object +// of a different type and then destroyed or deleted as the original type +// (C++ [basic.life]p11, [expr.delete]p3). +// +//===----------------------------------------------------------------------===// + +#include "clang/AST/ExprCXX.h" +#include "clang/Analysis/CFG.h" +#include "clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h" +#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" +#include "clang/StaticAnalyzer/Core/Checker.h" +#include "clang/StaticAnalyzer/Core/CheckerManager.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h" +#include <optional> + +using namespace clang; +using namespace ento; + +namespace { +struct WrongDestruction { + QualType Placed; + const CXXRecordDecl *DtorClass; + const CXXDeleteExpr *Delete; + + bool operator==(const WrongDestruction &X) const { + return Placed == X.Placed && DtorClass == X.DtorClass && Delete == X.Delete; + } + void Profile(llvm::FoldingSetNodeID &ID) const { + ID.Add(Placed); + ID.AddPointer(DtorClass); + ID.AddPointer(Delete); + } +}; +} // namespace + +REGISTER_MAP_WITH_PROGRAMSTATE(PlacedObjectTypes, const MemRegion *, QualType) +REGISTER_SET_WITH_PROGRAMSTATE(NewAllocatedObjects, const MemRegion *) +REGISTER_MAP_WITH_PROGRAMSTATE(PendingDestructions, const MemRegion *, + WrongDestruction) ---------------- NagyDonat wrote:
It is often (although not always) useful to explain the meanings of program state traits with 1-2 lines of comments per trait. Consider whether you have meaningful things to say (which are not evident from the declaration itself) and if yes, then add a comment. https://github.com/llvm/llvm-project/pull/237801 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
