DebugInof: Correct the location of exception cleanups in global ctors/dtors and ObjC...
authorDavid Blaikie <dblaikie@gmail.com>
Wed, 14 Jan 2015 07:10:46 +0000 (07:10 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Wed, 14 Jan 2015 07:10:46 +0000 (07:10 +0000)
commit47d28e07c1b01dbaee6d4f0f9e7c067186f67188
tree33f6c2ea7d605a8b0ec2cbd4281535973a983f60
parent7efc6139d983b191bd29fc61bb615e9432cd7f7b
DebugInof: Correct the location of exception cleanups in global ctors/dtors and ObjC methods

Without setting the CurEHLocation these cleanups would be attributed to
whatever the last active debug line location was (the 'fn' call in the
included test cases). By setting CurEHLocation correctly the line
information is improved/corrected.

This quality bug turned into a crasher with r225000 when, instead of
allowing the last location to persist, it would be zero'd out. This
could lead to a function call (such as the dtor) being made without a
debug location - if that call was subsequently inlined (and the caller
and callee had debug info, just not the call instruction) the inliner
would violate important constraints about the debug location chains by
not updating the inlined instructions to chain up to the callee
locations.

So, by fixing this bug, I am addressing the assertion failures
introduced by r225000 and should be able to recommit that patch with
impunity...

llvm-svn: 225955
clang/lib/CodeGen/CGDeclCXX.cpp
clang/lib/CodeGen/CGObjC.cpp
clang/test/CodeGenCXX/debug-info-line.cpp
clang/test/CodeGenObjCXX/debug-info-line.mm