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; 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 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))