SKIP: FAILED

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

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

S = struct @align(4) {
  a:i32 @offset(0)
  b:i32 @offset(4)
  c:i32 @offset(8)
}

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

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

%main_1 = func():void {
  $B2: {
    %A:ptr<function, array<S, 2>, read_write> = var
    %5:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %6:i32 = load %5
    %x_29:i32 = let %6
    %8:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %9:i32 = load %8
    %x_31:i32 = let %9
    %11:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %12:i32 = load %11
    %x_33:i32 = let %12
    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %15:i32 = load %14
    %x_35:i32 = let %15
    %17:ptr<function, S, read_write> = access %A, %x_29
    %18:S = construct %x_31, %x_33, %x_35
    store %17, %18
    %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %20:i32 = load %19
    %x_39:i32 = let %20
    %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %23:i32 = load %22
    %x_41:i32 = let %23
    %25:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %26:i32 = load %25
    %x_43:i32 = let %26
    %28:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %29:i32 = load %28
    %x_45:i32 = let %29
    %31:ptr<function, S, read_write> = access %A, %x_39
    %32:S = construct %x_41, %x_43, %x_45
    store %31, %32
    %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %34:i32 = load %33
    %x_49:i32 = let %34
    %36:ptr<function, i32, read_write> = access %A, %x_49, 1u
    %37:i32 = load %36
    %x_51:i32 = let %37
    %39:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %40:i32 = load %39
    %x_53:i32 = let %40
    %42:bool = eq %x_51, %x_53
    if %42 [t: $B3] {  # if_1
      $B3: {  # true
        %43:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %44:i32 = load %43
        %x_58:i32 = let %44
        %46:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %47:i32 = load %46
        %x_61:i32 = let %47
        %49:i32 = max %x_58, 1i
        %50:i32 = min %49, 2i
        %51:ptr<function, i32, read_write> = access %A, %50, 1u
        store %51, %x_61
        exit_if  # if_1
      }
    }
    %52:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %53:i32 = load %52
    %x_64:i32 = let %53
    %55:ptr<function, i32, read_write> = access %A, %x_64, 1u
    %56:i32 = load %55
    %x_66:i32 = let %56
    %58:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %59:i32 = load %58
    %x_68:i32 = let %59
    %61:bool = eq %x_66, %x_68
    if %61 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %62:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %63:i32 = load %62
        %x_74:i32 = let %63
        %65:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %66:i32 = load %65
        %x_77:i32 = let %66
        %68:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %69:i32 = load %68
        %x_80:i32 = let %69
        %71:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %72:i32 = load %71
        %x_83:i32 = let %72
        %74:f32 = convert %x_74
        %75:f32 = let %74
        %76:f32 = convert %x_77
        %77:f32 = let %76
        %78:f32 = convert %x_80
        %79:f32 = let %78
        %80:f32 = convert %x_83
        %81:vec4<f32> = construct %75, %77, %79, %80
        store %x_GLF_color, %81
        exit_if  # if_2
      }
      $B5: {  # false
        %82:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %83:i32 = load %82
        %x_87:i32 = let %83
        %85:f32 = convert %x_87
        %x_88:f32 = let %85
        %87:vec4<f32> = construct %x_88, %x_88, %x_88, %x_88
        store %x_GLF_color, %87
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %89:void = call %main_1
    %90:vec4<f32> = load %x_GLF_color
    %91:main_out = construct %90
    ret %91
  }
}

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