blob: 396c93f38bf5ffa996cb554691396844cb1996c4 [file] [log] [blame]
// Part of the Crubit project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef CRUBIT_NULLABILITY_POINTER_NULLABILITY_MATCHERS_H_
#define CRUBIT_NULLABILITY_POINTER_NULLABILITY_MATCHERS_H_
#include "nullability/type_nullability.h"
#include "clang/AST/ExprCXX.h"
#include "clang/ASTMatchers/ASTMatchersInternal.h"
#include "clang/ASTMatchers/ASTMatchersMacros.h"
namespace clang {
namespace tidy {
namespace nullability {
AST_MATCHER(QualType, isSupportedPointer) {
return isSupportedPointerType(Node);
}
AST_MATCHER(QualType, isSupportedRawPointer) {
return isSupportedRawPointerType(Node);
}
AST_MATCHER(QualType, isSupportedSmartPointer) {
return isSupportedSmartPointerType(Node);
}
AST_MATCHER(Expr, isGLValue) { return Node.isGLValue(); }
AST_MATCHER(Stmt, isRawPointerValueInit) {
const auto *ValueInit = dyn_cast<CXXScalarValueInitExpr>(&Node);
return ValueInit != nullptr &&
isSupportedRawPointerType(ValueInit->getType());
}
AST_MATCHER(QualType, isNullPtrType) { return Node->isNullPtrType(); }
ast_matchers::internal::Matcher<Stmt> isPointerExpr();
ast_matchers::internal::Matcher<Stmt> isMemberOfPointerType();
ast_matchers::internal::Matcher<Stmt> isPointerArrow();
ast_matchers::internal::Matcher<Stmt> isNullPointerLiteral();
ast_matchers::internal::Matcher<Stmt> isAddrOf();
ast_matchers::internal::Matcher<Stmt> isPointerDereference();
ast_matchers::internal::Matcher<Stmt> isPointerSubscript();
ast_matchers::internal::Matcher<Stmt> isPointerCheckBinOp();
ast_matchers::internal::Matcher<Stmt> isPointerIncOrDec();
ast_matchers::internal::Matcher<Stmt> isPointerAddOrSubAssign();
ast_matchers::internal::Matcher<Stmt> isImplicitCastPointerToBool();
ast_matchers::internal::Matcher<Stmt> isPointerReturn();
ast_matchers::internal::Matcher<CXXCtorInitializer> isCtorMemberInitializer();
ast_matchers::internal::Matcher<Stmt> isZeroParamConstMemberCall();
ast_matchers::internal::Matcher<Stmt> isOptionalOperatorArrowCall();
ast_matchers::internal::Matcher<Stmt> isNonConstMemberCall();
ast_matchers::internal::Matcher<Stmt> isNonConstMemberOperatorCall();
ast_matchers::internal::Matcher<Stmt> isSmartPointerArrowMemberExpr();
ast_matchers::internal::Matcher<Stmt> isSmartPointerConstructor();
ast_matchers::internal::Matcher<Stmt> isSmartPointerOperatorCall(
llvm::StringRef Name);
ast_matchers::internal::Matcher<Stmt> isSmartPointerMethodCall(
llvm::StringRef Name);
ast_matchers::internal::Matcher<Stmt> isSmartPointerFreeSwapCall();
ast_matchers::internal::Matcher<Stmt> isSmartPointerBoolConversionCall();
ast_matchers::internal::Matcher<Stmt> isSmartPointerFactoryCall();
ast_matchers::internal::Matcher<Stmt> isSmartPointerComparisonOpCall();
ast_matchers::internal::Matcher<Stmt> isSharedPtrCastCall();
ast_matchers::internal::Matcher<Stmt> isWeakPtrLockCall();
ast_matchers::internal::Matcher<Stmt> isSupportedPointerAccessorCall();
} // namespace nullability
} // namespace tidy
} // namespace clang
#endif // CRUBIT_NULLABILITY_POINTER_NULLABILITY_MATCHERS_H_