[clang] [clang] print correct context for diagnostics suppressed by deduction (PR #125453)
Younan Zhang via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 7 21:44:04 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));
+ });
----------------
zyn0217 wrote:
If I read it right, the issue arises because we weren't recording `instantiation required at...` in TemplateDeductionInfo, right? Is there any risk of emitting duplicate diagnostics by doing so? (I might be overconcerned if I'm misremembering some implementation details.)
https://github.com/llvm/llvm-project/pull/125453
More information about the cfe-commits
mailing list