• Andrew Vagin's avatar
    pstree: workaround stupidity of modern compilers · 9a22d3df
    Andrew Vagin authored
    gcc v6.0  and clang think that &next->pid.node can't be null.
    
    Here is an explanation from a kernel log (v3.12-5097-g1310a5a):
    """
    the result of this expression is not defined by a C standard
    and some gcc versions (e.g.  4.3.4) assume the above expression can never
    be equal to NULL.  The net result is an oops because the iteration is not
    properly terminated.
    """
    
    $ gcc -v
    gcc version 6.0.0 20160406 (Red Hat 6.0.0-0.20) (GCC)
    $ python test/zdtm.py run  -t zdtm/static/session00
    ...
    $ gdb -c /tmp/core.61 criu/criu
    Program terminated with signal SIGSEGV, Segmentation fault.
    598			if (&next->pid.node == NULL || next->pid.virt > pid)
    
    $ make CC=clang
    pstree.c:598:18: error: comparison of address of 'next->pid.node' equal to a null pointer is always false [-Werror,-Wtautological-pointer-compare]
                    if (&next->pid.node == NULL || next->pid.virt > pid)
    Signed-off-by: 's avatarAndrew Vagin <avagin@virtuozzo.com>
    Acked-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
    9a22d3df
pstree.c 21.5 KB