SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 3> @offset(0)
}

S = struct @align(4) {
  data:i32 @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void -> %b2 {
  %b2 = block {
    %6:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %7:i32 = load %6
    %8:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %9:i32 = load %8
    %10:bool = eq %7, %9
    if %10 [t: %b3] {  # if_1
      %b3 = block {  # true
        ret
      }
    }
    %11:ptr<function, i32, read_write> = access %s, 0u
    %12:i32 = load %x
    store %11, %12
    ret
  }
}
%main_1 = func():void -> %b4 {
  %b4 = block {
    %i:ptr<function, i32, read_write> = var
    %arr:ptr<function, array<S, 10>, read_write> = var
    %index:ptr<function, i32, read_write> = var
    %param:ptr<function, S, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, S, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    store %i, 0i
    loop [b: %b5, c: %b6] {  # loop_1
      %b5 = block {  # body
        %21:i32 = load %i
        %22:bool = lt %21, 10i
        if %22 [t: %b7, f: %b8] {  # if_2
          %b7 = block {  # true
            exit_if  # if_2
          }
          %b8 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_46:i32 = load %i
        %24:ptr<function, i32, read_write> = access %arr, %x_46, 0u
        store %24, 0i
        continue %b6
      }
      %b6 = block {  # continuing
        %25:i32 = load %i
        %26:i32 = add %25, 1i
        store %i, %26
        next_iteration %b5
      }
    }
    %27:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %28:i32 = load %27
    %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %30:i32 = load %29
    %31:bool = eq %28, %30
    if %31 [t: %b9, f: %b10] {  # if_3
      %b9 = block {  # true
        %x_58:i32 = load %index
        %33:i32 = load %index
        %34:ptr<function, S, read_write> = access %arr, %33
        %35:S = load %34
        store %param, %35
        %36:i32 = load %index
        store %param_1, %36
        %37:void = call %func_struct_S_i11_i1_, %param, %param_1
        %38:ptr<function, S, read_write> = access %arr, %x_58
        %39:S = load %param
        store %38, %39
        exit_if  # if_3
      }
      %b10 = block {  # false
        %40:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_66:i32 = load %40
        %42:ptr<function, S, read_write> = access %arr, %x_66
        %43:S = load %42
        store %param_2, %43
        %44:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %45:i32 = load %44
        store %param_3, %45
        %46:void = call %func_struct_S_i11_i1_, %param_2, %param_3
        %47:ptr<function, S, read_write> = access %arr, %x_66
        %48:S = load %param_2
        store %47, %48
        exit_if  # if_3
      }
    }
    %49:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %50:i32 = load %49
    %51:ptr<function, i32, read_write> = access %arr, %50, 0u
    %52:i32 = load %51
    %53:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %54:i32 = load %53
    %55:bool = eq %52, %54
    if %55 [t: %b11, f: %b12] {  # if_4
      %b11 = block {  # true
        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %57:i32 = load %56
        %58:f32 = convert %57
        %59:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %60:i32 = load %59
        %61:f32 = convert %60
        %62:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %63:i32 = load %62
        %64:f32 = convert %63
        %65:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %66:i32 = load %65
        %67:f32 = convert %66
        %68:vec4<f32> = construct %58, %61, %64, %67
        store %x_GLF_color, %68
        exit_if  # if_4
      }
      %b12 = block {  # false
        %69:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %70:i32 = load %69
        %71:f32 = convert %70
        %72:vec4<f32> = construct %71
        store %x_GLF_color, %72
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b13 {
  %b13 = block {
    %74:void = call %main_1
    %75:vec4<f32> = load %x_GLF_color
    %76:main_out = construct %75
    ret %76
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
