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_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
    %15:f32 = load %14
    %x_41:f32 = let %15
    %17:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %18:f32 = load %17
    %x_43:f32 = let %18
    %20:vec2<f32> = construct %x_41, %x_43
    %21:u32 = pack2x16unorm %20
    store %a, %21
    %22:u32 = load %a
    %x_46:u32 = let %22
    %24:vec4<f32> = unpack4x8snorm %x_46
    store %v1, %24
    store %E, 0.00999999977648258209f
    %25:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
    %26:i32 = load %25
    %x_49:i32 = let %26
    %28:f32 = load_vector_element %v1, %x_49
    %x_51:f32 = let %28
    %30:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %31:f32 = load %30
    %x_53:f32 = let %31
    %33:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %34:f32 = load %33
    %x_55:f32 = let %34
    %36:f32 = load %E
    %x_59:f32 = let %36
    %38:f32 = div %x_53, %x_55
    %39:f32 = sub %x_51, %38
    %40:f32 = abs %39
    %41:bool = lt %40, %x_59
    %x_60:bool = let %41
    store %x_76_phi, %x_60
    if %x_60 [t: $B3] {  # if_1
      $B3: {  # true
        %43:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %44:i32 = load %43
        %x_64:i32 = let %44
        %46:f32 = load_vector_element %v1, %x_64
        %x_66:f32 = let %46
        %48:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
        %49:f32 = load %48
        %x_68:f32 = let %49
        %51:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %52:f32 = load %51
        %x_70:f32 = let %52
        %54:f32 = load %E
        %x_74:f32 = let %54
        %56:f32 = div %x_68, %x_70
        %57:f32 = sub %x_66, %56
        %58:f32 = abs %57
        %59:bool = lt %58, %x_74
        store %x_75, %59
        %60:bool = load %x_75
        store %x_76_phi, %60
        exit_if  # if_1
      }
    }
    %61:bool = load %x_76_phi
    %x_76:bool = let %61
    store %x_93_phi, %x_76
    if %x_76 [t: $B4] {  # if_2
      $B4: {  # true
        %63:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %64:i32 = load %63
        %x_80:i32 = let %64
        %66:f32 = load_vector_element %v1, %x_80
        %x_82:f32 = let %66
        %68:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %69:f32 = load %68
        %x_84:f32 = let %69
        %71:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %72:f32 = load %71
        %x_87:f32 = let %72
        %74:f32 = load %E
        %x_91:f32 = let %74
        %76:f32 = negation %x_84
        %77:f32 = div %76, %x_87
        %78:f32 = sub %x_82, %77
        %79:f32 = abs %78
        %80:bool = lt %79, %x_91
        store %x_92, %80
        %81:bool = load %x_92
        store %x_93_phi, %81
        exit_if  # if_2
      }
    }
    %82:bool = load %x_93_phi
    %x_93:bool = let %82
    store %x_110_phi, %x_93
    if %x_93 [t: $B5] {  # if_3
      $B5: {  # true
        %84:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %85:i32 = load %84
        %x_97:i32 = let %85
        %87:f32 = load_vector_element %v1, %x_97
        %x_99:f32 = let %87
        %89:ptr<uniform, f32, read> = access %x_6, 0u, 6i, 0u
        %90:f32 = load %89
        %x_101:f32 = let %90
        %92:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %93:f32 = load %92
        %x_104:f32 = let %93
        %95:f32 = load %E
        %x_108:f32 = let %95
        %97:f32 = negation %x_101
        %98:f32 = div %97, %x_104
        %99:f32 = sub %x_99, %98
        %100:f32 = abs %99
        %101:bool = lt %100, %x_108
        store %x_109, %101
        %102:bool = load %x_109
        store %x_110_phi, %102
        exit_if  # if_3
      }
    }
    %103:bool = load %x_110_phi
    %x_110:bool = let %103
    if %x_110 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %105:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %106:i32 = load %105
        %x_115:i32 = let %106
        %108:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %109:i32 = load %108
        %x_118:i32 = let %109
        %111:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %112:i32 = load %111
        %x_121:i32 = let %112
        %114:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %115:i32 = load %114
        %x_124:i32 = let %115
        %117:f32 = convert %x_115
        %118:f32 = let %117
        %119:f32 = convert %x_118
        %120:f32 = let %119
        %121:f32 = convert %x_121
        %122:f32 = let %121
        %123:f32 = convert %x_124
        %124:vec4<f32> = construct %118, %120, %122, %123
        store %x_GLF_color, %124
        exit_if  # if_4
      }
      $B7: {  # false
        %125:ptr<uniform, f32, read> = access %x_6, 0u, 5i, 0u
        %126:f32 = load %125
        %x_128:f32 = let %126
        %128:vec4<f32> = construct %x_128, %x_128, %x_128, %x_128
        store %x_GLF_color, %128
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %130:void = call %main_1
    %131:vec4<f32> = load %x_GLF_color
    %132:main_out = construct %131
    ret %132
  }
}

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