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:
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();
,