aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2023-05-16 10:51:34 +0300
committerVeikka Tuominen <git@vexu.eu>2023-05-16 11:33:38 +0300
commitfdf1675c58f029bc08e2aebdad06a5ef5924e81d (patch)
treeb1d826af5a8c52008be31170d731df94430a6234 /src/Sema.zig
parentb91d6ff9e8d3b224d8cfa4ce7f206264fe814f6f (diff)
downloadzig-fdf1675c58f029bc08e2aebdad06a5ef5924e81d.tar.gz
zig-fdf1675c58f029bc08e2aebdad06a5ef5924e81d.zip
Sema: avoid safety slice safety check with comptime-known start and end
Oopsie
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 007717457f..da50148263 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -23636,7 +23636,7 @@ fn panicIndexOutOfBounds(
try sema.safetyCheckFormatted(parent_block, ok, "panicOutOfBounds", &.{ index, len });
}
-fn panicStartLargerThanEnd(
+fn panicStartGreaterThanEnd(
sema: *Sema,
parent_block: *Block,
start: Air.Inst.Ref,
@@ -29490,8 +29490,10 @@ fn analyzeSlice(
const slice_sentinel = if (sentinel_opt != .none) sentinel else null;
// requirement: start <= end
+ var need_start_gt_end_check = true;
if (try sema.resolveDefinedValue(block, end_src, end)) |end_val| {
if (try sema.resolveDefinedValue(block, start_src, start)) |start_val| {
+ need_start_gt_end_check = false;
if (!by_length and !(try sema.compareAll(start_val, .lte, end_val, Type.usize))) {
return sema.fail(
block,
@@ -29545,9 +29547,9 @@ fn analyzeSlice(
}
}
- if (!by_length and block.wantSafety() and !block.is_comptime) {
+ if (!by_length and block.wantSafety() and !block.is_comptime and need_start_gt_end_check) {
// requirement: start <= end
- try sema.panicStartLargerThanEnd(block, start, end);
+ try sema.panicStartGreaterThanEnd(block, start, end);
}
const new_len = if (by_length)
try sema.coerce(block, Type.usize, uncasted_end_opt, end_src)