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
    %10:i32 = load %9
    store %a, %10
    %11:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %12:f32 = load %11
    %13:vec4<f32> = construct %12
    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<function, vec4<f32>, read_write> = access %m, %x_54
    %23:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %24:f32 = load %23
    store_vector_element %22, %x_55, %24
    %x_59:i32 = load %a
    %x_78:i32 = load %a
    %x_79:i32 = load %a
    %28:ptr<function, vec4<f32>, read_write> = access %m, 0u
    %29:f32 = load_vector_element %28, 0u
    %30:ptr<function, vec4<f32>, read_write> = access %m, 0u
    %31:f32 = load_vector_element %30, 1u
    %32:ptr<function, vec4<f32>, read_write> = access %m, 0u
    %33:f32 = load_vector_element %32, 2u
    %34:ptr<function, vec4<f32>, read_write> = access %m, 0u
    %35:f32 = load_vector_element %34, 3u
    %36:vec4<f32> = construct %29, %31, %33, %35
    %37:ptr<function, vec4<f32>, read_write> = access %m, 1u
    %38:f32 = load_vector_element %37, 0u
    %39:ptr<function, vec4<f32>, read_write> = access %m, 1u
    %40:f32 = load_vector_element %39, 1u
    %41:ptr<function, vec4<f32>, read_write> = access %m, 1u
    %42:f32 = load_vector_element %41, 2u
    %43:ptr<function, vec4<f32>, read_write> = access %m, 1u
    %44:f32 = load_vector_element %43, 3u
    %45:vec4<f32> = construct %38, %40, %42, %44
    %46:ptr<function, vec4<f32>, read_write> = access %m, 2u
    %47:f32 = load_vector_element %46, 0u
    %48:ptr<function, vec4<f32>, read_write> = access %m, 2u
    %49:f32 = load_vector_element %48, 1u
    %50:ptr<function, vec4<f32>, read_write> = access %m, 2u
    %51:f32 = load_vector_element %50, 2u
    %52:ptr<function, vec4<f32>, read_write> = access %m, 2u
    %53:f32 = load_vector_element %52, 3u
    %54:vec4<f32> = construct %47, %49, %51, %53
    %55:mat4x4<f32> = construct %36, %45, %54, vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f)
    store %indexable, %55
    %56:f32 = load_vector_element %v, %x_59
    %57:ptr<function, vec4<f32>, read_write> = access %indexable, %x_78
    %58:f32 = load_vector_element %57, %x_79
    %59:f32 = add %56, %58
    store_vector_element %v, %x_59, %59
    %60:f32 = load_vector_element %v, 1u
    %61:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %62:f32 = load %61
    %63:bool = eq %60, %62
    if %63 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %64:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %65:i32 = load %64
        %66:f32 = convert %65
        %67:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %68:i32 = load %67
        %69:f32 = convert %68
        %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %71:i32 = load %70
        %72:f32 = convert %71
        %73:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %74:i32 = load %73
        %75:f32 = convert %74
        %76:vec4<f32> = construct %66, %69, %72, %75
        store %x_GLF_color, %76
        exit_if  # if_1
      }
      %b4 = block {  # false
        %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %78:i32 = load %77
        %79:f32 = convert %78
        %80:vec4<f32> = construct %79
        store %x_GLF_color, %80
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %82:void = call %main_1
    %83:vec4<f32> = load %x_GLF_color
    %84:main_out = construct %83
    ret %84
  }
}

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