summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Maydell2016-09-12 15:10:08 +0200
committerPeter Maydell2016-09-13 16:34:17 +0200
commit2d31515bc0880a1cea86ce638d2a109f4f4e6f7d (patch)
tree4f91fdf1fe6cec0f9294d6d8013e556f16d87676
parentMerge remote-tracking branch 'remotes/stefanha/tags/block-pull-request' into ... (diff)
downloadqemu-2d31515bc0880a1cea86ce638d2a109f4f4e6f7d.tar.gz
qemu-2d31515bc0880a1cea86ce638d2a109f4f4e6f7d.tar.xz
qemu-2d31515bc0880a1cea86ce638d2a109f4f4e6f7d.zip
configure: Always compile with -fwrapv
QEMU's code relies on left shifts of signed integers always being defined behaviour with the obvious 2s-complement semantics. The only way to tell the compiler (and any associated undefined-behaviour sanitizer) that we require a C dialect with these semantics is to use the -fwrapv option. This is a bit of a heavy hammer for the job as it also gives us guaranteed semantics on integer arithmetic overflow which in theory we don't require. In an ideal world this would allow us to drop the warning flag -Wno-shift-negative-value, but we must retain this to avoid spurious warnings on clang versions predating the fix to https://llvm.org/bugs/show_bug.cgi?id=25552. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Markus Armbruster <armbru@redhat.com> Acked-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 1473685808-9629-1-git-send-email-peter.maydell@linaro.org
-rwxr-xr-xconfigure6
1 files changed, 5 insertions, 1 deletions
diff --git a/configure b/configure
index 0727d2555c..f4c589fb60 100755
--- a/configure
+++ b/configure
@@ -390,7 +390,11 @@ sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
ARFLAGS="${ARFLAGS-rv}"
# default flags for all hosts
-QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
+# We use -fwrapv to tell the compiler that we require a C dialect where
+# left shift of signed integers is well defined and has the expected
+# 2s-complement style results. (Both clang and gcc agree that it
+# provides these semantics.)
+QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"