skia2/tests/sksl/errors/ArrayIndexOutOfRange.sksl
John Stiles 1b27c3d7a3 Check array bounds when a constant array index is used.
This sort of error would be detected by most backend compilers. This
case was also detected by the bytecode generator. It's easy for us to do
a similar check during SkSL IR generation and report the error sooner.

Also, `convertIndex` had migrated a few hundred lines away from
`convertIndexExpression`, so I moved it back to live next to its parent.

Change-Id: I715d3abf42581782b55ba60df30d0296355667d4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/341377
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-12-07 18:17:30 +00:00

62 lines
3.7 KiB
Plaintext

in Block { int x; } unsizedArray[];
void array_neg1 () { int a[123]; int v = a[-1]; }
void array_0 () { float a[123]; float v = a[0]; }
void array_122 () { bool2 a[123]; bool2 v = a[122]; }
void array_123 () { half4x4 a[123]; half4x4 v = a[123]; }
void array_huge () { int4 a[123]; int4 v = a[1000000000]; }
void array_overflow () { half3 a[123]; half3 v = a[3000000000]; }
void unsized_array_neg1 () { int v = unsizedArray[-1].x; }
void unsized_array_0 () { int v = unsizedArray[0].x; }
void unsized_array_huge () { int v = unsizedArray[1000000000].x; }
void unsized_array_overflow () { int v = unsizedArray[3000000000].x; }
void half4_neg1() { half4 h; half v = h[-1]; }
void half4_0() { half4 h; half v = h[0]; }
void half4_1() { half4 h; half v = h[1]; }
void half4_2() { half4 h; half v = h[2]; }
void half4_3() { half4 h; half v = h[3]; }
void half4_4() { half4 h; half v = h[4]; }
void half4_huge() { half4 h; half v = h[1000000000]; }
void half3_neg1() { half3 h; half v = h[-1]; }
void half3_0() { half3 h; half v = h[0]; }
void half3_1() { half3 h; half v = h[1]; }
void half3_2() { half3 h; half v = h[2]; }
void half3_3() { half3 h; half v = h[3]; }
void half3_4() { half3 h; half v = h[4]; }
void half3_huge() { half3 h; half v = h[1000000000]; }
void half2_neg1() { half2 h; half v = h[-1]; }
void half2_0() { half2 h; half v = h[0]; }
void half2_1() { half2 h; half v = h[1]; }
void half2_2() { half2 h; half v = h[2]; }
void half2_3() { half2 h; half v = h[3]; }
void half2_4() { half2 h; half v = h[4]; }
void half2_huge() { half2 h; half v = h[1000000000]; }
void half2x4_neg1() { half2x4 m; half4 v = m[-1]; }
void half2x4_0() { half2x4 m; half4 v = m[0]; }
void half2x4_1() { half2x4 m; half4 v = m[1]; }
void half2x4_2() { half2x4 m; half4 v = m[2]; }
void half2x4_3() { half2x4 m; half4 v = m[3]; }
void half2x4_4() { half2x4 m; half4 v = m[4]; }
void half2x4_huge() { half2x4 m; half4 v = m[1000000000]; }
void half3x3_neg1() { half3x3 m; half3 v = m[-1]; }
void half3x3_0() { half3x3 m; half3 v = m[0]; }
void half3x3_1() { half3x3 m; half3 v = m[1]; }
void half3x3_2() { half3x3 m; half3 v = m[2]; }
void half3x3_3() { half3x3 m; half3 v = m[3]; }
void half3x3_4() { half3x3 m; half3 v = m[4]; }
void half3x3_huge() { half3x3 m; half3 v = m[1000000000]; }
void half4x2_neg1() { half4x2 m; half2 v = m[-1]; }
void half4x2_0() { half4x2 m; half2 v = m[0]; }
void half4x2_1() { half4x2 m; half2 v = m[1]; }
void half4x2_2() { half4x2 m; half2 v = m[2]; }
void half4x2_3() { half4x2 m; half2 v = m[3]; }
void half4x2_4() { half4x2 m; half2 v = m[4]; }
void half4x2_huge() { half4x2 m; half2 v = m[1000000000]; }