Collect information from calls to constructors.
Also add test for collecting information from constructor bodies, just to make it clear we are covering them.
PiperOrigin-RevId: 578915862
Change-Id: Ic4fd38e5f701e56ff4831991def3ef52cb322535
diff --git a/nullability/inference/collect_evidence_test.cc b/nullability/inference/collect_evidence_test.cc
index 58ed6ca..87567b3 100644
--- a/nullability/inference/collect_evidence_test.cc
+++ b/nullability/inference/collect_evidence_test.cc
@@ -452,6 +452,22 @@
functionNamed("operator()"))));
}
+TEST(CollectEvidenceFromImplementationTest, ConstructorCall) {
+ static constexpr llvm::StringRef Src = R"cc(
+ class S {
+ public:
+ S(Nonnull<int*> a);
+ };
+ void target(int* p) { S s(p); }
+ )cc";
+ EXPECT_THAT(
+ collectEvidenceFromTargetFunction(Src),
+ UnorderedElementsAre(evidence(paramSlot(0), Evidence::BOUND_TO_NONNULL,
+ functionNamed("target")),
+ evidence(paramSlot(0), Evidence::UNKNOWN_ARGUMENT,
+ functionNamed("S"))));
+}
+
TEST(CollectEvidenceFromImplementationTest, PassedToNonnull) {
static constexpr llvm::StringRef Src = R"cc(
void callee(Nonnull<int*> i);
@@ -709,6 +725,7 @@
auto Lambda = []() {}; // Not analyzed yet.
struct S {
+ S() {}
void member();
};
void S::member() {}
@@ -716,11 +733,11 @@
auto Sites = EvidenceSites::discover(AST.context());
EXPECT_THAT(Sites.Declarations,
ElementsAre(declNamed("foo"), declNamed("bar"), declNamed("bar"),
- declNamed("baz"), declNamed("S::member"),
+ declNamed("baz"), declNamed("S::S"),
+ declNamed("S::member"), declNamed("S::member")));
+ EXPECT_THAT(Sites.Implementations,
+ ElementsAre(declNamed("bar"), declNamed("baz"), declNamed("S::S"),
declNamed("S::member")));
- EXPECT_THAT(
- Sites.Implementations,
- ElementsAre(declNamed("bar"), declNamed("baz"), declNamed("S::member")));
}
TEST(EvidenceSitesTest, Variables) {