| author | |
| committer | |
| log | 0ccc18686921dce8e7f2feb95eed83b894ca8df4 |
| tree | f41d5aa70377acd832edb05243f00ea91ff51d82 |
| parent | bbb565a21e40f305b9fa10c385124455fafe647f |
See #7702 files changed, 15 insertions(+), 2 deletions(-)
src/analyze.cpp+2-2| ... | ... | @@ -3753,13 +3753,13 @@ static bool is_container(TypeTableEntry *type_entry) { |
| 3753 | 3753 | } |
| 3754 | 3754 | |
| 3755 | 3755 | bool is_container_ref(TypeTableEntry *type_entry) { |
| 3756 | return (type_entry->id == TypeTableEntryIdPointer) ? | |
| 3756 | return (type_entry->id == TypeTableEntryIdPointer && type_entry->data.pointer.ptr_len == PtrLenSingle) ? | |
| 3757 | 3757 | is_container(type_entry->data.pointer.child_type) : is_container(type_entry); |
| 3758 | 3758 | } |
| 3759 | 3759 | |
| 3760 | 3760 | TypeTableEntry *container_ref_type(TypeTableEntry *type_entry) { |
| 3761 | 3761 | assert(is_container_ref(type_entry)); |
| 3762 | return (type_entry->id == TypeTableEntryIdPointer) ? | |
| 3762 | return (type_entry->id == TypeTableEntryIdPointer && type_entry->data.pointer.ptr_len == PtrLenSingle) ? | |
| 3763 | 3763 | type_entry->data.pointer.child_type : type_entry; |
| 3764 | 3764 | } |
| 3765 | 3765 |
test/compile_errors.zig+13| ... | ... | @@ -1,6 +1,19 @@ |
| 1 | 1 | const tests = @import("tests.zig"); |
| 2 | 2 | |
| 3 | 3 | pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 4 | cases.add( | |
| 5 | "field access of unknown length pointer", | |
| 6 | \\const Foo = extern struct { | |
| 7 | \\ a: i32, | |
| 8 | \\}; | |
| 9 | \\ | |
| 10 | \\export fn entry(foo: [*]Foo) void { | |
| 11 | \\ foo.a += 1; | |
| 12 | \\} | |
| 13 | , | |
| 14 | ".tmp_source.zig:6:8: error: type '[*]Foo' does not support field access", | |
| 15 | ); | |
| 16 | ||
| 4 | 17 | cases.add( |
| 5 | 18 | "unknown length pointer to opaque", |
| 6 | 19 | \\export const T = [*]@OpaqueType(); |