Commit eaa6b04c3c
src/Sema.zig
@@ -4967,6 +4967,8 @@ fn lookupInNamespace(
var it = check_ns.usingnamespace_set.iterator();
while (it.next()) |entry| {
const sub_usingnamespace_decl_index = entry.key_ptr.*;
+ // Skip the decl we're currently analysing.
+ if (sub_usingnamespace_decl_index == sema.owner_decl_index) continue;
const sub_usingnamespace_decl = mod.declPtr(sub_usingnamespace_decl_index);
const sub_is_pub = entry.value_ptr.*;
if (!sub_is_pub and src_file != sub_usingnamespace_decl.getFileScope()) {
test/behavior/basic.zig
@@ -1086,3 +1086,26 @@ test "inline call of function with a switch inside the return statement" {
};
try expect(S.foo(1) == 1);
}
+
+test "namespace lookup ignores decl causing the lookup" {
+ if (builtin.zig_backend == .stage1) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+
+ const S = struct {
+ fn Mixin(comptime T: type) type {
+ return struct {
+ fn foo() void {
+ const set = std.EnumSet(T.E).init(undefined);
+ _ = set;
+ }
+ };
+ }
+
+ const E = enum { a, b };
+ usingnamespace Mixin(@This());
+ };
+ _ = S.foo();
+}