Commit f296eec294

mlugg <mlugg@mlugg.co.uk>
2025-03-25 14:57:55
Zcu: resolve layout of analyzed declaration type
Resolves: #19888
1 parent eee752e
Changed files (2)
src
test
behavior
src/Zcu/PerThread.zig
@@ -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);
test/behavior/generics.zig
@@ -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);
+}