[clang] [clang] print correct context for diagnostics suppressed by deduction (PR #125453)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 2 22:05:22 PST 2025
================
@@ -1654,11 +1654,20 @@ void Sema::EmitDiagnostic(unsigned DiagID, const DiagnosticBuilder &DB) {
}
case DiagnosticIDs::SFINAE_Suppress:
+ if (DiagnosticsEngine::Level Level = getDiagnostics().getDiagnosticLevel(
+ DiagInfo.getID(), DiagInfo.getLocation());
+ Level == DiagnosticsEngine::Ignored)
+ return;
// Make a copy of this suppressed diagnostic and store it with the
// template-deduction information;
if (*Info) {
- (*Info)->addSuppressedDiagnostic(DiagInfo.getLocation(),
- PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
+ (*Info)->addSuppressedDiagnostic(
+ DiagInfo.getLocation(),
+ PartialDiagnostic(DiagInfo, Context.getDiagAllocator()));
+ if (!Diags.getDiagnosticIDs()->isNote(DiagID))
+ PrintContextStack([Info](SourceLocation Loc, PartialDiagnostic PD) {
+ (*Info)->addSuppressedDiagnostic(Loc, std::move(PD));
+ });
----------------
cor3ntin wrote:
Did you consider doing that in PrintInstantiationStack directly?
ie just modifying `PrintInstantiationStack`'s body such that if we are in a sfinae context we call addSuppressedDiagnostic on that context there, and not have to deal with callbacks outside of this function?
https://github.com/llvm/llvm-project/pull/125453
More information about the cfe-commits
mailing list