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
    %15:f32 = convert %14
    %16:f32 = let %15
    %17:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %18:i32 = load %17
    %19:f32 = convert %18
    %20:f32 = let %19
    %21:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %22:i32 = load %21
    %23:f32 = convert %22
    %24:vec4<f32> = construct %16, %20, %23, 4.0f
    %25:vec4<f32> = let %24
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %27:i32 = load %26
    %28:f32 = convert %27
    %29:f32 = let %28
    %30:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
    %31:i32 = load %30
    %32:f32 = convert %31
    %33:f32 = let %32
    %34:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %35:i32 = load %34
    %36:f32 = convert %35
    %37:vec4<f32> = construct %29, %33, %36, 8.0f
    %38:vec4<f32> = let %37
    %39:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %40:i32 = load %39
    %41:f32 = convert %40
    %42:f32 = let %41
    %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %44:i32 = load %43
    %45:f32 = convert %44
    %46:f32 = let %45
    %47:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %48:i32 = load %47
    %49:f32 = convert %48
    %50:f32 = let %49
    %51:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %52:i32 = load %51
    %53:f32 = convert %52
    %54:vec4<f32> = construct %42, %46, %50, %53
    %55:mat3x4<f32> = construct %25, %38, %54
    store %m0, %55
    %56:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %57:i32 = load %56
    %58:f32 = convert %57
    %x_104:f32 = let %58
    %60:vec4<f32> = construct %x_104, 0.0f, 0.0f, 0.0f
    %61:vec4<f32> = let %60
    %62:vec4<f32> = construct 0.0f, %x_104, 0.0f, 0.0f
    %63:vec4<f32> = let %62
    %64:vec4<f32> = construct 0.0f, 0.0f, %x_104, 0.0f
    %65:mat3x4<f32> = construct %61, %63, %64
    store %m1, %65
    store %undefined, vec3<f32>(2.0f)
    %66:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %67:i32 = load %66
    %68:f32 = convert %67
    %69:vec3<f32> = construct %68
    %70:vec3<f32> = let %69
    %71:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %72:i32 = load %71
    %73:vec3<i32> = construct %72
    %74:vec3<f32> = ldexp %70, %73
    store %defined, %74
    %75:mat3x4<f32> = load %m0
    %76:vec3<f32> = load %undefined
    %77:vec4<f32> = mul %75, %76
    store %v0, %77
    %78:mat3x4<f32> = load %m1
    %79:vec3<f32> = load %undefined
    %80:vec4<f32> = mul %78, %79
    store %v1, %80
    %81:mat3x4<f32> = load %m0
    %82:vec3<f32> = load %defined
    %83:vec4<f32> = mul %81, %82
    store %v2, %83
    %84:mat3x4<f32> = load %m1
    %85:vec3<f32> = load %defined
    %86:vec4<f32> = mul %84, %85
    store %v3, %86
    %87:f32 = load_vector_element %v2, 0u
    %88:f32 = load_vector_element %v3, 0u
    %89:bool = gt %87, %88
    if %89 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %90:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %91:i32 = load %90
        %92:f32 = convert %91
        %93:f32 = let %92
        %94:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
        %95:i32 = load %94
        %96:f32 = convert %95
        %97:f32 = let %96
        %98:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
        %99:i32 = load %98
        %100:f32 = convert %99
        %101:f32 = let %100
        %102:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %103:i32 = load %102
        %104:f32 = convert %103
        %105:vec4<f32> = construct %93, %97, %101, %104
        store %x_GLF_color, %105
        exit_if  # if_1
      }
      $B4: {  # false
        %106:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
        %107:i32 = load %106
        %108:f32 = convert %107
        %109:vec4<f32> = construct %108
        store %x_GLF_color, %109
        exit_if  # if_1
      }
    }
    %110:f32 = load_vector_element %v0, 0u
    %111:f32 = load_vector_element %v1, 0u
    %112:bool = lt %110, %111
    if %112 [t: $B5] {  # if_2
      $B5: {  # true
        %113:ptr<uniform, f32, read> = access %x_15, 0u, 0i, 0u
        %114:f32 = load %113
        store_vector_element %x_GLF_color, 1u, %114
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %116:void = call %main_1
    %117:vec4<f32> = load %x_GLF_color
    %118:main_out = construct %117
    ret %118
  }
}

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