| ... | @@ -375,12 +375,19 @@ test "comptime @bitCast packed struct to int and back" { | ... | @@ -375,12 +375,19 @@ test "comptime @bitCast packed struct to int and back" { |
| 375 | } | 375 | } |
| 376 | } | 376 | } |
| 377 | | 377 | |
| 378 | test "comptime bitcast with fields following a float" { | 378 | test "comptime bitcast with fields following f80" { |
| 379 | if (builtin.zig_backend != .stage1) return error.SkipZigTest; // TODO: https://github.com/ziglang/zig/issues/13214 | 379 | if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; |
| | 380 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; |
| | 381 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; |
| | 382 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; |
| | 383 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; |
| | 384 | |
| | 385 | const FloatT = extern struct { f: f80, x: u128 align(16) }; |
| | 386 | const x: FloatT = .{ .f = 0.5, .x = 123 }; |
| | 387 | var x_as_uint: u256 = comptime @bitCast(u256, x); |
| 380 | | 388 | |
| 381 | const FloatT = extern struct { f: f80, x: u128 }; | 389 | try expect(x.f == @bitCast(FloatT, x_as_uint).f); |
| 382 | var x: FloatT = .{ .f = 0.5, .x = 123 }; | 390 | try expect(x.x == @bitCast(FloatT, x_as_uint).x); |
| 383 | try expect(@bitCast(u256, x) == comptime @bitCast(u256, @as(FloatT, .{ .f = 0.5, .x = 123 }))); | | |
| 384 | } | 391 | } |
| 385 | | 392 | |
| 386 | test "bitcast vector to integer and back" { | 393 | test "bitcast vector to integer and back" { |