================ @@ -10,3 +12,42 @@ void block_arity_mismatch() { void(^b)() = ^(int a, int b) { }; b(1); // no-crash expected-warning {{Block taking 2 arguments is called with fewer (1)}} } + +int *nonnull_return_annotation_indirect() __attribute__((returns_nonnull)); +int *nonnull_return_annotation_indirect() { + int *x = 0; + return x; // expected-warning {{Null returned from a function that is expected to return a non-null value}} +} + +int *nonnull_return_annotation_direct() __attribute__((returns_nonnull)); +int *nonnull_return_annotation_direct() { + return 0; // expected-warning {{Null returned from a function that is expected to return a non-null value}} +} // expected-warning@-1 {{null returned from function that requires a non-null return value}} + +int *nonnull_return_annotation_assumed() __attribute__((returns_nonnull)); +int *nonnull_return_annotation_assumed(int* ptr) { + if (ptr) { + return ptr; + } + return ptr; // expected-warning {{Null returned from a function that is expected to return a non-null value}} +} + +int *produce_nonnull_ptr() __attribute__((returns_nonnull)); + +__attribute__((returns_nonnull)) +int *cannot_return_null() { + int *x = produce_nonnull_ptr(); + if (!x) { + clang_analyzer_warnIfReached(); + // Incorrect: expected-warning@-1 {{REACHABLE}} + // According to produce_nonnull_ptr contract, x cannot be null. ---------------- necto wrote:
We've entered it as a Jira ticket: https://sonarsource.atlassian.net/browse/CPP-5614 But we have no immediate plans to implement it. https://github.com/llvm/llvm-project/pull/106048 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits