SKIP: FAILED

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

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

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

buf1 = struct @align(4) {
  x_GLF_uniform_int_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_7: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
}

%f1_vf2_ = func(%v1:ptr<function, vec2<f32>, read_write>):i32 -> %b2 {
  %b2 = block {
    %x_99:ptr<function, bool, read_write> = var
    %x_100:ptr<function, bool, read_write> = var
    %8:f32 = load_vector_element %v1, 0u
    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %10:f32 = load %9
    %x_92:bool = eq %8, %10
    store %x_100, %x_92
    if %x_92 [t: %b3] {  # if_1
      %b3 = block {  # true
        %12:f32 = load_vector_element %v1, 1u
        %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %14:f32 = load %13
        %15:bool = eq %12, %14
        store %x_99, %15
        %16:bool = load %x_99
        store %x_100, %16
        exit_if  # if_1
      }
    }
    %17:bool = load %x_100
    if %17 [t: %b4] {  # if_2
      %b4 = block {  # true
        %18:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_104:i32 = load %18
        ret %x_104
      }
    }
    %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %x_106:i32 = load %20
    ret %x_106
  }
}
%main_1 = func():void -> %b5 {
  %b5 = block {
    %m1:ptr<function, mat2x2<f32>, read_write> = var
    %m2:ptr<function, mat2x2<f32>, read_write> = var
    %v1_1:ptr<function, vec2<f32>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %param:ptr<function, vec2<f32>, read_write> = var
    %28:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %29:f32 = load %28
    %30:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %31:f32 = load %30
    %32:f32 = negation %31
    %33:vec2<f32> = construct %29, %32
    %34:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %35:f32 = load %34
    %36:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %37:f32 = load %36
    %38:f32 = sin %37
    %39:vec2<f32> = construct %35, %38
    %40:mat2x2<f32> = construct %33, %39
    store %m1, %40
    %41:mat2x2<f32> = load %m1
    %42:mat2x2<f32> = load %m1
    %43:mat2x2<f32> = mul %41, %42
    store %m2, %43
    %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %45:f32 = load %44
    %46:vec2<f32> = construct %45
    %47:mat2x2<f32> = load %m2
    %48:vec2<f32> = mul %46, %47
    store %v1_1, %48
    %49:vec2<f32> = load %v1_1
    store %param, %49
    %x_66:i32 = call %f1_vf2_, %param
    store %a, %x_66
    %51:i32 = load %a
    %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %53:i32 = load %52
    %54:bool = eq %51, %53
    if %54 [t: %b6, f: %b7] {  # if_3
      %b6 = block {  # true
        %55:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %56:f32 = load %55
        %57:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %58:f32 = load %57
        %59:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %60:f32 = load %59
        %61:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %62:f32 = load %61
        %63:vec4<f32> = construct %56, %58, %60, %62
        store %x_GLF_color, %63
        exit_if  # if_3
      }
      %b7 = block {  # false
        %64:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %65:i32 = load %64
        %66:f32 = convert %65
        %67:vec4<f32> = construct %66
        store %x_GLF_color, %67
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %69:void = call %main_1
    %70:vec4<f32> = load %x_GLF_color
    %71:main_out = construct %70
    ret %71
  }
}

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