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
    %9:f32 = convert %8
    %10:vec4<f32> = construct %9
    store %x_GLF_color, %10
    %11:f32 = load_vector_element %gl_FragCoord, 1u
    %12:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %13:f32 = load %12
    %14:bool = gte %11, %13
    %15:i32 = select 1i, 2i, %14
    %16:u32 = bitcast %15
    %17:u32 = and %16, 31u
    %18:i32 = shl 1i, %17
    store %i, %18
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_57:ptr<function, bool, read_write> = var
        %x_58:ptr<function, bool, read_write> = var
        %21:i32 = load %i
        %22:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %23:i32 = load %22
        %24:bool = neq %21, %23
        %x_51:bool = let %24
        store %x_58, %x_51
        if %x_51 [t: $B5] {  # if_1
          $B5: {  # true
            %26:i32 = load %i
            %27:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %28:i32 = load %27
            %29:bool = lt %26, %28
            store %x_57, %29
            %30:bool = load %x_57
            store %x_58, %30
            exit_if  # if_1
          }
        }
        %31:bool = load %x_58
        if %31 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %33:i32 = load %32
        %34:f32 = convert %33
        %35:f32 = let %34
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %39:f32 = let %38
        %40:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %41:i32 = load %40
        %42:f32 = convert %41
        %43:f32 = let %42
        %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %45:i32 = load %44
        %46:f32 = convert %45
        %47:vec4<f32> = construct %35, %39, %43, %46
        store %x_GLF_color, %47
        continue  # -> $B4
      }
      $B4: {  # continuing
        %48:i32 = load %i
        %49:i32 = add %48, 1i
        store %i, %49
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %52:void = call %main_1
    %53:vec4<f32> = load %x_GLF_color
    %54:main_out = construct %53
    ret %54
  }
}

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