diff options
author | Jonathan Gray <jsg@cvs.openbsd.org> | 2017-06-06 09:40:25 +0000 |
---|---|---|
committer | Jonathan Gray <jsg@cvs.openbsd.org> | 2017-06-06 09:40:25 +0000 |
commit | 3a5314f945f417f2c7372858cec833a57579e3a6 (patch) | |
tree | 32c8ba11e6d9c6174e5f172c868e4eba5b7da6df /gnu | |
parent | 81d2af8d44842bb200a5beab3fa6d50c8476d204 (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.cpp | 3 |
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)) |