Currently, using the nullPointerConstant AST matcher can lead to
assertions in situations where a node to be matched does not have a
valid type associated with it, such as a ParenListExpr. This patch
addresses that by saying such nodes cannot be a null pointer constant.
This addresses PR46353.
return Source->isNullPointerConstant(Ctx, NPC);
}
+ // If the expression has no type information, it cannot be a null pointer
+ // constant.
+ if (getType().isNull())
+ return NPCK_NotNull;
+
// C++11 nullptr_t is always a null pointer constant.
if (getType()->isNullPtrType())
return NPCK_CXX11_nullptr;
EXPECT_TRUE(matches("char *cp = (char *)0;", expr(nullPointerConstant())));
EXPECT_TRUE(matches("int *ip = 0;", expr(nullPointerConstant())));
EXPECT_TRUE(matches("int i = 0;", expr(nullPointerConstant())));
+ const char kTest[] = R"(
+ template <typename T>
+ struct MyTemplate {
+ MyTemplate() : field_(__null) {}
+ T* field_;
+ };
+ )";
+ EXPECT_TRUE(matches(kTest, expr(nullPointerConstant())));
}
TEST(HasExternalFormalLinkage, Basic) {