summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorJonathan Gray <jsg@cvs.openbsd.org>2017-06-06 09:40:25 +0000
committerJonathan Gray <jsg@cvs.openbsd.org>2017-06-06 09:40:25 +0000
commit3a5314f945f417f2c7372858cec833a57579e3a6 (patch)
tree32c8ba11e6d9c6174e5f172c868e4eba5b7da6df /gnu
parent81d2af8d44842bb200a5beab3fa6d50c8476d204 (diff)
Enable -fwrapv by default with clang to treat signed integer overflows
as defined. This is done to prevent dangerous optimisations which could remove security critical overflow checks. Base gcc has -fno-strict-overflow by default, with clang this is identical to -fwrapv. Prompted by naddy@ discovering a hang with a clang compiled i386 kernel that was resolved with -fwrapv. ok kettenis@ pascal@
Diffstat (limited to 'gnu')
-rw-r--r--gnu/llvm/tools/clang/lib/Driver/Tools.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/gnu/llvm/tools/clang/lib/Driver/Tools.cpp b/gnu/llvm/tools/clang/lib/Driver/Tools.cpp
index bd736c822c9..5eeb81f3039 100644
--- a/gnu/llvm/tools/clang/lib/Driver/Tools.cpp
+++ b/gnu/llvm/tools/clang/lib/Driver/Tools.cpp
@@ -5466,7 +5466,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
options::OPT_fno_strict_overflow)) {
if (A->getOption().matches(options::OPT_fno_strict_overflow))
CmdArgs.push_back("-fwrapv");
- }
+ } else if (getToolChain().getTriple().isOSOpenBSD())
+ CmdArgs.push_back("-fwrapv");
if (Arg *A = Args.getLastArg(options::OPT_freroll_loops,
options::OPT_fno_reroll_loops))