x86_64-w64-mingw32 test FAIL t-scanf.c:1477: GNU MP assertion failed: ret == (-1)

Marc Glisse marc.glisse at inria.fr
Thu Mar 30 23:27:38 UTC 2017


On Thu, 30 Mar 2017, Vincent Lefevre wrote:

> On 2017-03-30 10:52:33 +0100, Claude Heiland-Allen wrote:
>> The failing source code is:
>>
>>   /* EOF for no matching */
>>   {
>>     char buf[128];
>>     ret = gmp_sscanf ("   ", "%s", buf);
>>     ASSERT_ALWAYS (ret == EOF);
>>     ret = fromstring_gmp_fscanf ("   ", "%s", buf);
>>     ASSERT_ALWAYS (ret == EOF);
>>     if (option_libc_scanf)
>>       {
>>         ret = sscanf ("   ", "%s", buf);
>>         ASSERT_ALWAYS (ret == EOF);
>>         ret = fun_fscanf ("   ", "%s", buf, NULL);
>>         ASSERT_ALWAYS (ret == EOF);
>>       }
>>   }
>>
>> Commenting out the asserts and 'if' and inserting debugging printf()
>> statements gives:
>>
>>     gmp_sscanf() ret = 0
>>     fromstring_gmp_fscanf() ret = 0
>>     sscanf() ret = 0
>      ^^^^^^^^^^^^^^^^
>>     fun_fscanf() ret = 0
>
> The initial issue is the 0 returned by sscanf(). Then GMP is consistent
> with the C implementation.
>
> Though the C standard may be ambiguous, 0 is not possible as a return
> value. Thus this is a bug in the C library (or compiler).

Could the macro __USE_MINGW_ANSI_STDIO be relevant?

-- 
Marc Glisse


More information about the gmp-bugs mailing list