zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 0ccc18686921dce8e7f2feb95eed83b894ca8df4 (tree)
parent bbb565a21e40f305b9fa10c385124455fafe647f
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue,  5 Jun 2018 20:24:11 -0400

disable field access for unknown length pointers

See #770

Diffstat:
Msrc/analyze.cpp | 4++--
Mtest/compile_errors.zig | 13+++++++++++++
2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/analyze.cpp b/src/analyze.cpp @@ -3753,13 +3753,13 @@ static bool is_container(TypeTableEntry *type_entry) { } bool is_container_ref(TypeTableEntry *type_entry) { - return (type_entry->id == TypeTableEntryIdPointer) ? + return (type_entry->id == TypeTableEntryIdPointer && type_entry->data.pointer.ptr_len == PtrLenSingle) ? is_container(type_entry->data.pointer.child_type) : is_container(type_entry); } TypeTableEntry *container_ref_type(TypeTableEntry *type_entry) { assert(is_container_ref(type_entry)); - return (type_entry->id == TypeTableEntryIdPointer) ? + return (type_entry->id == TypeTableEntryIdPointer && type_entry->data.pointer.ptr_len == PtrLenSingle) ? type_entry->data.pointer.child_type : type_entry; } diff --git a/test/compile_errors.zig b/test/compile_errors.zig @@ -2,6 +2,19 @@ const tests = @import("tests.zig"); pub fn addCases(cases: *tests.CompileErrorContext) void { cases.add( + "field access of unknown length pointer", + \\const Foo = extern struct { + \\ a: i32, + \\}; + \\ + \\export fn entry(foo: [*]Foo) void { + \\ foo.a += 1; + \\} + , + ".tmp_source.zig:6:8: error: type '[*]Foo' does not support field access", + ); + + cases.add( "unknown length pointer to opaque", \\export const T = [*]@OpaqueType(); ,