h8300, m32c and PRIuPTR

Joel Sherrill joel.sherrill@oarcorp.com
Mon Mar 16 15:08:00 GMT 2015

On 3/16/2015 9:10 AM, Eric Blake wrote:
> On 03/16/2015 04:22 AM, Nicholas Clifton wrote:
>> Hi Joel,
>>> The warning is:
>>> f.c:6:3: warning: format '%u' expects argument of type 'unsigned int',
>>> but argument 2 has type 'uintptr_t' [-Wformat=]
>>>     printf( "%" PRIuPTR "\n", x );
>>> Any ideas on how to address this?
>> How about using an explicit widening cast, as in:
>>       printf ("%lu\n", (unsigned long) x);
>> I am assuming that sizeof (uintptr_t) <= sizeof (unsigned long) will
>> always be true, but that seems reasonable to me.
> Not on 64-bit mingw (where sizeof(long)==4, sizeof(uintptr_t)==8).  But
> yes, explicitly widening to a known type can work around cases where you
> are otherwise stumped, although for this particular code, it looks like
> PRIuPTR is misdefined for your platform.
And we don't want to add casts. We just want to use the PRIxxx constants
to have portable printf formats and avoid warnings.

I am wondering if when we avoided changing newlib-stdint.h to match the
in glibc-stdint.h for uintptr_t by adding configure time logic, we just
off the problem. At this point, all I can see as a solution is something
like this
in inttypes.h:

#if defined(__m32c__) || defined(__h8300__)
  /* do whatever is needed */
  /* we can rely on the value provided by configure, use current logic */

Joel Sherrill, Ph.D.             Director of Research & Development
joel.sherrill@OARcorp.com        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985

More information about the Newlib mailing list