summaryrefslogtreecommitdiff
path: root/lib/CodeGen/MachineModuleInfo.cpp
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2007-12-19 07:36:31 +0000
committerDuncan Sands <baldrick@free.fr>2007-12-19 07:36:31 +0000
commit481dc721c37a3da0b3cc88191d01fe5b523625ee (patch)
treead26f114831c6dad8b0fc98d40ab4f97bce1f112 /lib/CodeGen/MachineModuleInfo.cpp
parent9999e685ea86e9cb8c8d59bfb2f3f4c20acc4de4 (diff)
downloadllvm-481dc721c37a3da0b3cc88191d01fe5b523625ee.tar.gz
llvm-481dc721c37a3da0b3cc88191d01fe5b523625ee.tar.bz2
llvm-481dc721c37a3da0b3cc88191d01fe5b523625ee.tar.xz
The C++ exception handling personality function wants
to know about calls that cannot throw ('nounwind'): if such a call does throw for some reason then the personality will terminate the program. The distinction between an ordinary call and a nounwind call is that an ordinary call gets an entry in the exception table but a nounwind call does not. This patch sets up the exception table appropriately. One oddity is that I've chosen to bracket nounwind calls with labels (like invokes) - the other choice would have been to bracket ordinary calls with labels. While bracketing ordinary calls is more natural (because bracketing by labels would then correspond exactly to getting an entry in the exception table), I didn't do it because introducing labels impedes some optimizations and I'm guessing that ordinary calls occur more often than nounwind calls. This fixes the gcc filter2 eh test, at least at -O0 (the inliner needs some tweaking at higher optimization levels). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45197 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/MachineModuleInfo.cpp')
-rw-r--r--lib/CodeGen/MachineModuleInfo.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/lib/CodeGen/MachineModuleInfo.cpp b/lib/CodeGen/MachineModuleInfo.cpp
index 14253f4111..59c335e7fb 100644
--- a/lib/CodeGen/MachineModuleInfo.cpp
+++ b/lib/CodeGen/MachineModuleInfo.cpp
@@ -1747,7 +1747,7 @@ void MachineModuleInfo::TidyLandingPads() {
LandingPad.LandingPadLabel = MappedLabel(LandingPad.LandingPadLabel);
// Special case: we *should* emit LPs with null LP MBB. This indicates
- // "rethrow" case.
+ // "nounwind" case.
if (!LandingPad.LandingPadLabel && LandingPad.LandingPadBlock) {
LandingPads.erase(LandingPads.begin() + i);
continue;
@@ -1757,7 +1757,6 @@ void MachineModuleInfo::TidyLandingPads() {
unsigned BeginLabel = MappedLabel(LandingPad.BeginLabels[j]);
unsigned EndLabel = MappedLabel(LandingPad.EndLabels[j]);
-
if (!BeginLabel || !EndLabel) {
LandingPad.BeginLabels.erase(LandingPad.BeginLabels.begin() + j);
LandingPad.EndLabels.erase(LandingPad.EndLabels.begin() + j);