variables are allowed to be pointers to opaque

This commit is contained in:
Andrew Kelley 2017-09-10 00:34:44 -04:00
parent b5d9584e6f
commit b00b7bd290
2 changed files with 14 additions and 1 deletions

View File

@ -9828,7 +9828,11 @@ static VarClassRequired get_var_class_required(TypeTableEntry *type_entry) {
return VarClassRequiredConst;
case TypeTableEntryIdPointer:
return get_var_class_required(type_entry->data.pointer.child_type);
if (type_entry->data.pointer.child_type->id == TypeTableEntryIdOpaque) {
return VarClassRequiredAny;
} else {
return get_var_class_required(type_entry->data.pointer.child_type);
}
case TypeTableEntryIdArray:
return get_var_class_required(type_entry->data.array.child_type);
case TypeTableEntryIdMaybe:

View File

@ -546,3 +546,12 @@ test "@OpaqueType" {
assert(mem.eql(u8, @typeName(OpaqueA), "OpaqueA"));
assert(mem.eql(u8, @typeName(OpaqueB), "OpaqueB"));
}
test "variable is allowed to be a pointer to an opaque type" {
var x: i32 = 1234;
_ = hereIsAnOpaqueType(@ptrCast(&OpaqueA, &x));
}
fn hereIsAnOpaqueType(ptr: &OpaqueA) -> &OpaqueA {
var a = ptr;
return a;
}