From 8a15efb37a33d3c2943be87a19cbf9b5e2e8432b Mon Sep 17 00:00:00 2001 From: ArielG-NV <159081215+ArielG-NV@users.noreply.github.com> Date: Fri, 1 Aug 2025 12:36:29 -0700 Subject: Drain sink when single-argument constructor call fail (#7883) * fix bug * fix test * push test changs for clarity * fix bug * fix test * push test changs for clarity * test what fails * remove redundant code --- source/slang/slang-check-overload.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'source/slang/slang-check-overload.cpp') diff --git a/source/slang/slang-check-overload.cpp b/source/slang/slang-check-overload.cpp index 71e8488d8..9e5560b3a 100644 --- a/source/slang/slang-check-overload.cpp +++ b/source/slang/slang-check-overload.cpp @@ -2727,6 +2727,7 @@ Expr* SemanticsVisitor::ResolveInvoke(InvokeExpr* expr) // bool typeOverloadChecked = false; + DiagnosticSink collectedErrorsSink(getSourceManager(), nullptr); if (expr->arguments.getCount() == 1 && !as(expr) && !as(expr->arguments[0])) { @@ -2735,16 +2736,15 @@ Expr* SemanticsVisitor::ResolveInvoke(InvokeExpr* expr) if (isDeclRefTypeOf(typeType->getType())) { Expr* resultExpr = nullptr; - DiagnosticSink tempSink(getSourceManager(), nullptr); ConversionCost conversionCost = kConversionCost_None; - auto coerceResult = SemanticsVisitor(withSink(&tempSink)) + auto coerceResult = SemanticsVisitor(withSink(&collectedErrorsSink)) ._coerce( CoercionSite::ExplicitCoercion, typeType->getType(), &resultExpr, expr->arguments[0]->type, expr->arguments[0], - &tempSink, + &collectedErrorsSink, &conversionCost); if (auto resultInvokeExpr = as(resultExpr)) { @@ -2963,6 +2963,16 @@ Expr* SemanticsVisitor::ResolveInvoke(InvokeExpr* expr) // for language server to use. if (IsErrorExpr(outExpr)) { + // Drain our error sink of "saved errors" + if (collectedErrorsSink.getErrorCount()) + { + Slang::ComPtr blob; + collectedErrorsSink.getBlobIfNeeded(blob.writeRef()); + getSink()->diagnoseRaw( + Severity::Error, + static_cast(blob->getBufferPointer())); + } + if (auto invokeExpr = as(outExpr)) { invokeExpr->originalFunctionExpr = typeExpr; -- cgit v1.2.3