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, 4> @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, 2> @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 {
    %m:ptr<function, mat3x3<f32>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %arr:ptr<function, array<vec3<f32>, 2>, read_write> = var
    %v:ptr<function, vec3<f32>, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_45:i32 = load %9
    %x_46:f32 = convert %x_45
    %12:vec3<f32> = construct %x_46, 0.0f, 0.0f
    %13:vec3<f32> = construct 0.0f, %x_46, 0.0f
    %14:vec3<f32> = construct 0.0f, 0.0f, %x_46
    %15:mat3x3<f32> = construct %12, %13, %14
    store %m, %15
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_52:i32 = load %16
    store %a, %x_52
    %x_53:i32 = load %a
    %x_54:i32 = load %a
    %20:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %x_56:f32 = load %20
    %22:ptr<function, vec3<f32>, read_write> = access %m, %x_53
    store_vector_element %22, %x_54, %x_56
    %23:ptr<function, vec3<f32>, read_write> = access %m, 1i
    %x_59:vec3<f32> = load %23
    %25:ptr<function, vec3<f32>, read_write> = access %m, 1i
    %x_61:vec3<f32> = load %25
    %27:array<vec3<f32>, 2> = construct %x_59, %x_61
    store %arr, %27
    %28:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %x_64:f32 = load %28
    %30:vec3<f32> = construct %x_64, %x_64, %x_64
    store %v, %30
    %x_66:i32 = load %a
    %32:ptr<function, vec3<f32>, read_write> = access %arr, %x_66
    %x_68:vec3<f32> = load %32
    %x_69:vec3<f32> = load %v
    %35:vec3<f32> = add %x_69, %x_68
    store %v, %35
    %x_71:vec3<f32> = load %v
    %37:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_73:i32 = load %37
    %39:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %x_76:i32 = load %39
    %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_79:i32 = load %41
    %43:f32 = convert %x_73
    %44:f32 = convert %x_76
    %45:f32 = convert %x_79
    %46:vec3<f32> = construct %43, %44, %45
    %47:vec3<bool> = eq %x_71, %46
    %48:bool = all %47
    if %48 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %49:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_88:i32 = load %49
        %51:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_91:i32 = load %51
        %53:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_94:i32 = load %53
        %55:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_97:i32 = load %55
        %57:f32 = convert %x_88
        %58:f32 = convert %x_91
        %59:f32 = convert %x_94
        %60:f32 = convert %x_97
        %61:vec4<f32> = construct %57, %58, %59, %60
        store %x_GLF_color, %61
        exit_if  # if_1
      }
      %b4 = block {  # false
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %x_101:i32 = load %62
        %x_102:f32 = convert %x_101
        %65:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
        store %x_GLF_color, %65
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %67:void = call %main_1
    %68:vec4<f32> = load %x_GLF_color
    %69:main_out = construct %68
    ret %69
  }
}

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