Hi Martin,
> +void foo(void*);
> +void bar()
> +{
> + foo(0); /* { dg-warning "zero as null pointer
> constant" } */
> + foo(NULL);
> +
> + void *p = 0; /* { dg-warning "zero as null pointer
> constant" } */
> + void *r = NULL;
> + void *q = { 0 }; /* { dg-warning "zero as null pointer
> constant" } */
> + void *s = { NULL };
> + struct { void *q; } x = { 0 }; /* { dg-warning "zero as null pointer
> constant" } */
> + struct { void *q; } y = { NULL };
> +
> + 1 ? 0 : p; /* { dg-warning "zero as null pointer
> constant" } */
> + 1 ? p : 0; /* { dg-warning "zero as null pointer
> constant" } */
> + 1 ? 0 : NULL; /* { dg-warning "zero as null pointer
> constant" } */
> + 1 ? NULL : 0; /* { dg-warning "zero as null pointer
> constant" } */
> +
> + if (p == 0); /* { dg-warning "zero as null pointer
> constant" } */
> + if (0 == p); /* { dg-warning "zero as null pointer
> constant" } */
> + if (NULL == 0); /* { dg-warning "zero as null pointer
> constant" } */
> + if (0 == NULL); /* { dg-warning "zero as null pointer
> constant" } */
> + if (0 == nullptr); /* { dg-warning "zero as null pointer
> constant" } */
> + if (nullptr == 0); /* { dg-warning "zero as null pointer
> constant" } */
> +}
I'm thinking that it may be good to add some tests to check that structs
with implicit initialization to 0s don't trigger this diagnostic.
struct ( int a; void *b; } a = { 0 };
struct ( int a; int b; void *b; } b = { 0 , 0 };
There might be other corner cases worth testing.
Thanks for adding this diagnostic! Feel free to add:
Suggested-by: Alejandro Colomar <[email protected]>
Acked-by: Alejandro Colomar <[email protected]>
Cheers,
Alex
--
<https://www.alejandro-colomar.es/>
signature.asc
Description: PGP signature
