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