|
From: Bart V. A. <bva...@ac...> - 2010-06-13 18:24:57
|
It took some time before I noticed, but the patch below triggers the
following warnings during compilation on PPC (make check):
[ ... ]
g++ -DHAVE_CONFIG_H -I. -I../.. -I../.. -I../../include -I../../coregrind -I../
../include -I../../VEX/pub -DVGA_ppc64=1 -DVGO_linux=1 -DVGP_ppc64_linux=1 -Win
line -Wall -Wshadow -g -m64 -g -O2 -MT valgrind_cpp_test.o -MD -MP -MF .deps/val
grind_cpp_test.Tpo -c -o valgrind_cpp_test.o valgrind_cpp_test.cpp
In file included from ../../include/pub_tool_vki.h:49,
from valgrind_cpp_test.cpp:14:
../../include/vki/vki-linux.h:2159: warning: division by zero
../../include/vki/vki-linux.h:2162: warning: division by zero
[ ... ]
Would it be OK to rewrite the _VKI_IOC_TYPECHECK() macro and to base
it on something similar to BUILD_BUG_ON() as present in the Linux
kernel ?
Bart.
On Sat, Jan 2, 2010 at 12:41 PM, <sv...@va...> wrote:
> Author: sewardj
> Date: 2010-01-02 10:41:46 +0000 (Sat, 02 Jan 2010)
> New Revision: 10990
>
> Log:
> Redo r10971 ("Made sure that C++ compilers do not complain about the
> _VKI_IOC_TYPECHECK() macro") in a way which is easier to understand.
> Also, add it for arm-linux.
>
>
>
> Modified:
> trunk/include/vki/vki-arm-linux.h
> trunk/include/vki/vki-ppc32-linux.h
> trunk/include/vki/vki-ppc64-linux.h
> trunk/include/vki/vki-x86-linux.h
>
>
> Modified: trunk/include/vki/vki-arm-linux.h
> ===================================================================
> --- trunk/include/vki/vki-arm-linux.h 2010-01-02 10:37:58 UTC (rev 10989)
> +++ trunk/include/vki/vki-arm-linux.h 2010-01-02 10:41:46 UTC (rev 10990)
> @@ -475,11 +475,11 @@
> ((size) << _VKI_IOC_SIZESHIFT))
>
> /* provoke compile error for invalid uses of size argument */
> -extern unsigned int __vki_invalid_size_argument_for_IOC;
> #define _VKI_IOC_TYPECHECK(t) \
> ((sizeof(t) == sizeof(t[1]) && \
> - sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) ? \
> - sizeof(t) : __vki_invalid_size_argument_for_IOC)
> + sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) \
> + ? sizeof(t) \
> + : /*cause gcc to complain about division by zero*/(1/0) )
>
> /* used to create numbers */
> #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
>
> Modified: trunk/include/vki/vki-ppc32-linux.h
> ===================================================================
> --- trunk/include/vki/vki-ppc32-linux.h 2010-01-02 10:37:58 UTC (rev 10989)
> +++ trunk/include/vki/vki-ppc32-linux.h 2010-01-02 10:41:46 UTC (rev 10990)
> @@ -517,8 +517,10 @@
>
> /* provoke compile error for invalid uses of size argument */
> #define _VKI_IOC_TYPECHECK(t) \
> - (sizeof(t) / (sizeof(t) == sizeof(t[1]) && \
> - sizeof(t) < (1 << _VKI_IOC_SIZEBITS)))
> + ((sizeof(t) == sizeof(t[1]) && \
> + sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) \
> + ? sizeof(t) \
> + : /*cause gcc to complain about division by zero*/(1/0) )
>
> /* used to create numbers */
> #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
>
> Modified: trunk/include/vki/vki-ppc64-linux.h
> ===================================================================
> --- trunk/include/vki/vki-ppc64-linux.h 2010-01-02 10:37:58 UTC (rev 10989)
> +++ trunk/include/vki/vki-ppc64-linux.h 2010-01-02 10:41:46 UTC (rev 10990)
> @@ -560,8 +560,10 @@
>
> /* provoke compile error for invalid uses of size argument */
> #define _VKI_IOC_TYPECHECK(t) \
> - (sizeof(t) / (sizeof(t) == sizeof(t[1]) && \
> - sizeof(t) < (1 << _VKI_IOC_SIZEBITS)))
> + ((sizeof(t) == sizeof(t[1]) && \
> + sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) \
> + ? sizeof(t) \
> + : /*cause gcc to complain about division by zero*/(1/0) )
>
> /* used to create numbers */
> #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
>
> Modified: trunk/include/vki/vki-x86-linux.h
> ===================================================================
> --- trunk/include/vki/vki-x86-linux.h 2010-01-02 10:37:58 UTC (rev 10989)
> +++ trunk/include/vki/vki-x86-linux.h 2010-01-02 10:41:46 UTC (rev 10990)
> @@ -481,8 +481,10 @@
>
> /* provoke compile error for invalid uses of size argument */
> #define _VKI_IOC_TYPECHECK(t) \
> - (sizeof(t) / (sizeof(t) == sizeof(t[1]) && \
> - sizeof(t) < (1 << _VKI_IOC_SIZEBITS)))
> + ((sizeof(t) == sizeof(t[1]) && \
> + sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) \
> + ? sizeof(t) \
> + : /*cause gcc to complain about division by zero*/(1/0) )
>
> /* used to create numbers */
> #define _VKI_IO(type,nr) _VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
|