SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %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:f32 = let %8
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %11:i32 = load %10
    %12:f32 = convert %11
    %13:f32 = let %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %16:f32 = convert %15
    %17:f32 = let %16
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %19:i32 = load %18
    %20:f32 = convert %19
    %21:vec4<f32> = construct %9, %13, %17, %20
    store %x_GLF_color, %21
    %22:f32 = load_vector_element %gl_FragCoord, 1u
    %23:bool = lt %22, 0.0f
    if %23 [t: $B3] {  # if_1
      $B3: {  # true
        %24:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %25:i32 = load %24
        %26:f32 = convert %25
        %27:vec4<f32> = construct %26
        store %x_GLF_color, %27
        exit_if  # if_1
      }
    }
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %29:i32 = load %28
    store %i, %29
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %30:i32 = load %i
        %31:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %32:i32 = load %31
        %33:bool = lt %30, %32
        if %33 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %34:f32 = load_vector_element %gl_FragCoord, 0u
        %35:bool = gt %34, 0.0f
        if %35 [t: $B8] {  # if_3
          $B8: {  # true
            %36:f32 = load_vector_element %gl_FragCoord, 1u
            %37:bool = lt %36, 0.0f
            if %37 [t: $B9] {  # if_4
              $B9: {  # true
                %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %39:i32 = load %38
                %40:f32 = convert %39
                %41:vec4<f32> = construct %40
                store %x_GLF_color, %41
                exit_loop  # loop_1
              }
            }
            exit_if  # if_3
          }
        }
        %42:f32 = load_vector_element %gl_FragCoord, 0u
        %43:bool = gt %42, 0.0f
        if %43 [t: $B10] {  # if_5
          $B10: {  # true
            %44:f32 = load_vector_element %gl_FragCoord, 1u
            %45:bool = lt %44, 0.0f
            if %45 [t: $B11] {  # if_6
              $B11: {  # true
                %46:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %47:i32 = load %46
                %48:f32 = convert %47
                %49:vec4<f32> = construct %48
                store %x_GLF_color, %49
                exit_if  # if_6
              }
            }
            exit_if  # if_5
          }
        }
        continue  # -> $B5
      }
      $B5: {  # continuing
        %50:i32 = load %i
        %51:i32 = add %50, 1i
        store %i, %51
        next_iteration  # -> $B4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B12: {
    store %gl_FragCoord, %gl_FragCoord_param
    %54:void = call %main_1
    %55:vec4<f32> = load %x_GLF_color
    %56:main_out = construct %55
    ret %56
  }
}

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