The C++ exception handling personality function wants
authorDuncan Sands <baldrick@free.fr>
Wed, 19 Dec 2007 07:36:31 +0000 (07:36 +0000)
committerDuncan Sands <baldrick@free.fr>
Wed, 19 Dec 2007 07:36:31 +0000 (07:36 +0000)
commit481dc721c37a3da0b3cc88191d01fe5b523625ee
treead26f114831c6dad8b0fc98d40ab4f97bce1f112
parent9999e685ea86e9cb8c8d59bfb2f3f4c20acc4de4
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
lib/CodeGen/DwarfWriter.cpp
lib/CodeGen/MachineModuleInfo.cpp
lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp