Commit eafb8e8572

Andrew Kelley <superjoe30@gmail.com>
2018-09-25 16:45:11
fix self reference through fn ptr field crash
closes #1208
1 parent 0e6c18c
Changed files (2)
src
test
cases
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)
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);
+}