// Test rewriting complete sets of insertions into an array.
// The rewrite is done by default.

// RUN: clspv %target %s -o %t.spv -no-inline-single
// RUN: spirv-dis -o %t2.spvasm %t.spv
// RUN: FileCheck %s < %t2.spvasm
// RUN: spirv-val --target-env vulkan1.0 %t.spv

struct S { int arr[5]; };

__attribute__((noinline))
struct S bar(int n) {
  struct S s;
  if (n > 0) {
    s.arr[0] = n;
    s.arr[1] = n + 1;
    s.arr[2] = n + 2;
    s.arr[3] = n + 3;
    s.arr[4] = n + 4;
  }
  return s;
}
kernel void foo(global struct S *out, int n) {
  *out = bar(n);
}

// CHECK: [[array:%[0-9a-zA-Z_]+]] = OpTypeArray
// CHECK: [[struct:%[0-9a-zA-Z_]+]] = OpTypeStruct [[array]]
// CHECK-NOT: OpCompositeInsert
// CHECK: [[array_construct:%[0-9a-zA-Z_]+]] = OpCompositeConstruct [[array]]
// CHECK-NOT: OpCompositeInsert
// CHECK: [[struct_construct:%[0-9a-zA-Z_]+]] = OpCompositeConstruct [[struct]]
// CHECK-NOT: OpCompositeInsert
