SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_60:bool = lt %31, %32
    store %x_76, %x_60
    if %x_60 [t: %b3] {  # if_1
      %b3 = block {  # true
        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = load_vector_element %v1, %35
        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %38:f32 = load %37
        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %40:f32 = load %39
        %41:f32 = div %38, %40
        %42:f32 = sub %36, %41
        %43:f32 = abs %42
        %44:f32 = load %E
        %45:bool = lt %43, %44
        store %x_75, %45
        %46:bool = load %x_75
        store %x_76, %46
        exit_if  # if_1
      }
    }
    %47:bool = load %x_76
    store %x_93, %47
    %48:bool = load %x_76
    if %48 [t: %b4] {  # if_2
      %b4 = block {  # true
        %49:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %50:i32 = load %49
        %51:f32 = load_vector_element %v1, %50
        %52:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %53:f32 = load %52
        %54:f32 = negation %53
        %55:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %56:f32 = load %55
        %57:f32 = div %54, %56
        %58:f32 = sub %51, %57
        %59:f32 = abs %58
        %60:f32 = load %E
        %61:bool = lt %59, %60
        store %x_92, %61
        %62:bool = load %x_92
        store %x_93, %62
        exit_if  # if_2
      }
    }
    %63:bool = load %x_93
    store %x_110, %63
    %64:bool = load %x_93
    if %64 [t: %b5] {  # if_3
      %b5 = block {  # true
        %65:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %66:i32 = load %65
        %67:f32 = load_vector_element %v1, %66
        %68:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
        %69:f32 = load %68
        %70:f32 = negation %69
        %71:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %72:f32 = load %71
        %73:f32 = div %70, %72
        %74:f32 = sub %67, %73
        %75:f32 = abs %74
        %76:f32 = load %E
        %77:bool = lt %75, %76
        store %x_109, %77
        %78:bool = load %x_109
        store %x_110, %78
        exit_if  # if_3
      }
    }
    %79:bool = load %x_110
    if %79 [t: %b6, f: %b7] {  # if_4
      %b6 = block {  # true
        %80:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %81:i32 = load %80
        %82:f32 = convert %81
        %83:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %84:i32 = load %83
        %85:f32 = convert %84
        %86:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %87:i32 = load %86
        %88:f32 = convert %87
        %89:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %90:i32 = load %89
        %91:f32 = convert %90
        %92:vec4<f32> = construct %82, %85, %88, %91
        store %x_GLF_color, %92
        exit_if  # if_4
      }
      %b7 = block {  # false
        %93:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %94:f32 = load %93
        %95:vec4<f32> = construct %94
        store %x_GLF_color, %95
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %97:void = call %main_1
    %98:vec4<f32> = load %x_GLF_color
    %99:main_out = construct %98
    ret %99
  }
}

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