From 75a4c02880393c08e245c80ed6114e97e2c47a25 Mon Sep 17 00:00:00 2001 From: Alexandros Naskos Date: Mon, 18 May 2020 19:28:26 +0300 Subject: [PATCH] Updated test --- test/stage1/behavior.zig | 2 +- test/stage1/behavior/bugs/4328_5305.zig | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/test/stage1/behavior.zig b/test/stage1/behavior.zig index a420fd688..d4dc641ad 100644 --- a/test/stage1/behavior.zig +++ b/test/stage1/behavior.zig @@ -40,7 +40,7 @@ comptime { _ = @import("behavior/bugs/3384.zig"); _ = @import("behavior/bugs/3586.zig"); _ = @import("behavior/bugs/3742.zig"); - _ = @import("behavior/bugs/4328.zig"); + _ = @import("behavior/bugs/4328_5305.zig"); _ = @import("behavior/bugs/4560.zig"); _ = @import("behavior/bugs/4769_a.zig"); _ = @import("behavior/bugs/4769_b.zig"); diff --git a/test/stage1/behavior/bugs/4328_5305.zig b/test/stage1/behavior/bugs/4328_5305.zig index bbad666c4..0196af174 100644 --- a/test/stage1/behavior/bugs/4328_5305.zig +++ b/test/stage1/behavior/bugs/4328_5305.zig @@ -3,9 +3,11 @@ const expectEqual = @import("std").testing.expectEqual; const FILE = extern struct { dummy_field: u8, }; + extern fn printf([*c]const u8, ...) c_int; extern fn fputs([*c]const u8, noalias [*c]FILE) c_int; extern fn ftell([*c]FILE) c_long; +extern fn fopen([*c]const u8, [*c]const u8) [*c]FILE; const S = extern struct { state: c_short, @@ -47,3 +49,23 @@ test "Peer resolution of extern function calls in @TypeOf" { Test.doTheTest(); comptime Test.doTheTest(); } + +test "Extern function calls, dereferences and field access in @TypeOf" { + const Test = struct { + fn test_fn_1(a: c_long) @TypeOf(fopen("test", "r").*) { + return .{ .dummy_field = 0 }; + } + + fn test_fn_2(a: var) @TypeOf(fopen("test", "r").*.dummy_field) { + return 255; + } + + fn doTheTest() void { + expectEqual(FILE, @TypeOf(test_fn_1(0))); + expectEqual(u8, @TypeOf(test_fn_2(0))); + } + }; + + Test.doTheTest(); + comptime Test.doTheTest(); +} \ No newline at end of file