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
    %8:vec4<f32> = construct %7
    store %x_GLF_color, %8
    %9:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %10:f32 = load %9
    store %a, %10
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %11:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %12:f32 = load %11
        %13:f32 = div %12, 0.20000000298023223877f
        %14:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %15:f32 = load %14
        %16:bool = lt %13, %15
        if %16 [t: $B5] {  # if_1
          $B5: {  # true
            ret
          }
        }
        %17:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %18:f32 = load %17
        %19:f32 = div %18, 0.20000000298023223877f
        %20:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %21:f32 = load %20
        %22:bool = lt %19, %21
        if %22 [t: $B6] {  # if_2
          $B6: {  # true
            ret
          }
        }
        %23:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %24:f32 = load %23
        %25:f32 = div %24, 0.20000000298023223877f
        %26:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %27:f32 = load %26
        %28:bool = lt %25, %27
        if %28 [t: $B7] {  # if_3
          $B7: {  # true
            ret
          }
        }
        %29:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %30:f32 = load %29
        %31:f32 = div %30, 0.20000000298023223877f
        %32:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %33:f32 = load %32
        %34:bool = lt %31, %33
        if %34 [t: $B8, f: $B9] {  # if_4
          $B8: {  # true
            ret
          }
          $B9: {  # false
            store %a, 0.0f
            exit_if  # if_4
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %35:f32 = load %a
        %x_72:f32 = let %35
        %37:bool = eq %x_72, 0.0f
        %38:bool = eq %37, false
        %39:bool = eq %38, false
        break_if %39  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %40:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %41:i32 = load %40
    %42:f32 = convert %41
    %43:f32 = let %42
    %44:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %45:i32 = load %44
    %46:f32 = convert %45
    %47:f32 = let %46
    %48:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %49:i32 = load %48
    %50:f32 = convert %49
    %51:f32 = let %50
    %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %53:i32 = load %52
    %54:f32 = convert %53
    %55:vec4<f32> = construct %43, %47, %51, %54
    store %x_GLF_color, %55
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}

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