Commit 75a4c02880

Alexandros Naskos <alex_naskos@hotmail.com>
2020-05-18 18:28:26
Updated test
1 parent 400a91e
Changed files (2)
test
stage1
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
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");