On 10/01/2017 09:17 AM, Andrew Makhorin wrote:
> Hi Heinrich,
> 
> Thank you for your bug report.
> 
>> compiling GLPK 4.63 on arm64 with gcc 7.2 gives the following warning:
>>
>> misc/wclique1.c: In function ‘_glp_wclique1’:
>> misc/wclique1.c:121:7: warning: ‘memset’: specified size between
>> 18446744071562067968 and 18446744073709551615 exceeds maximum object
>> size 9223372036854775807 [-Wstringop-overflow=]
>>        memset(&skip[1], 0, sizeof(char) * n);
>>        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> misc/wclique1.c:123:7: warning: ‘memset’: specified size between
>> 18446744071562067968 and 18446744073709551615 exceeds maximum object
>> size 9223372036854775807 [-Wstringop-overflow=]
>>        memset(&d_flag[1], 0, sizeof(char) * n);
>>        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
> 
> Please ignore this warning message. The compiler makes a wrong
> conclusion that n declared as int can be negative and being converted to
> size_t which is unsigned long can result in a huge value (for example,
> (size_t)-1 results in 2^64-1). This however cannot happen due to a check
> xassert(n >= 0); in line 90.

Compiling should not generate any warnings. Many packages are compiled
with -Werror. So this should be fixed in the code.

> 
>> It can be avoided by first converting to unsigned int:
>>
>> 120       /* initially all vertices are unmarked */
>> 121       memset(&skip[1], 0, sizeof(char) * (unsigned int)n);
>> 122       /* clear flags of all vertices */
>> 123       memset(&d_flag[1], 0, sizeof(char) * (unsigned int)n);
>>
> 
> Then on a 32-bit platform there will be a similar message, because
> converting -1 to unsigned int gives 2^32-1.

I have tested on arm 32bit. Yes you are right. Yet still the problem
should be fixed and not ignored.

Best regards

Heinrich

_______________________________________________
Bug-glpk mailing list
Bug-glpk@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-glpk

Reply via email to