Commit 7686165c82

Robin Voetter <robin@voetter.nl>
2021-08-27 05:04:13
Address Spaces: Pointer coercion errors tests
1 parent 6336f08
Changed files (1)
test/cases.zig
@@ -861,7 +861,7 @@ pub fn addCases(ctx: *TestContext) !void {
             "Hello, World!\n",
         );
         try case.files.append(.{
-            .src = 
+            .src =
             \\pub fn print() void {
             \\    asm volatile ("syscall"
             \\        :
@@ -924,7 +924,7 @@ pub fn addCases(ctx: *TestContext) !void {
             },
         );
         try case.files.append(.{
-            .src = 
+            .src =
             \\// dummy comment to make print be on line 2
             \\fn print() void {
             \\    asm volatile ("syscall"
@@ -1819,4 +1819,43 @@ pub fn addCases(ctx: *TestContext) !void {
             ":2:28: error: cannot set address space of local variable 'foo'",
         });
     }
+
+    {
+        var case = ctx.exe("address space pointer coercions", linux_x64);
+        case.addError(
+            \\fn entry(a: *addrspace(.gs) i32) *i32 {
+            \\    return a;
+            \\}
+            \\pub fn main() void { _ = entry; }
+        , &[_][]const u8{
+            ":2:12: error: expected *i32, found *addrspace(.gs) i32",
+        });
+
+        case.addError(
+            \\fn entry(a: *addrspace(.gs) i32) *addrspace(.fs) i32 {
+            \\    return a;
+            \\}
+            \\pub fn main() void { _ = entry; }
+        , &[_][]const u8{
+            ":2:12: error: expected *addrspace(.fs) i32, found *addrspace(.gs) i32",
+        });
+
+        case.addError(
+            \\fn entry(a: ?*addrspace(.gs) i32) *i32 {
+            \\    return a.?;
+            \\}
+            \\pub fn main() void { _ = entry; }
+        , &[_][]const u8{
+            ":2:13: error: expected *i32, found *addrspace(.gs) i32",
+        });
+
+        case.addError(
+            \\fn entry(a: *addrspace(.gs) i32) *i32 {
+            \\    return &a.*;
+            \\}
+            \\pub fn main() void { _ = entry; }
+        , &[_][]const u8{
+            ":2:12: error: expected *i32, found *addrspace(.gs) i32",
+        });
+    }
 }