Author: Aaron Ballman Date: 2023-07-20T12:49:39-04:00 New Revision: 4a100690461022625dc5d2a21e2e028a926149d9
URL: https://github.com/llvm/llvm-project/commit/4a100690461022625dc5d2a21e2e028a926149d9 DIFF: https://github.com/llvm/llvm-project/commit/4a100690461022625dc5d2a21e2e028a926149d9.diff LOG: Fix a failing assertion when emitting a note diagnostic When noting the previous declaration for a builtin, the diagnostic expects two arguments, but none were being passed. We now pass arguments for the note (and the arguments are unused for several of the possible notes we emit, but that is something the diagnostic engine is fine with). Fixes https://github.com/llvm/llvm-project/issues/63967 Added: Modified: clang/lib/Sema/SemaDecl.cpp clang/test/SemaCXX/builtins.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 0cbf608fc2be10..8db77f8558083c 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -3696,10 +3696,10 @@ bool Sema::MergeFunctionDecl(FunctionDecl *New, NamedDecl *&OldD, Scope *S, !canRedefineFunction(Old, getLangOpts())) { if (getLangOpts().MicrosoftExt) { Diag(New->getLocation(), diag::ext_static_non_static) << New; - Diag(OldLocation, PrevDiag); + Diag(OldLocation, PrevDiag) << Old << Old->getType(); } else { Diag(New->getLocation(), diag::err_static_non_static) << New; - Diag(OldLocation, PrevDiag); + Diag(OldLocation, PrevDiag) << Old << Old->getType(); return true; } } @@ -4386,7 +4386,7 @@ static void diagnoseVarDeclTypeMismatch(Sema &S, VarDecl *New, VarDecl* Old) { SourceLocation OldLocation; std::tie(PrevDiag, OldLocation) = getNoteDiagForInvalidRedeclaration(Old, New); - S.Diag(OldLocation, PrevDiag); + S.Diag(OldLocation, PrevDiag) << Old << Old->getType(); New->setInvalidDecl(); } diff --git a/clang/test/SemaCXX/builtins.cpp b/clang/test/SemaCXX/builtins.cpp index 82d1820bf9f31b..af6e565100aaeb 100644 --- a/clang/test/SemaCXX/builtins.cpp +++ b/clang/test/SemaCXX/builtins.cpp @@ -165,3 +165,7 @@ template<typename T> void test_builtin_complex(T v, double d) { template void test_builtin_complex(double, double); template void test_builtin_complex(float, double); // expected-note {{instantiation of}} template void test_builtin_complex(int, double); // expected-note {{instantiation of}} + +// This previously would cause an assertion when emitting the note diagnostic. +static void _mm_sfence(); // expected-error {{static declaration of '_mm_sfence' follows non-static declaration}} \ + expected-note {{'_mm_sfence' is a builtin with type 'void () noexcept'}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits