SKIP: FAILED

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

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

buf1 = struct @align(8) {
  v1:vec2<f32> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %m24:ptr<function, mat2x2<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %v2:ptr<function, vec2<f32>, read_write> = var
    %v3:ptr<function, vec2<f32>, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %10:f32 = load %9
    %x_40:f32 = let %10
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    %x_42:f32 = let %13
    %15:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
    %16:f32 = load_vector_element %15, 0u
    %x_44:f32 = let %16
    %18:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %19:f32 = load %18
    %x_47:f32 = let %19
    %21:vec2<f32> = construct %x_40, %x_42
    %22:vec2<f32> = let %21
    %23:f32 = mul %x_44, 1.0f
    %24:vec2<f32> = construct %23, %x_47
    %25:mat2x2<f32> = construct %22, %24
    store %m24, %25
    %26:mat2x2<f32> = load %m24
    %x_51:mat2x2<f32> = let %26
    %28:f32 = access %x_51, 0u, 0u
    store %a, %28
    store %v2, vec2<f32>(1.0f)
    %29:vec2<f32> = load %v2
    %x_53:vec2<f32> = let %29
    %31:f32 = load %a
    %x_54:f32 = let %31
    %33:vec2<f32> = construct %x_54, 1.0f
    %x_55:vec2<f32> = let %33
    %35:vec2<f32> = reflect %x_53, %x_55
    store %v3, %35
    %36:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %37:f32 = load %36
    %x_58:f32 = let %37
    %39:vec2<f32> = load %v3
    %x_59:vec2<f32> = let %39
    %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %42:f32 = load %41
    %x_61:f32 = let %42
    %44:f32 = access %x_59, 0u
    %45:f32 = access %x_59, 1u
    %46:vec4<f32> = construct %x_58, %44, %45, %x_61
    store %x_GLF_color, %46
    %47:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
    %48:f32 = load_vector_element %47, 1u
    %x_66:f32 = let %48
    %50:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %51:f32 = load %50
    %x_68:f32 = let %51
    %53:bool = eq %x_66, %x_68
    if %53 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %54:vec4<f32> = load %x_GLF_color
        %x_73:vec4<f32> = let %54
        %56:f32 = access %x_73, 0u
        %57:f32 = access %x_73, 3u
        %58:vec4<f32> = construct %56, 0.0f, 0.0f, %57
        store %x_GLF_color, %58
        exit_if  # if_1
      }
      $B4: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %60:void = call %main_1
    %61:vec4<f32> = load %x_GLF_color
    %62:main_out = construct %61
    ret %62
  }
}

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