steakhal added inline comments.
================ Comment at: clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp:151-164 + auto ArgSVal = C.getSVal(E).getAs<DefinedOrUnknownSVal>(); + if (!ArgSVal) + return; + + ProgramStateRef StNonNull, StNull; + std::tie(StNonNull, StNull) = State->assume(*ArgSVal); + ---------------- This means that we would raise an issue if `ArgSVal` might be null. We usually warn if we are sure there is a bug, aka. if it must be null. Consequently, the condition should be rather `StNull && !StNonNull` instead of just `StNull`. ================ Comment at: clang/test/Analysis/NSContainers.m:336-337 +void testCreateArrayLiteralWithNullableArg() { + (void)@[getNonnullFoo()]; // no warning + (void)@[getNullableFoo()]; // expected-warning {{Nullable pointer is passed to a callee that requires a non-null}} +} ---------------- How about the case when it calls a `Foo * getMightBeNullFoo();`? I guess, it would still raise an issue, even though we couldn't prove that it must be null. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D152269/new/ https://reviews.llvm.org/D152269 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits