Emit DW_AT_object_pointer once, on the declaration, for each function.
authorDavid Blaikie <dblaikie@gmail.com>
Wed, 30 Apr 2014 21:29:41 +0000 (21:29 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Wed, 30 Apr 2014 21:29:41 +0000 (21:29 +0000)
commitf345c4732c6e3edec4a51d4c31294c7fdbef4b2c
tree638689863dcf946529262e1ce53ec8012f2012f6
parent289978069fec6b617192283fc52c6f6731f82e30
Emit DW_AT_object_pointer once, on the declaration, for each function.

This effectively reverts r164326, but adds some comments and
justification and ensures we /don't/ emit the DW_AT_object_pointer on
the (abstract and concrete) definitions. (while still preserving it on
standalone definitions involving ObjC Blocks)

This does increase the size of member function declarations from 7 to 11
bytes, unfortunately, but still seems like the Right Thing to do so that
callers that see only the declaration still have the information about
the object pointer. That said, I don't know what, if any, DWARF
consumers don't have a heuristic to guess this in the case of normal
C++ member functions - perhaps we can remove it entirely.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207705 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.h
test/DebugInfo/X86/DW_AT_object_pointer.ll
test/DebugInfo/X86/inline-member-function.ll