fixincludes: vxworks: remove unnecessary parentheses in ioctl wrapper macro
commit43125e2974d3d819cd226c4b56eec9d48d8d120d
authorvillemoes <villemoes@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Sep 2018 13:26:45 +0000 (3 13:26 +0000)
committervillemoes <villemoes@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Sep 2018 13:26:45 +0000 (3 13:26 +0000)
tree49ccf009f7aa408cd69d01f9e0aba20ffc63c707
parentb2903606a95ff609a65abe7ac0cbf4321ad2614d
fixincludes: vxworks: remove unnecessary parentheses in ioctl wrapper macro

The rationale for the fixinclude ioctl macro wrapper is, as far as I can
tell (https://gcc.gnu.org/ml/gcc-patches/2012-09/msg01619.html)

  Fix 2: Add hack for ioctl() on VxWorks.

  ioctl() is supposed to be variadic, but VxWorks only has a three
  argument version with the third argument of type int.  This messes up
  when the third argument is not implicitly convertible to int.  This
  adds a macro which wraps around ioctl() and explicitly casts the third
  argument to an int.  This way, the most common use case of ioctl (with
  a const char * for the third argument) will compile in C++, where
  pointers must be explicitly casted to int.

However, we have existing C++ code that calls the ioctl function via

  ::ioctl(foo, bar, baz)

and obviously this breaks when it gets expanded to

  ::(ioctl)(foo, bar, (int)(baz))

Since the GNU C preprocessor already prevents recursive expansion of
function-like macros, the parentheses around ioctl are unnecessary.

Incidentally, there is also a macro sioIoctl() in the vxworks sioLib.h
header that expands to

  ((pSioChan)->pDrvFuncs->ioctl (pSioChan, cmd, arg))

which also breaks when that gets further expanded to

  ((pSioChan)->pDrvFuncs->(ioctl) (pSioChan, cmd, (int)(arg)))

This patch partly fixes that issue as well, but the third argument to
the pDrvFuncs->ioctl method should be void*, so the cast to (int) is
slightly annoying. Internally, we've simply patched the sioIoctl macro:

  (((pSioChan)->pDrvFuncs->ioctl) (pSioChan, cmd, arg))

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@264056 138bc75d-0d04-0410-961f-82ee72b054a4
fixincludes/ChangeLog
fixincludes/fixincl.x
fixincludes/inclhack.def