diff mbox

[U-Boot] nios2: Fix printf size_t format related warnings (again...)

Message ID 1408027325-6284-1-git-send-email-vvv444@gmail.com
State Accepted
Delegated to: Thomas Chou
Headers show

Commit Message

Vasili Galka Aug. 14, 2014, 2:42 p.m. UTC
When compiling the current code on GCC 4.8.3, the following warnings
appear:

warning: format '%zu' expects argument of type 'size_t', but argument
2 has type 'long unsigned int' [-Wformat=]

There were many mails about such warnings on different architectures.
This patch limits itself to the nios2 architecture.

The problem is that for the size_t (%zu, %zd, ...) arguments of
printf GCC does not verify the type match to size_t type. It verifies
the type match to the compiler-defined __SIZE_TYPE__ type. Thus, if
size_t is defined different from __SIZE_TYPE__ - warnings inevitably
appear.

There is a comment by Thomas Chou to the (rejected) patch:
http://patchwork.ozlabs.org/patch/272102/
which explains that the older GCC toolchains (gcc-3.4.6 and gcc-4.1.2)
expect size_t to be "unsigned long" and the newer expect it to be
"unsigned int". Thus, no matter how we define size_t - either way
warnings appear when using some GCC version.

By rejecting that patch, a choice was made to prefer older GCC versions
and leave the warnings when building with the newer toolchains.
Personally, I disagree with this choice...

In any case, this patch proposes a way to fix the warnings for any GCC
version. Just define size_t using the __SIZE_TYPE__ compiler-defined
type and the type verification will pass.

I tested that this fixes the warning on GCC 4.8.3. I don't have an
older toolchain to test with, but __SIZE_TYPE__ was definitely defined
in GCC 3.4.6, so it should work there too.

Signed-off-by: Vasili Galka <vvv444@gmail.com>
Cc: Thomas Chou <thomas@wytron.com.tw>
---
 arch/nios2/include/asm/posix_types.h |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Thomas Chou Aug. 15, 2014, 1:17 p.m. UTC | #1
Hi Vasili,

On 08/14/2014 10:42 PM, Vasili Galka wrote:
> When compiling the current code on GCC 4.8.3, the following warnings
> appear:
>
> warning: format '%zu' expects argument of type 'size_t', but argument
> 2 has type 'long unsigned int' [-Wformat=]
>
> There were many mails about such warnings on different architectures.
> This patch limits itself to the nios2 architecture.

Applied. Thanks a lot.

Thomas Chou
diff mbox

Patch

diff --git a/arch/nios2/include/asm/posix_types.h b/arch/nios2/include/asm/posix_types.h
index 6733640..6b6c39b 100644
--- a/arch/nios2/include/asm/posix_types.h
+++ b/arch/nios2/include/asm/posix_types.h
@@ -16,7 +16,11 @@  typedef int		__kernel_pid_t;
 typedef unsigned short	__kernel_ipc_pid_t;
 typedef unsigned short	__kernel_uid_t;
 typedef unsigned short	__kernel_gid_t;
+#ifdef __GNUC__
+typedef __SIZE_TYPE__	__kernel_size_t;
+#else
 typedef unsigned long	__kernel_size_t;
+#endif
 typedef long		__kernel_ssize_t;
 typedef int		__kernel_ptrdiff_t;
 typedef long		__kernel_time_t;