Add `Function::setSubprogram()` and `Function::getSubprogram()`, convenience methods to forward to `setMetadata()` and `getMetadata()`, respectively, and deal in `DISubprogram` instead of `MDNode`. Also add a verifier check to enforce that `!dbg` attachments are always subprograms. Originally (when I had the llvm-dev discussion back in April) I thought I'd store a pointer directly on `llvm::Function` for these attachments -- we frequently have debug info, and that's much cheaper than using map in the context if there are no other function-level attachments -- but for now I'm just using the generic infrastructure. Let's add the extra complexity only if this shows up in a profile. llvm-svn: 246339
24 lines
626 B
LLVM
24 lines
626 B
LLVM
; RUN: not llvm-as %s -disable-output 2>&1 | FileCheck %s
|
|
|
|
define void @foo() !dbg !4 {
|
|
unreachable
|
|
}
|
|
|
|
; CHECK-NOT: !dbg
|
|
; CHECK: function !dbg attachment must be a subprogram
|
|
; CHECK-NEXT: void ()* @bar
|
|
; CHECK-NEXT: !{{[0-9]+}} = !{}
|
|
define void @bar() !dbg !6 {
|
|
unreachable
|
|
}
|
|
|
|
!llvm.module.flags = !{!0}
|
|
!0 = !{i32 2, !"Debug Info Version", i32 3}
|
|
|
|
!llvm.dbg.cu = !{!1}
|
|
!1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2, subprograms: !3)
|
|
!2 = !DIFile(filename: "t.c", directory: "/path/to/dir")
|
|
!3 = !{!4}
|
|
!4 = distinct !DISubprogram(name: "foo", scope: !1, file: !2, function: void ()* @foo)
|
|
!6 = !{}
|