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
    %x_31:i32 = load %6
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_34:i32 = load %8
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_37:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_40:i32 = load %12
    %14:f32 = convert %x_31
    %15:f32 = convert %x_34
    %16:f32 = convert %x_37
    %17:f32 = convert %x_40
    %18:vec4<f32> = construct %14, %15, %16, %17
    store %x_GLF_color, %18
    %x_44:f32 = load_vector_element %gl_FragCoord, 1u
    %20:bool = lt %x_44, 0.0f
    if %20 [t: %b3] {  # if_1
      %b3 = block {  # true
        %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_49:i32 = load %21
        %x_50:f32 = convert %x_49
        %24:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
        store %x_GLF_color, %24
        exit_if  # if_1
      }
    }
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_53:i32 = load %25
    store %i, %x_53
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %x_58:i32 = load %i
        %28:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %x_60:i32 = load %28
        %30:bool = lt %x_58, %x_60
        if %30 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_64:f32 = load_vector_element %gl_FragCoord, 0u
        %32:bool = gt %x_64, 0.0f
        if %32 [t: %b8] {  # if_3
          %b8 = block {  # true
            %x_69:f32 = load_vector_element %gl_FragCoord, 1u
            %34:bool = lt %x_69, 0.0f
            if %34 [t: %b9] {  # if_4
              %b9 = block {  # true
                %35:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %x_74:i32 = load %35
                %x_75:f32 = convert %x_74
                %38:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
                store %x_GLF_color, %38
                exit_loop  # loop_1
              }
            }
            exit_if  # if_3
          }
        }
        %x_78:f32 = load_vector_element %gl_FragCoord, 0u
        %40:bool = gt %x_78, 0.0f
        if %40 [t: %b10] {  # if_5
          %b10 = block {  # true
            %x_83:f32 = load_vector_element %gl_FragCoord, 1u
            %42:bool = lt %x_83, 0.0f
            if %42 [t: %b11] {  # if_6
              %b11 = block {  # true
                %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %x_88:i32 = load %43
                %x_89:f32 = convert %x_88
                %46:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
                store %x_GLF_color, %46
                exit_if  # if_6
              }
            }
            exit_if  # if_5
          }
        }
        continue %b5
      }
      %b5 = block {  # continuing
        %x_91:i32 = load %i
        %48:i32 = add %x_91, 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.  *
********************************************************************
