A possibly useful addition similar to:

__attribute__((warn_unused_result))

might be

__attribute__((warn_untested_result))

for things like allocation failures that
are not verified before use.

For instance:

    void *malloc(size_t size);

could become

    void * __attribute((warn_untested_result)) malloc(size_t size)

so that

    #include <stdlib.h>

    struct foo {
            int bar;
    };

    struct foo *alloc_foo(void)
    {
            struct foo *baz = malloc(sizeof(struct foo));
            baz->bar = 1;
            return baz;
    }

The compiler could emit a warning on the set
of baz->bar as an intermediate test of baz
is not performed before any use of baz.

    struct foo *alloc_foo(void)
    {
            struct foo *baz =
    malloc(sizeof(struct foo));
            if (baz) baz->bar = 1;
            return
    baz;
    }

Similarly, alloc_foo could use that new attribute.

Reply via email to