diff --git a/src/types.cpp b/src/types.cpp index a71e22f9f..ff5147574 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2682,6 +2682,8 @@ gb_internal bool is_type_constant_type_for_unions(Type *t) { return is_type_constant_type(t->Array.elem); case Type_EnumeratedArray: return is_type_constant_type(t->EnumeratedArray.elem); + case Type_FixedCapacityDynamicArray: + return is_type_constant_type_for_unions(t->FixedCapacityDynamicArray.elem); case Type_Struct: { for (Entity *field : t->Struct.fields) { diff --git a/tests/issues/test_issue_7089.odin b/tests/issues/test_issue_7089.odin new file mode 100644 index 000000000..f7474e6f0 --- /dev/null +++ b/tests/issues/test_issue_7089.odin @@ -0,0 +1,24 @@ +package test_issues + +import "core:testing" + +@(test) +test_issue_7089 :: proc(t: ^testing.T) { + { + A0 :: [dynamic; 8]int + A1 :: union { A0 } + A2 :: struct { elements: [dynamic; 8]A1 } + + value := A2{elements = {A0{1}, A0{2}, A0{3}}} + testing.expect_value(t, len(value.elements), 3) + } + + { + A0 :: struct { _: int } + A1 :: union { A0 } + A2 :: struct { elements: [dynamic; 8]A1 } + + value := A2{elements = {A0{1}, A0{2}, A0{3}}} + testing.expect_value(t, len(value.elements), 3) + } +}