Commit b00b7bd290
src/ir.cpp
@@ -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:
test/cases/misc.zig
@@ -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;
+}