[cfe-dev] -Warray-bounds seems over-zealous on Clang
Reid Kleckner
reid.kleckner at gmail.com
Tue Jul 12 15:52:48 PDT 2011
On Tue, Jul 12, 2011 at 6:39 PM, Peter Geoghegan <peter at 2ndquadrant.com> wrote:
> On 12 July 2011 18:29, Chris Lattner <clattner at apple.com> wrote:
>> Do we have empirical evidence that it finds bugs in arrays with exactly 1 element? I think we should just disable it in the case that the array has a single element. This really is a common pattern.
>
> I would think it reasonable if the warning was disabled for this exact
> pattern only.
>
> Disabling -Wno-array-bounds clearly isn't a practical measure, as most
> of the ways that that can trigger a warning are perfectly valid. I
> wouldn't be opposed to showing the warning where the struct is known
> to have been declared on the stack, but going that far probably isn't
> worth the effort.
>
> On 12 July 2011 17:45, Joerg Sonnenberger <joerg at britannica.bec.de> wrote:
>> Just because you don't agree doesn't make it unreasonable. The behavior
>> of the code doesn't change with the standard level -- you are still
>> declaring an array and overflowing it.
>
> I agree, it doesn't. The fact that this causes warnings for a very
> common pattern makes it unreasonable.
My inclination and I believe the inclination of others is that, if it
catches real bugs, which Nico has shown it has, then it's worth having
the warning. Another compromise would be to have a flag about bounds
checks warnings for size 1 arrays at the end of structs (phew). =P
If you can't use C99, are flexible arrays available as an extension in
clang, either in gnu89 or via some flag? If so, you could use ifdefs
like this:
#ifdef __GNUC__
/* or some other condition, __has_feature or what have you */
#define FLEXIBLE_ARRAY
#else
#define FLEXIBLE_ARRAY 1
#endif
struct Buffer {
int len;
char bytes[FLEXIBLE_ARRAY];
};
It's even self-documenting.
Reid
More information about the cfe-dev
mailing list