| author | |
| committer | |
| log | 9c9eefc841b577f646a54e74c8970e074162b594 |
| tree | f746c761e0e5a2f58c009962cd65c17ec2804351 |
| parent | dd5b2d1b04197903489f5da9c178e17e61bb55e3 |
| signature |
closes #15362 files changed, 16 insertions(+), 1 deletions(-)
src/analyze.cpp+2-1| ... | @@ -1470,7 +1470,8 @@ static bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry) { | ... | @@ -1470,7 +1470,8 @@ static bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry) { |
| 1470 | case ZigTypeIdArray: | 1470 | case ZigTypeIdArray: |
| 1471 | return type_allowed_in_extern(g, type_entry->data.array.child_type); | 1471 | return type_allowed_in_extern(g, type_entry->data.array.child_type); |
| 1472 | case ZigTypeIdFn: | 1472 | case ZigTypeIdFn: |
| 1473 | return type_entry->data.fn.fn_type_id.cc == CallingConventionC; | 1473 | return type_entry->data.fn.fn_type_id.cc == CallingConventionC || |
| 1474 | type_entry->data.fn.fn_type_id.cc == CallingConventionStdcall; | ||
| 1474 | case ZigTypeIdPointer: | 1475 | case ZigTypeIdPointer: |
| 1475 | if (type_size(g, type_entry) == 0) | 1476 | if (type_size(g, type_entry) == 0) |
| 1476 | return false; | 1477 | return false; |
test/cases/fn.zig+14| ... | @@ -191,3 +191,17 @@ test "return inner function which references comptime variable of outer function | ... | @@ -191,3 +191,17 @@ test "return inner function which references comptime variable of outer function |
| 191 | var func = outer(10); | 191 | var func = outer(10); |
| 192 | assert(func(3) == 7); | 192 | assert(func(3) == 7); |
| 193 | } | 193 | } |
| 194 | |||
| 195 | test "extern struct with stdcallcc fn pointer" { | ||
| 196 | const S = extern struct { | ||
| 197 | ptr: stdcallcc fn () i32, | ||
| 198 | |||
| 199 | stdcallcc fn foo() i32 { | ||
| 200 | return 1234; | ||
| 201 | } | ||
| 202 | }; | ||
| 203 | |||
| 204 | var s: S = undefined; | ||
| 205 | s.ptr = S.foo; | ||
| 206 | assert(s.ptr() == 1234); | ||
| 207 | } |