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, 2> @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)
  %continue_execution:ptr<private, bool, read_write> = var, true
}

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

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