DebugInfo: Overload get() in DIDescriptor subclasses

Continue to simplify the `DIDescriptor` subclasses, so that they behave
more like raw pointers.  Remove `getRaw()`, replace it with an
overloaded `get()`, and overload the arrow and cast operators.  Two
testcases started to crash on the arrow operators with this change
because of `scope:` references that weren't real scopes.  I fixed them.
Soon I'll add verifier checks for them too.

This also adds explicit dereference operators.  Previously, the builtin
dereference against `operator MDNode *()` would have worked, but now the
builtins are ambiguous.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233030 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith
2015-03-23 21:54:07 +00:00
parent 79cd79b1e6
commit 7ad96398c6
4 changed files with 274 additions and 113 deletions

View File

@@ -4,9 +4,9 @@
; CHECK: invoke void @test()
; CHECK-NEXT: to label {{.*}} unwind label {{.*}}, !dbg [[INL_LOC:!.*]]
; CHECK: [[EMPTY:.*]] = !{}
; CHECK: [[INL_LOC]] = !MDLocation(line: 1, scope: [[EMPTY]], inlinedAt: [[INL_AT:.*]])
; CHECK: [[INL_AT]] = distinct !MDLocation(line: 2, scope: [[EMPTY]])
; CHECK: [[SP:.*]] = !MDSubprogram(
; CHECK: [[INL_LOC]] = !MDLocation(line: 1, scope: [[SP]], inlinedAt: [[INL_AT:.*]])
; CHECK: [[INL_AT]] = distinct !MDLocation(line: 2, scope: [[SP]])
declare void @test()
declare i32 @__gxx_personality_v0(...)
@@ -32,6 +32,6 @@ lpad:
!llvm.module.flags = !{!1}
!1 = !{i32 2, !"Debug Info Version", i32 3}
!2 = !{}
!2 = !MDSubprogram()
!3 = !MDLocation(line: 1, scope: !2)
!4 = !MDLocation(line: 2, scope: !2)