Commit 6b037bad59
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;
+}