From 200a5ef5268b7d828f62195a6f55963b10ae221a Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Mon, 8 May 2017 21:17:08 +0000 Subject: Make it illegal for two Functions to point to the same DISubprogram As recently discussed on llvm-dev [1], this patch makes it illegal for two Functions to point to the same DISubprogram and updates FunctionCloner to also clone the debug info of a function to conform to the new requirement. To simplify the implementation it also factors out the creation of inlineAt locations from the Inliner into a general-purpose utility in DILocation. [1] http://lists.llvm.org/pipermail/llvm-dev/2017-May/112661.html Differential Revision: https://reviews.llvm.org/D32975 llvm-svn: 302469 --- llvm/test/Verifier/metadata-function-dbg.ll | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'llvm/test') diff --git a/llvm/test/Verifier/metadata-function-dbg.ll b/llvm/test/Verifier/metadata-function-dbg.ll index 24989ed7aa2..6db40943ec3 100644 --- a/llvm/test/Verifier/metadata-function-dbg.ll +++ b/llvm/test/Verifier/metadata-function-dbg.ll @@ -3,12 +3,18 @@ ; CHECK: function declaration may not have a !dbg attachment declare !dbg !4 void @f1() -define void @f2() !dbg !4 { +; CHECK: function must have a single !dbg attachment +define void @f2() !dbg !4 !dbg !4 { unreachable } -; CHECK: function must have a single !dbg attachment -define void @f3() !dbg !4 !dbg !4 { +; CHECK: DISubprogram attached to more than one function +define void @f3() !dbg !4 { + unreachable +} + +; CHECK: DISubprogram attached to more than one function +define void @f4() !dbg !4 { unreachable } @@ -16,7 +22,7 @@ define void @f3() !dbg !4 !dbg !4 { ; CHECK: function !dbg attachment must be a subprogram ; CHECK-NEXT: void ()* @bar ; CHECK-NEXT: !{{[0-9]+}} = !{} -define void @bar() !dbg !6 { +define void @bar() !dbg !3 { unreachable } @@ -26,5 +32,5 @@ define void @bar() !dbg !6 { !llvm.dbg.cu = !{!1} !1 = distinct !DICompileUnit(language: DW_LANG_C99, file: !2) !2 = !DIFile(filename: "t.c", directory: "/path/to/dir") +!3 = !{} !4 = distinct !DISubprogram(name: "foo", scope: !1, file: !2, unit: !1) -!6 = !{} -- cgit v1.2.3