mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Update range checking.
This commit is contained in:
@@ -31,13 +31,13 @@ fn void main()
|
||||
%2 = load %"int[]", ptr %slice, align 8
|
||||
%3 = extractvalue %"int[]" %2, 0
|
||||
%4 = extractvalue %"int[]" %2, 1
|
||||
%gt = icmp ugt i64 2, %4
|
||||
%gt = icmp sgt i64 2, %4
|
||||
%5 = call i1 @llvm.expect.i1(i1 %gt, i1 false)
|
||||
br i1 %5, label %panic, label %checkok
|
||||
|
||||
checkok: ; preds = %entry
|
||||
%ge = icmp uge i64 5, %4
|
||||
%6 = call i1 @llvm.expect.i1(i1 %ge, i1 false)
|
||||
%lt = icmp slt i64 %4, 6
|
||||
%6 = call i1 @llvm.expect.i1(i1 %lt, i1 false)
|
||||
br i1 %6, label %panic5, label %checkok12
|
||||
|
||||
checkok12: ; preds = %checkok
|
||||
@@ -48,7 +48,7 @@ checkok12: ; preds = %checkok
|
||||
%9 = load %"int[]", ptr %slice, align 8
|
||||
%10 = extractvalue %"int[]" %9, 0
|
||||
%11 = extractvalue %"int[]" %9, 1
|
||||
%gt14 = icmp ugt i64 6, %11
|
||||
%gt14 = icmp sgt i64 6, %11
|
||||
%12 = call i1 @llvm.expect.i1(i1 %gt14, i1 false)
|
||||
br i1 %12, label %panic15, label %checkok22
|
||||
|
||||
@@ -61,13 +61,13 @@ checkok22: ; preds = %checkok12
|
||||
%15 = load %"int[]", ptr %slice, align 8
|
||||
%16 = extractvalue %"int[]" %15, 0
|
||||
%17 = extractvalue %"int[]" %15, 1
|
||||
%gt24 = icmp ugt i64 0, %17
|
||||
%gt24 = icmp sgt i64 0, %17
|
||||
%18 = call i1 @llvm.expect.i1(i1 %gt24, i1 false)
|
||||
br i1 %18, label %panic25, label %checkok32
|
||||
|
||||
checkok32: ; preds = %checkok22
|
||||
%ge33 = icmp uge i64 9, %17
|
||||
%19 = call i1 @llvm.expect.i1(i1 %ge33, i1 false)
|
||||
%lt33 = icmp slt i64 %17, 10
|
||||
%19 = call i1 @llvm.expect.i1(i1 %lt33, i1 false)
|
||||
br i1 %19, label %panic34, label %checkok41
|
||||
|
||||
checkok41: ; preds = %checkok32
|
||||
@@ -77,13 +77,13 @@ checkok41: ; preds = %checkok32
|
||||
%22 = load %"int[]", ptr %slice, align 8
|
||||
%23 = extractvalue %"int[]" %22, 0
|
||||
%24 = extractvalue %"int[]" %22, 1
|
||||
%gt42 = icmp ugt i64 5, %24
|
||||
%gt42 = icmp sgt i64 5, %24
|
||||
%25 = call i1 @llvm.expect.i1(i1 %gt42, i1 false)
|
||||
br i1 %25, label %panic43, label %checkok50
|
||||
|
||||
checkok50: ; preds = %checkok41
|
||||
%gt51 = icmp ugt i64 15, %24
|
||||
%26 = call i1 @llvm.expect.i1(i1 %gt51, i1 false)
|
||||
%lt51 = icmp slt i64 %24, 15
|
||||
%26 = call i1 @llvm.expect.i1(i1 %lt51, i1 false)
|
||||
br i1 %26, label %panic52, label %checkok59
|
||||
|
||||
checkok59: ; preds = %checkok50
|
||||
@@ -94,13 +94,13 @@ checkok59: ; preds = %checkok50
|
||||
%29 = load %"int[]", ptr %slice, align 8
|
||||
%30 = extractvalue %"int[]" %29, 0
|
||||
%31 = extractvalue %"int[]" %29, 1
|
||||
%gt61 = icmp ugt i64 1, %31
|
||||
%gt61 = icmp sgt i64 1, %31
|
||||
%32 = call i1 @llvm.expect.i1(i1 %gt61, i1 false)
|
||||
br i1 %32, label %panic62, label %checkok69
|
||||
|
||||
checkok69: ; preds = %checkok59
|
||||
%ge70 = icmp uge i64 3, %31
|
||||
%33 = call i1 @llvm.expect.i1(i1 %ge70, i1 false)
|
||||
%lt70 = icmp slt i64 %31, 4
|
||||
%33 = call i1 @llvm.expect.i1(i1 %lt70, i1 false)
|
||||
br i1 %33, label %panic71, label %checkok78
|
||||
|
||||
checkok78: ; preds = %checkok69
|
||||
@@ -111,13 +111,13 @@ checkok78: ; preds = %checkok69
|
||||
%36 = load %"int[]", ptr %slice, align 8
|
||||
%37 = extractvalue %"int[]" %36, 0
|
||||
%38 = extractvalue %"int[]" %36, 1
|
||||
%gt80 = icmp ugt i64 2, %38
|
||||
%gt80 = icmp sgt i64 2, %38
|
||||
%39 = call i1 @llvm.expect.i1(i1 %gt80, i1 false)
|
||||
br i1 %39, label %panic81, label %checkok88
|
||||
|
||||
checkok88: ; preds = %checkok78
|
||||
%gt89 = icmp ugt i64 12, %38
|
||||
%40 = call i1 @llvm.expect.i1(i1 %gt89, i1 false)
|
||||
%lt89 = icmp slt i64 %38, 12
|
||||
%40 = call i1 @llvm.expect.i1(i1 %lt89, i1 false)
|
||||
br i1 %40, label %panic90, label %checkok97
|
||||
|
||||
checkok97: ; preds = %checkok88
|
||||
|
||||
@@ -58,7 +58,7 @@ slice_cmp_values: ; preds = %entry
|
||||
|
||||
slice_loop_start: ; preds = %slice_loop_comparison, %slice_cmp_values
|
||||
%3 = load i64, ptr %cmp.idx, align 8
|
||||
%lt = icmp ult i64 %3, %1
|
||||
%lt = icmp slt i64 %3, %1
|
||||
br i1 %lt, label %slice_loop_comparison, label %slice_cmp_exit
|
||||
|
||||
slice_loop_comparison: ; preds = %slice_loop_start
|
||||
@@ -95,7 +95,7 @@ slice_cmp_values4: ; preds = %if.exit
|
||||
|
||||
slice_loop_start6: ; preds = %slice_loop_comparison8, %slice_cmp_values4
|
||||
%13 = load i64, ptr %cmp.idx5, align 8
|
||||
%lt7 = icmp ult i64 %13, %9
|
||||
%lt7 = icmp slt i64 %13, %9
|
||||
br i1 %lt7, label %slice_loop_comparison8, label %slice_cmp_exit12
|
||||
|
||||
slice_loop_comparison8: ; preds = %slice_loop_start6
|
||||
@@ -133,7 +133,7 @@ slice_cmp_values17: ; preds = %switch.entry
|
||||
|
||||
slice_loop_start19: ; preds = %slice_loop_comparison21, %slice_cmp_values17
|
||||
%20 = load i64, ptr %cmp.idx18, align 8
|
||||
%lt20 = icmp ult i64 %20, 4
|
||||
%lt20 = icmp slt i64 %20, 4
|
||||
br i1 %lt20, label %slice_loop_comparison21, label %slice_cmp_exit25
|
||||
|
||||
slice_loop_comparison21: ; preds = %slice_loop_start19
|
||||
@@ -166,7 +166,7 @@ slice_cmp_values28: ; preds = %next_if
|
||||
|
||||
slice_loop_start30: ; preds = %slice_loop_comparison32, %slice_cmp_values28
|
||||
%26 = load i64, ptr %cmp.idx29, align 8
|
||||
%lt31 = icmp ult i64 %26, 5
|
||||
%lt31 = icmp slt i64 %26, 5
|
||||
br i1 %lt31, label %slice_loop_comparison32, label %slice_cmp_exit36
|
||||
|
||||
slice_loop_comparison32: ; preds = %slice_loop_start30
|
||||
@@ -199,7 +199,7 @@ slice_cmp_values41: ; preds = %next_if39
|
||||
|
||||
slice_loop_start43: ; preds = %slice_loop_comparison45, %slice_cmp_values41
|
||||
%32 = load i64, ptr %cmp.idx42, align 8
|
||||
%lt44 = icmp ult i64 %32, 4
|
||||
%lt44 = icmp slt i64 %32, 4
|
||||
br i1 %lt44, label %slice_loop_comparison45, label %slice_cmp_exit49
|
||||
|
||||
slice_loop_comparison45: ; preds = %slice_loop_start43
|
||||
|
||||
@@ -2,7 +2,7 @@ fn void test()
|
||||
{
|
||||
int[3] x = { 1, 2, 3};
|
||||
int[] z = x[2..2];
|
||||
z = x[2..1]; // #error: Start index greater than end index.
|
||||
z = x[2..1]; // #error: greater than the end index
|
||||
}
|
||||
|
||||
fn void test2()
|
||||
@@ -10,13 +10,13 @@ fn void test2()
|
||||
int[3] x = { 1, 2, 3};
|
||||
int[] z = x[^2..^2];
|
||||
z = x[^3..];
|
||||
z = x[^1..^2]; // #error: Start index greater than end index.
|
||||
z = x[^1..^2]; // #error: greater than the end index
|
||||
}
|
||||
|
||||
fn void test3()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[..4]; // #error: End index out of bounds, was 4, exceeding 3.
|
||||
int[] z = x[..4]; // #error: End index out of bounds, was 4, exceeding
|
||||
}
|
||||
|
||||
fn void test4()
|
||||
@@ -29,31 +29,31 @@ fn void test4()
|
||||
fn void test5()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[..^4]; // #error: Index out of bounds, using a negative index is only allowed for pointers.
|
||||
int[] z = x[..^4]; // #error: An index may only be negative
|
||||
}
|
||||
|
||||
fn void test6()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[3..]; // #error: Index out of bounds, was 3, exceeding maximum (2).
|
||||
int[] z = x[3..]; // #error: Index out of bounds: the start index was
|
||||
}
|
||||
|
||||
fn void test7()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[-1..]; // #error: Index out of bounds, using a negative index is only allowed for pointers
|
||||
int[] z = x[-1..]; // #error: An index may only be negative
|
||||
}
|
||||
|
||||
fn void test8()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[^4..]; // #error: Index out of bounds, using a negative index is only allowed for pointers
|
||||
int[] z = x[^4..]; // #error: An index may only be negative
|
||||
}
|
||||
|
||||
fn void test9()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[^0..]; // #error: Index out of bounds, was 3, exceeding maximum (2)
|
||||
int[] z = x[^0..]; // #error: Index out of bounds: the start
|
||||
}
|
||||
|
||||
fn void test10()
|
||||
@@ -77,11 +77,11 @@ fn void test105()
|
||||
int[] w = a.z[0..]; // #error: Omitting end index is not allowed for pointers
|
||||
int[] z = a.z[^2..]; // #error: Indexing from the end is not allowed for pointers
|
||||
int[] y = a.z[..^2]; // #error: Indexing from the end is not allowed for pointers
|
||||
a.z[-10..-3]; // #error: Index out of bounds, using a negative index is only allowed for pointers
|
||||
a.z[-10..-3]; // #error: An index may only be negative for pointers
|
||||
}
|
||||
|
||||
fn void test11()
|
||||
{
|
||||
int[3] x = { 1, 2, 3 };
|
||||
int[] z = x[..^0]; // #error: End index out of bounds, was 3, exceeding 3.
|
||||
int[] z = x[..^0]; // #error: End index out of bounds, was 3, exceeding
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user