@@ -533,9 +533,10 @@ ZigType *get_pointer_to_type_extra2(CodeGen *g, ZigType *child_type, bool is_con
533
533
534
534
TypeId type_id = {};
535
535
ZigType **parent_pointer = nullptr ;
536
+ ZigValue *sentinel_unwrapped = get_sentinel_value (sentinel);
536
537
if (host_int_bytes != 0 || is_volatile || byte_alignment != 0 || ptr_len != PtrLenSingle ||
537
538
allow_zero || vector_index != VECTOR_INDEX_NONE || inferred_struct_field != nullptr ||
538
- sentinel != nullptr )
539
+ sentinel_unwrapped != nullptr )
539
540
{
540
541
type_id.id = ZigTypeIdPointer;
541
542
type_id.data .pointer .codegen = g;
@@ -549,7 +550,6 @@ ZigType *get_pointer_to_type_extra2(CodeGen *g, ZigType *child_type, bool is_con
549
550
type_id.data .pointer .allow_zero = allow_zero;
550
551
type_id.data .pointer .vector_index = vector_index;
551
552
type_id.data .pointer .inferred_struct_field = inferred_struct_field;
552
- assert (!sentinel || sentinel->type ->id == ZigTypeIdOptional);
553
553
type_id.data .pointer .sentinel = sentinel;
554
554
555
555
auto existing_entry = g->type_table .maybe_get (type_id);
@@ -578,13 +578,13 @@ ZigType *get_pointer_to_type_extra2(CodeGen *g, ZigType *child_type, bool is_con
578
578
buf_appendf (&entry->name , " [*" );
579
579
break ;
580
580
case PtrLenC:
581
- assert (sentinel == nullptr );
581
+ assert (sentinel_unwrapped == nullptr );
582
582
buf_appendf (&entry->name , " [*c]" );
583
583
break ;
584
584
}
585
- if (sentinel != nullptr ) {
585
+ if (sentinel_unwrapped != nullptr ) {
586
586
buf_appendf (&entry->name , " :" );
587
- render_const_value (g, &entry->name , sentinel );
587
+ render_const_value (g, &entry->name , sentinel_unwrapped );
588
588
}
589
589
switch (ptr_len) {
590
590
case PtrLenSingle:
@@ -623,7 +623,6 @@ ZigType *get_pointer_to_type_extra2(CodeGen *g, ZigType *child_type, bool is_con
623
623
entry->data .pointer .allow_zero = allow_zero;
624
624
entry->data .pointer .vector_index = vector_index;
625
625
entry->data .pointer .inferred_struct_field = inferred_struct_field;
626
- assert (!sentinel || sentinel->type ->id == ZigTypeIdOptional);
627
626
entry->data .pointer .sentinel = sentinel;
628
627
629
628
append_ptr_type_attrs (&entry->name , entry);
@@ -768,7 +767,6 @@ ZigType *get_array_type(CodeGen *g, ZigType *child_type, uint64_t array_size, Zi
768
767
type_id.data .array .codegen = g;
769
768
type_id.data .array .child_type = child_type;
770
769
type_id.data .array .size = array_size;
771
- assert (!sentinel || sentinel->type ->id == ZigTypeIdOptional);
772
770
type_id.data .array .sentinel = sentinel;
773
771
auto existing_entry = g->type_table .maybe_get (type_id);
774
772
if (existing_entry) {
@@ -778,21 +776,22 @@ ZigType *get_array_type(CodeGen *g, ZigType *child_type, uint64_t array_size, Zi
778
776
assert (type_is_resolved (child_type, ResolveStatusSizeKnown));
779
777
780
778
ZigType *entry = new_type_table_entry (ZigTypeIdArray);
779
+ ZigValue *sentinel_unwrapped = get_sentinel_value (sentinel);
781
780
782
781
buf_resize (&entry->name , 0 );
783
782
buf_appendf (&entry->name , " [%" ZIG_PRI_u64, array_size);
784
- if (sentinel != nullptr ) {
785
- assert (sentinel ->type == get_optional_type (g, child_type) );
783
+ if (sentinel_unwrapped != nullptr ) {
784
+ assert (sentinel_unwrapped ->type == child_type);
786
785
buf_appendf (&entry->name , " :" );
787
- render_const_value (g, &entry->name , sentinel );
786
+ render_const_value (g, &entry->name , sentinel_unwrapped );
788
787
}
789
788
buf_appendf (&entry->name , " ]%s" , buf_ptr (&child_type->name ));
790
789
791
790
size_t full_array_size;
792
791
if (array_size == 0 ) {
793
792
full_array_size = 0 ;
794
793
} else {
795
- full_array_size = array_size + ((sentinel != nullptr ) ? 1 : 0 );
794
+ full_array_size = array_size + ((sentinel_unwrapped != nullptr ) ? 1 : 0 );
796
795
}
797
796
798
797
entry->size_in_bits = child_type->size_in_bits * full_array_size;
@@ -801,7 +800,6 @@ ZigType *get_array_type(CodeGen *g, ZigType *child_type, uint64_t array_size, Zi
801
800
802
801
entry->data .array .child_type = child_type;
803
802
entry->data .array .len = array_size;
804
- assert (!sentinel || sentinel->type ->id == ZigTypeIdOptional);
805
803
entry->data .array .sentinel = sentinel;
806
804
807
805
g->type_table .put (type_id, entry);
0 commit comments