Commit 6b037bad59

Veikka Tuominen <git@vexu.eu>
2023-01-15 13:06:59
Sema: ignore dependency loops in typeinfo decls
This matches stage1 behavior. Closes #14322
1 parent 94be9dc
Changed files (2)
src
test
behavior
src/Sema.zig
@@ -16258,6 +16258,7 @@ fn typeInfoNamespaceDecls(
     for (decls) |decl_index| {
         const decl = sema.mod.declPtr(decl_index);
         if (decl.kind == .@"usingnamespace") {
+            if (decl.analysis == .in_progress) continue;
             try sema.mod.ensureDeclAnalyzed(decl_index);
             var buf: Value.ToTypeBuffer = undefined;
             const new_ns = decl.val.toType(&buf).getNamespace().?;
test/behavior/type_info.zig
@@ -590,3 +590,16 @@ test "@typeInfo decls and usingnamespace" {
     try expectEqualStrings(decls[1].name, "y");
     try expectEqualStrings(decls[2].name, "z");
 }
+
+test "@typeInfo decls ignore dependency loops" {
+    const S = struct {
+        fn Def(comptime T: type) type {
+            std.debug.assert(@typeInfo(T).Struct.decls.len == 1);
+            return struct {
+                const foo = u32;
+            };
+        }
+        usingnamespace Def(@This());
+    };
+    _ = S.foo;
+}