diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -325,6 +325,9 @@ pointers is improved to include the type of the array and whether it's cast to another type. This should improve comprehension for why an index is out-of-bounds. +- Clang now correctly point to the problematic parameter for the ``-Wnonnull`` + warning. + This fixes `Issue 58273 `_. Non-comprehensive list of changes in this release ------------------------------------------------- diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -5639,7 +5639,7 @@ for (unsigned ArgIndex = 0, ArgIndexEnd = NonNullArgs.size(); ArgIndex != ArgIndexEnd; ++ArgIndex) { if (NonNullArgs[ArgIndex]) - CheckNonNullArgument(S, Args[ArgIndex], CallSiteLoc); + CheckNonNullArgument(S, Args[ArgIndex], Args[ArgIndex]->getExprLoc()); } } diff --git a/clang/test/Sema/non-null-warning.c b/clang/test/Sema/non-null-warning.c --- a/clang/test/Sema/non-null-warning.c +++ b/clang/test/Sema/non-null-warning.c @@ -37,9 +37,16 @@ return 0; // expected-warning {{null returned from function that requires a non-null return value}} } +int foo4(int * _Nonnull x, int * y) { + return 0; +} + #define SAFE_CALL(X) if (X) foo(X) int main (void) { foo(0); // expected-warning {{null passed to a callee that requires a non-null argument}} (void)sizeof(foo(0)); // expect no diagnostic in unevaluated context. SAFE_CALL(0); // expect no diagnostic for unreachable code. + foo4( + 0, // expected-warning {{null passed to a callee that requires a non-null argument}} + 0); }