RTEMS uses the PRI constants and we don't see warnings. Is there a specific test case which would demonstrate this is actually broken. The file newlib-stdint.h will impact more targets than Zephyr and I think they owe a demo case.
On August 19, 2016 7:37:22 PM EDT, Andrew Pinski <pins...@gmail.com> wrote: >On Fri, Aug 19, 2016 at 12:16 PM, Andy Ross <andrew.j.r...@intel.com> >wrote: >> We ran into this issue in the Zephyr project with our toolchain (gcc >> built with --enable-newlib). Basically GCC appears to be honoring a >> legacy requirement to give newlib a "long" instead of "int" for >> __INT32_TYPE__, which then leaks out through the current newlib >> headers as a long-valued int32_t, which produces gcc warnings when a >> uint32_t is passed to an unqualified printf format specifier like >> "%d". >> >> But the newlib headers, if __INT32_TYPE__ is *not* defined by the >> compiler, have code to chose a "int" over "long" immediately >> thereafter. It seems whatever requirement this was honoring isn't >> valid anymore. > >Couple of things missing here. A changelog is the first thing. >The second thing is it seems like Zephyr project should be using the >PRIdx, etc. instead of just %d for int32_t to be portable. > >Thanks, >Andrew > > >> >> From 784fb1760a930d0309f878bbae7bfd38137f5689 Mon Sep 17 00:00:00 >2001 >> From: Andy Ross <andrew.j.r...@intel.com> >> Date: Fri, 19 Aug 2016 09:40:42 -0700 >> Subject: [PATCH] newlib-stdint.h: Remove 32 bit longs >> >> This would make __INT32_TYPE__ a "long" instead of an "int", which >> would then percolate down in newlib's own headers into a typedef for >> int32_t. Which is wrong. Newlib's headers, if __INT32_TYPE__ were >> not defined, actually would chose an int for this type. The comment >> that newlib uses a 32 bit long appears to be a lie, perhaps >> historical. >> >> Signed-off-by: Andy Ross <andrew.j.r...@intel.com> >> --- >> gcc/config/newlib-stdint.h | 5 ++--- >> 1 file changed, 2 insertions(+), 3 deletions(-) >> >> diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h >> index eb99556..0275948 100644 >> --- a/gcc/config/newlib-stdint.h >> +++ b/gcc/config/newlib-stdint.h >> @@ -22,10 +22,9 @@ a copy of the GCC Runtime Library Exception along >with this program; >> see the files COPYING3 and COPYING.RUNTIME respectively. If not, >see >> <http://www.gnu.org/licenses/>. */ >> >> -/* newlib uses 32-bit long in certain cases for all non-SPU >> - targets. */ >> +/* newlib used to use a 32-bit long, no longer */ >> #ifndef STDINT_LONG32 >> -#define STDINT_LONG32 (LONG_TYPE_SIZE == 32) >> +#define STDINT_LONG32 0 >> #endif >> >> #define SIG_ATOMIC_TYPE "int" >> -- >> 2.7.4 >> --joel