| ... | @@ -244,7 +244,7 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -244,7 +244,7 @@ pub fn addCases(ctx: *TestContext) !void { |
| 244 | } | 244 | } |
| 245 | | 245 | |
| 246 | { | 246 | { |
| 247 | var case = ctx.exeUsingLlvmBackend("address space pointer coercions", linux_x64); | 247 | var case = ctx.exeUsingLlvmBackend("invalid address space coercion", linux_x64); |
| 248 | case.addError( | 248 | case.addError( |
| 249 | \\fn entry(a: *addrspace(.gs) i32) *i32 { | 249 | \\fn entry(a: *addrspace(.gs) i32) *i32 { |
| 250 | \\ return a; | 250 | \\ return a; |
| ... | @@ -253,21 +253,30 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -253,21 +253,30 @@ pub fn addCases(ctx: *TestContext) !void { |
| 253 | , &[_][]const u8{ | 253 | , &[_][]const u8{ |
| 254 | ":2:12: error: expected *i32, found *addrspace(.gs) i32", | 254 | ":2:12: error: expected *i32, found *addrspace(.gs) i32", |
| 255 | }); | 255 | }); |
| | 256 | } |
| 256 | | 257 | |
| | 258 | { |
| | 259 | var case = ctx.exeUsingLlvmBackend("pointer keeps address space", linux_x64); |
| 257 | case.compiles( | 260 | case.compiles( |
| 258 | \\fn entry(a: *addrspace(.gs) i32) *addrspace(.gs) i32 { | 261 | \\fn entry(a: *addrspace(.gs) i32) *addrspace(.gs) i32 { |
| 259 | \\ return a; | 262 | \\ return a; |
| 260 | \\} | 263 | \\} |
| 261 | \\pub export fn main() void { _ = entry; } | 264 | \\pub export fn main() void { _ = entry; } |
| 262 | ); | 265 | ); |
| | 266 | } |
| 263 | | 267 | |
| | 268 | { |
| | 269 | var case = ctx.exeUsingLlvmBackend("pointer to explicit generic address space coerces to implicit pointer", linux_x64); |
| 264 | case.compiles( | 270 | case.compiles( |
| 265 | \\fn entry(a: *addrspace(.generic) i32) *i32 { | 271 | \\fn entry(a: *addrspace(.generic) i32) *i32 { |
| 266 | \\ return a; | 272 | \\ return a; |
| 267 | \\} | 273 | \\} |
| 268 | \\pub export fn main() void { _ = entry; } | 274 | \\pub export fn main() void { _ = entry; } |
| 269 | ); | 275 | ); |
| | 276 | } |
| 270 | | 277 | |
| | 278 | { |
| | 279 | var case = ctx.exeUsingLlvmBackend("pointers with different address spaces", linux_x64); |
| 271 | case.addError( | 280 | case.addError( |
| 272 | \\fn entry(a: *addrspace(.gs) i32) *addrspace(.fs) i32 { | 281 | \\fn entry(a: *addrspace(.gs) i32) *addrspace(.fs) i32 { |
| 273 | \\ return a; | 282 | \\ return a; |
| ... | @@ -276,7 +285,10 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -276,7 +285,10 @@ pub fn addCases(ctx: *TestContext) !void { |
| 276 | , &[_][]const u8{ | 285 | , &[_][]const u8{ |
| 277 | ":2:12: error: expected *addrspace(.fs) i32, found *addrspace(.gs) i32", | 286 | ":2:12: error: expected *addrspace(.fs) i32, found *addrspace(.gs) i32", |
| 278 | }); | 287 | }); |
| | 288 | } |
| 279 | | 289 | |
| | 290 | { |
| | 291 | var case = ctx.exeUsingLlvmBackend("pointers with different address spaces", linux_x64); |
| 280 | case.addError( | 292 | case.addError( |
| 281 | \\fn entry(a: ?*addrspace(.gs) i32) *i32 { | 293 | \\fn entry(a: ?*addrspace(.gs) i32) *i32 { |
| 282 | \\ return a.?; | 294 | \\ return a.?; |
| ... | @@ -285,7 +297,10 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -285,7 +297,10 @@ pub fn addCases(ctx: *TestContext) !void { |
| 285 | , &[_][]const u8{ | 297 | , &[_][]const u8{ |
| 286 | ":2:13: error: expected *i32, found *addrspace(.gs) i32", | 298 | ":2:13: error: expected *i32, found *addrspace(.gs) i32", |
| 287 | }); | 299 | }); |
| | 300 | } |
| 288 | | 301 | |
| | 302 | { |
| | 303 | var case = ctx.exeUsingLlvmBackend("invalid pointer keeps address space when taking address of dereference", linux_x64); |
| 289 | case.addError( | 304 | case.addError( |
| 290 | \\fn entry(a: *addrspace(.gs) i32) *i32 { | 305 | \\fn entry(a: *addrspace(.gs) i32) *i32 { |
| 291 | \\ return &a.*; | 306 | \\ return &a.*; |
| ... | @@ -294,7 +309,10 @@ pub fn addCases(ctx: *TestContext) !void { | ... | @@ -294,7 +309,10 @@ pub fn addCases(ctx: *TestContext) !void { |
| 294 | , &[_][]const u8{ | 309 | , &[_][]const u8{ |
| 295 | ":2:12: error: expected *i32, found *addrspace(.gs) i32", | 310 | ":2:12: error: expected *i32, found *addrspace(.gs) i32", |
| 296 | }); | 311 | }); |
| | 312 | } |
| 297 | | 313 | |
| | 314 | { |
| | 315 | var case = ctx.exeUsingLlvmBackend("pointer keeps address space when taking address of dereference", linux_x64); |
| 298 | case.compiles( | 316 | case.compiles( |
| 299 | \\fn entry(a: *addrspace(.gs) i32) *addrspace(.gs) i32 { | 317 | \\fn entry(a: *addrspace(.gs) i32) *addrspace(.gs) i32 { |
| 300 | \\ return &a.*; | 318 | \\ return &a.*; |