SKIP: FAILED

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

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

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

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

%func_f1_ = func(%b:ptr<function, f32, read_write>):f32 {
  $B2: {
    %6:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %7:f32 = load %6
    %8:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %9:f32 = load %8
    %10:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %11:f32 = load %10
    %12:vec4<f32> = construct %7, %9, %11, 1.0f
    store %x_GLF_color, %12
    %13:vec4<f32> = load %x_GLF_color
    store %x_GLF_color, %13
    %14:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %15:f32 = load %14
    %16:f32 = load %b
    %17:bool = gte %15, %16
    if %17 [t: $B3] {  # if_1
      $B3: {  # true
        %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %19:f32 = load %18
        %x_104:f32 = let %19
        ret %x_104
      }
    }
    %21:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %22:f32 = load %21
    %x_106:f32 = let %22
    ret %x_106
  }
}
%main_1 = func():void {
  $B4: {
    %a:ptr<function, f32, read_write> = var
    %param:ptr<function, f32, read_write> = var
    %param_1:ptr<function, f32, read_write> = var
    %x_71:ptr<function, bool, read_write> = var
    %x_72:ptr<function, bool, read_write> = var
    %30:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %31:f32 = load %30
    store %param, %31
    %32:f32 = call %func_f1_, %param
    %x_45:f32 = let %32
    store %a, %x_45
    %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %35:f32 = load %34
    %36:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %37:f32 = load %36
    %38:f32 = add %35, %37
    store %param_1, %38
    %39:f32 = call %func_f1_, %param_1
    %x_51:f32 = let %39
    %41:f32 = load %a
    %42:f32 = add %41, %x_51
    store %a, %42
    %43:f32 = load %a
    %44:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
    %45:f32 = load %44
    %46:bool = eq %43, %45
    %x_57:bool = let %46
    store %x_72, %x_57
    if %x_57 [t: $B5] {  # if_2
      $B5: {  # true
        %48:vec4<f32> = load %x_GLF_color
        %49:vec4<f32> = let %48
        %50:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %51:f32 = load %50
        %52:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %53:f32 = load %52
        %54:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %55:f32 = load %54
        %56:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %57:f32 = load %56
        %58:vec4<f32> = construct %51, %53, %55, %57
        %59:vec4<bool> = eq %49, %58
        %60:bool = all %59
        store %x_71, %60
        %61:bool = load %x_71
        store %x_72, %61
        exit_if  # if_2
      }
    }
    %62:bool = load %x_72
    if %62 [t: $B6, f: $B7] {  # if_3
      $B6: {  # true
        %63:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %64:i32 = load %63
        %65:f32 = convert %64
        %66:f32 = let %65
        %67:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %68:i32 = load %67
        %69:f32 = convert %68
        %70:f32 = let %69
        %71:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %72:i32 = load %71
        %73:f32 = convert %72
        %74:f32 = let %73
        %75:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %76:i32 = load %75
        %77:f32 = convert %76
        %78:vec4<f32> = construct %66, %70, %74, %77
        store %x_GLF_color, %78
        exit_if  # if_3
      }
      $B7: {  # false
        %79:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %80:i32 = load %79
        %81:f32 = convert %80
        %82:vec4<f32> = construct %81
        store %x_GLF_color, %82
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %84:void = call %main_1
    %85:vec4<f32> = load %x_GLF_color
    %86:main_out = construct %85
    ret %86
  }
}

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