aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/X86/X86TargetMachine.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2015-10-09 01:13:17 +0000
committerReid Kleckner <rnk@google.com>2015-10-09 01:13:17 +0000
commitae44e871cdd5c51a17198733e9b795d2eabaef14 (patch)
tree06987cd62dd9dcf85520edcf012ec34ddeea4800 /llvm/lib/Target/X86/X86TargetMachine.cpp
parent37bb6810f24a68643aea0268b85e7c1b9f1a3f02 (diff)
downloadllvm-ae44e871cdd5c51a17198733e9b795d2eabaef14.zip
llvm-ae44e871cdd5c51a17198733e9b795d2eabaef14.tar.gz
llvm-ae44e871cdd5c51a17198733e9b795d2eabaef14.tar.bz2
Revert "Revert "Revert r248959, "[WinEH] Emit int3 after noreturn calls on Win64"""
This reverts commit r249794. Apparently my checkouts are full of unexpected surprises today. llvm-svn: 249796
Diffstat (limited to 'llvm/lib/Target/X86/X86TargetMachine.cpp')
-rw-r--r--llvm/lib/Target/X86/X86TargetMachine.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86TargetMachine.cpp b/llvm/lib/Target/X86/X86TargetMachine.cpp
index d318244..2e869eb 100644
--- a/llvm/lib/Target/X86/X86TargetMachine.cpp
+++ b/llvm/lib/Target/X86/X86TargetMachine.cpp
@@ -110,6 +110,13 @@ X86TargetMachine::X86TargetMachine(const Target &T, const Triple &TT,
OL),
TLOF(createTLOF(getTargetTriple())),
Subtarget(TT, CPU, FS, *this, Options.StackAlignmentOverride) {
+ // Windows stack unwinder gets confused when execution flow "falls through"
+ // after a call to 'noreturn' function.
+ // To prevent that, we emit a trap for 'unreachable' IR instructions.
+ // (which on X86, happens to be the 'ud2' instruction)
+ if (Subtarget.isTargetWin64())
+ this->Options.TrapUnreachable = true;
+
// By default (and when -ffast-math is on), enable estimate codegen for
// everything except scalar division. By default, use 1 refinement step for
// all operations. Defaults may be overridden by using command-line options.