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

strided_arr_1 = struct @align(4) {
  el:f32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_1, 1> @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
  %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    %7:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %8:i32 = load %7
    %x_34:i32 = let %8
    %10:f32 = convert %x_34
    %x_35:f32 = let %10
    %12:vec4<f32> = construct %x_35, %x_35, %x_35, %x_35
    store %x_GLF_color, %12
    %13:f32 = load_vector_element %gl_FragCoord, 1u
    %x_38:f32 = let %13
    %15:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %16:f32 = load %15
    %x_40:f32 = let %16
    %18:bool = gte %x_38, %x_40
    %19:i32 = select 1i, 2i, %18
    %20:u32 = bitcast %19
    %21:u32 = and %20, 31u
    %22:i32 = shl 1i, %21
    store %i, %22
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_57:ptr<function, bool, read_write> = var
        %x_58_phi:ptr<function, bool, read_write> = var
        %25:i32 = load %i
        %x_48:i32 = let %25
        %27:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %28:i32 = load %27
        %x_50:i32 = let %28
        %30:bool = neq %x_48, %x_50
        %x_51:bool = let %30
        store %x_58_phi, %x_51
        if %x_51 [t: $B5] {  # if_1
          $B5: {  # true
            %32:i32 = load %i
            %x_54:i32 = let %32
            %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %35:i32 = load %34
            %x_56:i32 = let %35
            %37:bool = lt %x_54, %x_56
            store %x_57, %37
            %38:bool = load %x_57
            store %x_58_phi, %38
            exit_if  # if_1
          }
        }
        %39:bool = load %x_58_phi
        %x_58:bool = let %39
        if %x_58 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %42:i32 = load %41
        %x_61:i32 = let %42
        %44:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %45:i32 = load %44
        %x_64:i32 = let %45
        %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %48:i32 = load %47
        %x_67:i32 = let %48
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %51:i32 = load %50
        %x_70:i32 = let %51
        %53:f32 = convert %x_61
        %54:f32 = let %53
        %55:f32 = convert %x_64
        %56:f32 = let %55
        %57:f32 = convert %x_67
        %58:f32 = let %57
        %59:f32 = convert %x_70
        %60:vec4<f32> = construct %54, %56, %58, %59
        store %x_GLF_color, %60
        continue  # -> $B4
      }
      $B4: {  # continuing
        %61:i32 = load %i
        %x_73:i32 = let %61
        %63:i32 = add %x_73, 1i
        store %i, %63
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %66:void = call %main_1
    %67:vec4<f32> = load %x_GLF_color
    %68:main_out = construct %67
    ret %68
  }
}

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