SKIP: FAILED

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

buf2 = struct @align(4) {
  x_GLF_uniform_uint_values:array<strided_arr, 1> @offset(0)
}

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

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

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

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_2, 2> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %f:ptr<function, f32, read_write> = var
    %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
    %8:u32 = load %7
    %x_36:u32 = let %8
    %10:u32 = max 100u, %x_36
    %11:f32 = bitcast %10
    store %f, %11
    %12:f32 = load %f
    %x_39:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %15:f32 = load %14
    %x_41:f32 = let %15
    %17:bool = eq %x_39, %x_41
    if %17 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %19:i32 = load %18
        %x_47:i32 = let %19
        %21:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %22:i32 = load %21
        %x_50:i32 = let %22
        %24:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %25:i32 = load %24
        %x_53:i32 = let %25
        %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %28:i32 = load %27
        %x_56:i32 = let %28
        %30:f32 = convert %x_47
        %31:f32 = let %30
        %32:f32 = convert %x_50
        %33:f32 = let %32
        %34:f32 = convert %x_53
        %35:f32 = let %34
        %36:f32 = convert %x_56
        %37:vec4<f32> = construct %31, %33, %35, %36
        store %x_GLF_color, %37
        exit_if  # if_1
      }
      $B4: {  # false
        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %39:i32 = load %38
        %x_60:i32 = let %39
        %41:f32 = convert %x_60
        %x_61:f32 = let %41
        %43:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
        store %x_GLF_color, %43
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %45:void = call %main_1
    %46:vec4<f32> = load %x_GLF_color
    %47:main_out = construct %46
    ret %47
  }
}

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