Messages in this thread | | | Date | Sun, 30 Oct 2005 22:25:43 +0000 | From | Al Viro <> | Subject | Re: 2.6.14 assorted warnings |
| |
On Sun, Oct 30, 2005 at 10:15:31PM +0000, Alan Cox wrote: > gcc is a *LOT* smarter than you give it credit for. It will not warn for > cases where it isn't able to tell how foo is used passed with &foo. It > will warn for cases where it can
static inline __attribute__((always_inline)) int bar(int n, int *idx) { if (n != 1) return 0; *idx = 1; return 1; } void baz(int *v, int n) { int idx; int p = bar(n, &idx); if (__builtin_expect(!p, 0)) return; *v |= idx; }
and try gcc -Wall on that. Watch it warn about idx being possibly uninitialized. Replace __builtin_expect(!p, 0) with !p and see the warning go away. That, BTW, is a trimmed-down source of bogus warning in bio.c. And a lot of its analogs all over the tree. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |