SKIP: FAILED

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

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

$B1: {  # root
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %highSigned:ptr<function, i32, read_write> = var
    %highUnsigned:ptr<function, u32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %data:ptr<function, array<i32, 2>, read_write> = var
    %i_1:ptr<function, u32, read_write> = var
    %x_78:ptr<function, bool, read_write> = var
    %x_79_phi:ptr<function, bool, read_write> = var
    store %highSigned, 1i
    store %highUnsigned, 2u
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %11:i32 = load %i
        %x_42:i32 = let %11
        %13:i32 = load %highSigned
        %x_43:i32 = let %13
        %15:ptr<uniform, i32, read> = access %x_8, 0u
        %16:i32 = load %15
        %x_46:i32 = let %16
        %18:i32 = min 10i, %x_43
        %19:i32 = add %18, %x_46
        %20:bool = lt %x_42, %19
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %21:i32 = load %i
        %x_50:i32 = let %21
        %23:ptr<function, i32, read_write> = access %data, %x_50
        store %23, 5i
        continue  # -> $B4
      }
      $B4: {  # continuing
        %24:i32 = load %i
        %x_52:i32 = let %24
        %26:i32 = add %x_52, 1i
        store %i, %26
        next_iteration  # -> $B3
      }
    }
    store %i_1, 1u
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %27:u32 = load %i_1
        %x_58:u32 = let %27
        %29:u32 = load %highUnsigned
        %x_59:u32 = let %29
        %31:ptr<uniform, i32, read> = access %x_8, 0u
        %32:i32 = load %31
        %x_62:i32 = let %32
        %34:u32 = min 10u, %x_59
        %35:u32 = let %34
        %36:u32 = bitcast %x_62
        %37:u32 = add %35, %36
        %38:bool = lt %x_58, %37
        if %38 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %39:u32 = load %i_1
        %x_67:u32 = let %39
        %41:ptr<function, i32, read_write> = access %data, %x_67
        store %41, 6i
        continue  # -> $B8
      }
      $B8: {  # continuing
        %42:u32 = load %i_1
        %x_69:u32 = let %42
        %44:u32 = add %x_69, 1u
        store %i_1, %44
        next_iteration  # -> $B7
      }
    }
    %45:ptr<function, i32, read_write> = access %data, 0i
    %46:i32 = load %45
    %x_72:i32 = let %46
    %48:bool = eq %x_72, 5i
    %x_73:bool = let %48
    store %x_79_phi, %x_73
    if %x_73 [t: $B11] {  # if_3
      $B11: {  # true
        %50:ptr<function, i32, read_write> = access %data, 1i
        %51:i32 = load %50
        %x_77:i32 = let %51
        %53:bool = eq %x_77, 6i
        store %x_78, %53
        %54:bool = load %x_78
        store %x_79_phi, %54
        exit_if  # if_3
      }
    }
    %55:bool = load %x_79_phi
    %x_79:bool = let %55
    if %x_79 [t: $B12, f: $B13] {  # if_4
      $B12: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_4
      }
      $B13: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B14: {
    %58:void = call %main_1
    %59:vec4<f32> = load %x_GLF_color
    %60:main_out = construct %59
    ret %60
  }
}

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