Reimplemented the _VKI_IOC_TYPECHECK() macro such that it doesn't trigger a

compiler warning on PPC when it shouldn't.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11180
This commit is contained in:
Bart Van Assche 2010-06-15 14:55:28 +00:00
parent 97d73041af
commit f938bef38f
5 changed files with 28 additions and 28 deletions

View File

@ -474,13 +474,6 @@ struct vki_termios {
((nr) << _VKI_IOC_NRSHIFT) | \
((size) << _VKI_IOC_SIZESHIFT))
/* provoke compile error for invalid uses of size argument */
#define _VKI_IOC_TYPECHECK(t) \
((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)
#define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))

View File

@ -93,6 +93,34 @@
# error Unknown platform
#endif
//----------------------------------------------------------------------
// VKI_STATIC_ASSERT(). Inspired by BUILD_BUG_ON() from
// linux-2.6.34/include/linux/kernel.h
//----------------------------------------------------------------------
/*
* Evaluates to zero if 'expr' is true and forces a compilation error if
* 'expr' is false. Can be used in a context where no comma expressions
* are allowed.
*/
#ifdef __cplusplus
template <bool b> struct vki_static_assert { int m_bitfield:(2*b-1); };
#define VKI_STATIC_ASSERT(expr) \
(sizeof(vki_static_assert<(expr)>) - sizeof(int))
#else
#define VKI_STATIC_ASSERT(expr) (sizeof(struct { int:-!(expr); }))
#endif
//----------------------------------------------------------------------
// Based on _IOC_TYPECHECK() from linux-2.6.34/asm-generic/ioctl.h
//----------------------------------------------------------------------
/* provoke compile error for invalid uses of size argument */
#define _VKI_IOC_TYPECHECK(t) \
(VKI_STATIC_ASSERT((sizeof(t) == sizeof(t[1]) \
&& sizeof(t) < (1 << _VKI_IOC_SIZEBITS))) \
+ sizeof(t))
//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/compiler.h
//----------------------------------------------------------------------

View File

@ -515,13 +515,6 @@ struct vki_termios {
((nr) << _VKI_IOC_NRSHIFT) | \
((size) << _VKI_IOC_SIZESHIFT))
/* provoke compile error for invalid uses of size argument */
#define _VKI_IOC_TYPECHECK(t) \
((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)
#define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))

View File

@ -558,13 +558,6 @@ struct vki_termios {
((nr) << _VKI_IOC_NRSHIFT) | \
((size) << _VKI_IOC_SIZESHIFT))
/* provoke compile error for invalid uses of size argument */
#define _VKI_IOC_TYPECHECK(t) \
((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)
#define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr), \

View File

@ -479,13 +479,6 @@ struct vki_termios {
((nr) << _VKI_IOC_NRSHIFT) | \
((size) << _VKI_IOC_SIZESHIFT))
/* provoke compile error for invalid uses of size argument */
#define _VKI_IOC_TYPECHECK(t) \
((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)
#define _VKI_IOR(type,nr,size) _VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))