SKIP: FAILED

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

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

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

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

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

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

%main_1 = func():void {
  $B2: {
    %m0:ptr<function, mat3x4<f32>, read_write> = var
    %m1:ptr<function, mat3x4<f32>, read_write> = var
    %undefined:ptr<function, vec3<f32>, read_write> = var
    %defined:ptr<function, vec3<f32>, read_write> = var
    %v0:ptr<function, vec4<f32>, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %v2:ptr<function, vec4<f32>, read_write> = var
    %v3:ptr<function, vec4<f32>, read_write> = var
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %14:i32 = load %13
    %x_17:i32 = let %14
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %17:i32 = load %16
    %x_18:i32 = let %17
    %19:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %20:i32 = load %19
    %x_19:i32 = let %20
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %23:i32 = load %22
    %x_20:i32 = let %23
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
    %26:i32 = load %25
    %x_21:i32 = let %26
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %29:i32 = load %28
    %x_22:i32 = let %29
    %31:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %32:i32 = load %31
    %x_23:i32 = let %32
    %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %35:i32 = load %34
    %x_24:i32 = let %35
    %37:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %38:i32 = load %37
    %x_25:i32 = let %38
    %40:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %41:i32 = load %40
    %x_26:i32 = let %41
    %43:f32 = convert %x_17
    %44:f32 = let %43
    %45:f32 = convert %x_18
    %46:f32 = let %45
    %47:f32 = convert %x_19
    %48:vec4<f32> = construct %44, %46, %47, 4.0f
    %49:vec4<f32> = let %48
    %50:f32 = convert %x_20
    %51:f32 = let %50
    %52:f32 = convert %x_21
    %53:f32 = let %52
    %54:f32 = convert %x_22
    %55:vec4<f32> = construct %51, %53, %54, 8.0f
    %56:vec4<f32> = let %55
    %57:f32 = convert %x_23
    %58:f32 = let %57
    %59:f32 = convert %x_24
    %60:f32 = let %59
    %61:f32 = convert %x_25
    %62:f32 = let %61
    %63:f32 = convert %x_26
    %64:vec4<f32> = construct %58, %60, %62, %63
    %65:mat3x4<f32> = construct %49, %56, %64
    store %m0, %65
    %66:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %67:i32 = load %66
    %x_27:i32 = let %67
    %69:f32 = convert %x_27
    %x_104:f32 = let %69
    %71:vec4<f32> = construct %x_104, 0.0f, 0.0f, 0.0f
    %72:vec4<f32> = let %71
    %73:vec4<f32> = construct 0.0f, %x_104, 0.0f, 0.0f
    %74:vec4<f32> = let %73
    %75:vec4<f32> = construct 0.0f, 0.0f, %x_104, 0.0f
    %76:mat3x4<f32> = construct %72, %74, %75
    store %m1, %76
    store %undefined, vec3<f32>(2.0f)
    %77:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %78:i32 = load %77
    %x_28:i32 = let %78
    %80:f32 = convert %x_28
    %x_111:f32 = let %80
    %82:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %83:i32 = load %82
    %x_29:i32 = let %83
    %85:vec3<f32> = construct %x_111, %x_111, %x_111
    %86:vec3<f32> = let %85
    %87:vec3<i32> = construct %x_29, %x_29, %x_29
    %88:vec3<f32> = ldexp %86, %87
    store %defined, %88
    %89:mat3x4<f32> = load %m0
    %x_116:mat3x4<f32> = let %89
    %91:vec3<f32> = load %undefined
    %x_117:vec3<f32> = let %91
    %93:vec4<f32> = mul %x_116, %x_117
    store %v0, %93
    %94:mat3x4<f32> = load %m1
    %x_119:mat3x4<f32> = let %94
    %96:vec3<f32> = load %undefined
    %x_120:vec3<f32> = let %96
    %98:vec4<f32> = mul %x_119, %x_120
    store %v1, %98
    %99:mat3x4<f32> = load %m0
    %x_122:mat3x4<f32> = let %99
    %101:vec3<f32> = load %defined
    %x_123:vec3<f32> = let %101
    %103:vec4<f32> = mul %x_122, %x_123
    store %v2, %103
    %104:mat3x4<f32> = load %m1
    %x_125:mat3x4<f32> = let %104
    %106:vec3<f32> = load %defined
    %x_126:vec3<f32> = let %106
    %108:vec4<f32> = mul %x_125, %x_126
    store %v3, %108
    %109:f32 = load_vector_element %v2, 0u
    %x_129:f32 = let %109
    %111:f32 = load_vector_element %v3, 0u
    %x_131:f32 = let %111
    %113:bool = gt %x_129, %x_131
    if %113 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %114:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %115:i32 = load %114
        %x_30:i32 = let %115
        %117:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
        %118:i32 = load %117
        %x_31:i32 = let %118
        %120:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
        %121:i32 = load %120
        %x_32:i32 = let %121
        %123:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %124:i32 = load %123
        %x_33:i32 = let %124
        %126:f32 = convert %x_30
        %127:f32 = let %126
        %128:f32 = convert %x_31
        %129:f32 = let %128
        %130:f32 = convert %x_32
        %131:f32 = let %130
        %132:f32 = convert %x_33
        %133:vec4<f32> = construct %127, %129, %131, %132
        store %x_GLF_color, %133
        exit_if  # if_1
      }
      $B4: {  # false
        %134:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
        %135:i32 = load %134
        %x_34:i32 = let %135
        %137:f32 = convert %x_34
        %x_146:f32 = let %137
        %139:vec4<f32> = construct %x_146, %x_146, %x_146, %x_146
        store %x_GLF_color, %139
        exit_if  # if_1
      }
    }
    %140:f32 = load_vector_element %v0, 0u
    %x_149:f32 = let %140
    %142:f32 = load_vector_element %v1, 0u
    %x_151:f32 = let %142
    %144:bool = lt %x_149, %x_151
    if %144 [t: $B5] {  # if_2
      $B5: {  # true
        %145:ptr<uniform, f32, read> = access %x_15, 0u, 0i, 0u
        %146:f32 = load %145
        %x_156:f32 = let %146
        store_vector_element %x_GLF_color, 1u, %x_156
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %149:void = call %main_1
    %150:vec4<f32> = load %x_GLF_color
    %151:main_out = construct %150
    ret %151
  }
}

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