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_phi:ptr<function, bool, read_write> = var
    %x_89:f32 = load_vector_element %v1, 0u
    %9:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %x_91:f32 = load %9
    %x_92:bool = eq %x_89, %x_91
    store %x_100_phi, %x_92
    if %x_92 [t: %b3] {  # if_1
      %b3 = block {  # true
        %x_96:f32 = load_vector_element %v1, 1u
        %13:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %x_98:f32 = load %13
        %15:bool = eq %x_96, %x_98
        store %x_99, %15
        %16:bool = load %x_99
        store %x_100_phi, %16
        exit_if  # if_1
      }
    }
    %x_100:bool = load %x_100_phi
    if %x_100 [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
    %x_45:f32 = load %28
    %30:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %x_47:f32 = load %30
    %32:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %x_50:f32 = load %32
    %34:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %x_52:f32 = load %34
    %36:f32 = negation %x_47
    %37:vec2<f32> = construct %x_45, %36
    %38:f32 = sin %x_52
    %39:vec2<f32> = construct %x_50, %38
    %40:mat2x2<f32> = construct %37, %39
    store %m1, %40
    %x_57:mat2x2<f32> = load %m1
    %x_58:mat2x2<f32> = load %m1
    %43:mat2x2<f32> = mul %x_57, %x_58
    store %m2, %43
    %44:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %x_61:f32 = load %44
    %x_63:mat2x2<f32> = load %m2
    %47:vec2<f32> = construct %x_61, %x_61
    %48:vec2<f32> = mul %47, %x_63
    store %v1_1, %48
    %x_65:vec2<f32> = load %v1_1
    store %param, %x_65
    %x_66:i32 = call %f1_vf2_, %param
    store %a, %x_66
    %x_67:i32 = load %a
    %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_69:i32 = load %52
    %54:bool = eq %x_67, %x_69
    if %54 [t: %b6, f: %b7] {  # if_3
      %b6 = block {  # true
        %55:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %x_75:f32 = load %55
        %57:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %x_77:f32 = load %57
        %59:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
        %x_79:f32 = load %59
        %61:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %x_81:f32 = load %61
        %63:vec4<f32> = construct %x_75, %x_77, %x_79, %x_81
        store %x_GLF_color, %63
        exit_if  # if_3
      }
      %b7 = block {  # false
        %64:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_84:i32 = load %64
        %x_85:f32 = convert %x_84
        %67:vec4<f32> = construct %x_85, %x_85, %x_85, %x_85
        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.  *
********************************************************************
