xref: /llvm-project/clang/lib/StaticAnalyzer/Checkers/SmartPtr.h (revision 34558b039b3baf057851b8d39f53402608da4927)
120e271a9SNithin Vadukkumchery Rajendrakumar //=== SmartPtr.h - Tracking smart pointer state. -------------------*- C++ -*-//
220e271a9SNithin Vadukkumchery Rajendrakumar //
320e271a9SNithin Vadukkumchery Rajendrakumar // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
420e271a9SNithin Vadukkumchery Rajendrakumar // See https://llvm.org/LICENSE.txt for license information.
520e271a9SNithin Vadukkumchery Rajendrakumar // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
620e271a9SNithin Vadukkumchery Rajendrakumar //
720e271a9SNithin Vadukkumchery Rajendrakumar //===----------------------------------------------------------------------===//
820e271a9SNithin Vadukkumchery Rajendrakumar //
920e271a9SNithin Vadukkumchery Rajendrakumar // Defines inter-checker API for the smart pointer modeling. It allows
1020e271a9SNithin Vadukkumchery Rajendrakumar // dependent checkers to figure out if an smart pointer is null or not.
1120e271a9SNithin Vadukkumchery Rajendrakumar //
1220e271a9SNithin Vadukkumchery Rajendrakumar //===----------------------------------------------------------------------===//
1320e271a9SNithin Vadukkumchery Rajendrakumar 
1420e271a9SNithin Vadukkumchery Rajendrakumar #ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_SMARTPTR_H
1520e271a9SNithin Vadukkumchery Rajendrakumar #define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_SMARTPTR_H
1620e271a9SNithin Vadukkumchery Rajendrakumar 
1720e271a9SNithin Vadukkumchery Rajendrakumar #include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
1820e271a9SNithin Vadukkumchery Rajendrakumar 
1920e271a9SNithin Vadukkumchery Rajendrakumar namespace clang {
2020e271a9SNithin Vadukkumchery Rajendrakumar namespace ento {
2120e271a9SNithin Vadukkumchery Rajendrakumar namespace smartptr {
2220e271a9SNithin Vadukkumchery Rajendrakumar 
2320e271a9SNithin Vadukkumchery Rajendrakumar /// Returns true if the event call is on smart pointer.
2420e271a9SNithin Vadukkumchery Rajendrakumar bool isStdSmartPtrCall(const CallEvent &Call);
25*48688257SDeep Majumder bool isStdSmartPtr(const CXXRecordDecl *RD);
26*48688257SDeep Majumder bool isStdSmartPtr(const Expr *E);
2720e271a9SNithin Vadukkumchery Rajendrakumar 
2820e271a9SNithin Vadukkumchery Rajendrakumar /// Returns whether the smart pointer is null or not.
2920e271a9SNithin Vadukkumchery Rajendrakumar bool isNullSmartPtr(const ProgramStateRef State, const MemRegion *ThisRegion);
3020e271a9SNithin Vadukkumchery Rajendrakumar 
3106d100a6SNithin Vadukkumchery Rajendrakumar const BugType *getNullDereferenceBugType();
3206d100a6SNithin Vadukkumchery Rajendrakumar 
3320e271a9SNithin Vadukkumchery Rajendrakumar } // namespace smartptr
3420e271a9SNithin Vadukkumchery Rajendrakumar } // namespace ento
3520e271a9SNithin Vadukkumchery Rajendrakumar } // namespace clang
3620e271a9SNithin Vadukkumchery Rajendrakumar 
3720e271a9SNithin Vadukkumchery Rajendrakumar #endif // LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_SMARTPTR_H
38