Author: Jorge Pinto Sousa Date: 2023-04-13T08:15:13-04:00 New Revision: 66202d83b5d47479ae0f8117aebb523ba7eff82d
URL: https://github.com/llvm/llvm-project/commit/66202d83b5d47479ae0f8117aebb523ba7eff82d DIFF: https://github.com/llvm/llvm-project/commit/66202d83b5d47479ae0f8117aebb523ba7eff82d.diff LOG: Make 'static assertion failed' diagnostics point to the static assertion expression "static assertion failed" pointed to the static_assert token and then underlined the static assertion expression: <source>:3:1: error: static assertion failed static_assert(false); ^ ~~~~~ 1 error generated. See Godbolt: https://godbolt.org/z/r38booz59 Now it points to and highlights the assertion expression. Fixes https://github.com/llvm/llvm-project/issues/61951 Differential Revision: https://reviews.llvm.org/D147745 Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/Sema/SemaDeclCXX.cpp clang/test/SemaCXX/static-assert.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index e08aecfcc881..9abfaf5b2322 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -218,6 +218,9 @@ Improvements to Clang's diagnostics - Clang now avoids unnecessary diagnostic warnings for obvious expressions in the case of binary operators with logical OR operations. (`#57906 <https://github.com/llvm/llvm-project/issues/57906>`_) +- Clang's "static assertion failed" diagnostic now points to the static assertion + expression instead of pointing to the ``static_assert`` token. + (`#61951 <https://github.com/llvm/llvm-project/issues/61951>`_) Bug Fixes in This Version ------------------------- diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 524f0a999907..7fd12319e4d6 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -16820,19 +16820,20 @@ Decl *Sema::BuildStaticAssertDeclaration(SourceLocation StaticAssertLoc, if (InnerCond && isa<ConceptSpecializationExpr>(InnerCond)) { // Drill down into concept specialization expressions to see why they // weren't satisfied. - Diag(StaticAssertLoc, diag::err_static_assert_failed) - << !AssertMessage << Msg.str() << AssertExpr->getSourceRange(); + Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) + << !AssertMessage << Msg.str() << AssertExpr->getSourceRange(); ConstraintSatisfaction Satisfaction; if (!CheckConstraintSatisfaction(InnerCond, Satisfaction)) DiagnoseUnsatisfiedConstraint(Satisfaction); } else if (InnerCond && !isa<CXXBoolLiteralExpr>(InnerCond) && !isa<IntegerLiteral>(InnerCond)) { - Diag(StaticAssertLoc, diag::err_static_assert_requirement_failed) - << InnerCondDescription << !AssertMessage - << Msg.str() << InnerCond->getSourceRange(); + Diag(InnerCond->getBeginLoc(), + diag::err_static_assert_requirement_failed) + << InnerCondDescription << !AssertMessage << Msg.str() + << InnerCond->getSourceRange(); DiagnoseStaticAssertDetails(InnerCond); } else { - Diag(StaticAssertLoc, diag::err_static_assert_failed) + Diag(AssertExpr->getBeginLoc(), diag::err_static_assert_failed) << !AssertMessage << Msg.str() << AssertExpr->getSourceRange(); PrintContextStack(); } diff --git a/clang/test/SemaCXX/static-assert.cpp b/clang/test/SemaCXX/static-assert.cpp index ea8037815a20..83fc4bd25628 100644 --- a/clang/test/SemaCXX/static-assert.cpp +++ b/clang/test/SemaCXX/static-assert.cpp @@ -287,5 +287,28 @@ namespace Diagnostics { static_assert(CHECK_4(a) && A_IS_B, ""); // expected-error {{failed}} \ // expected-note {{evaluates to '4 == 5'}} + static_assert( + false, // expected-error {{static assertion failed}} + "" + ); + + static_assert( + true && false, // expected-error {{static assertion failed due to requirement 'true && false'}} + "" + ); + + static_assert( + // with a comment here + true && false, // expected-error {{static assertion failed due to requirement 'true && false'}} + "" + ); + + static_assert( + // with a comment here + (true && // expected-error {{static assertion failed due to requirement '(true && false) || false'}} + false) + || false, + "" + ); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits