SKIP: FAILED

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

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

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

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

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

$B1: {  # root
  %x_8: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
    store %a, 1006648320u
    %14:u32 = load %a
    %15:vec4<f32> = unpack4x8snorm %14
    store %v1, %15
    store %E, 0.00999999977648258209f
    %16:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %17:i32 = load %16
    %18:f32 = load_vector_element %v1, %17
    %19:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %20:f32 = load %19
    %21:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %22:f32 = load %21
    %23:f32 = div %20, %22
    %24:f32 = sub %18, %23
    %25:f32 = abs %24
    %26:f32 = load %E
    %27:bool = lt %25, %26
    %x_54:bool = let %27
    store %x_70, %x_54
    if %x_54 [t: $B3] {  # if_1
      $B3: {  # true
        %29:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %30:i32 = load %29
        %31:f32 = load_vector_element %v1, %30
        %32:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
        %33:f32 = load %32
        %34:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
        %35:f32 = load %34
        %36:f32 = div %33, %35
        %37:f32 = sub %31, %36
        %38:f32 = abs %37
        %39:f32 = load %E
        %40:bool = lt %38, %39
        store %x_69, %40
        %41:bool = load %x_69
        store %x_70, %41
        exit_if  # if_1
      }
    }
    %42:bool = load %x_70
    store %x_86, %42
    %43:bool = load %x_70
    if %43 [t: $B4] {  # if_2
      $B4: {  # true
        %44:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %45:i32 = load %44
        %46:f32 = load_vector_element %v1, %45
        %47:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
        %48:f32 = load %47
        %49:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
        %50:f32 = load %49
        %51:f32 = div %48, %50
        %52:f32 = sub %46, %51
        %53:f32 = abs %52
        %54:f32 = load %E
        %55:bool = lt %53, %54
        store %x_85, %55
        %56:bool = load %x_85
        store %x_86, %56
        exit_if  # if_2
      }
    }
    %57:bool = load %x_86
    store %x_102, %57
    %58:bool = load %x_86
    if %58 [t: $B5] {  # if_3
      $B5: {  # true
        %59:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %60:i32 = load %59
        %61:f32 = load_vector_element %v1, %60
        %62:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
        %63:f32 = load %62
        %64:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
        %65:f32 = load %64
        %66:f32 = div %63, %65
        %67:f32 = sub %61, %66
        %68:f32 = abs %67
        %69:f32 = load %E
        %70:bool = lt %68, %69
        store %x_101, %70
        %71:bool = load %x_101
        store %x_102, %71
        exit_if  # if_3
      }
    }
    %72:bool = load %x_102
    if %72 [t: $B6, f: $B7] {  # if_4
      $B6: {  # true
        %73:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %74:i32 = load %73
        %75:f32 = convert %74
        %76:f32 = let %75
        %77:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %78:i32 = load %77
        %79:f32 = convert %78
        %80:f32 = let %79
        %81:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %82:i32 = load %81
        %83:f32 = convert %82
        %84:f32 = let %83
        %85:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %86:i32 = load %85
        %87:f32 = convert %86
        %88:vec4<f32> = construct %76, %80, %84, %87
        store %x_GLF_color, %88
        exit_if  # if_4
      }
      $B7: {  # false
        %89:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %90:i32 = load %89
        %91:f32 = load_vector_element %v1, %90
        %92:vec4<f32> = construct %91
        store %x_GLF_color, %92
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %94:void = call %main_1
    %95:vec4<f32> = load %x_GLF_color
    %96:main_out = construct %95
    ret %96
  }
}

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