SKIP: FAILED

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

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

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

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 4> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, u32, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %E:ptr<function, f32, read_write> = var
    %x_75:ptr<function, bool, read_write> = var
    %x_76:ptr<function, bool, read_write> = var
    %x_92:ptr<function, bool, read_write> = var
    %x_93:ptr<function, bool, read_write> = var
    %x_109:ptr<function, bool, read_write> = var
    %x_110:ptr<function, bool, read_write> = var
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %15:f32 = load %14
    %16:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %17:f32 = load %16
    %18:vec2<f32> = construct %15, %17
    %19:u32 = pack2x16unorm %18
    store %a, %19
    %20:u32 = load %a
    %21:vec4<f32> = unpack4x8snorm %20
    store %v1, %21
    store %E, 0.00999999977648258209f
    %22:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
    %23:i32 = load %22
    %24:f32 = load_vector_element %v1, %23
    %25:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %26:f32 = load %25
    %27:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %28:f32 = load %27
    %29:f32 = div %26, %28
    %30:f32 = sub %24, %29
    %31:f32 = abs %30
    %32:f32 = load %E
    %33:bool = lt %31, %32
    %x_60:bool = let %33
    store %x_76, %x_60
    if %x_60 [t: $B3] {  # if_1
      $B3: {  # true
        %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %36:i32 = load %35
        %37:f32 = load_vector_element %v1, %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %39:f32 = load %38
        %40:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %41:f32 = load %40
        %42:f32 = div %39, %41
        %43:f32 = sub %37, %42
        %44:f32 = abs %43
        %45:f32 = load %E
        %46:bool = lt %44, %45
        store %x_75, %46
        %47:bool = load %x_75
        store %x_76, %47
        exit_if  # if_1
      }
    }
    %48:bool = load %x_76
    store %x_93, %48
    %49:bool = load %x_76
    if %49 [t: $B4] {  # if_2
      $B4: {  # true
        %50:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %51:i32 = load %50
        %52:f32 = load_vector_element %v1, %51
        %53:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %54:f32 = load %53
        %55:f32 = negation %54
        %56:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %57:f32 = load %56
        %58:f32 = div %55, %57
        %59:f32 = sub %52, %58
        %60:f32 = abs %59
        %61:f32 = load %E
        %62:bool = lt %60, %61
        store %x_92, %62
        %63:bool = load %x_92
        store %x_93, %63
        exit_if  # if_2
      }
    }
    %64:bool = load %x_93
    store %x_110, %64
    %65:bool = load %x_93
    if %65 [t: $B5] {  # if_3
      $B5: {  # true
        %66:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %67:i32 = load %66
        %68:f32 = load_vector_element %v1, %67
        %69:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
        %70:f32 = load %69
        %71:f32 = negation %70
        %72:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %73:f32 = load %72
        %74:f32 = div %71, %73
        %75:f32 = sub %68, %74
        %76:f32 = abs %75
        %77:f32 = load %E
        %78:bool = lt %76, %77
        store %x_109, %78
        %79:bool = load %x_109
        store %x_110, %79
        exit_if  # if_3
      }
    }
    %80:bool = load %x_110
    if %80 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %81:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %82:i32 = load %81
        %83:f32 = convert %82
        %84:f32 = let %83
        %85:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %86:i32 = load %85
        %87:f32 = convert %86
        %88:f32 = let %87
        %89:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %90:i32 = load %89
        %91:f32 = convert %90
        %92:f32 = let %91
        %93:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %94:i32 = load %93
        %95:f32 = convert %94
        %96:vec4<f32> = construct %84, %88, %92, %95
        store %x_GLF_color, %96
        exit_if  # if_4
      }
      $B7: {  # false
        %97:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %98:f32 = load %97
        %99:vec4<f32> = construct %98
        store %x_GLF_color, %99
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %101:void = call %main_1
    %102:vec4<f32> = load %x_GLF_color
    %103:main_out = construct %102
    ret %103
  }
}

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