fix crash on field access of opaque type

This commit is contained in:
Andrew Kelley 2017-10-25 23:18:18 -04:00
parent 5f28a9d238
commit 300c83d893
2 changed files with 15 additions and 1 deletions

View File

@ -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();

View File

@ -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");
}