[RTEMS Project] #1214: inttypes.h's PRI*PTR uses %*ll where it should use %*l

RTEMS trac trac at rtems.org
Sat Nov 22 14:48:28 UTC 2014


#1214: inttypes.h's PRI*PTR uses %*ll where it should use %*l
----------------------------+-----------------------------
 Reporter:  ralf.corsepius  |       Owner:  ralf.corsepius
     Type:  defect          |      Status:  new
 Priority:  normal          |   Milestone:  4.9.5
Component:  Newlib          |     Version:  unspecified
 Severity:  normal          |  Resolution:
 Keywords:                  |
----------------------------+-----------------------------
Changes (by gedare):

 * milestone:  2 => 4.9.5


Old description:

> newlib-1.15.0's inttypes.h's implementation of the
> PRI*PTR macros is broken.
>
> The %*l macro being chosen doesn't correspond to the type being used as
> intptr_t.
>
> To reproduce, compile this:
> > cat tmp.c
> #include <stdio.h>
> #include <inttypes.h>
>
> int main()
> {
>   void *null = 0;
>   printf( "%" PRIxPTR "\n", (intptr_t) null );
>   return 0;
> }
>

> # for c in /opt/rtems-4.8/bin/*-rtems4.8-gcc; do \
> echo "$c:"; $c -o tmp.o -Wall -c tmp.c; done
>
> /opt/rtems-4.8/bin/arm-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'long int'
>
> /opt/rtems-4.8/bin/avr-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'int'
>
> /opt/rtems-4.8/bin/bfin-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'long int'
>
> /opt/rtems-4.8/bin/h8300-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'int'
>
> /opt/rtems-4.8/bin/i386-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'long int'
>
> /opt/rtems-4.8/bin/m68k-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'long int'
>
> /opt/rtems-4.8/bin/mips-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'int'
>
> /opt/rtems-4.8/bin/powerpc-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'int'
>
> /opt/rtems-4.8/bin/sparc-rtems4.8-gcc:
> tmp.c: In function 'main':
> tmp.c:7: warning: format '%llx' expects type 'long long unsigned int',
> but argument 2 has type 'int'
>
> /opt/rtems-4.8/bin/tic4x-rtems4.8-gcc:
> tmp.c: In function `main':
> tmp.c:7: warning: long long unsigned int format, different type arg (arg
> 2)
>

> Affected are all targets on all rtems branches.

New description:

 newlib-1.15.0's inttypes.h's implementation of the
 PRI*PTR macros is broken.

 The %*l macro being chosen doesn't correspond to the type being used as
 intptr_t.

 To reproduce, compile this:
 > cat tmp.c
 #include <stdio.h>
 #include <inttypes.h>

 int main()
 {
   void *null = 0;
   printf( "%" PRIxPTR "\n", (intptr_t) null );
   return 0;
 }


 # for c in /opt/rtems-4.8/bin/*-rtems4.8-gcc; do \
 echo "$c:"; $c -o tmp.o -Wall -c tmp.c; done

 /opt/rtems-4.8/bin/arm-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'long int'

 /opt/rtems-4.8/bin/avr-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'int'

 /opt/rtems-4.8/bin/bfin-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'long int'

 /opt/rtems-4.8/bin/h8300-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'int'

 /opt/rtems-4.8/bin/i386-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'long int'

 /opt/rtems-4.8/bin/m68k-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'long int'

 /opt/rtems-4.8/bin/mips-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'int'

 /opt/rtems-4.8/bin/powerpc-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'int'

 /opt/rtems-4.8/bin/sparc-rtems4.8-gcc:
 tmp.c: In function 'main':
 tmp.c:7: warning: format '%llx' expects type 'long long unsigned int', but
 argument 2 has type 'int'

 /opt/rtems-4.8/bin/tic4x-rtems4.8-gcc:
 tmp.c: In function `main':
 tmp.c:7: warning: long long unsigned int format, different type arg (arg
 2)


 Affected are all targets on all rtems branches.

--

--
Ticket URL: <http://devel.rtems.org/ticket/1214#comment:2>
RTEMS Project <http://www.rtems.org/>
RTEMS Project


More information about the bugs mailing list