diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b71cec4d9..f1c3232bf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -12841,6 +12841,12 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan } else { str = gb_string_appendc(str, " ---"); } + // NOTE(tf2spi): + // Two proc literals with the same signature output the same expr above + // which poses challenges for name canonicalization. Include the below + // discriminator with the file ID and offset to help with this. + TokenPos pos = ast_token(node).pos; + str = gb_string_append_fmt(str, " /* %d!%d */", pos.file_id, pos.offset); case_end; case_ast_node(cl, CompoundLit, node); diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 184a8f2e4..b051b0035 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -1067,8 +1067,8 @@ gb_internal bool compare_exact_values(TokenKind op, ExactValue x, ExactValue y) case ExactValue_Procedure: switch (op) { - case Token_CmpEq: return x.value_typeid == y.value_typeid; - case Token_NotEq: return x.value_typeid != y.value_typeid; + case Token_CmpEq: return x.value_procedure == y.value_procedure; + case Token_NotEq: return x.value_procedure != y.value_procedure; } break;