Revert "Emit DW_AT_object_pointer once, on the declaration, for each function."

Breaks GDB buildbot
(http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/14517)

GCC emits DW_AT_object_pointer /everywhere/ (declaration, abstract
definition, inlined subroutine), but it looks like GCC relies on it
being somewhere other than the declaration, at least. I'll experiment
further & can hopefully still remove it from the inlined_subroutine.

This reverts commit r207705.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207719 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Blaikie
2014-04-30 22:58:19 +00:00
parent 6c0458d2b4
commit 4e9d8388dd
6 changed files with 14 additions and 48 deletions

View File

@@ -1,28 +1,13 @@
; RUN: llc -mtriple=x86_64-apple-darwin %s -o %t -filetype=obj
; RUN: llvm-dwarfdump -debug-dump=info %t | FileCheck %s
; Emit the DW_TAG_object_pointer on the declaration only, not the definition.
; This seems the most correct thing - the DW_TAG_object_pointer is inherited
; from the declaration to any (abstract or concrete) definitions and DWARF
; consumers can use this information for callers that can only see the
; declaration.
; That said, it isn't very space efficient - making member function
; declarations 11 bytes instead of 7 and I'm not sure which tools actually
; use this information here (ObjC Blocks are a different story & most likely
; require object_pointer) - perhaps we should omit it entirely for space.
; No overall space impact study has been performed.
; CHECK: [[DEFINITION:0x[0-9a-f]*]]: DW_TAG_subprogram
; CHECK-NOT: DW_TAG
; CHECK-NOT: DW_TAG_object_pointer
; CHECK: DW_TAG_formal_parameter [
; CHECK-NOT: ""
; CHECK: DW_TAG
; CHECK: DW_TAG_class_type
; CHECK-NOT: NULL
; CHECK: DW_TAG_subprogram
; CHECK-NEXT: DW_AT_name {{.*}} "A"
; CHECK: DW_AT_object_pointer [DW_FORM_ref4] (cu + 0x{{[0-9a-f]*}} => {[[PARAM:0x[0-9a-f]*]]})
; CHECK: [[PARAM]]: DW_TAG_formal_parameter
; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[0x{{[0-9a-f]*}}] = "this")
%class.A = type { i32 }