authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-10 00:34:44-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-09-10 00:34:44-04:00
logb00b7bd29037f25ee155f07e74fcb5de44918926
tree7f8099a954d8ca7b09befe8c2aa2209c20be7d97
parentb5d9584e6fc9e113435e0d555c2df62379cdcb8b

variables are allowed to be pointers to opaque


2 files changed, 14 insertions(+), 1 deletions(-)

src/ir.cpp+5-1
...@@ -9828,7 +9828,11 @@ static VarClassRequired get_var_class_required(TypeTableEntry *type_entry) {...@@ -9828,7 +9828,11 @@ static VarClassRequired get_var_class_required(TypeTableEntry *type_entry) {
9828 return VarClassRequiredConst;9828 return VarClassRequiredConst;
98299829
9830 case TypeTableEntryIdPointer:9830 case TypeTableEntryIdPointer:
9831 return get_var_class_required(type_entry->data.pointer.child_type);9831 if (type_entry->data.pointer.child_type->id == TypeTableEntryIdOpaque) {
9832 return VarClassRequiredAny;
9833 } else {
9834 return get_var_class_required(type_entry->data.pointer.child_type);
9835 }
9832 case TypeTableEntryIdArray:9836 case TypeTableEntryIdArray:
9833 return get_var_class_required(type_entry->data.array.child_type);9837 return get_var_class_required(type_entry->data.array.child_type);
9834 case TypeTableEntryIdMaybe:9838 case TypeTableEntryIdMaybe:
test/cases/misc.zig+9
...@@ -546,3 +546,12 @@ test "@OpaqueType" {...@@ -546,3 +546,12 @@ test "@OpaqueType" {
546 assert(mem.eql(u8, @typeName(OpaqueA), "OpaqueA"));546 assert(mem.eql(u8, @typeName(OpaqueA), "OpaqueA"));
547 assert(mem.eql(u8, @typeName(OpaqueB), "OpaqueB"));547 assert(mem.eql(u8, @typeName(OpaqueB), "OpaqueB"));
548}548}
549
550test "variable is allowed to be a pointer to an opaque type" {
551 var x: i32 = 1234;
552 _ = hereIsAnOpaqueType(@ptrCast(&OpaqueA, &x));
553}
554fn hereIsAnOpaqueType(ptr: &OpaqueA) -> &OpaqueA {
555 var a = ptr;
556 return a;
557}