Created attachment 170418 [details] Don't define certain atomic macros for C++ During the exp-run in bug 208158, it was found that emulators/qemu-sbruno [1] and emulators/qemu-user-static [2] give errors with libc++ 3.8.0: CXX disas/arm-a64.o In file included from disas/arm-a64.cc:25: In file included from /wrkdirs/usr/ports/emulators/qemu-sbruno/work/qemu-bsd-user-743fbff/disas/libvixl/vixl/a64/disasm-a64.h:33: In file included from /wrkdirs/usr/ports/emulators/qemu-sbruno/work/qemu-bsd-user-743fbff/disas/libvixl/vixl/a64/decoder-a64.h:30: In file included from /usr/include/c++/v1/list:173: In file included from /usr/include/c++/v1/memory:616: /usr/include/c++/v1/atomic:1316:1: error: expected parameter declarator atomic_fetch_add(volatile atomic<_Tp>* __o, _Tp __op) _NOEXCEPT ^ /wrkdirs/usr/ports/emulators/qemu-sbruno/work/qemu-bsd-user-743fbff/include/qemu/atomic.h:139:61: note: expanded from macro 'atomic_fetch_add' #define atomic_fetch_add(ptr, n) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST) ^ <built-in>:16:26: note: expanded from here #define __ATOMIC_SEQ_CST 5 ^ This is because qemu's include/qemu/atomic.h defines several atomic macro names which conflict with standard C++ names, e.g. atomic_fetch_add, atomic_fetch_sub, etc. Fix this (for both ports), by not defining the macros when __cplusplus is defined. If any future qemu C++ code needs to use these atomic macros, it will have to be fixed separately. It would be better if qemu didn't attempt to use the same identifiers as being used in the C++ standard, but renaming all the instances to e.g. qemu_atomic_xxx would cause a lot of code churn, so it is probably not worth it. [1] http://package18.nyi.freebsd.org/data/headamd64PR208158-default/2016-05-01_10h29m48s/logs/errors/qemu-sbruno-2.5.93.g20160428.log [2] http://package18.nyi.freebsd.org/data/headamd64PR208158-default/2016-05-01_10h29m48s/logs/errors/qemu-user-static-2.5.93.g20160428.log
We will merge this upstream in the github repository and then update the port to pull this version.
A commit references this bug: Author: sbruno Date: Thu May 19 17:27:35 UTC 2016 New revision: 415511 URL: https://svnweb.freebsd.org/changeset/ports/415511 Log: Update qemu-sbruno/qemu-static-user: Disable atomic macros which conflict with C++ QEMU's atomic header defines a few macros which conflict with standard C++ function names, namely atomic_fetch_{add,sub,and,or}. Disable these macros when compiling for C++. PR: 209590 Submitted by: dim Changes: head/emulators/qemu-sbruno/Makefile head/emulators/qemu-sbruno/distinfo
A commit references this bug: Author: sbruno Date: Thu Jun 2 18:37:34 UTC 2016 New revision: 416287 URL: https://svnweb.freebsd.org/changeset/ports/416287 Log: Fixup for macros that conflict with standard C++ function names. PR: 209590 Submitted by: dim@ Changes: head/emulators/qemu-devel/Makefile head/emulators/qemu-devel/files/patch-include_qemu_atomic.h