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, 2> @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, 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_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, f32, read_write> = var
    %6:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
    %7:f32 = load %6
    %x_31:f32 = let %7
    %9:vec4<f32> = construct %x_31, %x_31, %x_31, %x_31
    store %x_GLF_color, %9
    %10:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %11:f32 = load %10
    %x_34:f32 = let %11
    store %a, %x_34
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %13:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %14:f32 = load %13
        %x_40:f32 = let %14
        %16:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %17:f32 = load %16
        %x_43:f32 = let %17
        %19:f32 = div %x_40, 0.20000000298023223877f
        %20:bool = lt %19, %x_43
        if %20 [t: $B5] {  # if_1
          $B5: {  # true
            ret
          }
        }
        %21:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %22:f32 = load %21
        %x_48:f32 = let %22
        %24:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %25:f32 = load %24
        %x_51:f32 = let %25
        %27:f32 = div %x_48, 0.20000000298023223877f
        %28:bool = lt %27, %x_51
        if %28 [t: $B6] {  # if_2
          $B6: {  # true
            ret
          }
        }
        %29:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %30:f32 = load %29
        %x_56:f32 = let %30
        %32:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %33:f32 = load %32
        %x_59:f32 = let %33
        %35:f32 = div %x_56, 0.20000000298023223877f
        %36:bool = lt %35, %x_59
        if %36 [t: $B7] {  # if_3
          $B7: {  # true
            ret
          }
        }
        %37:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %38:f32 = load %37
        %x_64:f32 = let %38
        %40:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %41:f32 = load %40
        %x_67:f32 = let %41
        %43:f32 = div %x_64, 0.20000000298023223877f
        %44:bool = lt %43, %x_67
        if %44 [t: $B8, f: $B9] {  # if_4
          $B8: {  # true
            ret
          }
          $B9: {  # false
            store %a, 0.0f
            exit_if  # if_4
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %45:f32 = load %a
        %x_72:f32 = let %45
        %47:bool = eq %x_72, 0.0f
        %48:bool = eq %47, false
        break_if %48  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %49:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %50:i32 = load %49
    %x_75:i32 = let %50
    %52:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %53:i32 = load %52
    %x_78:i32 = let %53
    %55:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %56:i32 = load %55
    %x_81:i32 = let %56
    %58:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %59:i32 = load %58
    %x_84:i32 = 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:f32 = let %65
    %67:f32 = convert %x_84
    %68:vec4<f32> = construct %62, %64, %66, %67
    store %x_GLF_color, %68
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %70:void = call %main_1
    %71:vec4<f32> = load %x_GLF_color
    %72:main_out = construct %71
    ret %72
  }
}

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