[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