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, 5> @offset(0)
}

buf2 = struct @align(8) {
  zeroVec:vec2<f32> @offset(0)
}

buf3 = struct @align(8) {
  oneVec:vec2<f32> @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)
}

S = struct @align(4) {
  numbers:array<f32, 3> @offset(0)
}

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

$B1: {  # root
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_12:ptr<uniform, buf3, read> = var @binding_point(0, 3)
  %x_15:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %obj:ptr<function, S, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %x_49:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %11:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
    %12:f32 = load %11
    %x_51:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %15:f32 = load %14
    %x_53:f32 = let %15
    %17:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
    %18:f32 = load %17
    %x_55:f32 = let %18
    %20:array<f32, 3> = construct %x_51, %x_53, %x_55
    %21:S = construct %20
    store %obj, %21
    %22:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
    %23:f32 = load_vector_element %22, 0u
    %x_59:f32 = let %23
    %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %26:f32 = load %25
    %x_62:f32 = let %26
    %28:i32 = call %tint_f32_to_i32, %x_59
    %30:ptr<function, f32, read_write> = access %obj, 0u, %28
    store %30, %x_62
    %31:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
    %32:f32 = load_vector_element %31, 0u
    %x_65:f32 = let %32
    %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %35:f32 = load %34
    %x_67:f32 = let %35
    %37:bool = gt %x_65, %x_67
    if %37 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %38:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %39:vec2<f32> = load %38
        %x_73:vec2<f32> = let %39
        store %x_49, %x_73
        exit_if  # if_1
      }
      $B4: {  # false
        %41:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
        %42:vec2<f32> = load %41
        %x_75:vec2<f32> = let %42
        store %x_49, %x_75
        exit_if  # if_1
      }
    }
    %44:f32 = load_vector_element %x_49, 1u
    %x_77:f32 = let %44
    store %a, %x_77
    %46:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %47:f32 = load %46
    %x_79:f32 = let %47
    %49:f32 = load %a
    %x_80:f32 = let %49
    %51:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
    %52:i32 = load %51
    %x_82:i32 = let %52
    %54:ptr<function, f32, read_write> = access %obj, 0u, %x_82
    %55:f32 = load %54
    %x_84:f32 = let %55
    %57:f32 = mix %x_79, %x_80, %x_84
    store %b, %57
    %58:f32 = load %b
    %x_86:f32 = let %58
    %60:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %61:f32 = load %60
    %x_88:f32 = let %61
    %63:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %64:f32 = load %63
    %x_91:f32 = let %64
    %66:f32 = distance %x_86, %x_88
    %67:bool = lt %66, %x_91
    if %67 [t: $B5, f: $B6] {  # if_2
      $B5: {  # true
        %68:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
        %69:i32 = load %68
        %x_97:i32 = let %69
        %71:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
        %72:i32 = load %71
        %x_100:i32 = let %72
        %74:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
        %75:i32 = load %74
        %x_103:i32 = let %75
        %77:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
        %78:i32 = load %77
        %x_106:i32 = let %78
        %80:f32 = convert %x_97
        %81:f32 = let %80
        %82:f32 = convert %x_100
        %83:f32 = let %82
        %84:f32 = convert %x_103
        %85:f32 = let %84
        %86:f32 = convert %x_106
        %87:vec4<f32> = construct %81, %83, %85, %86
        store %x_GLF_color, %87
        exit_if  # if_2
      }
      $B6: {  # false
        %88:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
        %89:i32 = load %88
        %x_110:i32 = let %89
        %91:f32 = convert %x_110
        %x_111:f32 = let %91
        %93:vec4<f32> = construct %x_111, %x_111, %x_111, %x_111
        store %x_GLF_color, %93
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %95:void = call %main_1
    %96:vec4<f32> = load %x_GLF_color
    %97:main_out = construct %96
    ret %97
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B8: {
    %99:i32 = convert %value
    %100:bool = gte %value, -2147483648.0f
    %101:i32 = select -2147483648i, %99, %100
    %102:bool = lte %value, 2147483520.0f
    %103:i32 = select 2147483647i, %101, %102
    ret %103
  }
}

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