SKIP: FAILED

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

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