zig

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

commit 300c83d8930d15d4bc4e34fe11e3b6bf3130ecc4 (tree)
parent 5f28a9d23851d94edc2b24e549b7c5abbbf23f68
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Wed, 25 Oct 2017 23:18:18 -0400

fix crash on field access of opaque type

Diffstat:
Msrc/analyze.cpp | 2+-
Mtest/compile_errors.zig | 14++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/analyze.cpp b/src/analyze.cpp @@ -2804,7 +2804,6 @@ static bool is_container(TypeTableEntry *type_entry) { switch (type_entry->id) { case TypeTableEntryIdInvalid: case TypeTableEntryIdVar: - case TypeTableEntryIdOpaque: zig_unreachable(); case TypeTableEntryIdStruct: case TypeTableEntryIdEnum: @@ -2831,6 +2830,7 @@ static bool is_container(TypeTableEntry *type_entry) { case TypeTableEntryIdBoundFn: case TypeTableEntryIdEnumTag: case TypeTableEntryIdArgTuple: + case TypeTableEntryIdOpaque: return false; } zig_unreachable(); diff --git a/test/compile_errors.zig b/test/compile_errors.zig @@ -2238,4 +2238,18 @@ pub fn addCases(cases: &tests.CompileErrorContext) { \\} , ".tmp_source.zig:37:16: error: cannot store runtime value in compile time variable"); + + cases.add("field access of opaque type", + \\const MyType = @OpaqueType(); + \\ + \\export fn entry() -> bool { + \\ var x: i32 = 1; + \\ return bar(@ptrCast(&MyType, &x)); + \\} + \\ + \\fn bar(x: &MyType) -> bool { + \\ return x.blah; + \\} + , + ".tmp_source.zig:9:13: error: type '&MyType' does not support field access"); }