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_92:ptr<function, bool, read_write> = var
    %x_109:ptr<function, bool, read_write> = var
    %x_76_phi:ptr<function, bool, read_write> = var
    %x_93_phi:ptr<function, bool, read_write> = var
    %x_110_phi:ptr<function, bool, read_write> = var
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_41:f32 = load %14
    %16:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_43:f32 = load %16
    %18:vec2<f32> = construct %x_41, %x_43
    %19:u32 = pack2x16unorm %18
    store %a, %19
    %x_46:u32 = load %a
    %21:vec4<f32> = unpack4x8snorm %x_46
    store %v1, %21
    store %E, 0.00999999977648258209f
    %22:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
    %x_49:i32 = load %22
    %x_51:f32 = load_vector_element %v1, %x_49
    %25:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %x_53:f32 = load %25
    %27:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %x_55:f32 = load %27
    %x_59:f32 = load %E
    %30:f32 = div %x_53, %x_55
    %31:f32 = sub %x_51, %30
    %32:f32 = abs %31
    %x_60:bool = lt %32, %x_59
    store %x_76_phi, %x_60
    if %x_60 [t: %b3] {  # if_1
      %b3 = block {  # true
        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_64:i32 = load %34
        %x_66:f32 = load_vector_element %v1, %x_64
        %37:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %x_68:f32 = load %37
        %39:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %x_70:f32 = load %39
        %x_74:f32 = load %E
        %42:f32 = div %x_68, %x_70
        %43:f32 = sub %x_66, %42
        %44:f32 = abs %43
        %45:bool = lt %44, %x_74
        store %x_75, %45
        %46:bool = load %x_75
        store %x_76_phi, %46
        exit_if  # if_1
      }
    }
    %x_76:bool = load %x_76_phi
    store %x_93_phi, %x_76
    if %x_76 [t: %b4] {  # if_2
      %b4 = block {  # true
        %48:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %x_80:i32 = load %48
        %x_82:f32 = load_vector_element %v1, %x_80
        %51:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %x_84:f32 = load %51
        %53:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %x_87:f32 = load %53
        %x_91:f32 = load %E
        %56:f32 = negation %x_84
        %57:f32 = div %56, %x_87
        %58:f32 = sub %x_82, %57
        %59:f32 = abs %58
        %60:bool = lt %59, %x_91
        store %x_92, %60
        %61:bool = load %x_92
        store %x_93_phi, %61
        exit_if  # if_2
      }
    }
    %x_93:bool = load %x_93_phi
    store %x_110_phi, %x_93
    if %x_93 [t: %b5] {  # if_3
      %b5 = block {  # true
        %63:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_97:i32 = load %63
        %x_99:f32 = load_vector_element %v1, %x_97
        %66:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
        %x_101:f32 = load %66
        %68:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %x_104:f32 = load %68
        %x_108:f32 = load %E
        %71:f32 = negation %x_101
        %72:f32 = div %71, %x_104
        %73:f32 = sub %x_99, %72
        %74:f32 = abs %73
        %75:bool = lt %74, %x_108
        store %x_109, %75
        %76:bool = load %x_109
        store %x_110_phi, %76
        exit_if  # if_3
      }
    }
    %x_110:bool = load %x_110_phi
    if %x_110 [t: %b6, f: %b7] {  # if_4
      %b6 = block {  # true
        %78:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_115:i32 = load %78
        %80:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_118:i32 = load %80
        %82:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_121:i32 = load %82
        %84:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_124:i32 = load %84
        %86:f32 = convert %x_115
        %87:f32 = convert %x_118
        %88:f32 = convert %x_121
        %89:f32 = convert %x_124
        %90:vec4<f32> = construct %86, %87, %88, %89
        store %x_GLF_color, %90
        exit_if  # if_4
      }
      %b7 = block {  # false
        %91:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %x_128:f32 = load %91
        %93:vec4<f32> = construct %x_128, %x_128, %x_128, %x_128
        store %x_GLF_color, %93
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %95:void = call %main_1
    %96:vec4<f32> = load %x_GLF_color
    %97:main_out = construct %96
    ret %97
  }
}

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