• E
    build: place attributes in correct location · c047f547
    Eric Blake 提交于
    Ever since commit eefb881d, ATTRIBUTE_NONNULL has normally been a
    no-op under gcc (since it tends to cause more bugs than it cures
    given gcc's current lame implementation of the attribute).  However,
    the macro is still useful to Coverity and other static-analysis
    tools, but only if we use it correctly.  Coverity follows gcc's lead
    in accepting function declarations with attributes at the end, but
    function bodies must attach attributes to the return type.  That is,
    these are valid:
    
    void foo(void *arg) ATTRIBUTE_NONNULL(1);
    void ATTRIBUTE_NONNULL(1) foo(void *arg);
    void ATTRIBUTE_NONNULL(1) foo(void *arg) {}
    
    but this is not:
    
    void foo(void *arg) ATTRIBUTE_NONNULL(1) {}
    
    even though you don't get a compile failure until you do static
    analysis.  Bug introduced in commit 80533ca2, with these symptoms:
    
    nodeinfo.c:206: error: expected ',' or ';' before '{' token
    cc1: warning: unrecognized command line option "-Wno-suggest-attribute=const"
    cc1: warning: unrecognized command line option "-Wno-suggest-attribute=pure"
    make[3]: *** [libvirt_driver_la-nodeinfo.lo] Error 1
    
    * src/nodeinfo.c (virNodeParseNode): Fix syntax error when
    non-null attribute is in use.
    c047f547
nodeinfo.c 40.8 KB