This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: h8300, m32c and PRIuPTR



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
logic
in glibc-stdint.h for uintptr_t by adding configure time logic, we just
pushed
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 */
#else
  /* we can rely on the value provided by configure, use current logic */
#endif

-- 
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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]