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
    %x_37:i32 = let %9
    %11:f32 = convert %x_37
    %x_38:f32 = let %11
    %13:vec4<f32> = construct %x_38, %x_38, %x_38, %x_38
    store %x_GLF_color, %13
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %x_41:i32 = let %15
    store %i, %x_41
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %i
        %x_46:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %20:i32 = load %19
        %x_48:i32 = let %20
        %22:bool = lt %x_46, %x_48
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %23:f32 = load_vector_element %gl_FragCoord, 1u
        %x_52:f32 = let %23
        %25:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %26:f32 = load %25
        %x_54:f32 = let %26
        %28:bool = lt %x_52, %x_54
        if %28 [t: $B7] {  # if_2
          $B7: {  # true
            %29:f32 = load_vector_element %gl_FragCoord, 0u
            %x_59:f32 = let %29
            %31:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
            %32:f32 = load %31
            %x_61:f32 = let %32
            %34:bool = lt %x_59, %x_61
            if %34 [t: $B8] {  # if_3
              $B8: {  # true
                ret
              }
            }
            %35:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %36:f32 = load %35
            %x_66:f32 = let %36
            %38:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %39:f32 = load %38
            %x_68:f32 = let %39
            %41:bool = gt %x_66, %x_68
            if %41 [t: $B9] {  # if_4
              $B9: {  # true
                ret
              }
            }
            store %continue_execution, false
            exit_if  # if_2
          }
        }
        %42:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
        %43:f32 = load %42
        %x_73:f32 = let %43
        %45:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %46:f32 = load %45
        %x_75:f32 = let %46
        %48:bool = gt %x_73, %x_75
        if %48 [t: $B10] {  # if_5
          $B10: {  # true
            %49:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %50:i32 = load %49
            %x_80:i32 = let %50
            %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %53:i32 = load %52
            %x_83:i32 = let %53
            %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %56:i32 = load %55
            %x_86:i32 = let %56
            %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %59:i32 = load %58
            %x_89:i32 = let %59
            %61:f32 = convert %x_80
            %62:f32 = let %61
            %63:f32 = convert %x_83
            %64:f32 = let %63
            %65:f32 = convert %x_86
            %66:f32 = let %65
            %67:f32 = convert %x_89
            %68:vec4<f32> = construct %62, %64, %66, %67
            store %x_GLF_color, %68
            exit_loop  # loop_1
          }
        }
        %69:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %70:f32 = load %69
        %x_93:f32 = let %70
        %72:bool = lt %x_93, 0.0f
        if %72 [t: $B11] {  # if_6
          $B11: {  # true
            store %continue_execution, false
            exit_if  # if_6
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %73:i32 = load %i
        %x_97:i32 = let %73
        %75:i32 = add %x_97, 1i
        store %i, %75
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B12: {
    store %gl_FragCoord, %gl_FragCoord_param
    %78:void = call %main_1
    %79:vec4<f32> = load %x_GLF_color
    %80:main_out = construct %79
    %81:bool = load %continue_execution
    %82:bool = eq %81, false
    if %82 [t: $B13] {  # if_7
      $B13: {  # true
        terminate_invocation
      }
    }
    ret %80
  }
}

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