[cfe-dev] -Warray-bounds false positive?
Jordy Rose
jediknil at belkadan.com
Thu Aug 25 15:01:15 PDT 2011
But it's been casted to char *. This is equivalent to this code:
double foo[4096];
char *bar = (char *)foo;
bar[sizeof(foo)-1] = '\0';
I mean, it's probably a bad idea, but it's not an out-of-bounds error.
On Aug 25, 2011, at 14:59, Ted Kremenek wrote:
> No, the warning is legit. sizeof() returns the size in bytes, not elements. This is an array of doubles.
>
> On Aug 25, 2011, at 2:22 PM, Jordy Rose wrote:
>
>>
>> On Aug 25, 2011, at 14:00, Sean McBride wrote:
>>
>>> Hi all,
>>>
>>> I'm not enough of a language lawyer to be 100% sure, but:
>>>
>>> -----
>>> int main (void)
>>> {
>>> double foo[4096];
>>> ((char *)(foo))[(sizeof(foo)-1)] = '\0';
>>>
>>> return 0;
>>> }
>>> -----
>>>
>>> test.cp:4:12: warning: array index of '32767' indexes past the end of an array (that contains 4096 elements) [-Warray-bounds]
>>> ((char *)(foo))[(sizeof(foo)-1)] = '\0';
>>> ^ ~~~~~~~~~~~~~
>>>
>>> Is a false positive, right?
>>
>> Yes. File a bug? :-)
>>
>>
>> _______________________________________________
>> cfe-dev mailing list
>> cfe-dev at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
More information about the cfe-dev
mailing list