@@ -1444,6 +1444,8 @@ fn analyzeNavType(pt: Zcu.PerThread, nav_id: InternPool.Nav.Index) Zcu.CompileEr
|
||||
break :ty .fromInterned(type_ref.toInterned().?);
|
||||
};
|
||||
|
||||
try resolved_ty.resolveLayout(pt);
|
||||
|
||||
// In the case where the type is specified, this function is also responsible for resolving
|
||||
// the pointer modifiers, i.e. alignment, linksection, addrspace.
|
||||
const modifiers = try sema.resolveNavPtrModifiers(&block, zir_decl, inst_resolved.inst, resolved_ty);
|
||||
|
||||
@@ -631,3 +631,18 @@ test "instantiate coerced generic function" {
|
||||
var x: u8 = 20;
|
||||
try coerced(u8, &x);
|
||||
}
|
||||
|
||||
test "generic struct captures slice of another struct" {
|
||||
const S = struct {
|
||||
const Foo = struct { x: u32 };
|
||||
const foo_array: [2]Foo = undefined;
|
||||
|
||||
fn Bar(foo_slice: []const Foo) type {
|
||||
return struct {
|
||||
const foo_ptr: [*]const Foo = foo_slice.ptr;
|
||||
};
|
||||
}
|
||||
};
|
||||
const T = S.Bar(&S.foo_array);
|
||||
comptime std.debug.assert(T.foo_ptr == &S.foo_array);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user