SKIP: FAILED

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

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

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

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %a:ptr<function, i32, read_write> = var
    %v:ptr<function, vec4<f32>, read_write> = var
    %m:ptr<function, mat3x4<f32>, read_write> = var
    %indexable:ptr<function, mat4x4<f32>, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_44:i32 = load %9
    store %a, %x_44
    %11:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %x_46:f32 = load %11
    %13:vec4<f32> = construct %x_46, %x_46, %x_46, %x_46
    store %v, %13
    %14:ptr<uniform, f32, read> = access %x_9, 0u, 3i, 0u
    %x_49:f32 = load %14
    %16:vec4<f32> = construct %x_49, 0.0f, 0.0f, 0.0f
    %17:vec4<f32> = construct 0.0f, %x_49, 0.0f, 0.0f
    %18:vec4<f32> = construct 0.0f, 0.0f, %x_49, 0.0f
    %19:mat3x4<f32> = construct %16, %17, %18
    store %m, %19
    %x_54:i32 = load %a
    %x_55:i32 = load %a
    %22:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %x_57:f32 = load %22
    %24:ptr<function, vec4<f32>, read_write> = access %m, %x_54
    store_vector_element %24, %x_55, %x_57
    %x_59:i32 = load %a
    %x_60:mat3x4<f32> = load %m
    %x_78:i32 = load %a
    %x_79:i32 = load %a
    %29:f32 = access %x_60, 0u, 0u
    %30:f32 = access %x_60, 0u, 1u
    %31:f32 = access %x_60, 0u, 2u
    %32:f32 = access %x_60, 0u, 3u
    %33:vec4<f32> = construct %29, %30, %31, %32
    %34:f32 = access %x_60, 1u, 0u
    %35:f32 = access %x_60, 1u, 1u
    %36:f32 = access %x_60, 1u, 2u
    %37:f32 = access %x_60, 1u, 3u
    %38:vec4<f32> = construct %34, %35, %36, %37
    %39:f32 = access %x_60, 2u, 0u
    %40:f32 = access %x_60, 2u, 1u
    %41:f32 = access %x_60, 2u, 2u
    %42:f32 = access %x_60, 2u, 3u
    %43:vec4<f32> = construct %39, %40, %41, %42
    %44:mat4x4<f32> = construct %33, %38, %43, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
    store %indexable, %44
    %45:ptr<function, vec4<f32>, read_write> = access %indexable, %x_78
    %x_81:f32 = load_vector_element %45, %x_79
    %x_83:f32 = load_vector_element %v, %x_59
    %48:f32 = add %x_83, %x_81
    store_vector_element %v, %x_59, %48
    %x_87:f32 = load_vector_element %v, 1u
    %50:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %x_89:f32 = load %50
    %52:bool = eq %x_87, %x_89
    if %52 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %53:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_95:i32 = load %53
        %55:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_98:i32 = load %55
        %57:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_101:i32 = load %57
        %59:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_104:i32 = load %59
        %61:f32 = convert %x_95
        %62:f32 = convert %x_98
        %63:f32 = convert %x_101
        %64:f32 = convert %x_104
        %65:vec4<f32> = construct %61, %62, %63, %64
        store %x_GLF_color, %65
        exit_if  # if_1
      }
      %b4 = block {  # false
        %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_108:i32 = load %66
        %x_109:f32 = convert %x_108
        %69:vec4<f32> = construct %x_109, %x_109, %x_109, %x_109
        store %x_GLF_color, %69
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %71:void = call %main_1
    %72:vec4<f32> = load %x_GLF_color
    %73:main_out = construct %72
    ret %73
  }
}

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