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)
}

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %7:i32 = load %6
    %8:f32 = convert %7
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %10:i32 = load %9
    %11:f32 = convert %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %13:i32 = load %12
    %14:f32 = convert %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %16:i32 = load %15
    %17:f32 = convert %16
    %18:vec4<f32> = construct %8, %11, %14, %17
    store %x_GLF_color, %18
    %19:f32 = load_vector_element %gl_FragCoord, 1u
    %20:bool = lt %19, 0.0f
    if %20 [t: %b3] {  # if_1
      %b3 = block {  # true
        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %22:i32 = load %21
        %23:f32 = convert %22
        %24:vec4<f32> = construct %23
        store %x_GLF_color, %24
        exit_if  # if_1
      }
    }
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %26:i32 = load %25
    store %i, %26
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %27:i32 = load %i
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %29:i32 = load %28
        %30:bool = lt %27, %29
        if %30 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        %31:f32 = load_vector_element %gl_FragCoord, 0u
        %32:bool = gt %31, 0.0f
        if %32 [t: %b8] {  # if_3
          %b8 = block {  # true
            %33:f32 = load_vector_element %gl_FragCoord, 1u
            %34:bool = lt %33, 0.0f
            if %34 [t: %b9] {  # if_4
              %b9 = block {  # true
                %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %36:i32 = load %35
                %37:f32 = convert %36
                %38:vec4<f32> = construct %37
                store %x_GLF_color, %38
                exit_loop  # loop_1
              }
            }
            exit_if  # if_3
          }
        }
        %39:f32 = load_vector_element %gl_FragCoord, 0u
        %40:bool = gt %39, 0.0f
        if %40 [t: %b10] {  # if_5
          %b10 = block {  # true
            %41:f32 = load_vector_element %gl_FragCoord, 1u
            %42:bool = lt %41, 0.0f
            if %42 [t: %b11] {  # if_6
              %b11 = block {  # true
                %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %44:i32 = load %43
                %45:f32 = convert %44
                %46:vec4<f32> = construct %45
                store %x_GLF_color, %46
                exit_if  # if_6
              }
            }
            exit_if  # if_5
          }
        }
        continue %b5
      }
      %b5 = block {  # continuing
        %47:i32 = load %i
        %48:i32 = add %47, 1i
        store %i, %48
        next_iteration %b4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
  %b12 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}

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.  *
********************************************************************
