From 7b4a6572144bf7b3a2d98f06f0d85f1eb74d6bc8 Mon Sep 17 00:00:00 2001 From: jsg Date: Tue, 6 Jun 2017 09:40:24 +0000 Subject: [PATCH] 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@ --- gnu/llvm/tools/clang/lib/Driver/Tools.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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)) -- 2.20.1