diff options
| author | LeRoyce Pearson <contact@leroycepearson.dev> | 2022-08-09 16:08:59 -0600 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-08-10 16:14:30 -0400 |
| commit | 0e118ed0aca3d852d2499fa37d04adef62b03ead (patch) | |
| tree | 16192710018414ad7cfc46833e29f724d9abbd4b | |
| parent | 8fd20a5eb015fda4b27cef14c9e3149575861994 (diff) | |
| download | zig-0e118ed0aca3d852d2499fa37d04adef62b03ead.tar.gz zig-0e118ed0aca3d852d2499fa37d04adef62b03ead.zip | |
stage2: add compile error for shlExact overflow
- moves a stage1 test case and makes it target `llvm` backend instead
of `stage1` backend
| -rw-r--r-- | src/Sema.zig | 12 | ||||
| -rw-r--r-- | test/cases/compile_errors/shlExact_shifts_out_1_bits.zig (renamed from test/cases/compile_errors/stage1/obj/shlExact_shifts_out_1_bits.zig) | 4 |
2 files changed, 7 insertions, 9 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index fc8a182508..4fefff7c26 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -10269,16 +10269,14 @@ fn zirShl( const val = switch (air_tag) { .shl_exact => val: { - const shifted = try lhs_val.shl(rhs_val, lhs_ty, sema.arena, target); + const shifted = try lhs_val.shlWithOverflow(rhs_val, lhs_ty, sema.arena, target); if (scalar_ty.zigTypeTag() == .ComptimeInt) { - break :val shifted; + break :val shifted.wrapped_result; } - const int_info = scalar_ty.intInfo(target); - const truncated = try shifted.intTrunc(lhs_ty, sema.arena, int_info.signedness, int_info.bits, target); - if (try sema.compare(block, src, truncated, .eq, shifted, lhs_ty)) { - break :val shifted; + if (shifted.overflowed.compareWithZero(.eq)) { + break :val shifted.wrapped_result; } - return sema.addConstUndef(lhs_ty); + return sema.fail(block, src, "operation caused overflow", .{}); }, .shl_sat => if (scalar_ty.zigTypeTag() == .ComptimeInt) diff --git a/test/cases/compile_errors/stage1/obj/shlExact_shifts_out_1_bits.zig b/test/cases/compile_errors/shlExact_shifts_out_1_bits.zig index 953c5fec50..b2ab45a8e9 100644 --- a/test/cases/compile_errors/stage1/obj/shlExact_shifts_out_1_bits.zig +++ b/test/cases/compile_errors/shlExact_shifts_out_1_bits.zig @@ -4,7 +4,7 @@ comptime { } // error -// backend=stage1 +// backend=llvm // target=native // -// tmp.zig:2:15: error: operation caused overflow +// :2:15: error: operation caused overflow |
