| author | |
| committer | |
| log | eafb8e85725df570056f2be09173449f802b90fc |
| tree | b26bbe09b21ecfda847426055711de7191130855 |
| parent | 0e6c18c8207cab5d3946f119a51d62f91c1b9028 |
| signature |
closes #12082 files changed, 16 insertions(+), 1 deletions(-)
src/analyze.cpp+1-1| ... | @@ -1184,7 +1184,7 @@ ZigType *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) { | ... | @@ -1184,7 +1184,7 @@ ZigType *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) { |
| 1184 | gen_param_info->src_index = i; | 1184 | gen_param_info->src_index = i; |
| 1185 | gen_param_info->gen_index = SIZE_MAX; | 1185 | gen_param_info->gen_index = SIZE_MAX; |
| 1186 | 1186 | ||
| 1187 | if ((err = ensure_complete_type(g, type_entry))) | 1187 | if ((err = type_resolve(g, type_entry, ResolveStatusZeroBitsKnown))) |
| 1188 | return g->builtin_types.entry_invalid; | 1188 | return g->builtin_types.entry_invalid; |
| 1189 | 1189 | ||
| 1190 | if (is_c_abi) | 1190 | if (is_c_abi) |
test/cases/misc.zig+15| ... | @@ -699,3 +699,18 @@ test "equality compare fn ptrs" { | ... | @@ -699,3 +699,18 @@ test "equality compare fn ptrs" { |
| 699 | var a = emptyFn; | 699 | var a = emptyFn; |
| 700 | assert(a == a); | 700 | assert(a == a); |
| 701 | } | 701 | } |
| 702 | |||
| 703 | test "self reference through fn ptr field" { | ||
| 704 | const S = struct { | ||
| 705 | const A = struct { | ||
| 706 | f: fn (A) u8, | ||
| 707 | }; | ||
| 708 | |||
| 709 | fn foo(a: A) u8 { | ||
| 710 | return 12; | ||
| 711 | } | ||
| 712 | }; | ||
| 713 | var a: S.A = undefined; | ||
| 714 | a.f = S.foo; | ||
| 715 | assert(a.f(a) == 12); | ||
| 716 | } |