test: Add a test case for tint:1321
It's surprising that the fuzzers didn't find this, but I've confirmed that at least one of the fuzzers will fail with this case. By adding a e2e test case, this will be used as a seed for the fuzzer corpus. Bug: tint:1321 Change-Id: Ibf4bfa50bf376ae4cba401dfc31a2498fa3b9eec Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/70982 Reviewed-by: James Price <jrprice@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Ben Clayton <bclayton@google.com>
This commit is contained in:
parent
401d694d03
commit
0079a597e6
|
@ -0,0 +1,12 @@
|
|||
fn foo() -> i32 {
|
||||
return 1;
|
||||
}
|
||||
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var arr = array<f32, 4>();
|
||||
for (let a = &arr[foo()]; ;) {
|
||||
let x = *a;
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
int foo() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
void main() {
|
||||
float arr[4] = (float[4])0;
|
||||
const int a_save = foo();
|
||||
{
|
||||
for(; ; ) {
|
||||
const float x = arr[a_save];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct tint_array_wrapper {
|
||||
float arr[4];
|
||||
};
|
||||
|
||||
int foo() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
fragment void tint_symbol() {
|
||||
tint_array_wrapper arr = {.arr={}};
|
||||
int const a_save = foo();
|
||||
for(; ; ) {
|
||||
float const x = arr.arr[a_save];
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 25
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint Fragment %main "main"
|
||||
OpExecutionMode %main OriginUpperLeft
|
||||
OpName %foo "foo"
|
||||
OpName %main "main"
|
||||
OpName %arr "arr"
|
||||
OpDecorate %_arr_float_uint_4 ArrayStride 4
|
||||
%int = OpTypeInt 32 1
|
||||
%1 = OpTypeFunction %int
|
||||
%int_1 = OpConstant %int 1
|
||||
%void = OpTypeVoid
|
||||
%6 = OpTypeFunction %void
|
||||
%float = OpTypeFloat 32
|
||||
%uint = OpTypeInt 32 0
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_float_uint_4 = OpTypeArray %float %uint_4
|
||||
%14 = OpConstantNull %_arr_float_uint_4
|
||||
%_ptr_Function__arr_float_uint_4 = OpTypePointer Function %_arr_float_uint_4
|
||||
%_ptr_Function_float = OpTypePointer Function %float
|
||||
%foo = OpFunction %int None %1
|
||||
%4 = OpLabel
|
||||
OpReturnValue %int_1
|
||||
OpFunctionEnd
|
||||
%main = OpFunction %void None %6
|
||||
%9 = OpLabel
|
||||
%arr = OpVariable %_ptr_Function__arr_float_uint_4 Function %14
|
||||
OpStore %arr %14
|
||||
%17 = OpFunctionCall %int %foo
|
||||
OpBranch %18
|
||||
%18 = OpLabel
|
||||
OpLoopMerge %19 %20 None
|
||||
OpBranch %21
|
||||
%21 = OpLabel
|
||||
%23 = OpAccessChain %_ptr_Function_float %arr %17
|
||||
%24 = OpLoad %float %23
|
||||
OpBranch %19
|
||||
%20 = OpLabel
|
||||
OpBranch %18
|
||||
%19 = OpLabel
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,12 @@
|
|||
fn foo() -> i32 {
|
||||
return 1;
|
||||
}
|
||||
|
||||
[[stage(fragment)]]
|
||||
fn main() {
|
||||
var arr = array<f32, 4>();
|
||||
for(let a = &(arr[foo()]); ; ) {
|
||||
let x = *(a);
|
||||
break;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue