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, 4> @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_69:ptr<function, bool, read_write> = var
    %x_70:ptr<function, bool, read_write> = var
    %x_85:ptr<function, bool, read_write> = var
    %x_86:ptr<function, bool, read_write> = var
    %x_101:ptr<function, bool, read_write> = var
    %x_102:ptr<function, bool, read_write> = var
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %15:f32 = load %14
    %16:vec4<f32> = construct %15
    %17:u32 = pack4x8snorm %16
    store %a, %17
    %18:u32 = load %a
    %19:vec4<f32> = unpack4x8unorm %18
    store %v1, %19
    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %21:f32 = load %20
    store %E, %21
    %22:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 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_54:bool = let %33
    store %x_70, %x_54
    if %x_54 [t: $B3] {  # if_1
      $B3: {  # true
        %35:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %36:i32 = load %35
        %37:f32 = load_vector_element %v1, %36
        %38:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 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_69, %46
        %47:bool = load %x_69
        store %x_70, %47
        exit_if  # if_1
      }
    }
    %48:bool = load %x_70
    store %x_86, %48
    %49:bool = load %x_70
    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, 2i, 0u
        %54:f32 = load %53
        %55:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %56:f32 = load %55
        %57:f32 = div %54, %56
        %58:f32 = sub %52, %57
        %59:f32 = abs %58
        %60:f32 = load %E
        %61:bool = lt %59, %60
        store %x_85, %61
        %62:bool = load %x_85
        store %x_86, %62
        exit_if  # if_2
      }
    }
    %63:bool = load %x_86
    store %x_102, %63
    %64:bool = load %x_86
    if %64 [t: $B5] {  # if_3
      $B5: {  # true
        %65:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %66:i32 = load %65
        %67:f32 = load_vector_element %v1, %66
        %68:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %69:f32 = load %68
        %70:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %71:f32 = load %70
        %72:f32 = div %69, %71
        %73:f32 = sub %67, %72
        %74:f32 = abs %73
        %75:f32 = load %E
        %76:bool = lt %74, %75
        store %x_101, %76
        %77:bool = load %x_101
        store %x_102, %77
        exit_if  # if_3
      }
    }
    %78:bool = load %x_102
    if %78 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %79:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %80:i32 = load %79
        %81:f32 = convert %80
        %82:f32 = let %81
        %83:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %84:i32 = load %83
        %85:f32 = convert %84
        %86:f32 = let %85
        %87:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %88:i32 = load %87
        %89:f32 = convert %88
        %90:f32 = let %89
        %91:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %92:i32 = load %91
        %93:f32 = convert %92
        %94:vec4<f32> = construct %82, %86, %90, %93
        store %x_GLF_color, %94
        exit_if  # if_4
      }
      $B7: {  # false
        %95:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %96:i32 = load %95
        %97:f32 = convert %96
        %98:vec4<f32> = construct %97
        store %x_GLF_color, %98
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %100:void = call %main_1
    %101:vec4<f32> = load %x_GLF_color
    %102:main_out = construct %101
    ret %102
  }
}

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