SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 3> @offset(0)
}

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

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 3> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_GLF_global_loop_count:ptr<private, i32, read_write> = var
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %f:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %x_GLF_global_loop_count, 0i
    %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %9:f32 = load %8
    %x_36:f32 = let %9
    store %f, %x_36
    %11:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %12:i32 = load %11
    %x_38:i32 = let %12
    store %i, %x_38
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %14:i32 = load %i
        %x_43:i32 = let %14
        %16:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %17:i32 = load %16
        %x_45:i32 = let %17
        %19:bool = lt %x_43, %x_45
        if %19 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %20:f32 = load %f
        %x_48:f32 = let %20
        %22:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %23:f32 = load %22
        %x_50:f32 = let %23
        %25:bool = gt %x_48, %x_50
        if %25 [t: $B7] {  # if_2
          $B7: {  # true
            exit_if  # if_2
          }
        }
        store %f, 1.0f
        %26:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
        %27:f32 = load %26
        %x_55:f32 = let %27
        %29:f32 = load %f
        %x_56:f32 = let %29
        %31:i32 = load %i
        %x_59:i32 = let %31
        %33:f32 = clamp %x_55, 1.0f, %x_56
        %34:f32 = sub 1.0f, %33
        %35:f32 = let %34
        %36:f32 = convert %x_59
        %37:f32 = add %35, %36
        store %f, %37
        continue  # -> $B4
      }
      $B4: {  # continuing
        %38:i32 = load %i
        %x_62:i32 = let %38
        %40:i32 = add %x_62, 1i
        store %i, %40
        next_iteration  # -> $B3
      }
    }
    %41:f32 = load %f
    %x_64:f32 = let %41
    %43:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %44:f32 = load %43
    %x_66:f32 = let %44
    %46:bool = eq %x_64, %x_66
    if %46 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %48:i32 = load %47
        %x_72:i32 = let %48
        %50:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %51:i32 = load %50
        %x_75:i32 = let %51
        %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %54:i32 = load %53
        %x_78:i32 = let %54
        %56:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %57:i32 = load %56
        %x_81:i32 = let %57
        %59:f32 = convert %x_72
        %60:f32 = let %59
        %61:f32 = convert %x_75
        %62:f32 = let %61
        %63:f32 = convert %x_78
        %64:f32 = let %63
        %65:f32 = convert %x_81
        %66:vec4<f32> = construct %60, %62, %64, %65
        store %x_GLF_color, %66
        exit_if  # if_3
      }
      $B9: {  # false
        %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %68:i32 = load %67
        %x_85:i32 = let %68
        %70:f32 = convert %x_85
        %x_86:f32 = let %70
        %72:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
        store %x_GLF_color, %72
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %74:void = call %main_1
    %75:vec4<f32> = load %x_GLF_color
    %76:main_out = construct %75
    ret %76
  }
}

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