zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit eafb8e85725df570056f2be09173449f802b90fc (tree)
parent 0e6c18c8207cab5d3946f119a51d62f91c1b9028
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Tue, 25 Sep 2018 10:45:11 -0400

fix self reference through fn ptr field crash

closes #1208

Diffstat:
Msrc/analyze.cpp | 2+-
Mtest/cases/misc.zig | 15+++++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/analyze.cpp b/src/analyze.cpp @@ -1184,7 +1184,7 @@ ZigType *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) { gen_param_info->src_index = i; gen_param_info->gen_index = SIZE_MAX; - if ((err = ensure_complete_type(g, type_entry))) + if ((err = type_resolve(g, type_entry, ResolveStatusZeroBitsKnown))) return g->builtin_types.entry_invalid; if (is_c_abi) diff --git a/test/cases/misc.zig b/test/cases/misc.zig @@ -699,3 +699,18 @@ test "equality compare fn ptrs" { var a = emptyFn; assert(a == a); } + +test "self reference through fn ptr field" { + const S = struct { + const A = struct { + f: fn (A) u8, + }; + + fn foo(a: A) u8 { + return 12; + } + }; + var a: S.A = undefined; + a.f = S.foo; + assert(a.f(a) == 12); +}