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

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

$B1: {  # root
  %x_8: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: {
    %a:ptr<function, u32, read_write> = var
    %values:ptr<function, vec4<f32>, read_write> = var
    %r:ptr<function, vec4<f32>, read_write> = var
    %x_85:ptr<function, bool, read_write> = var
    %x_101:ptr<function, bool, read_write> = var
    %x_117:ptr<function, bool, read_write> = var
    %x_86_phi:ptr<function, bool, read_write> = var
    %x_102_phi:ptr<function, bool, read_write> = var
    %x_118_phi:ptr<function, bool, read_write> = var
    store %a, 1006648320u
    %14:u32 = load %a
    %x_38:u32 = let %14
    %16:vec4<f32> = unpack4x8unorm %x_38
    store %values, %16
    %17:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
    %18:f32 = load %17
    %x_41:f32 = let %18
    %20:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %21:f32 = load %20
    %x_43:f32 = let %21
    %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %24:f32 = load %23
    %x_45:f32 = let %24
    %26:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
    %27:f32 = load %26
    %x_48:f32 = let %27
    %29:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %30:f32 = load %29
    %x_50:f32 = let %30
    %32:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %33:f32 = load %32
    %x_53:f32 = let %33
    %35:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %36:f32 = load %35
    %x_55:f32 = let %36
    %38:f32 = div %x_43, %x_45
    %39:f32 = div %x_48, %x_50
    %40:f32 = div %x_53, %x_55
    %41:vec4<f32> = construct %x_41, %38, %39, %40
    store %r, %41
    %42:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %43:i32 = load %42
    %x_59:i32 = let %43
    %45:f32 = load_vector_element %values, %x_59
    %x_61:f32 = let %45
    %47:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %48:i32 = load %47
    %x_63:i32 = let %48
    %50:f32 = load_vector_element %r, %x_63
    %x_65:f32 = let %50
    %52:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
    %53:f32 = load %52
    %x_69:f32 = let %53
    %55:f32 = sub %x_61, %x_65
    %56:f32 = abs %55
    %57:bool = lt %56, %x_69
    %x_70:bool = let %57
    store %x_86_phi, %x_70
    if %x_70 [t: $B3] {  # if_1
      $B3: {  # true
        %59:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %60:i32 = load %59
        %x_74:i32 = let %60
        %62:f32 = load_vector_element %values, %x_74
        %x_76:f32 = let %62
        %64:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %65:i32 = load %64
        %x_78:i32 = let %65
        %67:f32 = load_vector_element %r, %x_78
        %x_80:f32 = let %67
        %69:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %70:f32 = load %69
        %x_84:f32 = let %70
        %72:f32 = sub %x_76, %x_80
        %73:f32 = abs %72
        %74:bool = lt %73, %x_84
        store %x_85, %74
        %75:bool = load %x_85
        store %x_86_phi, %75
        exit_if  # if_1
      }
    }
    %76:bool = load %x_86_phi
    %x_86:bool = let %76
    store %x_102_phi, %x_86
    if %x_86 [t: $B4] {  # if_2
      $B4: {  # true
        %78:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %79:i32 = load %78
        %x_90:i32 = let %79
        %81:f32 = load_vector_element %values, %x_90
        %x_92:f32 = let %81
        %83:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %84:i32 = load %83
        %x_94:i32 = let %84
        %86:f32 = load_vector_element %r, %x_94
        %x_96:f32 = let %86
        %88:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %89:f32 = load %88
        %x_100:f32 = let %89
        %91:f32 = sub %x_92, %x_96
        %92:f32 = abs %91
        %93:bool = lt %92, %x_100
        store %x_101, %93
        %94:bool = load %x_101
        store %x_102_phi, %94
        exit_if  # if_2
      }
    }
    %95:bool = load %x_102_phi
    %x_102:bool = let %95
    store %x_118_phi, %x_102
    if %x_102 [t: $B5] {  # if_3
      $B5: {  # true
        %97:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %98:i32 = load %97
        %x_106:i32 = let %98
        %100:f32 = load_vector_element %values, %x_106
        %x_108:f32 = let %100
        %102:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %103:i32 = load %102
        %x_110:i32 = let %103
        %105:f32 = load_vector_element %r, %x_110
        %x_112:f32 = let %105
        %107:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %108:f32 = load %107
        %x_116:f32 = let %108
        %110:f32 = sub %x_108, %x_112
        %111:f32 = abs %110
        %112:bool = lt %111, %x_116
        store %x_117, %112
        %113:bool = load %x_117
        store %x_118_phi, %113
        exit_if  # if_3
      }
    }
    %114:bool = load %x_118_phi
    %x_118:bool = let %114
    if %x_118 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %116:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %117:i32 = load %116
        %x_123:i32 = let %117
        %119:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %120:i32 = load %119
        %x_126:i32 = let %120
        %122:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %123:i32 = load %122
        %x_129:i32 = let %123
        %125:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %126:i32 = load %125
        %x_132:i32 = let %126
        %128:f32 = convert %x_123
        %129:f32 = let %128
        %130:f32 = convert %x_126
        %131:f32 = let %130
        %132:f32 = convert %x_129
        %133:f32 = let %132
        %134:f32 = convert %x_132
        %135:vec4<f32> = construct %129, %131, %133, %134
        store %x_GLF_color, %135
        exit_if  # if_4
      }
      $B7: {  # false
        %136:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %137:i32 = load %136
        %x_136:i32 = let %137
        %139:f32 = convert %x_136
        %x_137:f32 = let %139
        %141:vec4<f32> = construct %x_137, %x_137, %x_137, %x_137
        store %x_GLF_color, %141
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %143:void = call %main_1
    %144:vec4<f32> = load %x_GLF_color
    %145:main_out = construct %144
    ret %145
  }
}

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