From d01ec95ebe77d9918b1771b4c2f65b7326032ae7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Tesa=C5=99?= Date: Sun, 9 Aug 2026 00:01:14 +0200 Subject: [PATCH 1/3] Create regression test --- tests/issues/test_issue_7012.odin | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tests/issues/test_issue_7012.odin diff --git a/tests/issues/test_issue_7012.odin b/tests/issues/test_issue_7012.odin new file mode 100644 index 000000000..e478d4998 --- /dev/null +++ b/tests/issues/test_issue_7012.odin @@ -0,0 +1,13 @@ +// Tests issue https://github.com/odin-lang/Odin/issues/7012 +package test_issues + +import "base:intrinsics" + +Foo :: struct($T: typeid) { + x: T, +} + +#assert(intrinsics.type_is_specialization_of(Foo(int), Foo)) +#assert(!intrinsics.type_is_specialization_of(Foo, Foo)) +#assert(!intrinsics.type_is_specialization_of(Foo(int), Foo(int))) +#assert(!intrinsics.type_is_specialization_of(i32, Foo)) From f8a7071069f485f8a88f2be327494b003420939d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Tesa=C5=99?= Date: Sun, 9 Aug 2026 00:06:30 +0200 Subject: [PATCH 2/3] Check identical specialization --- src/check_builtin.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 5dd4cf290..4910dafb0 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -7370,7 +7370,11 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As operand->mode = Addressing_Constant; operand->type = t_untyped_bool; - operand->value = exact_value_bool(check_type_specialization_to(c, s, t, false, false)); + bool is_specialization = false; + if (!are_types_identical(s, t)) { + is_specialization = check_type_specialization_to(c, s, t, false, false); + } + operand->value = exact_value_bool(is_specialization); } break; From 60061fe4ba0e649a9689dd281d53cec569ed3418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Tesa=C5=99?= Date: Sun, 9 Aug 2026 00:15:46 +0200 Subject: [PATCH 3/3] Register issue 7012 regression test --- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 7d8359a6c..4bd301ac1 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -41,6 +41,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_6753.odin %COMMON% || exit /b ..\..\..\odin check ..\test_issue_6874.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "1" || exit /b ..\..\..\odin check ..\test_issue_6979.odin -no-entry-point %COMMON% || exit /b +..\..\..\odin check ..\test_issue_7012.odin -no-entry-point %COMMON% || exit /b ..\..\..\odin build ..\test_issue_7037.odin %COMMON% -o:none || exit /b ..\..\..\odin build ..\test_issue_7188.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_7073-1.odin %COMMON% 2>&1 | find /c "Error:" | findstr /x "2" || exit /b diff --git a/tests/issues/run.sh b/tests/issues/run.sh index cca26fe8a..9c3cfecc3 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -89,6 +89,7 @@ else exit 1 fi $ODIN check ../test_issue_6979.odin -no-entry-point $COMMON_CHECK +$ODIN check ../test_issue_7012.odin -no-entry-point $COMMON_CHECK $ODIN build ../test_issue_7037.odin $COMMON -o:none $ODIN build ../test_issue_7167.odin $COMMON $ODIN build ../test_issue_7188.odin $COMMON