Merge pull request #3368 from mikdusan/issue.3367

fix: container member access `usingnamespace` decls fails
master
Michael Dusan 2019-10-05 15:47:07 -04:00 committed by GitHub
commit a82c6453c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 2 deletions

View File

@ -17673,8 +17673,7 @@ static IrInstruction *ir_analyze_container_member_access_inner(IrAnalyze *ira,
if (!is_slice(bare_struct_type)) {
ScopeDecls *container_scope = get_container_scope(bare_struct_type);
assert(container_scope != nullptr);
auto entry = container_scope->decl_table.maybe_get(field_name);
Tld *tld = entry ? entry->value : nullptr;
auto tld = find_container_decl(ira->codegen, container_scope, field_name);
if (tld) {
if (tld->id == TldIdFn) {
resolve_top_level_decl(ira->codegen, tld, source_instr->source_node, false);

View File

@ -34,6 +34,7 @@ comptime {
_ = @import("behavior/bugs/2692.zig");
_ = @import("behavior/bugs/3046.zig");
_ = @import("behavior/bugs/3112.zig");
_ = @import("behavior/bugs/3367.zig");
_ = @import("behavior/bugs/394.zig");
_ = @import("behavior/bugs/421.zig");
_ = @import("behavior/bugs/529.zig");

View File

@ -0,0 +1,15 @@
const std = @import("std");
const expect = std.testing.expect;
const Foo = struct {
usingnamespace Mixin;
};
const Mixin = struct {
pub fn two(self: Foo) void {}
};
test "container member access usingnamespace decls" {
var foo = Foo{};
foo.two();
}