compilation error with clang in util/async.c

Bug #1895471 reported by Amey Narkhede
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

configured with ` CC=clang CXX=clang++ ../configure --target-list=x86_64-softmmu --enable-kvm --enable-curl --enable-debug --enable-jemalloc --enable-fuzzing --enable-sdl` and after make I get the following error related to c11 atomics. I'm using clang because I'm experimenting with fuzzer

[glitz@archlinux /code/qemu/build]$ ninja -j5
[479/2290] Compiling C object libqemuutil.a.p/util_async.c.o
FAILED: libqemuutil.a.p/util_async.c.o
clang -Ilibqemuutil.a.p -I. -I.. -Iqapi -Itrace -Iui -Iui/shader -I/usr/include/p11-kit-1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -Ilinux-headers -Xclang -fcolor-diagnostics -pipe -Wall -Winvalid-pch -Werror -std=gnu99 -g -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -fsanitize=fuzzer-no-link -iquote /code/qemu/tcg/i386 -isystem /code/qemu/linux-headers -iquote . -iquote /code/qemu -iquote /code/qemu/accel/tcg -iquote /code/qemu/include -iquote /code/qemu/disas/libvixl -pthread -fPIC -MD -MQ libqemuutil.a.p/util_async.c.o -MF libqemuutil.a.p/util_async.c.o.d -o libqemuutil.a.p/util_async.c.o -c ../util/async.c
../util/async.c:79:17: error: address argument to atomic operation must be a pointer to _Atomic type ('unsigned int *' invalid)
    old_flags = atomic_fetch_or(&bh->flags, BH_PENDING | new_flags);
                ^ ~~~~~~~~~~
/usr/lib/clang/10.0.1/include/stdatomic.h:138:42: note: expanded from macro 'atomic_fetch_or'
#define atomic_fetch_or(object, operand) __c11_atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST)
                                         ^ ~~~~~~
../util/async.c:105:14: error: address argument to atomic operation must be a pointer to _Atomic type ('unsigned int *' invalid)
    *flags = atomic_fetch_and(&bh->flags,
             ^ ~~~~~~~~~~
/usr/lib/clang/10.0.1/include/stdatomic.h:144:43: note: expanded from macro 'atomic_fetch_and'
#define atomic_fetch_and(object, operand) __c11_atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST)
                                          ^ ~~~~~~
2 errors generated.
[483/2290] Compiling C object libqemuutil.a.p/util_qemu-error.c.o
ninja: build stopped: subcommand failed.

Revision history for this message
Stefan Hajnoczi (stefanha) wrote : Re: [Bug 1895471] [NEW] compilation error with clang in util/async.c
Download full text (3.2 KiB)

On Sun, Sep 13, 2020 at 06:56:12PM -0000, Amey Narkhede wrote:
> configured with ` CC=clang CXX=clang++ ../configure --target-
> list=x86_64-softmmu --enable-kvm --enable-curl --enable-debug --enable-
> jemalloc --enable-fuzzing --enable-sdl` and after make I get the
> following error related to c11 atomics. I'm using clang because I'm
> experimenting with fuzzer
>
> [glitz@archlinux /code/qemu/build]$ ninja -j5
> [479/2290] Compiling C object libqemuutil.a.p/util_async.c.o
> FAILED: libqemuutil.a.p/util_async.c.o
> clang -Ilibqemuutil.a.p -I. -I.. -Iqapi -Itrace -Iui -Iui/shader -I/usr/include/p11-kit-1 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -Ilinux-headers -Xclang -fcolor-diagnostics -pipe -Wall -Winvalid-pch -Werror -std=gnu99 -g -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wold-style-definition -Wtype-limits -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wempty-body -Wnested-externs -Wendif-labels -Wexpansion-to-defined -Wno-initializer-overrides -Wno-missing-include-dirs -Wno-shift-negative-value -Wno-string-plus-int -Wno-typedef-redefinition -Wno-tautological-type-limit-compare -fstack-protector-strong -fsanitize=fuzzer-no-link -iquote /code/qemu/tcg/i386 -isystem /code/qemu/linux-headers -iquote . -iquote /code/qemu -iquote /code/qemu/accel/tcg -iquote /code/qemu/include -iquote /code/qemu/disas/libvixl -pthread -fPIC -MD -MQ libqemuutil.a.p/util_async.c.o -MF libqemuutil.a.p/util_async.c.o.d -o libqemuutil.a.p/util_async.c.o -c ../util/async.c
> ../util/async.c:79:17: error: address argument to atomic operation must be a pointer to _Atomic type ('unsigned int *' invalid)
> old_flags = atomic_fetch_or(&bh->flags, BH_PENDING | new_flags);
> ^ ~~~~~~~~~~
> /usr/lib/clang/10.0.1/include/stdatomic.h:138:42: note: expanded from macro 'atomic_fetch_or'
> #define atomic_fetch_or(object, operand) __c11_atomic_fetch_or(object, operand, __ATOMIC_SEQ_CST)
> ^ ~~~~~~
> ../util/async.c:105:14: error: address argument to atomic operation must be a pointer to _Atomic type ('unsigned int *' invalid)
> *flags = atomic_fetch_and(&bh->flags,
> ^ ~~~~~~~~~~
> /usr/lib/clang/10.0.1/include/stdatomic.h:144:43: note: expanded from macro 'atomic_fetch_and'
> #define atomic_fetch_and(object, operand) __c11_atomic_fetch_and(object, operand, __ATOMIC_SEQ_CST)
> ^ ~~~~~~
> 2 errors generated.
> [483/2290] Compiling C object libqemuutil.a.p/util_qemu-error.c.o
> ninja: build stopped: subcommand failed.

This happens when a system header file includes <stdatomic.h>. QEMU's
"atomic.h" conflicts with <stdatomic.h> in that QEMU atomic variables do
not need to be declared _Atomic.

Please rerun the full clang command-line above from your meson build
directory with -E instead of -c. Then upload the
libqemuutil.a.p/util_async.c.o so we...

Read more...

Revision history for this message
Amey Narkhede (ameynarkhede) wrote :

Ok. So I attached the util_async.o file below

Revision history for this message
Stefan Hajnoczi (stefanha) wrote : Re: [Bug 1895471] Re: compilation error with clang in util/async.c

On Mon, Sep 14, 2020 at 10:52:16AM -0000, Amey Narkhede wrote:
> Ok. So I attached the util_async.o file below

It looks like you can work around this issue with ./configure --disable-linux-io-uring.

I'll investigate what can be done to solve the interference between
<stdatomic.h> and QEMU's "atomic.h" next week.

Revision history for this message
Stefan Hajnoczi (stefanha) wrote :

Mailing list discussion about how to fix this:
https://lists.gnu.org/archive/html/qemu-devel/2020-09/msg07392.html

Revision history for this message
Thomas Huth (th-huth) wrote :

I think this has been fixed here:
https://gitlab.com/qemu-project/qemu/-/commit/d73415a315471a
... so I'm closing this now. If you still have problems, please open a new ticket in our new issue tracker here: https://gitlab.com/qemu-project/qemu/-/issues

Changed in qemu:
status: New → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.