From 391a862e4f8a0b1d34de5edd6e25ecc3a214616e Mon Sep 17 00:00:00 2001 From: kalsprite Date: Fri, 7 Aug 2026 15:58:25 -0700 Subject: [PATCH] make tok stable under multi-thread --- src/checker.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index 0c4b6788f..a69d8c500 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -2050,18 +2050,26 @@ gb_internal bool redeclaration_error(String name, Entity *prev, Entity *found) { // NOTE(bill): Error should have been handled already return false; } + // NOTE: the insertion order is a race between the files of a package, so anchor on the + // lower position to keep the diagnostic stable + TokenPos lo = prev->token.pos; + TokenPos hi = pos; + if (hi < lo) { + lo = pos; + hi = prev->token.pos; + } if (found->flags & EntityFlag_Result) { - error(prev->token, + error(lo, "Direct shadowing of the named return value '%.*s' in this scope\n" "\tat %s", LIT(name), - token_pos_to_string(pos)); + token_pos_to_string(hi)); } else { - error(prev->token, + error(lo, "Redeclaration of '%.*s' in this scope\n" "\tat %s", LIT(name), - token_pos_to_string(pos)); + token_pos_to_string(hi)); } } return false;