#include "PtrTypesSemantics.h"
#include "ASTUtils.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/StmtVisitor.h"
#include <optional>
usingnamespaceclang;
namespace {
bool hasPublicMethodInBaseClass(const CXXRecordDecl *R, StringRef NameToMatch) { … }
}
namespace clang {
std::optional<const clang::CXXRecordDecl *>
hasPublicMethodInBase(const CXXBaseSpecifier *Base, StringRef NameToMatch) { … }
std::optional<bool> isSmartPtrCompatible(const CXXRecordDecl *R,
StringRef IncMethodName,
StringRef DecMethodName) { … }
std::optional<bool> isRefCountable(const clang::CXXRecordDecl *R) { … }
std::optional<bool> isCheckedPtrCapable(const clang::CXXRecordDecl *R) { … }
bool isRefType(const std::string &Name) { … }
bool isCheckedPtr(const std::string &Name) { … }
bool isCtorOfRefCounted(const clang::FunctionDecl *F) { … }
bool isRefType(const clang::QualType T) { … }
std::optional<bool> isUncounted(const QualType T) { … }
std::optional<bool> isUncounted(const CXXRecordDecl* Class)
{ … }
std::optional<bool> isUncountedPtr(const Type* T)
{ … }
std::optional<bool> isGetterOfRefCounted(const CXXMethodDecl* M)
{ … }
bool isRefCounted(const CXXRecordDecl *R) { … }
bool isCheckedPtr(const CXXRecordDecl *R) { … }
bool isPtrConversion(const FunctionDecl *F) { … }
bool isSingleton(const FunctionDecl *F) { … }
class TrivialFunctionAnalysisVisitor
: public ConstStmtVisitor<TrivialFunctionAnalysisVisitor, bool> { … };
bool TrivialFunctionAnalysis::isTrivialImpl(
const Decl *D, TrivialFunctionAnalysis::CacheTy &Cache) { … }
bool TrivialFunctionAnalysis::isTrivialImpl(
const Stmt *S, TrivialFunctionAnalysis::CacheTy &Cache) { … }
}