From: Mike Stump Date: Thu, 2 Apr 2009 18:15:54 +0000 (+0000) Subject: Remove -ftrapu. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=035cf8911c2282550411be70f370dfe5d282b5c9;p=clang Remove -ftrapu. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68330 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h index 3587e8b39c..f16b403828 100644 --- a/include/clang/Basic/LangOptions.h +++ b/include/clang/Basic/LangOptions.h @@ -59,10 +59,6 @@ public: unsigned MathErrno : 1; // Math functions must respect errno // (modulo the platform support). - unsigned UnsignedOverflowChecking : 1; - // Extension to call a handler function when - // unsigned and signed integer arithmetic overflows. - unsigned OverflowChecking : 1; // Extension to call a handler function when // signed integer arithmetic overflows. @@ -94,7 +90,6 @@ public: EmitAllDecls = 0; MathErrno = 1; - UnsignedOverflowChecking = 0; OverflowChecking = 0; InstantiationDepth = 99; diff --git a/include/clang/Driver/Options.def b/include/clang/Driver/Options.def index e49e611a54..33b24f63dd 100644 --- a/include/clang/Driver/Options.def +++ b/include/clang/Driver/Options.def @@ -448,7 +448,6 @@ OPTION("-ftemplate-depth-", ftemplate_depth_, Joined, f_Group, INVALID, "", 0, 0 OPTION("-fterminated-vtables", fterminated_vtables, Flag, f_Group, INVALID, "", 0, 0, 0) OPTION("-ftime-report", ftime_report, Flag, clang_f_Group, INVALID, "", 0, 0, 0) OPTION("-ftraditional", ftraditional, Flag, f_Group, INVALID, "", 0, 0, 0) -OPTION("-ftrapu", ftrapu, Flag, clang_f_Group, INVALID, "", 0, 0, 0) OPTION("-ftrapv", ftrapv, Flag, clang_f_Group, INVALID, "", 0, 0, 0) OPTION("-funwind-tables", funwind_tables, Flag, f_Group, INVALID, "", 0, 0, 0) OPTION("-fverbose-asm", fverbose_asm, Flag, f_Group, INVALID, "", 0, 0, 0) diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 1d2da0ddf8..225b70882e 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -262,9 +262,8 @@ public: // Binary Operators. Value *EmitMul(const BinOpInfo &Ops) { - if (CGF.getContext().getLangOptions().UnsignedOverflowChecking - || (CGF.getContext().getLangOptions().OverflowChecking - && Ops.Ty->isSignedIntegerType())) + if (CGF.getContext().getLangOptions().OverflowChecking + && Ops.Ty->isSignedIntegerType()) return EmitOverflowCheckedBinOp(Ops); return Builder.CreateMul(Ops.LHS, Ops.RHS, "mul"); } @@ -837,54 +836,28 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { unsigned IID; unsigned OpID = 0; - if (Ops.Ty->isSignedIntegerType()) { - switch (Ops.E->getOpcode()) { - case BinaryOperator::Add: - case BinaryOperator::AddAssign: - OpID = 1; - IID = llvm::Intrinsic::sadd_with_overflow; - break; - case BinaryOperator::Sub: - case BinaryOperator::SubAssign: - OpID = 2; - IID = llvm::Intrinsic::ssub_with_overflow; - break; - case BinaryOperator::Mul: - case BinaryOperator::MulAssign: - OpID = 3; - IID = llvm::Intrinsic::smul_with_overflow; - break; - default: - fprintf(stderr, "Opcode: %d\n", Ops.E->getOpcode()); - assert(false && "Unsupported operation for overflow detection"); - } - OpID <<= 1; - OpID |= 1; - } - else { - assert(Ops.Ty->isUnsignedIntegerType() && - "Must be either a signed or unsigned integer op"); - switch (Ops.E->getOpcode()) { - case BinaryOperator::Add: - case BinaryOperator::AddAssign: - OpID = 1; - IID = llvm::Intrinsic::uadd_with_overflow; - break; - case BinaryOperator::Sub: - case BinaryOperator::SubAssign: - OpID = 2; - IID = llvm::Intrinsic::usub_with_overflow; - break; - case BinaryOperator::Mul: - case BinaryOperator::MulAssign: - OpID = 3; - IID = llvm::Intrinsic::umul_with_overflow; - break; - default: - assert(false && "Unsupported operation for overflow detection"); - } - OpID <<= 1; - } + switch (Ops.E->getOpcode()) { + case BinaryOperator::Add: + case BinaryOperator::AddAssign: + OpID = 1; + IID = llvm::Intrinsic::sadd_with_overflow; + break; + case BinaryOperator::Sub: + case BinaryOperator::SubAssign: + OpID = 2; + IID = llvm::Intrinsic::ssub_with_overflow; + break; + case BinaryOperator::Mul: + case BinaryOperator::MulAssign: + OpID = 3; + IID = llvm::Intrinsic::smul_with_overflow; + break; + default: + assert(false && "Unsupported operation for overflow detection"); + } + OpID <<= 1; + OpID |= 1; + const llvm::Type *opTy = CGF.CGM.getTypes().ConvertType(Ops.Ty); llvm::Function *intrinsic = CGF.CGM.getIntrinsic(IID, &opTy, 1); @@ -945,9 +918,8 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) { if (!Ops.Ty->isPointerType()) { - if (CGF.getContext().getLangOptions().UnsignedOverflowChecking - || (CGF.getContext().getLangOptions().OverflowChecking - && Ops.Ty->isSignedIntegerType())) + if (CGF.getContext().getLangOptions().OverflowChecking + && Ops.Ty->isSignedIntegerType()) return EmitOverflowCheckedBinOp(Ops); return Builder.CreateAdd(Ops.LHS, Ops.RHS, "add"); } @@ -998,9 +970,8 @@ Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) { Value *ScalarExprEmitter::EmitSub(const BinOpInfo &Ops) { if (!isa(Ops.LHS->getType())) { - if (CGF.getContext().getLangOptions().UnsignedOverflowChecking - || (CGF.getContext().getLangOptions().OverflowChecking - && Ops.Ty->isSignedIntegerType())) + if (CGF.getContext().getLangOptions().OverflowChecking + && Ops.Ty->isSignedIntegerType()) return EmitOverflowCheckedBinOp(Ops); return Builder.CreateSub(Ops.LHS, Ops.RHS, "sub"); } diff --git a/test/CodeGen/trapu.c b/test/CodeGen/trapu.c deleted file mode 100644 index 640a6b1b7c..0000000000 --- a/test/CodeGen/trapu.c +++ /dev/null @@ -1,10 +0,0 @@ -// RUN: clang-cc -ftrapu %s -emit-llvm -o %t && -// RUN: grep "__overflow_handler" %t | count 3 - -unsigned int ui, uj, uk; -int i, j, k; - -void foo() { - ui = uj + uk; - i = j + k; -} diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 1a10896744..19f42b442c 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -679,19 +679,13 @@ void InitializeGCMode(LangOptions &Options) { Options.setGCMode(LangOptions::HybridGC); } -static llvm::cl::opt -UnsignedOverflowChecking("ftrapu", - llvm::cl::desc("Trap on unsigned and signed integer overflow"), - llvm::cl::init(false)); - static llvm::cl::opt OverflowChecking("ftrapv", - llvm::cl::desc("Trap on signed integer overflow"), + llvm::cl::desc("Trap on integer overflow"), llvm::cl::init(false)); void InitializeOverflowChecking(LangOptions &Options) { - Options.OverflowChecking = OverflowChecking | UnsignedOverflowChecking; - Options.UnsignedOverflowChecking = UnsignedOverflowChecking; + Options.OverflowChecking = OverflowChecking; } //===----------------------------------------------------------------------===// // Target Triple Processing.