Fix gcc 9 build errors for make xcheck.
Commit Message
On 6/17/19 10:54 AM, Yann Droneaud wrote:
> Hi,
>
> Le lundi 17 juin 2019 à 08:35 +0200, Stefan Liebler a écrit :
>>
>> this patch fixes the following gcc 9 warnings for "make xcheck":
>> -string/tst-strcasestr.c:
>> ../include/bits/../../misc/bits/error.h:42:5: error: ‘%s’ directive
>> argument is null [-Werror=format-overflow=]
>>
>
> This was reported as bug #24556
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=24556
>
> Regards.
>
Thanks for this hint.
I've updated the patch and I'm now able to run "make xcheck" and "make
bench" with gcc 9.
Bye
Stefan
Comments
On Jun 17 2019, Stefan Liebler <stli@linux.ibm.com> wrote:
> diff --git a/benchtests/bench-strstr.c b/benchtests/bench-strstr.c
> index 2cbe13e9ac..14053e7a22 100644
> --- a/benchtests/bench-strstr.c
> +++ b/benchtests/bench-strstr.c
> @@ -147,7 +147,7 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
> if (res != exp_result)
> {
> error (0, 0, "Wrong result in function %s %s %s", impl->name,
> - res, exp_result);
> + res, (exp_result == NULL) ? "NULL" : exp_result);
res can be NULL too.
> diff --git a/string/test-strcasestr.c b/string/test-strcasestr.c
> index 0a16f85dcd..1773581a3e 100644
> --- a/string/test-strcasestr.c
> +++ b/string/test-strcasestr.c
> @@ -67,7 +67,7 @@ check_result (impl_t *impl, const char *s1, const char *s2,
> if (result != exp_result)
> {
> error (0, 0, "Wrong result in function %s %s %s", impl->name,
> - result, exp_result);
> + result, (exp_result == NULL) ? "NULL" : exp_result);
result can be NULL too.
Andreas.
On 6/17/19 4:07 PM, Andreas Schwab wrote:
> On Jun 17 2019, Stefan Liebler <stli@linux.ibm.com> wrote:
>
>> diff --git a/benchtests/bench-strstr.c b/benchtests/bench-strstr.c
>> index 2cbe13e9ac..14053e7a22 100644
>> --- a/benchtests/bench-strstr.c
>> +++ b/benchtests/bench-strstr.c
>> @@ -147,7 +147,7 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
>> if (res != exp_result)
>> {
>> error (0, 0, "Wrong result in function %s %s %s", impl->name,
>> - res, exp_result);
>> + res, (exp_result == NULL) ? "NULL" : exp_result);
>
> res can be NULL too.
>
>> diff --git a/string/test-strcasestr.c b/string/test-strcasestr.c
>> index 0a16f85dcd..1773581a3e 100644
>> --- a/string/test-strcasestr.c
>> +++ b/string/test-strcasestr.c
>> @@ -67,7 +67,7 @@ check_result (impl_t *impl, const char *s1, const char *s2,
>> if (result != exp_result)
>> {
>> error (0, 0, "Wrong result in function %s %s %s", impl->name,
>> - result, exp_result);
>> + result, (exp_result == NULL) ? "NULL" : exp_result);
>
> result can be NULL too.
>
> Andreas.
>
That's true.
The compiler does not emit a warning for those.
Shall we nevertheless add a check?
Bye
Stefan
On Jun 17 2019, Stefan Liebler <stli@linux.ibm.com> wrote:
> On 6/17/19 4:07 PM, Andreas Schwab wrote:
>> On Jun 17 2019, Stefan Liebler <stli@linux.ibm.com> wrote:
>>
>>> diff --git a/benchtests/bench-strstr.c b/benchtests/bench-strstr.c
>>> index 2cbe13e9ac..14053e7a22 100644
>>> --- a/benchtests/bench-strstr.c
>>> +++ b/benchtests/bench-strstr.c
>>> @@ -147,7 +147,7 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
>>> if (res != exp_result)
>>> {
>>> error (0, 0, "Wrong result in function %s %s %s", impl->name,
>>> - res, exp_result);
>>> + res, (exp_result == NULL) ? "NULL" : exp_result);
>>
>> res can be NULL too.
>>
>>> diff --git a/string/test-strcasestr.c b/string/test-strcasestr.c
>>> index 0a16f85dcd..1773581a3e 100644
>>> --- a/string/test-strcasestr.c
>>> +++ b/string/test-strcasestr.c
>>> @@ -67,7 +67,7 @@ check_result (impl_t *impl, const char *s1, const char *s2,
>>> if (result != exp_result)
>>> {
>>> error (0, 0, "Wrong result in function %s %s %s", impl->name,
>>> - result, exp_result);
>>> + result, (exp_result == NULL) ? "NULL" : exp_result);
>>
>> result can be NULL too.
>>
>> Andreas.
>>
>
> That's true.
> The compiler does not emit a warning for those.
> Shall we nevertheless add a check?
Either check both or none. If NULL is a problem then it needs to be
checked everywhere.
Andreas.
commit e70b20854924ea42aeb27579a07d8019f6bffb64
Author: Stefan Liebler <stli@linux.ibm.com>
Date: Fri Jun 14 12:54:38 2019 +0200
Fix gcc 9 build errors for make xcheck. [BZ #24556]
This patch fixes the following gcc 9 warnings for "make xcheck" / "make bench":
-string/tst-strcasestr.c:
../include/bits/../../misc/bits/error.h:42:5: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
-argp/argp-test.c:
argp-test.c:130:20: error: ‘%d’ directive writing between 1 and 11 bytes into a region of size 10 [-Werror=format-overflow=]
argp-test.c:130:19: note: directive argument in the range [-2147483648, 122]
argp-test.c:130:5: note: ‘sprintf’ output between 2 and 12 bytes into a destination of size 10
-nss/tst-field.c:
tst-field.c:52:7: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
Please enter the commit message for your changes. Lines starting
-benchtests/bench-strstr.c:
../include/bits/../../misc/bits/error.h:42:5: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
-benchtests/bench-malloc-simple.c:
bench-malloc-simple.c:93:16: error: iteration 3 invokes undefined behavior [-Werror=aggressive-loop-optimizations]
ChangeLog:
[BZ #24556]
* string/test-strcasestr.c (check_result): Add NULL check.
* nss/tst-field.c (check_rewrite): Likewise.
* benchtests/bench-strstr.c (do_one_test): Likewise.
* argp/argp-test.c (popt): Increase size of buf to 12.
* benchtests/bench-malloc-simple.c (bench):
Do not initialize tests array out of bounds.
@@ -123,7 +123,7 @@ static const char doc[] = "Test program for argp."
static void
popt (int key, char *arg)
{
- char buf[10];
+ char buf[12];
if (isprint (key))
sprintf (buf, "%c", key);
else
@@ -87,7 +87,7 @@ bench (unsigned long size)
size_t iters = NUM_ITERS;
int **arr = (int**) malloc (MAX_ALLOCS * sizeof (void*));
- for (int t = 0; t <= 3; t++)
+ for (int t = 0; t < 3; t++)
for (int i = 0; i < NUM_ALLOCS; i++)
{
tests[t][i].n = allocs[i];
@@ -147,7 +147,7 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
if (res != exp_result)
{
error (0, 0, "Wrong result in function %s %s %s", impl->name,
- res, exp_result);
+ res, (exp_result == NULL) ? "NULL" : exp_result);
ret = 1;
}
}
@@ -50,7 +50,7 @@ check_rewrite (const char *input, const char *expected)
if (result != NULL && strcmp (result, expected) != 0)
{
printf ("FAIL: rewrite \"%s\" -> \"%s\", expected \"%s\"\n",
- input, result, expected);
+ (input == NULL) ? "NULL" : input, result, expected);
errors = true;
}
free (to_free);
@@ -67,7 +67,7 @@ check_result (impl_t *impl, const char *s1, const char *s2,
if (result != exp_result)
{
error (0, 0, "Wrong result in function %s %s %s", impl->name,
- result, exp_result);
+ result, (exp_result == NULL) ? "NULL" : exp_result);
ret = 1;
return -1;
}