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_6: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: {
    %f0:ptr<function, f32, read_write> = var
    %f1:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_63:ptr<function, bool, read_write> = var
    %x_64:ptr<function, bool, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %11:f32 = load %10
    store %f0, %11
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    store %f1, %13
    %14:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %15:i32 = load %14
    store %i, %15
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %16:i32 = load %i
        %17:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %18:i32 = load %17
        %19:bool = lt %16, %18
        if %19 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %20:f32 = load %f0
        %21:f32 = mul 1.10000002384185791016f, %20
        %22:f32 = abs %21
        store %f0, %22
        %23:f32 = load %f0
        store %f1, %23
        continue  # -> $B4
      }
      $B4: {  # continuing
        %24:i32 = load %i
        %25:i32 = add %24, 1i
        store %i, %25
        next_iteration  # -> $B3
      }
    }
    %26:f32 = load %f1
    %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %28:f32 = load %27
    %29:bool = gt %26, %28
    %x_57:bool = let %29
    store %x_64, %x_57
    if %x_57 [t: $B7] {  # if_2
      $B7: {  # true
        %31:f32 = load %f1
        %32:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %33:f32 = load %32
        %34:bool = lt %31, %33
        store %x_63, %34
        %35:bool = load %x_63
        store %x_64, %35
        exit_if  # if_2
      }
    }
    %36:bool = load %x_64
    if %36 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %37:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %38:i32 = load %37
        %39:f32 = convert %38
        %40:f32 = let %39
        %41:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %42:i32 = load %41
        %43:f32 = convert %42
        %44:f32 = let %43
        %45:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:f32 = let %47
        %49:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %50:i32 = load %49
        %51:f32 = convert %50
        %52:vec4<f32> = construct %40, %44, %48, %51
        store %x_GLF_color, %52
        exit_if  # if_3
      }
      $B9: {  # false
        %53:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %54:i32 = load %53
        %55:f32 = convert %54
        %56:vec4<f32> = construct %55
        store %x_GLF_color, %56
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %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.  *
********************************************************************
