[PATCH] D82279: Handle invalid types in the nullPointerConstant AST matcher
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 21 09:32:27 PDT 2020
aaron.ballman created this revision.
aaron.ballman added reviewers: rsmith, steveire, klimek, gribozavr.
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.
https://reviews.llvm.org/D82279
Files:
clang/lib/AST/Expr.cpp
clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
Index: clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
===================================================================
--- clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
+++ clang/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp
@@ -2608,6 +2608,14 @@
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) {
Index: clang/lib/AST/Expr.cpp
===================================================================
--- clang/lib/AST/Expr.cpp
+++ clang/lib/AST/Expr.cpp
@@ -3812,6 +3812,11 @@
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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82279.272314.patch
Type: text/x-patch
Size: 1263 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200621/e6c80a43/attachment.bin>
More information about the cfe-commits
mailing list