Commit 9c9eefc841

Andrew Kelley <superjoe30@gmail.com>
2018-09-17 17:22:30
allow extern structs to have stdcallcc function pointers
closes #1536
1 parent dd5b2d1
Changed files (2)
src
test
cases
src/analyze.cpp
@@ -1470,7 +1470,8 @@ static bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry) {
         case ZigTypeIdArray:
             return type_allowed_in_extern(g, type_entry->data.array.child_type);
         case ZigTypeIdFn:
-            return type_entry->data.fn.fn_type_id.cc == CallingConventionC;
+            return type_entry->data.fn.fn_type_id.cc == CallingConventionC ||
+                 type_entry->data.fn.fn_type_id.cc == CallingConventionStdcall;
         case ZigTypeIdPointer:
             if (type_size(g, type_entry) == 0)
                 return false;
test/cases/fn.zig
@@ -191,3 +191,17 @@ test "return inner function which references comptime variable of outer function
     var func = outer(10);
     assert(func(3) == 7);
 }
+
+test "extern struct with stdcallcc fn pointer" {
+    const S = extern struct {
+        ptr: stdcallcc fn () i32,
+
+        stdcallcc fn foo() i32 {
+            return 1234;
+        }
+    };
+
+    var s: S = undefined;
+    s.ptr = S.foo;
+    assert(s.ptr() == 1234);
+}