From 8609eb3e4aec7ed4ea04bdcb8d370730469ee97f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Oct 2026 15:17:16 +0100 Subject: [PATCH] Fix #7693 muted error follow-up lines; Fix distinct records against `$T/Record` constraints --- src/check_type.cpp | 5 +++++ src/error.cpp | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index 2a955b189..61f5a7b3a 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -1865,6 +1865,11 @@ gb_internal SubstResult subst_unify_constraint(CheckerContext *c, Type *spec, Ty if (is_type_untyped(tb)) { r = subst_unify(c, spec, default_type(source), subst); } else if (sb->kind == Type_Struct || sb->kind == Type_Union) { + if (tb == sb && + ((tb->kind == Type_Struct && tb->Struct.polymorphic_parent == nullptr) || + (tb->kind == Type_Union && tb->Union.polymorphic_parent == nullptr))) { + return Subst_Matched; + } r = subst_unify(c, spec, source, subst); // record conformance keeps the Named types (match params) } else { r = subst_unify(c, sb, tb, subst); // general: base-typed structural match diff --git a/src/error.cpp b/src/error.cpp index 77fef3cea..5879fbeec 100644 --- a/src/error.cpp +++ b/src/error.cpp @@ -251,6 +251,10 @@ gb_internal void print_all_errors(void); typedef ERROR_OUT_PROC(ErrorOutProc); gb_internal ERROR_OUT_PROC(default_error_out_va) { + if (global_error_mute_depth > 0) { + // NOTE(bill): the error this would continue was muted, so there is no current error value + return; + } char buf[4096] = {}; isize len = gb_snprintf_va(buf, gb_size_of(buf), fmt, va); isize n = len-1; @@ -765,10 +769,17 @@ gb_internal void warning_va(TokenPos const &pos, TokenPos end, char const *fmt, gb_internal void error_line_va(char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + return; + } error_out_va(fmt, va); } gb_internal void error_no_newline_va(TokenPos const &pos, char const *fmt, va_list va) { + if (global_error_mute_depth > 0) { + global_error_mute_count += 1; + return; + } global_error_collector.count.fetch_add(1); mutex_lock(&global_error_collector.mutex); if (global_error_collector.count.load() > MAX_ERROR_COLLECTOR_COUNT()) {