diff options
author | Stephen Hines <srhines@google.com> | 2015-03-23 12:10:34 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2015-03-23 12:10:34 -0700 |
commit | ebe69fe11e48d322045d5949c83283927a0d790b (patch) | |
tree | c92f1907a6b8006628a4b01615f38264d29834ea /test/Linker | |
parent | b7d2e72b02a4cb8034f32f8247a2558d2434e121 (diff) | |
download | external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.zip external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.gz external_llvm-ebe69fe11e48d322045d5949c83283927a0d790b.tar.bz2 |
Update aosp/master LLVM for rebase to r230699.
Change-Id: I2b5be30509658cb8266be782de0ab24f9099f9b9
Diffstat (limited to 'test/Linker')
121 files changed, 1336 insertions, 765 deletions
diff --git a/test/Linker/2006-06-15-GlobalVarAlignment.ll b/test/Linker/2006-06-15-GlobalVarAlignment.ll deleted file mode 100644 index c9f9b0e..0000000 --- a/test/Linker/2006-06-15-GlobalVarAlignment.ll +++ /dev/null @@ -1,8 +0,0 @@ -; The linker should choose the largest alignment when linking. - -; RUN: echo "@X = global i32 7, align 8" | llvm-as > %t.2.bc -; RUN: llvm-as < %s > %t.1.bc -; RUN: llvm-link %t.1.bc %t.2.bc -S | FileCheck %s -; CHECK: align 8 - -@X = weak global i32 7, align 4 diff --git a/test/Linker/2009-09-03-mdnode.ll b/test/Linker/2009-09-03-mdnode.ll index d9871b2..1f308e7 100644 --- a/test/Linker/2009-09-03-mdnode.ll +++ b/test/Linker/2009-09-03-mdnode.ll @@ -26,6 +26,6 @@ declare void @llvm.dbg.stoppoint(i32, i32, metadata) nounwind readnone declare void @llvm.dbg.region.end(metadata) nounwind readnone -!0 = metadata !{metadata !"0x2e\00main\00main\00main\002\000\001\000\006\000\000\000", i32 0, metadata !1, null, null, null, null, null} ; [ DW_TAG_subprogram ] -!1 = metadata !{metadata !"0x11\0012\00ellcc 0.1.0\001\00\000\00\000", metadata !2, null, null, null, null, null} ; [ DW_TAG_compile_unit ] -!2 = metadata !{metadata !"a.c", metadata !"/home/rich/ellcc/test/source"} +!0 = !{!"0x2e\00main\00main\00main\002\000\001\000\006\000\000\000", i32 0, !1, null, null, null, null, null} ; [ DW_TAG_subprogram ] +!1 = !{!"0x11\0012\00ellcc 0.1.0\001\00\000\00\000", !2, null, null, null, null, null} ; [ DW_TAG_compile_unit ] +!2 = !{!"a.c", !"/home/rich/ellcc/test/source"} diff --git a/test/Linker/2009-09-03-mdnode2.ll b/test/Linker/2009-09-03-mdnode2.ll index b01f947..68e3294 100644 --- a/test/Linker/2009-09-03-mdnode2.ll +++ b/test/Linker/2009-09-03-mdnode2.ll @@ -21,6 +21,6 @@ declare void @llvm.dbg.stoppoint(i32, i32, metadata) nounwind readnone declare void @llvm.dbg.region.end(metadata) nounwind readnone -!0 = metadata !{metadata !"0x2e\00f\00f\00f\001\000\001\000\006\000\000\000", i32 0, metadata !1, null, null, null, null, null} ; [ DW_TAG_subprogram ] -!1 = metadata !{metadata !"0x11\0012\00ellcc 0.1.0\001\00\000\00\000", metadata !2, null, null, null, null, null} ; [ DW_TAG_compile_unit ] -!2 = metadata !{metadata !"b.c", metadata !"/home/rich/ellcc/test/source"} +!0 = !{!"0x2e\00f\00f\00f\001\000\001\000\006\000\000\000", i32 0, !1, null, null, null, null, null} ; [ DW_TAG_subprogram ] +!1 = !{!"0x11\0012\00ellcc 0.1.0\001\00\000\00\000", !2, null, null, null, null, null} ; [ DW_TAG_compile_unit ] +!2 = !{!"b.c", !"/home/rich/ellcc/test/source"} diff --git a/test/Linker/2011-08-04-DebugLoc.ll b/test/Linker/2011-08-04-DebugLoc.ll index a9307af..85b9e17 100644 --- a/test/Linker/2011-08-04-DebugLoc.ll +++ b/test/Linker/2011-08-04-DebugLoc.ll @@ -17,15 +17,15 @@ define i32 @foo() nounwind ssp { !llvm.module.flags = !{!11} !llvm.dbg.sp = !{!1} -!0 = metadata !{metadata !"0x11\0012\00Apple clang version 3.0 (tags/Apple/clang-209.11) (based on LLVM 3.0svn)\001\00\000\00\000", metadata !8, metadata !9, metadata !9, metadata !10, null, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !"0x2e\00foo\00foo\00\002\000\001\000\006\000\000\000", metadata !8, metadata !2, metadata !3, null, i32 ()* @foo, null, null, null} ; [ DW_TAG_subprogram ] [line 2] [def] [scope 0] [foo] -!2 = metadata !{metadata !"0x29", metadata !8} ; [ DW_TAG_file_type ] -!3 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !8, metadata !2, null, metadata !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!4 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, metadata !0} ; [ DW_TAG_base_type ] -!6 = metadata !{i32 2, i32 13, metadata !7, null} -!7 = metadata !{metadata !"0xb\002\0011\000", metadata !8, metadata !1} ; [ DW_TAG_lexical_block ] -!8 = metadata !{metadata !"a.c", metadata !"/private/tmp"} -!9 = metadata !{i32 0} -!10 = metadata !{metadata !1} -!11 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0012\00Apple clang version 3.0 (tags/Apple/clang-209.11) (based on LLVM 3.0svn)\001\00\000\00\000", !8, !9, !9, !10, null, null} ; [ DW_TAG_compile_unit ] +!1 = !{!"0x2e\00foo\00foo\00\002\000\001\000\006\000\000\000", !8, !2, !3, null, i32 ()* @foo, null, null, null} ; [ DW_TAG_subprogram ] [line 2] [def] [scope 0] [foo] +!2 = !{!"0x29", !8} ; [ DW_TAG_file_type ] +!3 = !{!"0x15\00\000\000\000\000\000\000", !8, !2, null, !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!4 = !{!5} +!5 = !{!"0x24\00int\000\0032\0032\000\000\005", null, !0} ; [ DW_TAG_base_type ] +!6 = !MDLocation(line: 2, column: 13, scope: !7) +!7 = !{!"0xb\002\0011\000", !8, !1} ; [ DW_TAG_lexical_block ] +!8 = !{!"a.c", !"/private/tmp"} +!9 = !{i32 0} +!10 = !{!1} +!11 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-04-DebugLoc2.ll b/test/Linker/2011-08-04-DebugLoc2.ll index 948dd18..a3cd001 100644 --- a/test/Linker/2011-08-04-DebugLoc2.ll +++ b/test/Linker/2011-08-04-DebugLoc2.ll @@ -14,15 +14,15 @@ define i32 @bar() nounwind ssp { !llvm.module.flags = !{!11} !llvm.dbg.sp = !{!1} -!0 = metadata !{metadata !"0x11\0012\00Apple clang version 3.0 (tags/Apple/clang-209.11) (based on LLVM 3.0svn)\001\00\000\00\000", metadata !8, metadata !9, metadata !9, metadata !10, null, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !"0x2e\00bar\00bar\00\001\000\001\000\006\000\000\000", metadata !8, metadata !2, metadata !3, null, i32 ()* @bar, null, null, null} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 0] [bar] -!2 = metadata !{metadata !"0x29", metadata !8} ; [ DW_TAG_file_type ] -!3 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !8, metadata !2, null, metadata !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!4 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, metadata !0} ; [ DW_TAG_base_type ] -!6 = metadata !{i32 1, i32 13, metadata !7, null} -!7 = metadata !{metadata !"0xb\001\0011\000", metadata !8, metadata !1} ; [ DW_TAG_lexical_block ] -!8 = metadata !{metadata !"b.c", metadata !"/private/tmp"} -!9 = metadata !{i32 0} -!10 = metadata !{metadata !1} -!11 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0012\00Apple clang version 3.0 (tags/Apple/clang-209.11) (based on LLVM 3.0svn)\001\00\000\00\000", !8, !9, !9, !10, null, null} ; [ DW_TAG_compile_unit ] +!1 = !{!"0x2e\00bar\00bar\00\001\000\001\000\006\000\000\000", !8, !2, !3, null, i32 ()* @bar, null, null, null} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 0] [bar] +!2 = !{!"0x29", !8} ; [ DW_TAG_file_type ] +!3 = !{!"0x15\00\000\000\000\000\000\000", !8, !2, null, !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!4 = !{!5} +!5 = !{!"0x24\00int\000\0032\0032\000\000\005", null, !0} ; [ DW_TAG_base_type ] +!6 = !MDLocation(line: 1, column: 13, scope: !7) +!7 = !{!"0xb\001\0011\000", !8, !1} ; [ DW_TAG_lexical_block ] +!8 = !{!"b.c", !"/private/tmp"} +!9 = !{i32 0} +!10 = !{!1} +!11 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-04-Metadata.ll b/test/Linker/2011-08-04-Metadata.ll index 7bdbb33..da98f20 100644 --- a/test/Linker/2011-08-04-Metadata.ll +++ b/test/Linker/2011-08-04-Metadata.ll @@ -2,8 +2,8 @@ ; RUN: llvm-dis < %t.bc | FileCheck %s ; Test if internal global variable's debug info is merged appropriately or not. -;CHECK: metadata !{metadata !"0x34\00x\00x\00\002\001\001", metadata !{{[0-9]+}}, metadata !{{[0-9]+}}, metadata !{{[0-9]+}}, i32* @x} -;CHECK: metadata !{metadata !"0x34\00x\00x\00\001\001\001", metadata !{{[0-9]+}}, metadata !{{[0-9]+}}, metadata !{{[0-9]+}}, i32* @x1} +;CHECK: !"0x34\00x\00x\00\002\001\001", !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, i32* @x} +;CHECK: !"0x34\00x\00x\00\001\001\001", !{{[0-9]+}}, !{{[0-9]+}}, !{{[0-9]+}}, i32* @x1} target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" target triple = "x86_64-apple-macosx10.7.0" @@ -20,15 +20,15 @@ entry: !llvm.dbg.sp = !{!1} !llvm.dbg.gv = !{!5} -!0 = metadata !{metadata !"0x11\0012\00clang version 3.0 ()\001\00\000\00\000", metadata !9, metadata !4, metadata !4, metadata !10, null, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !"0x2e\00foo\00foo\00\003\000\001\000\006\000\000\000", metadata !9, metadata !2, metadata !3, null, void ()* @foo, null, null, null} ; [ DW_TAG_subprogram ] [line 3] [def] [scope 0] [foo] -!2 = metadata !{metadata !"0x29", metadata !9} ; [ DW_TAG_file_type ] -!3 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !9, metadata !2, null, metadata !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!4 = metadata !{null} -!5 = metadata !{metadata !"0x34\00x\00x\00\002\001\001", metadata !0, metadata !2, metadata !6, i32* @x} ; [ DW_TAG_variable ] -!6 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, metadata !0} ; [ DW_TAG_base_type ] -!7 = metadata !{i32 3, i32 14, metadata !8, null} -!8 = metadata !{metadata !"0xb\003\0012\000", metadata !9, metadata !1} ; [ DW_TAG_lexical_block ] -!9 = metadata !{metadata !"/tmp/one.c", metadata !"/Volumes/Lalgate/Slate/D"} -!10 = metadata !{metadata !1} -!11 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0012\00clang version 3.0 ()\001\00\000\00\000", !9, !4, !4, !10, null, null} ; [ DW_TAG_compile_unit ] +!1 = !{!"0x2e\00foo\00foo\00\003\000\001\000\006\000\000\000", !9, !2, !3, null, void ()* @foo, null, null, null} ; [ DW_TAG_subprogram ] [line 3] [def] [scope 0] [foo] +!2 = !{!"0x29", !9} ; [ DW_TAG_file_type ] +!3 = !{!"0x15\00\000\000\000\000\000\000", !9, !2, null, !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!4 = !{null} +!5 = !{!"0x34\00x\00x\00\002\001\001", !0, !2, !6, i32* @x} ; [ DW_TAG_variable ] +!6 = !{!"0x24\00int\000\0032\0032\000\000\005", null, !0} ; [ DW_TAG_base_type ] +!7 = !MDLocation(line: 3, column: 14, scope: !8) +!8 = !{!"0xb\003\0012\000", !9, !1} ; [ DW_TAG_lexical_block ] +!9 = !{!"/tmp/one.c", !"/Volumes/Lalgate/Slate/D"} +!10 = !{!1} +!11 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-04-Metadata2.ll b/test/Linker/2011-08-04-Metadata2.ll index fcf72aa..fb196d9 100644 --- a/test/Linker/2011-08-04-Metadata2.ll +++ b/test/Linker/2011-08-04-Metadata2.ll @@ -19,15 +19,15 @@ entry: !llvm.dbg.sp = !{!1} !llvm.dbg.gv = !{!5} -!0 = metadata !{metadata !"0x11\0012\00clang version 3.0 ()\001\00\000\00\000", metadata !9, metadata !4, metadata !4, metadata !10, null, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !"0x2e\00bar\00bar\00\002\000\001\000\006\000\000\000", metadata !9, metadata !2, metadata !3, null, void ()* @bar, null, null, null} ; [ DW_TAG_subprogram ] [line 2] [def] [scope 0] [bar] -!2 = metadata !{metadata !"0x29", metadata !9} ; [ DW_TAG_file_type ] -!3 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !9, metadata !2, null, metadata !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!4 = metadata !{null} -!5 = metadata !{metadata !"0x34\00x\00x\00\001\001\001", metadata !0, metadata !2, metadata !6, i32* @x} ; [ DW_TAG_variable ] -!6 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, metadata !0} ; [ DW_TAG_base_type ] -!7 = metadata !{i32 2, i32 14, metadata !8, null} -!8 = metadata !{metadata !"0xb\002\0012\000", metadata !9, metadata !1} ; [ DW_TAG_lexical_block ] -!9 = metadata !{metadata !"/tmp/two.c", metadata !"/Volumes/Lalgate/Slate/D"} -!10 = metadata !{metadata !1} -!11 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0012\00clang version 3.0 ()\001\00\000\00\000", !9, !4, !4, !10, null, null} ; [ DW_TAG_compile_unit ] +!1 = !{!"0x2e\00bar\00bar\00\002\000\001\000\006\000\000\000", !9, !2, !3, null, void ()* @bar, null, null, null} ; [ DW_TAG_subprogram ] [line 2] [def] [scope 0] [bar] +!2 = !{!"0x29", !9} ; [ DW_TAG_file_type ] +!3 = !{!"0x15\00\000\000\000\000\000\000", !9, !2, null, !4, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!4 = !{null} +!5 = !{!"0x34\00x\00x\00\001\001\001", !0, !2, !6, i32* @x} ; [ DW_TAG_variable ] +!6 = !{!"0x24\00int\000\0032\0032\000\000\005", null, !0} ; [ DW_TAG_base_type ] +!7 = !MDLocation(line: 2, column: 14, scope: !8) +!8 = !{!"0xb\002\0012\000", !9, !1} ; [ DW_TAG_lexical_block ] +!9 = !{!"/tmp/two.c", !"/Volumes/Lalgate/Slate/D"} +!10 = !{!1} +!11 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-18-unique-class-type.ll b/test/Linker/2011-08-18-unique-class-type.ll index 6fa2126..a8f1350 100644 --- a/test/Linker/2011-08-18-unique-class-type.ll +++ b/test/Linker/2011-08-18-unique-class-type.ll @@ -11,7 +11,7 @@ target triple = "x86_64-apple-macosx10.7.0" define void @_Z3fooN2N11AE() nounwind uwtable ssp { entry: %mya = alloca %"class.N1::A", align 1 - call void @llvm.dbg.declare(metadata !{%"class.N1::A"* %mya}, metadata !9, metadata !{metadata !"0x102"}), !dbg !13 + call void @llvm.dbg.declare(metadata %"class.N1::A"* %mya, metadata !9, metadata !{!"0x102"}), !dbg !13 ret void, !dbg !14 } @@ -20,21 +20,21 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!18} -!0 = metadata !{metadata !"0x11\004\00clang version 3.0 (trunk 137954)\001\00\000\00\000", metadata !16, metadata !2, metadata !2, metadata !3, metadata !2, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x2e\00foo\00foo\00_Z3fooN2N11AE\004\000\001\000\006\00256\000\000", metadata !16, metadata !6, metadata !7, null, void ()* @_Z3fooN2N11AE, null, null, null} ; [ DW_TAG_subprogram ] [line 4] [def] [scope 0] [foo] -!6 = metadata !{metadata !"0x29", metadata !16} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !16, metadata !6, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{null} -!9 = metadata !{metadata !"0x101\00mya\0016777220\000", metadata !5, metadata !6, metadata !10} ; [ DW_TAG_arg_variable ] -!10 = metadata !{metadata !"0x2\00A\003\008\008\000\000\000", metadata !17, metadata !11, null, metadata !2, null, null, null} ; [ DW_TAG_class_type ] [A] [line 3, size 8, align 8, offset 0] [def] [from ] -!11 = metadata !{metadata !"0x39\00N1\002", metadata !17, null} ; [ DW_TAG_namespace ] -!12 = metadata !{metadata !"0x29", metadata !17} ; [ DW_TAG_file_type ] -!13 = metadata !{i32 4, i32 12, metadata !5, null} -!14 = metadata !{i32 4, i32 18, metadata !15, null} -!15 = metadata !{metadata !"0xb\004\0017\000", metadata !16, metadata !5} ; [ DW_TAG_lexical_block ] -!16 = metadata !{metadata !"n1.c", metadata !"/private/tmp"} -!17 = metadata !{metadata !"./n.h", metadata !"/private/tmp"} -!18 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.0 (trunk 137954)\001\00\000\00\000", !16, !2, !2, !3, !2, null} ; [ DW_TAG_compile_unit ] +!1 = !{!2} +!2 = !{i32 0} +!3 = !{!5} +!5 = !{!"0x2e\00foo\00foo\00_Z3fooN2N11AE\004\000\001\000\006\00256\000\000", !16, !6, !7, null, void ()* @_Z3fooN2N11AE, null, null, null} ; [ DW_TAG_subprogram ] [line 4] [def] [scope 0] [foo] +!6 = !{!"0x29", !16} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", !16, !6, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{null} +!9 = !{!"0x101\00mya\0016777220\000", !5, !6, !10} ; [ DW_TAG_arg_variable ] +!10 = !{!"0x2\00A\003\008\008\000\000\000", !17, !11, null, !2, null, null, null} ; [ DW_TAG_class_type ] [A] [line 3, size 8, align 8, offset 0] [def] [from ] +!11 = !{!"0x39\00N1\002", !17, null} ; [ DW_TAG_namespace ] +!12 = !{!"0x29", !17} ; [ DW_TAG_file_type ] +!13 = !MDLocation(line: 4, column: 12, scope: !5) +!14 = !MDLocation(line: 4, column: 18, scope: !15) +!15 = !{!"0xb\004\0017\000", !16, !5} ; [ DW_TAG_lexical_block ] +!16 = !{!"n1.c", !"/private/tmp"} +!17 = !{!"./n.h", !"/private/tmp"} +!18 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-18-unique-class-type2.ll b/test/Linker/2011-08-18-unique-class-type2.ll index 97fdcd0..dd0df58 100644 --- a/test/Linker/2011-08-18-unique-class-type2.ll +++ b/test/Linker/2011-08-18-unique-class-type2.ll @@ -9,7 +9,7 @@ target triple = "x86_64-apple-macosx10.7.0" define void @_Z3barN2N11AE() nounwind uwtable ssp { entry: %youra = alloca %"class.N1::A", align 1 - call void @llvm.dbg.declare(metadata !{%"class.N1::A"* %youra}, metadata !9, metadata !{metadata !"0x102"}), !dbg !13 + call void @llvm.dbg.declare(metadata %"class.N1::A"* %youra, metadata !9, metadata !{!"0x102"}), !dbg !13 ret void, !dbg !14 } @@ -18,21 +18,21 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!18} -!0 = metadata !{metadata !"0x11\004\00clang version 3.0 (trunk 137954)\001\00\000\00\000", metadata !16, metadata !2, metadata !2, metadata !3, metadata !2, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x2e\00bar\00bar\00_Z3barN2N11AE\004\000\001\000\006\00256\000\000", i32 0, metadata !6, metadata !7, null, void ()* @_Z3barN2N11AE, null, null, null} ; [ DW_TAG_subprogram ] [line 4] [def] [scope 0] [bar] -!6 = metadata !{metadata !"0x29", metadata !16} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !16, metadata !6, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{null} -!9 = metadata !{metadata !"0x101\00youra\0016777220\000", metadata !5, metadata !6, metadata !10} ; [ DW_TAG_arg_variable ] -!10 = metadata !{metadata !"0x2\00A\003\008\008\000\000\000", metadata !17, metadata !11, null, metadata !2, null, null, null} ; [ DW_TAG_class_type ] [A] [line 3, size 8, align 8, offset 0] [def] [from ] -!11 = metadata !{metadata !"0x39\00N1\002", metadata !17, null} ; [ DW_TAG_namespace ] -!12 = metadata !{metadata !"0x29", metadata !17} ; [ DW_TAG_file_type ] -!13 = metadata !{i32 4, i32 12, metadata !5, null} -!14 = metadata !{i32 4, i32 20, metadata !15, null} -!15 = metadata !{metadata !"0xb\004\0019\000", metadata !16, metadata !5} ; [ DW_TAG_lexical_block ] -!16 = metadata !{metadata !"n2.c", metadata !"/private/tmp"} -!17 = metadata !{metadata !"./n.h", metadata !"/private/tmp"} -!18 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.0 (trunk 137954)\001\00\000\00\000", !16, !2, !2, !3, !2, null} ; [ DW_TAG_compile_unit ] +!1 = !{!2} +!2 = !{i32 0} +!3 = !{!5} +!5 = !{!"0x2e\00bar\00bar\00_Z3barN2N11AE\004\000\001\000\006\00256\000\000", i32 0, !6, !7, null, void ()* @_Z3barN2N11AE, null, null, null} ; [ DW_TAG_subprogram ] [line 4] [def] [scope 0] [bar] +!6 = !{!"0x29", !16} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", !16, !6, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{null} +!9 = !{!"0x101\00youra\0016777220\000", !5, !6, !10} ; [ DW_TAG_arg_variable ] +!10 = !{!"0x2\00A\003\008\008\000\000\000", !17, !11, null, !2, null, null, null} ; [ DW_TAG_class_type ] [A] [line 3, size 8, align 8, offset 0] [def] [from ] +!11 = !{!"0x39\00N1\002", !17, null} ; [ DW_TAG_namespace ] +!12 = !{!"0x29", !17} ; [ DW_TAG_file_type ] +!13 = !MDLocation(line: 4, column: 12, scope: !5) +!14 = !MDLocation(line: 4, column: 20, scope: !15) +!15 = !{!"0xb\004\0019\000", !16, !5} ; [ DW_TAG_lexical_block ] +!16 = !{!"n2.c", !"/private/tmp"} +!17 = !{!"./n.h", !"/private/tmp"} +!18 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-18-unique-debug-type.ll b/test/Linker/2011-08-18-unique-debug-type.ll index e9dcf87..c1b3a1d 100644 --- a/test/Linker/2011-08-18-unique-debug-type.ll +++ b/test/Linker/2011-08-18-unique-debug-type.ll @@ -12,16 +12,16 @@ entry: !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!13} -!0 = metadata !{metadata !"0x11\0012\00clang version 3.0 (trunk 137954)\001\00\000\00\000", metadata !12, metadata !2, metadata !2, metadata !3, metadata !2, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x2e\00foo\00foo\00\001\000\001\000\006\000\000\000", metadata !12, metadata !6, metadata !7, null, i32 ()* @foo, null, null, null} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 0] [foo] -!6 = metadata !{metadata !"0x29", metadata !12} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !12, metadata !6, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{metadata !9} -!9 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] -!10 = metadata !{i32 1, i32 13, metadata !11, null} -!11 = metadata !{metadata !"0xb\001\0011\000", metadata !12, metadata !5} ; [ DW_TAG_lexical_block ] -!12 = metadata !{metadata !"one.c", metadata !"/private/tmp"} -!13 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0012\00clang version 3.0 (trunk 137954)\001\00\000\00\000", !12, !2, !2, !3, !2, null} ; [ DW_TAG_compile_unit ] +!1 = !{!2} +!2 = !{i32 0} +!3 = !{!5} +!5 = !{!"0x2e\00foo\00foo\00\001\000\001\000\006\000\000\000", !12, !6, !7, null, i32 ()* @foo, null, null, null} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 0] [foo] +!6 = !{!"0x29", !12} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", !12, !6, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{!9} +!9 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] +!10 = !MDLocation(line: 1, column: 13, scope: !11) +!11 = !{!"0xb\001\0011\000", !12, !5} ; [ DW_TAG_lexical_block ] +!12 = !{!"one.c", !"/private/tmp"} +!13 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/2011-08-18-unique-debug-type2.ll b/test/Linker/2011-08-18-unique-debug-type2.ll index 7bbed9f..49c0a5c 100644 --- a/test/Linker/2011-08-18-unique-debug-type2.ll +++ b/test/Linker/2011-08-18-unique-debug-type2.ll @@ -12,16 +12,16 @@ entry: !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!13} -!0 = metadata !{metadata !"0x11\0012\00clang version 3.0 (trunk 137954)\001\00\000\00\000", metadata !12, metadata !2, metadata !2, metadata !3, metadata !2, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x2e\00bar\00bar\00\001\000\001\000\006\000\000\000", metadata !12, metadata !6, metadata !7, null, i32 ()* @bar, null, null, null} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 0] [bar] -!6 = metadata !{metadata !"0x29", metadata !12} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", metadata !12, metadata !6, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{metadata !9} -!9 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] -!10 = metadata !{i32 1, i32 13, metadata !11, null} -!11 = metadata !{metadata !"0xb\001\0011\000", metadata !12, metadata !5} ; [ DW_TAG_lexical_block ] -!12 = metadata !{metadata !"two.c", metadata !"/private/tmp"} -!13 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\0012\00clang version 3.0 (trunk 137954)\001\00\000\00\000", !12, !2, !2, !3, !2, null} ; [ DW_TAG_compile_unit ] +!1 = !{!2} +!2 = !{i32 0} +!3 = !{!5} +!5 = !{!"0x2e\00bar\00bar\00\001\000\001\000\006\000\000\000", !12, !6, !7, null, i32 ()* @bar, null, null, null} ; [ DW_TAG_subprogram ] [line 1] [def] [scope 0] [bar] +!6 = !{!"0x29", !12} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", !12, !6, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{!9} +!9 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] +!10 = !MDLocation(line: 1, column: 13, scope: !11) +!11 = !{!"0xb\001\0011\000", !12, !5} ; [ DW_TAG_lexical_block ] +!12 = !{!"two.c", !"/private/tmp"} +!13 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/DbgDeclare.ll b/test/Linker/DbgDeclare.ll index 3d39b30..de5ac9e 100644 --- a/test/Linker/DbgDeclare.ll +++ b/test/Linker/DbgDeclare.ll @@ -4,12 +4,12 @@ ; rdar://13089880 ; CHECK: define i32 @main(i32 %argc, i8** %argv) -; CHECK: call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !{{[0-9]+}}, metadata {{.*}}) -; CHECK: call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !{{[0-9]+}}, metadata {{.*}}) +; CHECK: call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !{{[0-9]+}}, metadata {{.*}}) +; CHECK: call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !{{[0-9]+}}, metadata {{.*}}) ; CHECK: define void @test(i32 %argc, i8** %argv) -; CHECK: call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !{{[0-9]+}}, metadata {{.*}}) -; CHECK: call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !{{[0-9]+}}, metadata {{.*}}) -; CHECK: call void @llvm.dbg.declare(metadata !{i32* %i}, metadata !{{[0-9]+}}, metadata {{.*}}) +; CHECK: call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !{{[0-9]+}}, metadata {{.*}}) +; CHECK: call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !{{[0-9]+}}, metadata {{.*}}) +; CHECK: call void @llvm.dbg.declare(metadata i32* %i, metadata !{{[0-9]+}}, metadata {{.*}}) target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target triple = "x86_64-apple-macosx10.9.0" @@ -21,9 +21,9 @@ entry: %argv.addr = alloca i8**, align 8 store i32 0, i32* %retval store i32 %argc, i32* %argc.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !14, metadata !{metadata !"0x102"}), !dbg !15 + call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !14, metadata !{!"0x102"}), !dbg !15 store i8** %argv, i8*** %argv.addr, align 8 - call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !16, metadata !{metadata !"0x102"}), !dbg !15 + call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !16, metadata !{!"0x102"}), !dbg !15 %0 = load i32* %argc.addr, align 4, !dbg !17 %1 = load i8*** %argv.addr, align 8, !dbg !17 call void @test(i32 %0, i8** %1), !dbg !17 @@ -37,24 +37,24 @@ declare void @test(i32, i8**) !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!21} -!0 = metadata !{metadata !"0x11\004\00clang version 3.3 (trunk 173515)\001\00\000\00\000", metadata !20, metadata !2, metadata !2, metadata !3, metadata !2, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x2e\00main\00main\00\003\000\001\000\006\00256\000\004", metadata !20, null, metadata !7, null, i32 (i32, i8**)* @main, null, null, metadata !1} ; [ DW_TAG_subprogram ] -!6 = metadata !{metadata !"0x29", metadata !20} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{metadata !9, metadata !9, metadata !10} -!9 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] -!10 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] -!11 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !12} ; [ DW_TAG_pointer_type ] -!12 = metadata !{metadata !"0x26\00\000\000\000\000\000", null, null, metadata !13} ; [ DW_TAG_const_type ] -!13 = metadata !{metadata !"0x24\00char\000\008\008\000\000\006", null, null} ; [ DW_TAG_base_type ] -!14 = metadata !{metadata !"0x101\00argc\0016777219\000", metadata !5, metadata !6, metadata !9} ; [ DW_TAG_arg_variable ] -!15 = metadata !{i32 3, i32 0, metadata !5, null} -!16 = metadata !{metadata !"0x101\00argv\0033554435\000", metadata !5, metadata !6, metadata !10} ; [ DW_TAG_arg_variable ] -!17 = metadata !{i32 5, i32 0, metadata !18, null} -!18 = metadata !{metadata !"0xb\004\000\000", metadata !20, metadata !5} ; [ DW_TAG_lexical_block ] -!19 = metadata !{i32 6, i32 0, metadata !18, null} -!20 = metadata !{metadata !"main.cpp", metadata !"/private/tmp"} -!21 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.3 (trunk 173515)\001\00\000\00\000", !20, !2, !2, !3, !2, null} ; [ DW_TAG_compile_unit ] +!1 = !{!2} +!2 = !{i32 0} +!3 = !{!5} +!5 = !{!"0x2e\00main\00main\00\003\000\001\000\006\00256\000\004", !20, null, !7, null, i32 (i32, i8**)* @main, null, null, !1} ; [ DW_TAG_subprogram ] +!6 = !{!"0x29", !20} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{!9, !9, !10} +!9 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] +!10 = !{!"0xf\00\000\0064\0064\000\000", null, null, !11} ; [ DW_TAG_pointer_type ] +!11 = !{!"0xf\00\000\0064\0064\000\000", null, null, !12} ; [ DW_TAG_pointer_type ] +!12 = !{!"0x26\00\000\000\000\000\000", null, null, !13} ; [ DW_TAG_const_type ] +!13 = !{!"0x24\00char\000\008\008\000\000\006", null, null} ; [ DW_TAG_base_type ] +!14 = !{!"0x101\00argc\0016777219\000", !5, !6, !9} ; [ DW_TAG_arg_variable ] +!15 = !MDLocation(line: 3, scope: !5) +!16 = !{!"0x101\00argv\0033554435\000", !5, !6, !10} ; [ DW_TAG_arg_variable ] +!17 = !MDLocation(line: 5, scope: !18) +!18 = !{!"0xb\004\000\000", !20, !5} ; [ DW_TAG_lexical_block ] +!19 = !MDLocation(line: 6, scope: !18) +!20 = !{!"main.cpp", !"/private/tmp"} +!21 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/DbgDeclare2.ll b/test/Linker/DbgDeclare2.ll index d27ce53..2f01b0e 100644 --- a/test/Linker/DbgDeclare2.ll +++ b/test/Linker/DbgDeclare2.ll @@ -11,10 +11,10 @@ entry: %argv.addr = alloca i8**, align 8 %i = alloca i32, align 4 store i32 %argc, i32* %argc.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !14, metadata !{metadata !"0x102"}), !dbg !15 + call void @llvm.dbg.declare(metadata i32* %argc.addr, metadata !14, metadata !{!"0x102"}), !dbg !15 store i8** %argv, i8*** %argv.addr, align 8 - call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !16, metadata !{metadata !"0x102"}), !dbg !15 - call void @llvm.dbg.declare(metadata !{i32* %i}, metadata !17, metadata !{metadata !"0x102"}), !dbg !20 + call void @llvm.dbg.declare(metadata i8*** %argv.addr, metadata !16, metadata !{!"0x102"}), !dbg !15 + call void @llvm.dbg.declare(metadata i32* %i, metadata !17, metadata !{!"0x102"}), !dbg !20 store i32 0, i32* %i, align 4, !dbg !20 br label %for.cond, !dbg !20 @@ -50,30 +50,30 @@ declare i32 @puts(i8*) !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!27} -!0 = metadata !{metadata !"0x11\004\00clang version 3.3 (trunk 173515)\001\00\000\00\000", metadata !25, metadata !2, metadata !2, metadata !3, metadata !2, null} ; [ DW_TAG_compile_unit ] -!1 = metadata !{metadata !2} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !5} -!5 = metadata !{metadata !"0x2e\00print_args\00print_args\00test\004\000\001\000\006\00256\000\005", metadata !26, null, metadata !7, null, void (i32, i8**)* @test, null, null, metadata !1} ; [ DW_TAG_subprogram ] -!6 = metadata !{metadata !"0x29", metadata !26} ; [ DW_TAG_file_type ] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{null, metadata !9, metadata !10} -!9 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] -!10 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] -!11 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !12} ; [ DW_TAG_pointer_type ] -!12 = metadata !{metadata !"0x26\00\000\000\000\000\000", null, null, metadata !13} ; [ DW_TAG_const_type ] -!13 = metadata !{metadata !"0x24\00char\000\008\008\000\000\006", null, null} ; [ DW_TAG_base_type ] -!14 = metadata !{metadata !"0x101\00argc\0016777220\000", metadata !5, metadata !6, metadata !9} ; [ DW_TAG_arg_variable ] -!15 = metadata !{i32 4, i32 0, metadata !5, null} -!16 = metadata !{metadata !"0x101\00argv\0033554436\000", metadata !5, metadata !6, metadata !10} ; [ DW_TAG_arg_variable ] -!17 = metadata !{metadata !"0x100\00i\006\000", metadata !18, metadata !6, metadata !9} ; [ DW_TAG_auto_variable ] -!18 = metadata !{metadata !"0xb\006\000\001", metadata !26, metadata !19} ; [ DW_TAG_lexical_block ] -!19 = metadata !{metadata !"0xb\005\000\000", metadata !26, metadata !5} ; [ DW_TAG_lexical_block ] -!20 = metadata !{i32 6, i32 0, metadata !18, null} -!21 = metadata !{i32 8, i32 0, metadata !22, null} -!22 = metadata !{metadata !"0xb\007\000\002", metadata !26, metadata !18} ; [ DW_TAG_lexical_block ] -!23 = metadata !{i32 9, i32 0, metadata !22, null} -!24 = metadata !{i32 10, i32 0, metadata !19, null} -!25 = metadata !{metadata !"main.cpp", metadata !"/private/tmp"} -!26 = metadata !{metadata !"test.cpp", metadata !"/private/tmp"} -!27 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.3 (trunk 173515)\001\00\000\00\000", !25, !2, !2, !3, !2, null} ; [ DW_TAG_compile_unit ] +!1 = !{!2} +!2 = !{i32 0} +!3 = !{!5} +!5 = !{!"0x2e\00print_args\00print_args\00test\004\000\001\000\006\00256\000\005", !26, null, !7, null, void (i32, i8**)* @test, null, null, !1} ; [ DW_TAG_subprogram ] +!6 = !{!"0x29", !26} ; [ DW_TAG_file_type ] +!7 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{null, !9, !10} +!9 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] +!10 = !{!"0xf\00\000\0064\0064\000\000", null, null, !11} ; [ DW_TAG_pointer_type ] +!11 = !{!"0xf\00\000\0064\0064\000\000", null, null, !12} ; [ DW_TAG_pointer_type ] +!12 = !{!"0x26\00\000\000\000\000\000", null, null, !13} ; [ DW_TAG_const_type ] +!13 = !{!"0x24\00char\000\008\008\000\000\006", null, null} ; [ DW_TAG_base_type ] +!14 = !{!"0x101\00argc\0016777220\000", !5, !6, !9} ; [ DW_TAG_arg_variable ] +!15 = !MDLocation(line: 4, scope: !5) +!16 = !{!"0x101\00argv\0033554436\000", !5, !6, !10} ; [ DW_TAG_arg_variable ] +!17 = !{!"0x100\00i\006\000", !18, !6, !9} ; [ DW_TAG_auto_variable ] +!18 = !{!"0xb\006\000\001", !26, !19} ; [ DW_TAG_lexical_block ] +!19 = !{!"0xb\005\000\000", !26, !5} ; [ DW_TAG_lexical_block ] +!20 = !MDLocation(line: 6, scope: !18) +!21 = !MDLocation(line: 8, scope: !22) +!22 = !{!"0xb\007\000\002", !26, !18} ; [ DW_TAG_lexical_block ] +!23 = !MDLocation(line: 9, scope: !22) +!24 = !MDLocation(line: 10, scope: !19) +!25 = !{!"main.cpp", !"/private/tmp"} +!26 = !{!"test.cpp", !"/private/tmp"} +!27 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/Inputs/alignment.ll b/test/Linker/Inputs/alignment.ll new file mode 100644 index 0000000..337cb8e --- /dev/null +++ b/test/Linker/Inputs/alignment.ll @@ -0,0 +1,12 @@ +@A = global i32 7, align 8 +@B = global i32 7, align 4 + +define void @C() align 8 { + ret void +} + +define void @D() align 4 { + ret void +} + +@E = common global i32 0, align 8 diff --git a/test/Linker/Inputs/apple-version/1.ll b/test/Linker/Inputs/apple-version/1.ll new file mode 100644 index 0000000..5cafa5e --- /dev/null +++ b/test/Linker/Inputs/apple-version/1.ll @@ -0,0 +1 @@ +target triple = "x86_64-apple-macosx10.10.0" diff --git a/test/Linker/Inputs/apple-version/2.ll b/test/Linker/Inputs/apple-version/2.ll new file mode 100644 index 0000000..b63ea1f --- /dev/null +++ b/test/Linker/Inputs/apple-version/2.ll @@ -0,0 +1 @@ +target triple = "x86_64-apple-macosx10.8.0" diff --git a/test/Linker/Inputs/apple-version/3.ll b/test/Linker/Inputs/apple-version/3.ll new file mode 100644 index 0000000..68e58ca --- /dev/null +++ b/test/Linker/Inputs/apple-version/3.ll @@ -0,0 +1 @@ +target triple = "i386-apple-macosx10.9.0" diff --git a/test/Linker/Inputs/apple-version/4.ll b/test/Linker/Inputs/apple-version/4.ll new file mode 100644 index 0000000..467a634 --- /dev/null +++ b/test/Linker/Inputs/apple-version/4.ll @@ -0,0 +1 @@ +target triple = "x86_64h-apple-macosx10.9.0" diff --git a/test/Linker/Inputs/comdat.ll b/test/Linker/Inputs/comdat.ll index fdcca49..74a805c 100644 --- a/test/Linker/Inputs/comdat.ll +++ b/test/Linker/Inputs/comdat.ll @@ -2,19 +2,19 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" target triple = "i686-pc-windows-msvc" $foo = comdat largest -@foo = global i64 43, comdat $foo +@foo = global i64 43, comdat($foo) -define i32 @bar() comdat $foo { +define i32 @bar() comdat($foo) { ret i32 43 } $qux = comdat largest -@qux = global i32 13, comdat $qux -@in_unselected_group = global i32 13, comdat $qux +@qux = global i32 13, comdat($qux) +@in_unselected_group = global i32 13, comdat($qux) -define i32 @baz() comdat $qux { +define i32 @baz() comdat($qux) { ret i32 13 } $any = comdat any -@any = global i64 7, comdat $any +@any = global i64 7, comdat($any) diff --git a/test/Linker/Inputs/comdat2.ll b/test/Linker/Inputs/comdat2.ll index 9e18304..ed2af62 100644 --- a/test/Linker/Inputs/comdat2.ll +++ b/test/Linker/Inputs/comdat2.ll @@ -1,2 +1,2 @@ $foo = comdat largest -@foo = global i64 43, comdat $foo +@foo = global i64 43, comdat($foo) diff --git a/test/Linker/Inputs/comdat3.ll b/test/Linker/Inputs/comdat3.ll index 06f08b9..a1b730f 100644 --- a/test/Linker/Inputs/comdat3.ll +++ b/test/Linker/Inputs/comdat3.ll @@ -1,2 +1,2 @@ $foo = comdat noduplicates -@foo = global i64 43, comdat $foo +@foo = global i64 43, comdat($foo) diff --git a/test/Linker/Inputs/comdat4.ll b/test/Linker/Inputs/comdat4.ll index bbfe3f7..5b4b812 100644 --- a/test/Linker/Inputs/comdat4.ll +++ b/test/Linker/Inputs/comdat4.ll @@ -2,4 +2,4 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" target triple = "i686-pc-windows-msvc" $foo = comdat samesize -@foo = global i64 42, comdat $foo +@foo = global i64 42, comdat($foo) diff --git a/test/Linker/Inputs/comdat5.ll b/test/Linker/Inputs/comdat5.ll index 800af18..98c42b7 100644 --- a/test/Linker/Inputs/comdat5.ll +++ b/test/Linker/Inputs/comdat5.ll @@ -1,15 +1,9 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" -target triple = "i686-pc-windows-msvc" -%MSRTTICompleteObjectLocator = type { i32, i32, i32, i8*, %MSRTTIClassHierarchyDescriptor* } -%MSRTTIClassHierarchyDescriptor = type { i32, i32, i32, %MSRTTIBaseClassDescriptor** } -%MSRTTIBaseClassDescriptor = type { i8*, i32, i32, i32, i32, i32, %MSRTTIClassHierarchyDescriptor* } -%struct.S = type { i32 (...)** } +$foo = comdat largest -$"\01??_7S@@6B@" = comdat largest +@zed = external constant i8 +@some_name = private unnamed_addr constant [2 x i8*] [i8* @zed, i8* bitcast (void ()* @bar to i8*)], comdat($foo) +@foo = alias getelementptr([2 x i8*]* @some_name, i32 0, i32 1) -@"\01??_R4S@@6B@" = external constant %MSRTTICompleteObjectLocator -@some_name = private unnamed_addr constant [2 x i8*] [i8* bitcast (%MSRTTICompleteObjectLocator* @"\01??_R4S@@6B@" to i8*), i8* bitcast (void (%struct.S*, i32)* @"\01??_GS@@UAEPAXI@Z" to i8*)], comdat $"\01??_7S@@6B@" -@"\01??_7S@@6B@" = alias getelementptr([2 x i8*]* @some_name, i32 0, i32 1) - -declare x86_thiscallcc void @"\01??_GS@@UAEPAXI@Z"(%struct.S*, i32) unnamed_addr +declare void @bar() unnamed_addr diff --git a/test/Linker/Inputs/comdat8.ll b/test/Linker/Inputs/comdat8.ll index eaa9625..a2833b0 100644 --- a/test/Linker/Inputs/comdat8.ll +++ b/test/Linker/Inputs/comdat8.ll @@ -1,4 +1,4 @@ $c1 = comdat largest -@some_name = private unnamed_addr constant i32 42, comdat $c1 +@some_name = private unnamed_addr constant i32 42, comdat($c1) @c1 = alias i32* @some_name diff --git a/test/Linker/Inputs/comdat9.ll b/test/Linker/Inputs/comdat9.ll deleted file mode 100644 index 679dbde..0000000 --- a/test/Linker/Inputs/comdat9.ll +++ /dev/null @@ -1,5 +0,0 @@ -$c = comdat any -@a = alias void ()* @f -define internal void @f() comdat $c { - ret void -} diff --git a/test/Linker/Inputs/distinct.ll b/test/Linker/Inputs/distinct.ll new file mode 100644 index 0000000..07ae224 --- /dev/null +++ b/test/Linker/Inputs/distinct.ll @@ -0,0 +1,13 @@ +@global = linkonce global i32 0 + +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8} + +!0 = !{} +!1 = !{!0} +!2 = !{i32* @global} +!3 = distinct !{} +!4 = distinct !{!0} +!5 = distinct !{i32* @global} +!6 = !{!3} +!7 = !{!4} +!8 = !{!5} diff --git a/test/Linker/Inputs/ident.a.ll b/test/Linker/Inputs/ident.a.ll index ebda940..3c3fb19 100644 --- a/test/Linker/Inputs/ident.a.ll +++ b/test/Linker/Inputs/ident.a.ll @@ -1,3 +1,3 @@ !llvm.ident = !{!0, !1} -!0 = metadata !{metadata !"Compiler V1"} -!1 = metadata !{metadata !"Compiler V2"} +!0 = !{!"Compiler V1"} +!1 = !{!"Compiler V2"} diff --git a/test/Linker/Inputs/ident.b.ll b/test/Linker/Inputs/ident.b.ll index 21ee1d8..d9daf85 100644 --- a/test/Linker/Inputs/ident.b.ll +++ b/test/Linker/Inputs/ident.b.ll @@ -1,2 +1,2 @@ !llvm.ident = !{!0} -!0 = metadata !{metadata !"Compiler V3"} +!0 = !{!"Compiler V3"} diff --git a/test/Linker/Inputs/mdlocation.ll b/test/Linker/Inputs/mdlocation.ll new file mode 100644 index 0000000..f85c1dc --- /dev/null +++ b/test/Linker/Inputs/mdlocation.ll @@ -0,0 +1,13 @@ +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9} + +!0 = !{} ; Use this as a scope. +!1 = !MDLocation(line: 3, column: 7, scope: !0) +!2 = !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !1) +!3 = !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !2) +!4 = distinct !{} ; Test actual remapping. +!5 = !MDLocation(line: 3, column: 7, scope: !4) +!6 = !MDLocation(line: 3, column: 7, scope: !4, inlinedAt: !5) +!7 = !MDLocation(line: 3, column: 7, scope: !4, inlinedAt: !6) +; Test distinct nodes. +!8 = distinct !MDLocation(line: 3, column: 7, scope: !0) +!9 = distinct !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !8) diff --git a/test/Linker/Inputs/module-flags-dont-change-others.ll b/test/Linker/Inputs/module-flags-dont-change-others.ll new file mode 100644 index 0000000..61d57e5 --- /dev/null +++ b/test/Linker/Inputs/module-flags-dont-change-others.ll @@ -0,0 +1,8 @@ +!llvm.module.flags = !{!3, !4, !5} + +!0 = !{} +!1 = !{!0} +!2 = !{!0, !1} +!3 = !{i32 4, !"foo", i32 37} ; Override the "foo" value. +!4 = !{i32 5, !"bar", !1} +!5 = !{i32 6, !"baz", !2} diff --git a/test/Linker/Inputs/module-flags-pic-2-b.ll b/test/Linker/Inputs/module-flags-pic-2-b.ll index 228e04a..0d78caf 100644 --- a/test/Linker/Inputs/module-flags-pic-2-b.ll +++ b/test/Linker/Inputs/module-flags-pic-2-b.ll @@ -1,3 +1,3 @@ -!0 = metadata !{ i32 1, metadata !"PIC Level", i32 2 } +!0 = !{ i32 1, !"PIC Level", i32 2 } !llvm.module.flags = !{!0} diff --git a/test/Linker/Inputs/opaque.ll b/test/Linker/Inputs/opaque.ll new file mode 100644 index 0000000..2b0d7d3 --- /dev/null +++ b/test/Linker/Inputs/opaque.ll @@ -0,0 +1,13 @@ +%A = type { } +%B = type { %D, %E, %B* } + +%D = type { %E } +%E = type opaque + +@g2 = external global %A +@g3 = external global %B + +define void @f1() { + getelementptr %A* null, i32 0 + ret void +} diff --git a/test/Linker/Inputs/pr21374.ll b/test/Linker/Inputs/pr21374.ll new file mode 100644 index 0000000..fcddeaf --- /dev/null +++ b/test/Linker/Inputs/pr21374.ll @@ -0,0 +1,4 @@ +%foo = type { i8* } +define void @g(%foo* %x) { + ret void +} diff --git a/test/Linker/Inputs/replaced-function-matches-first-subprogram.ll b/test/Linker/Inputs/replaced-function-matches-first-subprogram.ll new file mode 100644 index 0000000..a5de89f --- /dev/null +++ b/test/Linker/Inputs/replaced-function-matches-first-subprogram.ll @@ -0,0 +1,27 @@ +%struct.Class = type { i8 } + +define weak_odr i32 @_ZN5ClassIiE3fooEv(%struct.Class* %this) align 2 { +entry: + %this.addr = alloca %struct.Class*, align 8 + store %struct.Class* %this, %struct.Class** %this.addr, align 8 + %this1 = load %struct.Class** %this.addr + ret i32 0, !dbg !12 +} + +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!8, !9, !10} +!llvm.ident = !{!11} + +!0 = !{!"0x11\004\00clang version 3.6.0 (trunk 224193) (llvm/trunk 224197)\000\00\000\00\002", !1, !2, !2, !3, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d2/t2.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"t2.cpp", !"/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d2"} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x2e\00foo\00foo\00\002\000\001\000\000\00256\000\002", !5, !6, !7, null, i32 (%struct.Class*)* @_ZN5ClassIiE3fooEv, null, null, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [foo] +!5 = !{!"../t.h", !"/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d2"} +!6 = !{!"0x29", !5} ; [ DW_TAG_file_type ] [/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d2/../t.h] +!7 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !2, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{i32 2, !"Dwarf Version", i32 2} +!9 = !{i32 2, !"Debug Info Version", i32 2} +!10 = !{i32 1, !"PIC Level", i32 2} +!11 = !{!"clang version 3.6.0 (trunk 224193) (llvm/trunk 224197)"} +!12 = !MDLocation(line: 2, column: 15, scope: !4) diff --git a/test/Linker/Inputs/targettriple-a.ll b/test/Linker/Inputs/targettriple-a.ll index 296d2df..b8c7901 100644 --- a/test/Linker/Inputs/targettriple-a.ll +++ b/test/Linker/Inputs/targettriple-a.ll @@ -1 +1 @@ -target triple = "e" +target triple = "x86_64-unknown-linux-gnu" diff --git a/test/Linker/Inputs/targettriple-b.ll b/test/Linker/Inputs/targettriple-b.ll index cca872e..0122b4a 100644 --- a/test/Linker/Inputs/targettriple-b.ll +++ b/test/Linker/Inputs/targettriple-b.ll @@ -1 +1 @@ -target triple = "E" +target triple = "i386-unknown-linux-gnu" diff --git a/test/Linker/Inputs/targettriple-c.ll b/test/Linker/Inputs/targettriple-c.ll new file mode 100644 index 0000000..e669a4c --- /dev/null +++ b/test/Linker/Inputs/targettriple-c.ll @@ -0,0 +1 @@ +target triple = "x86_64h-unknown-linux-gnu" diff --git a/test/Linker/testlink2.ll b/test/Linker/Inputs/testlink.ll index ff8e529..89f02ba 100644 --- a/test/Linker/testlink2.ll +++ b/test/Linker/Inputs/testlink.ll @@ -1,7 +1,3 @@ -; This file is used by testlink1.ll, so it doesn't actually do anything itself -; -; RUN: true - %intlist = type { %intlist*, i32 } @@ -21,6 +17,8 @@ ;; Intern in both testlink[12].ll @Intern1 = internal constant i32 52 +@Use2Intern1 = global i32* @Intern1 + ;; Intern in one but not in other @Intern2 = constant i32 12345 diff --git a/test/Linker/Inputs/type-unique-alias.ll b/test/Linker/Inputs/type-unique-alias.ll new file mode 100644 index 0000000..3ee162c --- /dev/null +++ b/test/Linker/Inputs/type-unique-alias.ll @@ -0,0 +1,4 @@ +%u = type { i8 } + +@g2 = global %u zeroinitializer +@a = weak alias %u* @g2 diff --git a/test/Linker/Inputs/type-unique-dst-types2.ll b/test/Linker/Inputs/type-unique-dst-types2.ll new file mode 100644 index 0000000..b565c6d --- /dev/null +++ b/test/Linker/Inputs/type-unique-dst-types2.ll @@ -0,0 +1,3 @@ +%A.11 = type { %B } +%B = type { i8 } +@g1 = external global %A.11 diff --git a/test/Linker/Inputs/type-unique-dst-types3.ll b/test/Linker/Inputs/type-unique-dst-types3.ll new file mode 100644 index 0000000..c5794ad --- /dev/null +++ b/test/Linker/Inputs/type-unique-dst-types3.ll @@ -0,0 +1,2 @@ +%A.11 = type opaque +@g2 = external global %A.11 diff --git a/test/Linker/Inputs/type-unique-inheritance-a.ll b/test/Linker/Inputs/type-unique-inheritance-a.ll index 31df5b2..c503919 100644 --- a/test/Linker/Inputs/type-unique-inheritance-a.ll +++ b/test/Linker/Inputs/type-unique-inheritance-a.ll @@ -52,8 +52,8 @@ entry: %a.addr = alloca i32, align 4 %t = alloca %class.A, align 4 store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %a.addr}, metadata !20, metadata !{metadata !"0x102"}), !dbg !21 - call void @llvm.dbg.declare(metadata !{%class.A* %t}, metadata !22, metadata !{metadata !"0x102"}), !dbg !23 + call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !20, metadata !{!"0x102"}), !dbg !21 + call void @llvm.dbg.declare(metadata %class.A* %t, metadata !22, metadata !{!"0x102"}), !dbg !23 ret void, !dbg !24 } @@ -66,29 +66,29 @@ attributes #1 = { nounwind readnone } !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!19, !25} -!0 = metadata !{metadata !"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git f54e02f969d02d640103db73efc30c45439fceab) (http://llvm.org/git/llvm.git 284353b55896cb1babfaa7add7c0a363245342d2)\000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !14, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/inher/foo.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"foo.cpp", metadata !"/Users/mren/c_testing/type_unique_air/inher"} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !4, metadata !8} -!4 = metadata !{metadata !"0x2\00A\003\0064\0032\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 3, size 64, align 32, offset 0] [def] [from ] -!5 = metadata !{metadata !"./a.hpp", metadata !"/Users/mren/c_testing/type_unique_air/inher"} -!6 = metadata !{metadata !7, metadata !13} -!7 = metadata !{metadata !"0x1c\00\000\000\000\000\001", null, metadata !"_ZTS1A", metadata !8} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 0] [private] [from Base] -!8 = metadata !{metadata !"0x2\00Base\003\0032\0032\000\000\000", metadata !9, null, null, metadata !10, null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_class_type ] [Base] [line 3, size 32, align 32, offset 0] [def] [from ] -!9 = metadata !{metadata !"./b.hpp", metadata !"/Users/mren/c_testing/type_unique_air/inher"} -!10 = metadata !{metadata !11} -!11 = metadata !{metadata !"0xd\00b\004\0032\0032\000\001", metadata !9, metadata !"_ZTS4Base", metadata !12} ; [ DW_TAG_member ] [b] [line 4, size 32, align 32, offset 0] [private] [from int] -!12 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!13 = metadata !{metadata !"0xd\00x\004\0032\0032\0032\001", metadata !5, metadata !"_ZTS1A", metadata !12} ; [ DW_TAG_member ] [x] [line 4, size 32, align 32, offset 32] [private] [from int] -!14 = metadata !{metadata !15} -!15 = metadata !{metadata !"0x2e\00f\00f\00_Z1fi\005\000\001\000\006\00256\000\005", metadata !1, metadata !16, metadata !17, null, void (i32)* @_Z1fi, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 5] [def] [f] -!16 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/inher/foo.cpp] -!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!18 = metadata !{null, metadata !12} -!19 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!20 = metadata !{metadata !"0x101\00a\0016777221\000", metadata !15, metadata !16, metadata !12} ; [ DW_TAG_arg_variable ] [a] [line 5] -!21 = metadata !{i32 5, i32 0, metadata !15, null} -!22 = metadata !{metadata !"0x100\00t\006\000", metadata !15, metadata !16, metadata !4} ; [ DW_TAG_auto_variable ] [t] [line 6] -!23 = metadata !{i32 6, i32 0, metadata !15, null} -!24 = metadata !{i32 7, i32 0, metadata !15, null} -!25 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git f54e02f969d02d640103db73efc30c45439fceab) (http://llvm.org/git/llvm.git 284353b55896cb1babfaa7add7c0a363245342d2)\000\00\000\00\000", !1, !2, !3, !14, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/inher/foo.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"foo.cpp", !"/Users/mren/c_testing/type_unique_air/inher"} +!2 = !{i32 0} +!3 = !{!4, !8} +!4 = !{!"0x2\00A\003\0064\0032\000\000\000", !5, null, null, !6, null, null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 3, size 64, align 32, offset 0] [def] [from ] +!5 = !{!"./a.hpp", !"/Users/mren/c_testing/type_unique_air/inher"} +!6 = !{!7, !13} +!7 = !{!"0x1c\00\000\000\000\000\001", null, !"_ZTS1A", !8} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 0] [private] [from Base] +!8 = !{!"0x2\00Base\003\0032\0032\000\000\000", !9, null, null, !10, null, null, !"_ZTS4Base"} ; [ DW_TAG_class_type ] [Base] [line 3, size 32, align 32, offset 0] [def] [from ] +!9 = !{!"./b.hpp", !"/Users/mren/c_testing/type_unique_air/inher"} +!10 = !{!11} +!11 = !{!"0xd\00b\004\0032\0032\000\001", !9, !"_ZTS4Base", !12} ; [ DW_TAG_member ] [b] [line 4, size 32, align 32, offset 0] [private] [from int] +!12 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!13 = !{!"0xd\00x\004\0032\0032\0032\001", !5, !"_ZTS1A", !12} ; [ DW_TAG_member ] [x] [line 4, size 32, align 32, offset 32] [private] [from int] +!14 = !{!15} +!15 = !{!"0x2e\00f\00f\00_Z1fi\005\000\001\000\006\00256\000\005", !1, !16, !17, null, void (i32)* @_Z1fi, null, null, !2} ; [ DW_TAG_subprogram ] [line 5] [def] [f] +!16 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/inher/foo.cpp] +!17 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!18 = !{null, !12} +!19 = !{i32 2, !"Dwarf Version", i32 2} +!20 = !{!"0x101\00a\0016777221\000", !15, !16, !12} ; [ DW_TAG_arg_variable ] [a] [line 5] +!21 = !MDLocation(line: 5, scope: !15) +!22 = !{!"0x100\00t\006\000", !15, !16, !4} ; [ DW_TAG_auto_variable ] [t] [line 6] +!23 = !MDLocation(line: 6, scope: !15) +!24 = !MDLocation(line: 7, scope: !15) +!25 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/Inputs/type-unique-inheritance-b.ll b/test/Linker/Inputs/type-unique-inheritance-b.ll index d915e45..d3b9dea 100644 --- a/test/Linker/Inputs/type-unique-inheritance-b.ll +++ b/test/Linker/Inputs/type-unique-inheritance-b.ll @@ -10,8 +10,8 @@ entry: %a.addr = alloca i32, align 4 %t = alloca %class.B, align 8 store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %a.addr}, metadata !28, metadata !{metadata !"0x102"}), !dbg !29 - call void @llvm.dbg.declare(metadata !{%class.B* %t}, metadata !30, metadata !{metadata !"0x102"}), !dbg !31 + call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !28, metadata !{!"0x102"}), !dbg !29 + call void @llvm.dbg.declare(metadata %class.B* %t, metadata !30, metadata !{!"0x102"}), !dbg !31 ret void, !dbg !32 } @@ -24,7 +24,7 @@ entry: %retval = alloca i32, align 4 %a = alloca %class.A, align 4 store i32 0, i32* %retval - call void @llvm.dbg.declare(metadata !{%class.A* %a}, metadata !33, metadata !{metadata !"0x102"}), !dbg !34 + call void @llvm.dbg.declare(metadata %class.A* %a, metadata !33, metadata !{!"0x102"}), !dbg !34 call void @_Z1fi(i32 0), !dbg !35 call void @_Z1gi(i32 1), !dbg !36 ret i32 0, !dbg !37 @@ -40,42 +40,42 @@ attributes #3 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!27, !38} -!0 = metadata !{metadata !"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git f54e02f969d02d640103db73efc30c45439fceab) (http://llvm.org/git/llvm.git 284353b55896cb1babfaa7add7c0a363245342d2)\000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !19, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/inher/bar.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"bar.cpp", metadata !"/Users/mren/c_testing/type_unique_air/inher"} -!2 = metadata !{i32 0} -!3 = metadata !{metadata !4, metadata !11, metadata !15} -!4 = metadata !{metadata !"0x2\00B\007\00128\0064\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS1B"} ; [ DW_TAG_class_type ] [B] [line 7, size 128, align 64, offset 0] [def] [from ] -!5 = metadata !{metadata !"./b.hpp", metadata !"/Users/mren/c_testing/type_unique_air/inher"} -!6 = metadata !{metadata !7, metadata !9} -!7 = metadata !{metadata !"0xd\00bb\008\0032\0032\000\001", metadata !5, metadata !"_ZTS1B", metadata !8} ; [ DW_TAG_member ] [bb] [line 8, size 32, align 32, offset 0] [private] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !"0xd\00a\009\0064\0064\0064\001", metadata !5, metadata !"_ZTS1B", metadata !10} ; [ DW_TAG_member ] [a] [line 9, size 64, align 64, offset 64] [private] [from ] -!10 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from A] -!11 = metadata !{metadata !"0x2\00A\003\0064\0032\000\000\000", metadata !12, null, null, metadata !13, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 3, size 64, align 32, offset 0] [def] [from ] -!12 = metadata !{metadata !"./a.hpp", metadata !"/Users/mren/c_testing/type_unique_air/inher"} -!13 = metadata !{metadata !14, metadata !18} -!14 = metadata !{metadata !"0x1c\00\000\000\000\000\001", null, metadata !"_ZTS1A", metadata !15} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 0] [private] [from Base] -!15 = metadata !{metadata !"0x2\00Base\003\0032\0032\000\000\000", metadata !5, null, null, metadata !16, null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_class_type ] [Base] [line 3, size 32, align 32, offset 0] [def] [from ] -!16 = metadata !{metadata !17} -!17 = metadata !{metadata !"0xd\00b\004\0032\0032\000\001", metadata !5, metadata !"_ZTS4Base", metadata !8} ; [ DW_TAG_member ] [b] [line 4, size 32, align 32, offset 0] [private] [from int] -!18 = metadata !{metadata !"0xd\00x\004\0032\0032\0032\001", metadata !12, metadata !"_ZTS1A", metadata !8} ; [ DW_TAG_member ] [x] [line 4, size 32, align 32, offset 32] [private] [from int] -!19 = metadata !{metadata !20, metadata !24} -!20 = metadata !{metadata !"0x2e\00g\00g\00_Z1gi\004\000\001\000\006\00256\000\004", metadata !1, metadata !21, metadata !22, null, void (i32)* @_Z1gi, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 4] [def] [g] -!21 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/inher/bar.cpp] -!22 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !23, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!23 = metadata !{null, metadata !8} -!24 = metadata !{metadata !"0x2e\00main\00main\00\009\000\001\000\006\00256\000\009", metadata !1, metadata !21, metadata !25, null, i32 ()* @main, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 9] [def] [main] -!25 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !26, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!26 = metadata !{metadata !8} -!27 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!28 = metadata !{metadata !"0x101\00a\0016777220\000", metadata !20, metadata !21, metadata !8} ; [ DW_TAG_arg_variable ] [a] [line 4] -!29 = metadata !{i32 4, i32 0, metadata !20, null} -!30 = metadata !{metadata !"0x100\00t\005\000", metadata !20, metadata !21, metadata !4} ; [ DW_TAG_auto_variable ] [t] [line 5] -!31 = metadata !{i32 5, i32 0, metadata !20, null} -!32 = metadata !{i32 6, i32 0, metadata !20, null} -!33 = metadata !{metadata !"0x100\00a\0010\000", metadata !24, metadata !21, metadata !11} ; [ DW_TAG_auto_variable ] [a] [line 10] -!34 = metadata !{i32 10, i32 0, metadata !24, null} -!35 = metadata !{i32 11, i32 0, metadata !24, null} -!36 = metadata !{i32 12, i32 0, metadata !24, null} -!37 = metadata !{i32 13, i32 0, metadata !24, null} -!38 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git f54e02f969d02d640103db73efc30c45439fceab) (http://llvm.org/git/llvm.git 284353b55896cb1babfaa7add7c0a363245342d2)\000\00\000\00\000", !1, !2, !3, !19, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/inher/bar.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"bar.cpp", !"/Users/mren/c_testing/type_unique_air/inher"} +!2 = !{i32 0} +!3 = !{!4, !11, !15} +!4 = !{!"0x2\00B\007\00128\0064\000\000\000", !5, null, null, !6, null, null, !"_ZTS1B"} ; [ DW_TAG_class_type ] [B] [line 7, size 128, align 64, offset 0] [def] [from ] +!5 = !{!"./b.hpp", !"/Users/mren/c_testing/type_unique_air/inher"} +!6 = !{!7, !9} +!7 = !{!"0xd\00bb\008\0032\0032\000\001", !5, !"_ZTS1B", !8} ; [ DW_TAG_member ] [bb] [line 8, size 32, align 32, offset 0] [private] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!"0xd\00a\009\0064\0064\0064\001", !5, !"_ZTS1B", !10} ; [ DW_TAG_member ] [a] [line 9, size 64, align 64, offset 64] [private] [from ] +!10 = !{!"0xf\00\000\0064\0064\000\000", null, null, !11} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from A] +!11 = !{!"0x2\00A\003\0064\0032\000\000\000", !12, null, null, !13, null, null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 3, size 64, align 32, offset 0] [def] [from ] +!12 = !{!"./a.hpp", !"/Users/mren/c_testing/type_unique_air/inher"} +!13 = !{!14, !18} +!14 = !{!"0x1c\00\000\000\000\000\001", null, !"_ZTS1A", !15} ; [ DW_TAG_inheritance ] [line 0, size 0, align 0, offset 0] [private] [from Base] +!15 = !{!"0x2\00Base\003\0032\0032\000\000\000", !5, null, null, !16, null, null, !"_ZTS4Base"} ; [ DW_TAG_class_type ] [Base] [line 3, size 32, align 32, offset 0] [def] [from ] +!16 = !{!17} +!17 = !{!"0xd\00b\004\0032\0032\000\001", !5, !"_ZTS4Base", !8} ; [ DW_TAG_member ] [b] [line 4, size 32, align 32, offset 0] [private] [from int] +!18 = !{!"0xd\00x\004\0032\0032\0032\001", !12, !"_ZTS1A", !8} ; [ DW_TAG_member ] [x] [line 4, size 32, align 32, offset 32] [private] [from int] +!19 = !{!20, !24} +!20 = !{!"0x2e\00g\00g\00_Z1gi\004\000\001\000\006\00256\000\004", !1, !21, !22, null, void (i32)* @_Z1gi, null, null, !2} ; [ DW_TAG_subprogram ] [line 4] [def] [g] +!21 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/inher/bar.cpp] +!22 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !23, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!23 = !{null, !8} +!24 = !{!"0x2e\00main\00main\00\009\000\001\000\006\00256\000\009", !1, !21, !25, null, i32 ()* @main, null, null, !2} ; [ DW_TAG_subprogram ] [line 9] [def] [main] +!25 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !26, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!26 = !{!8} +!27 = !{i32 2, !"Dwarf Version", i32 2} +!28 = !{!"0x101\00a\0016777220\000", !20, !21, !8} ; [ DW_TAG_arg_variable ] [a] [line 4] +!29 = !MDLocation(line: 4, scope: !20) +!30 = !{!"0x100\00t\005\000", !20, !21, !4} ; [ DW_TAG_auto_variable ] [t] [line 5] +!31 = !MDLocation(line: 5, scope: !20) +!32 = !MDLocation(line: 6, scope: !20) +!33 = !{!"0x100\00a\0010\000", !24, !21, !11} ; [ DW_TAG_auto_variable ] [a] [line 10] +!34 = !MDLocation(line: 10, scope: !24) +!35 = !MDLocation(line: 11, scope: !24) +!36 = !MDLocation(line: 12, scope: !24) +!37 = !MDLocation(line: 13, scope: !24) +!38 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/Inputs/type-unique-name.ll b/test/Linker/Inputs/type-unique-name.ll new file mode 100644 index 0000000..2553246 --- /dev/null +++ b/test/Linker/Inputs/type-unique-name.ll @@ -0,0 +1,5 @@ +%t = type { i8 } + +define %t* @f() { + ret %t* null +} diff --git a/test/Linker/Inputs/type-unique-opaque.ll b/test/Linker/Inputs/type-unique-opaque.ll new file mode 100644 index 0000000..872b601 --- /dev/null +++ b/test/Linker/Inputs/type-unique-opaque.ll @@ -0,0 +1,6 @@ +%t = type { i8 } +%t2 = type { %t*, i16 } + +define %t2* @f() { + ret %t2* null +} diff --git a/test/Linker/Inputs/type-unique-simple2-a.ll b/test/Linker/Inputs/type-unique-simple2-a.ll index 5ed5c2a..6d6e93c 100644 --- a/test/Linker/Inputs/type-unique-simple2-a.ll +++ b/test/Linker/Inputs/type-unique-simple2-a.ll @@ -49,8 +49,8 @@ entry: %a.addr = alloca i32, align 4 %t = alloca %struct.Base, align 8 store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %a.addr}, metadata !17, metadata !{metadata !"0x102"}), !dbg !18 - call void @llvm.dbg.declare(metadata !{%struct.Base* %t}, metadata !19, metadata !{metadata !"0x102"}), !dbg !20 + call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !17, metadata !{!"0x102"}), !dbg !18 + call void @llvm.dbg.declare(metadata %struct.Base* %t, metadata !19, metadata !{!"0x102"}), !dbg !20 ret void, !dbg !21 } @@ -63,26 +63,26 @@ attributes #1 = { nounwind readnone } !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!16, !22} -!0 = metadata !{metadata !"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git 8a3f9e46cb988d2c664395b21910091e3730ae82) (http://llvm.org/git/llvm.git 4699e9549358bc77824a59114548eecc3f7c523c)\000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !11, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [foo.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"foo.cpp", metadata !"."} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x13\00Base\001\00128\0064\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 128, align 64, offset 0] [def] [from ] -!5 = metadata !{metadata !"./a.hpp", metadata !"."} -!6 = metadata !{metadata !7, metadata !9} -!7 = metadata !{metadata !"0xd\00a\002\0032\0032\000\000", metadata !5, metadata !"_ZTS4Base", metadata !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !"0xd\00b\003\0064\0064\0064\000", metadata !5, metadata !"_ZTS4Base", metadata !10} ; [ DW_TAG_member ] [b] [line 3, size 64, align 64, offset 64] [from ] -!10 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_pointer_type ] -!11 = metadata !{metadata !12} -!12 = metadata !{metadata !"0x2e\00f\00f\00_Z1fi\003\000\001\000\006\00256\000\003", metadata !1, metadata !13, metadata !14, null, void (i32)* @_Z1fi, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 3] [def] [f] -!13 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [foo.cpp] -!14 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !15, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!15 = metadata !{null, metadata !8} -!16 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!17 = metadata !{metadata !"0x101\00a\0016777219\000", metadata !12, metadata !13, metadata !8} ; [ DW_TAG_arg_variable ] [a] [line 3] -!18 = metadata !{i32 3, i32 0, metadata !12, null} -!19 = metadata !{metadata !"0x100\00t\004\000", metadata !12, metadata !13, metadata !4} ; [ DW_TAG_auto_variable ] [t] [line 4] -!20 = metadata !{i32 4, i32 0, metadata !12, null} -!21 = metadata !{i32 5, i32 0, metadata !12, null} -!22 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git 8a3f9e46cb988d2c664395b21910091e3730ae82) (http://llvm.org/git/llvm.git 4699e9549358bc77824a59114548eecc3f7c523c)\000\00\000\00\000", !1, !2, !3, !11, !2, !2} ; [ DW_TAG_compile_unit ] [foo.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"foo.cpp", !"."} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x13\00Base\001\00128\0064\000\000\000", !5, null, null, !6, null, null, !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 128, align 64, offset 0] [def] [from ] +!5 = !{!"./a.hpp", !"."} +!6 = !{!7, !9} +!7 = !{!"0xd\00a\002\0032\0032\000\000", !5, !"_ZTS4Base", !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!"0xd\00b\003\0064\0064\0064\000", !5, !"_ZTS4Base", !10} ; [ DW_TAG_member ] [b] [line 3, size 64, align 64, offset 64] [from ] +!10 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS4Base"} ; [ DW_TAG_pointer_type ] +!11 = !{!12} +!12 = !{!"0x2e\00f\00f\00_Z1fi\003\000\001\000\006\00256\000\003", !1, !13, !14, null, void (i32)* @_Z1fi, null, null, !2} ; [ DW_TAG_subprogram ] [line 3] [def] [f] +!13 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [foo.cpp] +!14 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !15, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!15 = !{null, !8} +!16 = !{i32 2, !"Dwarf Version", i32 2} +!17 = !{!"0x101\00a\0016777219\000", !12, !13, !8} ; [ DW_TAG_arg_variable ] [a] [line 3] +!18 = !MDLocation(line: 3, scope: !12) +!19 = !{!"0x100\00t\004\000", !12, !13, !4} ; [ DW_TAG_auto_variable ] [t] [line 4] +!20 = !MDLocation(line: 4, scope: !12) +!21 = !MDLocation(line: 5, scope: !12) +!22 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/Inputs/type-unique-simple2-b.ll b/test/Linker/Inputs/type-unique-simple2-b.ll index 241218d..d3b2f7e 100644 --- a/test/Linker/Inputs/type-unique-simple2-b.ll +++ b/test/Linker/Inputs/type-unique-simple2-b.ll @@ -8,8 +8,8 @@ entry: %a.addr = alloca i32, align 4 %t = alloca %struct.Base, align 8 store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %a.addr}, metadata !20, metadata !{metadata !"0x102"}), !dbg !21 - call void @llvm.dbg.declare(metadata !{%struct.Base* %t}, metadata !22, metadata !{metadata !"0x102"}), !dbg !23 + call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !20, metadata !{!"0x102"}), !dbg !21 + call void @llvm.dbg.declare(metadata %struct.Base* %t, metadata !22, metadata !{!"0x102"}), !dbg !23 ret void, !dbg !24 } @@ -36,32 +36,32 @@ attributes #3 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!19, !28} -!0 = metadata !{metadata !"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git 8a3f9e46cb988d2c664395b21910091e3730ae82) (http://llvm.org/git/llvm.git 4699e9549358bc77824a59114548eecc3f7c523c)\000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !11, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [bar.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"bar.cpp", metadata !"."} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x13\00Base\001\00128\0064\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 128, align 64, offset 0] [def] [from ] -!5 = metadata !{metadata !"./a.hpp", metadata !"."} -!6 = metadata !{metadata !7, metadata !9} -!7 = metadata !{metadata !"0xd\00a\002\0032\0032\000\000", metadata !5, metadata !"_ZTS4Base", metadata !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !"0xd\00b\003\0064\0064\0064\000", metadata !5, metadata !"_ZTS4Base", metadata !10} ; [ DW_TAG_member ] [b] [line 3, size 64, align 64, offset 64] [from ] -!10 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_pointer_type ] -!11 = metadata !{metadata !12, metadata !16} -!12 = metadata !{metadata !"0x2e\00g\00g\00_Z1gi\004\000\001\000\006\00256\000\004", metadata !1, metadata !13, metadata !14, null, void (i32)* @_Z1gi, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 4] [def] [g] -!13 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [bar.cpp] -!14 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !15, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!15 = metadata !{null, metadata !8} -!16 = metadata !{metadata !"0x2e\00main\00main\00\007\000\001\000\006\00256\000\007", metadata !1, metadata !13, metadata !17, null, i32 ()* @main, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 7] [def] [main] -!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!18 = metadata !{metadata !8} -!19 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!20 = metadata !{metadata !"0x101\00a\0016777220\000", metadata !12, metadata !13, metadata !8} ; [ DW_TAG_arg_variable ] [a] [line 4] -!21 = metadata !{i32 4, i32 0, metadata !12, null} -!22 = metadata !{metadata !"0x100\00t\005\000", metadata !12, metadata !13, metadata !4} ; [ DW_TAG_auto_variable ] [t] [line 5] -!23 = metadata !{i32 5, i32 0, metadata !12, null} -!24 = metadata !{i32 6, i32 0, metadata !12, null} -!25 = metadata !{i32 8, i32 0, metadata !16, null} -!26 = metadata !{i32 9, i32 0, metadata !16, null} -!27 = metadata !{i32 10, i32 0, metadata !16, null} -!28 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git 8a3f9e46cb988d2c664395b21910091e3730ae82) (http://llvm.org/git/llvm.git 4699e9549358bc77824a59114548eecc3f7c523c)\000\00\000\00\000", !1, !2, !3, !11, !2, !2} ; [ DW_TAG_compile_unit ] [bar.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"bar.cpp", !"."} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x13\00Base\001\00128\0064\000\000\000", !5, null, null, !6, null, null, !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 128, align 64, offset 0] [def] [from ] +!5 = !{!"./a.hpp", !"."} +!6 = !{!7, !9} +!7 = !{!"0xd\00a\002\0032\0032\000\000", !5, !"_ZTS4Base", !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!"0xd\00b\003\0064\0064\0064\000", !5, !"_ZTS4Base", !10} ; [ DW_TAG_member ] [b] [line 3, size 64, align 64, offset 64] [from ] +!10 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS4Base"} ; [ DW_TAG_pointer_type ] +!11 = !{!12, !16} +!12 = !{!"0x2e\00g\00g\00_Z1gi\004\000\001\000\006\00256\000\004", !1, !13, !14, null, void (i32)* @_Z1gi, null, null, !2} ; [ DW_TAG_subprogram ] [line 4] [def] [g] +!13 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [bar.cpp] +!14 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !15, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!15 = !{null, !8} +!16 = !{!"0x2e\00main\00main\00\007\000\001\000\006\00256\000\007", !1, !13, !17, null, i32 ()* @main, null, null, !2} ; [ DW_TAG_subprogram ] [line 7] [def] [main] +!17 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!18 = !{!8} +!19 = !{i32 2, !"Dwarf Version", i32 2} +!20 = !{!"0x101\00a\0016777220\000", !12, !13, !8} ; [ DW_TAG_arg_variable ] [a] [line 4] +!21 = !MDLocation(line: 4, scope: !12) +!22 = !{!"0x100\00t\005\000", !12, !13, !4} ; [ DW_TAG_auto_variable ] [t] [line 5] +!23 = !MDLocation(line: 5, scope: !12) +!24 = !MDLocation(line: 6, scope: !12) +!25 = !MDLocation(line: 8, scope: !16) +!26 = !MDLocation(line: 9, scope: !16) +!27 = !MDLocation(line: 10, scope: !16) +!28 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/Inputs/type-unique-unrelated2.ll b/test/Linker/Inputs/type-unique-unrelated2.ll new file mode 100644 index 0000000..b7c2cec --- /dev/null +++ b/test/Linker/Inputs/type-unique-unrelated2.ll @@ -0,0 +1,7 @@ +%t = type { i8* } +declare %t @g() + +define %t @g2() { + %x = call %t @g() + ret %t %x +} diff --git a/test/Linker/Inputs/type-unique-unrelated3.ll b/test/Linker/Inputs/type-unique-unrelated3.ll new file mode 100644 index 0000000..e3f2dd9 --- /dev/null +++ b/test/Linker/Inputs/type-unique-unrelated3.ll @@ -0,0 +1,7 @@ +%t = type { i8* } +declare %t @f() + +define %t @g() { + %x = call %t @f() + ret %t %x +} diff --git a/test/Linker/Inputs/unique-fwd-decl-b.ll b/test/Linker/Inputs/unique-fwd-decl-b.ll index 240fbee..24099b8 100644 --- a/test/Linker/Inputs/unique-fwd-decl-b.ll +++ b/test/Linker/Inputs/unique-fwd-decl-b.ll @@ -1,3 +1,3 @@ !b = !{!0} -!0 = metadata !{metadata !1} -!1 = metadata !{} +!0 = !{!1} +!1 = !{} diff --git a/test/Linker/Inputs/unique-fwd-decl-order.ll b/test/Linker/Inputs/unique-fwd-decl-order.ll new file mode 100644 index 0000000..e87ac84 --- /dev/null +++ b/test/Linker/Inputs/unique-fwd-decl-order.ll @@ -0,0 +1,6 @@ +!named = !{!0} + +; These nodes are intentionally in the opposite order from the test-driver. +; However, they are numbered the same for the reader's convenience. +!1 = !{} +!0 = !{!1} diff --git a/test/Linker/Inputs/visibility.ll b/test/Linker/Inputs/visibility.ll index 2ab58fd..2cd112e 100644 --- a/test/Linker/Inputs/visibility.ll +++ b/test/Linker/Inputs/visibility.ll @@ -4,7 +4,7 @@ $c1 = comdat any @v1 = weak hidden global i32 0 @v2 = weak protected global i32 0 @v3 = weak hidden global i32 0 -@v4 = hidden global i32 1, comdat $c1 +@v4 = hidden global i32 1, comdat($c1) ; Aliases @a1 = weak hidden alias i32* @v1 diff --git a/test/Linker/alignment.ll b/test/Linker/alignment.ll new file mode 100644 index 0000000..16cfe62 --- /dev/null +++ b/test/Linker/alignment.ll @@ -0,0 +1,22 @@ +; RUN: llvm-link %p/alignment.ll %p/Inputs/alignment.ll -S | FileCheck %s +; RUN: llvm-link %p/Inputs/alignment.ll %p/alignment.ll -S | FileCheck %s + + +@A = weak global i32 7, align 4 +; CHECK-DAG: @A = global i32 7, align 8 + +@B = weak global i32 7, align 8 +; CHECK-DAG: @B = global i32 7, align 4 + +define weak void @C() align 4 { + ret void +} +; CHECK-DAG: define void @C() align 8 { + +define weak void @D() align 8 { + ret void +} +; CHECK-DAG: define void @D() align 4 { + +@E = common global i32 0, align 4 +; CHECK-DAG: @E = common global i32 0, align 8 diff --git a/test/Linker/apple-version.ll b/test/Linker/apple-version.ll new file mode 100644 index 0000000..4dbc866 --- /dev/null +++ b/test/Linker/apple-version.ll @@ -0,0 +1,24 @@ +; RUN: llvm-link %s %S/Inputs/apple-version/1.ll -S -o - 2>%t.err | FileCheck %s -check-prefix=CHECK1 +; RUN: cat %t.err | FileCheck --check-prefix=WARN1 --allow-empty %s +; RUN: llvm-link %s %S/Inputs/apple-version/2.ll -S -o - 2>%t.err | FileCheck %s -check-prefix=CHECK2 +; RUN: cat %t.err | FileCheck --check-prefix=WARN2 --allow-empty %s +; RUN: llvm-link %s %S/Inputs/apple-version/3.ll -S -o /dev/null 2>%t.err +; RUN: cat %t.err | FileCheck --check-prefix=WARN3 %s +; RUN: llvm-link %s %S/Inputs/apple-version/4.ll -S -o /dev/null 2>%t.err +; RUN: cat %t.err | FileCheck --check-prefix=WARN4 --allow-empty %s + +; Check that the triple that has the larger version number is chosen and no +; warnings are issued when the Triples differ only in version numbers. + +; CHECK1: target triple = "x86_64-apple-macosx10.10.0" +; WARN1-NOT: WARNING +; CHECK2: target triple = "x86_64-apple-macosx10.9.0" +; WARN2-NOT: WARNING + +; i386 and x86_64 map to different ArchType enums. +; WARN3: WARNING: Linking two modules of different target triples + +; x86_64h and x86_64 map to the same ArchType enum. +; WARN4-NOT: WARNING + +target triple = "x86_64-apple-macosx10.9.0" diff --git a/test/Linker/comdat.ll b/test/Linker/comdat.ll index 4d2aef7..2a2ec3b 100644 --- a/test/Linker/comdat.ll +++ b/test/Linker/comdat.ll @@ -3,30 +3,30 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" target triple = "i686-pc-windows-msvc" $foo = comdat largest -@foo = global i32 42, comdat $foo +@foo = global i32 42, comdat($foo) -define i32 @bar() comdat $foo { +define i32 @bar() comdat($foo) { ret i32 42 } $qux = comdat largest -@qux = global i64 12, comdat $qux +@qux = global i64 12, comdat($qux) -define i32 @baz() comdat $qux { +define i32 @baz() comdat($qux) { ret i32 12 } $any = comdat any -@any = global i64 6, comdat $any +@any = global i64 6, comdat($any) ; CHECK: $qux = comdat largest ; CHECK: $foo = comdat largest ; CHECK: $any = comdat any -; CHECK: @qux = global i64 12, comdat $qux -; CHECK: @any = global i64 6, comdat $any -; CHECK: @foo = global i64 43, comdat $foo +; CHECK: @qux = global i64 12, comdat{{$}} +; CHECK: @any = global i64 6, comdat{{$}} +; CHECK: @foo = global i64 43, comdat{{$}} ; CHECK-NOT: @in_unselected_group = global i32 13, comdat $qux -; CHECK: define i32 @baz() comdat $qux -; CHECK: define i32 @bar() comdat $foo +; CHECK: define i32 @baz() comdat($qux) +; CHECK: define i32 @bar() comdat($foo) diff --git a/test/Linker/comdat2.ll b/test/Linker/comdat2.ll index 60c3d7c..ba8115d 100644 --- a/test/Linker/comdat2.ll +++ b/test/Linker/comdat2.ll @@ -3,5 +3,5 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" target triple = "i686-pc-windows-msvc" $foo = comdat samesize -@foo = global i32 42, comdat $foo +@foo = global i32 42, comdat($foo) ; CHECK: Linking COMDATs named 'foo': invalid selection kinds! diff --git a/test/Linker/comdat3.ll b/test/Linker/comdat3.ll index f0d9a48..3b5db0a 100644 --- a/test/Linker/comdat3.ll +++ b/test/Linker/comdat3.ll @@ -1,5 +1,5 @@ ; RUN: not llvm-link %s %p/Inputs/comdat2.ll -S -o - 2>&1 | FileCheck %s $foo = comdat largest -@foo = global i32 43, comdat $foo +@foo = global i32 43, comdat($foo) ; CHECK: Linking COMDATs named 'foo': can't do size dependent selection without DataLayout! diff --git a/test/Linker/comdat4.ll b/test/Linker/comdat4.ll index 50c1778..cf7ac5f 100644 --- a/test/Linker/comdat4.ll +++ b/test/Linker/comdat4.ll @@ -1,5 +1,5 @@ ; RUN: not llvm-link %s %p/Inputs/comdat3.ll -S -o - 2>&1 | FileCheck %s $foo = comdat noduplicates -@foo = global i64 43, comdat $foo +@foo = global i64 43, comdat($foo) ; CHECK: Linking COMDATs named 'foo': noduplicates has been violated! diff --git a/test/Linker/comdat5.ll b/test/Linker/comdat5.ll index 011fb8c..759688e 100644 --- a/test/Linker/comdat5.ll +++ b/test/Linker/comdat5.ll @@ -3,5 +3,5 @@ target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" target triple = "i686-pc-windows-msvc" $foo = comdat samesize -@foo = global i32 42, comdat $foo +@foo = global i32 42, comdat($foo) ; CHECK: Linking COMDATs named 'foo': SameSize violated! diff --git a/test/Linker/comdat6.ll b/test/Linker/comdat6.ll index efa5dfb..b5360a7 100644 --- a/test/Linker/comdat6.ll +++ b/test/Linker/comdat6.ll @@ -1,13 +1,10 @@ -; RUN: llvm-link %s %p/Inputs/comdat5.ll -S -o - 2>&1 | FileCheck %s -; RUN: llvm-link %p/Inputs/comdat5.ll %s -S -o - 2>&1 | FileCheck %s +; RUN: llvm-link %s %p/Inputs/comdat5.ll -S -o - | FileCheck %s +; RUN: llvm-link %p/Inputs/comdat5.ll %s -S -o - | FileCheck %s target datalayout = "e-m:w-p:32:32-i64:64-f80:32-n8:16:32-S32" -target triple = "i686-pc-windows-msvc" -%struct.S = type { i32 (...)** } +$foo = comdat largest +@foo = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void ()* @bar to i8*)], comdat($foo) -$"\01??_7S@@6B@" = comdat largest -@"\01??_7S@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void (%struct.S*, i32)* @"\01??_GS@@UAEPAXI@Z" to i8*)], comdat $"\01??_7S@@6B@" +; CHECK: @foo = alias getelementptr inbounds ([2 x i8*]* @some_name, i32 0, i32 1) -; CHECK: @"\01??_7S@@6B@" = alias getelementptr inbounds ([2 x i8*]* @some_name, i32 0, i32 1) - -declare x86_thiscallcc void @"\01??_GS@@UAEPAXI@Z"(%struct.S*, i32) unnamed_addr +declare void @bar() unnamed_addr diff --git a/test/Linker/comdat7.ll b/test/Linker/comdat7.ll index d7e5e2d..ef938a7 100644 --- a/test/Linker/comdat7.ll +++ b/test/Linker/comdat7.ll @@ -2,7 +2,7 @@ $c1 = comdat largest -define void @c1() comdat $c1 { +define void @c1() comdat($c1) { ret void } ; CHECK: GlobalVariable required for data dependent selection! diff --git a/test/Linker/comdat8.ll b/test/Linker/comdat8.ll index e6da583..5ca352a 100644 --- a/test/Linker/comdat8.ll +++ b/test/Linker/comdat8.ll @@ -2,7 +2,7 @@ $c1 = comdat largest -@some_name = private unnamed_addr constant i32 42, comdat $c1 +@some_name = private unnamed_addr constant i32 42, comdat($c1) @c1 = alias i8* inttoptr (i32 ptrtoint (i32* @some_name to i32) to i8*) ; CHECK: COMDAT key involves incomputable alias size. diff --git a/test/Linker/comdat9.ll b/test/Linker/comdat9.ll index eada8c6..f155a6e 100644 --- a/test/Linker/comdat9.ll +++ b/test/Linker/comdat9.ll @@ -1,7 +1,19 @@ -; RUN: llvm-link %s %p/Inputs/comdat9.ll -S -o - | FileCheck %s +; RUN: llvm-link %s -S -o - | FileCheck %s -; CHECK: $c = comdat any -; CHECK: @a = alias void ()* @f -; CHECK: define internal void @f() comdat $c { -; CHECK: ret void -; CHECK: } +$c = comdat any +@a = alias void ()* @f +define internal void @f() comdat($c) { + ret void +} + +; CHECK-DAG: $c = comdat any +; CHECK-DAG: @a = alias void ()* @f +; CHECK-DAG: define internal void @f() comdat($c) + +$f2 = comdat largest +define internal void @f2() comdat($f2) { + ret void +} + +; CHECK-DAG: $f2 = comdat largest +; CHECK-DAG: define internal void @f2() comdat { diff --git a/test/Linker/constructor-comdat.ll b/test/Linker/constructor-comdat.ll index 42e2d83..dfc8992 100644 --- a/test/Linker/constructor-comdat.ll +++ b/test/Linker/constructor-comdat.ll @@ -7,7 +7,7 @@ $_ZN3fooIiEC5Ev = comdat any @_ZN3fooIiEC1Ev = weak_odr alias void ()* @_ZN3fooIiEC2Ev ; CHECK: @_ZN3fooIiEC1Ev = weak_odr alias void ()* @_ZN3fooIiEC2Ev -; CHECK: define weak_odr void @_ZN3fooIiEC2Ev() comdat $_ZN3fooIiEC5Ev { -define weak_odr void @_ZN3fooIiEC2Ev() comdat $_ZN3fooIiEC5Ev { +; CHECK: define weak_odr void @_ZN3fooIiEC2Ev() comdat($_ZN3fooIiEC5Ev) { +define weak_odr void @_ZN3fooIiEC2Ev() comdat($_ZN3fooIiEC5Ev) { ret void } diff --git a/test/Linker/debug-info-version-a.ll b/test/Linker/debug-info-version-a.ll index 64a0583..352fcdc 100644 --- a/test/Linker/debug-info-version-a.ll +++ b/test/Linker/debug-info-version-a.ll @@ -4,13 +4,13 @@ ; from the other file should be dropped. ; CHECK-NOT: metadata !{metadata !"b.c", metadata !""} -; CHECK: metadata !{metadata !"a.c", metadata !""} +; CHECK: !"a.c", !""} ; CHECK-NOT: metadata !{metadata !"b.c", metadata !""} !llvm.module.flags = !{ !0 } !llvm.dbg.cu = !{!1} -!0 = metadata !{i32 2, metadata !"Debug Info Version", i32 2} -!1 = metadata !{metadata !"0x11\0012\00clang\001\00\000\00\000", metadata !2, metadata !3, metadata !3, metadata !3, null, null} ; [ DW_TAG_compile_unit ] -!2 = metadata !{metadata !"a.c", metadata !""} -!3 = metadata !{} +!0 = !{i32 2, !"Debug Info Version", i32 2} +!1 = !{!"0x11\0012\00clang\001\00\000\00\000", !2, !3, !3, !3, null, null} ; [ DW_TAG_compile_unit ] +!2 = !{!"a.c", !""} +!3 = !{} diff --git a/test/Linker/debug-info-version-b.ll b/test/Linker/debug-info-version-b.ll index 515291f..e494420 100644 --- a/test/Linker/debug-info-version-b.ll +++ b/test/Linker/debug-info-version-b.ll @@ -4,7 +4,7 @@ !llvm.module.flags = !{ !0 } !llvm.dbg.cu = !{!1} -!0 = metadata !{i32 2, metadata !"Debug Info Version", i32 42} -!1 = metadata !{metadata !"0x11\0012\00clang\000\00", metadata !"I AM UNEXPECTED!"} ; [ DW_TAG_compile_unit ] -!2 = metadata !{metadata !"b.c", metadata !""} -!3 = metadata !{} +!0 = !{i32 2, !"Debug Info Version", i32 42} +!1 = !{!"0x11\0012\00clang\000\00", !"I AM UNEXPECTED!"} ; [ DW_TAG_compile_unit ] +!2 = !{!"b.c", !""} +!3 = !{} diff --git a/test/Linker/distinct-cycles.ll b/test/Linker/distinct-cycles.ll new file mode 100644 index 0000000..b9b496c --- /dev/null +++ b/test/Linker/distinct-cycles.ll @@ -0,0 +1,13 @@ +; RUN: llvm-link -o - -S %s | FileCheck %s +; Crasher for PR22456: MapMetadata() should resolve all cycles. + +; CHECK: !named = !{!0} +!named = !{!0} + +; CHECK: !0 = distinct !{!1} +!0 = distinct !{!1} + +; CHECK-NEXT: !1 = !{!2} +; CHECK-NEXT: !2 = !{!1} +!1 = !{!2} +!2 = !{!1} diff --git a/test/Linker/distinct.ll b/test/Linker/distinct.ll new file mode 100644 index 0000000..c8e5c89 --- /dev/null +++ b/test/Linker/distinct.ll @@ -0,0 +1,37 @@ +; RUN: llvm-link %s %S/Inputs/distinct.ll -o - -S | FileCheck %s + +; Test that distinct nodes from other modules remain distinct. The @global +; cases are the most interesting, since the operands actually need to be +; remapped. + +; CHECK: @global = linkonce global i32 0 +@global = linkonce global i32 0 + +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !0, !1, !2, !9, !10, !11, !12, !13, !14} +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8} + +; CHECK: !0 = !{} +; CHECK-NEXT: !1 = !{!0} +; CHECK-NEXT: !2 = !{i32* @global} +; CHECK-NEXT: !3 = distinct !{} +; CHECK-NEXT: !4 = distinct !{!0} +; CHECK-NEXT: !5 = distinct !{i32* @global} +; CHECK-NEXT: !6 = !{!3} +; CHECK-NEXT: !7 = !{!4} +; CHECK-NEXT: !8 = !{!5} +; CHECK-NEXT: !9 = distinct !{} +; CHECK-NEXT: !10 = distinct !{!0} +; CHECK-NEXT: !11 = distinct !{i32* @global} +; CHECK-NEXT: !12 = !{!9} +; CHECK-NEXT: !13 = !{!10} +; CHECK-NEXT: !14 = !{!11} +; CHECK-NOT: ! +!0 = !{} +!1 = !{!0} +!2 = !{i32* @global} +!3 = distinct !{} +!4 = distinct !{!0} +!5 = distinct !{i32* @global} +!6 = !{!3} +!7 = !{!4} +!8 = !{!5} diff --git a/test/Linker/linkmdnode.ll b/test/Linker/linkmdnode.ll index 5f11580..2469c29 100644 --- a/test/Linker/linkmdnode.ll +++ b/test/Linker/linkmdnode.ll @@ -3,7 +3,7 @@ ; RUN: llvm-link %t.bc %t2.bc -!21 = metadata !{i32 42, metadata !"foobar"} +!21 = !{i32 42, !"foobar"} declare i8 @llvm.something(metadata %a) define void @foo() { diff --git a/test/Linker/linkmdnode2.ll b/test/Linker/linkmdnode2.ll index a7d991a..5b2b58d 100644 --- a/test/Linker/linkmdnode2.ll +++ b/test/Linker/linkmdnode2.ll @@ -2,7 +2,7 @@ ; ; RUN: true -!22 = metadata !{i32 42, metadata !"foobar"} +!22 = !{i32 42, !"foobar"} declare i8 @llvm.something(metadata %a) define void @foo1() { @@ -18,5 +18,5 @@ define void @test() { ret void, !abc !0 } -!0 = metadata !{metadata !0, i32 42 } +!0 = !{!0, i32 42 } diff --git a/test/Linker/linknamedmdnode.ll b/test/Linker/linknamedmdnode.ll index 73e7554..60f95a6 100644 --- a/test/Linker/linknamedmdnode.ll +++ b/test/Linker/linknamedmdnode.ll @@ -3,5 +3,5 @@ ; RUN: llvm-link %t.bc %t2.bc -S | FileCheck %s ; CHECK: !llvm.stuff = !{!0, !1} -!0 = metadata !{i32 42} +!0 = !{i32 42} !llvm.stuff = !{!0} diff --git a/test/Linker/linknamedmdnode2.ll b/test/Linker/linknamedmdnode2.ll index d16f62a..ff4330d 100644 --- a/test/Linker/linknamedmdnode2.ll +++ b/test/Linker/linknamedmdnode2.ll @@ -2,5 +2,5 @@ ; ; RUN: true -!0 = metadata !{i32 41} +!0 = !{i32 41} !llvm.stuff = !{!0} diff --git a/test/Linker/lto-attributes.ll b/test/Linker/lto-attributes.ll index 0dc78ad..e55029a 100644 --- a/test/Linker/lto-attributes.ll +++ b/test/Linker/lto-attributes.ll @@ -1,7 +1,10 @@ ; RUN: llvm-link -S %s -o - | FileCheck %s -; CHECK: @foo = private externally_initialized global i8* null +; CHECK-DAG: @foo = private externally_initialized global i8* null @foo = private externally_initialized global i8* null -; CHECK: @array = appending global [7 x i8] c"abcdefg", align 1 + +@useFoo = global i8** @foo + +; CHECK-DAG: @array = appending global [7 x i8] c"abcdefg", align 1 @array = appending global [7 x i8] c"abcdefg", align 1 diff --git a/test/Linker/mdlocation.ll b/test/Linker/mdlocation.ll new file mode 100644 index 0000000..5ee366c --- /dev/null +++ b/test/Linker/mdlocation.ll @@ -0,0 +1,34 @@ +; RUN: llvm-link %s %S/Inputs/mdlocation.ll -o - -S | FileCheck %s + +; Test that MDLocations are remapped properly. + +; CHECK: !named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !0, !1, !2, !3, !10, !11, !12, !13, !14, !15} +!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9} + +; CHECK: !0 = !{} +; CHECK-NEXT: !1 = !MDLocation(line: 3, column: 7, scope: !0) +; CHECK-NEXT: !2 = !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !1) +; CHECK-NEXT: !3 = !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !2) +; CHECK-NEXT: !4 = distinct !{} +; CHECK-NEXT: !5 = !MDLocation(line: 3, column: 7, scope: !4) +; CHECK-NEXT: !6 = !MDLocation(line: 3, column: 7, scope: !4, inlinedAt: !5) +; CHECK-NEXT: !7 = !MDLocation(line: 3, column: 7, scope: !4, inlinedAt: !6) +; CHECK-NEXT: !8 = distinct !MDLocation(line: 3, column: 7, scope: !0) +; CHECK-NEXT: !9 = distinct !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !8) +; CHECK-NEXT: !10 = distinct !{} +; CHECK-NEXT: !11 = !MDLocation(line: 3, column: 7, scope: !10) +; CHECK-NEXT: !12 = !MDLocation(line: 3, column: 7, scope: !10, inlinedAt: !11) +; CHECK-NEXT: !13 = !MDLocation(line: 3, column: 7, scope: !10, inlinedAt: !12) +; CHECK-NEXT: !14 = distinct !MDLocation(line: 3, column: 7, scope: !0) +; CHECK-NEXT: !15 = distinct !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !14) +!0 = !{} ; Use this as a scope. +!1 = !MDLocation(line: 3, column: 7, scope: !0) +!2 = !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !1) +!3 = !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !2) +!4 = distinct !{} ; Test actual remapping. +!5 = !MDLocation(line: 3, column: 7, scope: !4) +!6 = !MDLocation(line: 3, column: 7, scope: !4, inlinedAt: !5) +!7 = !MDLocation(line: 3, column: 7, scope: !4, inlinedAt: !6) +; Test distinct nodes. +!8 = distinct !MDLocation(line: 3, column: 7, scope: !0) +!9 = distinct !MDLocation(line: 3, column: 7, scope: !0, inlinedAt: !8) diff --git a/test/Linker/metadata-a.ll b/test/Linker/metadata-a.ll index 5a9d2e4..78715c6 100644 --- a/test/Linker/metadata-a.ll +++ b/test/Linker/metadata-a.ll @@ -1,15 +1,15 @@ ; RUN: llvm-link %s %p/metadata-b.ll -S -o - | FileCheck %s ; CHECK: define void @foo(i32 %a) -; CHECK: ret void, !attach !0, !also !{i32 %a} +; CHECK: ret void, !attach !0 ; CHECK: define void @goo(i32 %b) -; CHECK: ret void, !attach !1, !and !{i32 %b} -; CHECK: !0 = metadata !{i32 524334, void (i32)* @foo} -; CHECK: !1 = metadata !{i32 524334, void (i32)* @goo} +; CHECK: ret void, !attach !1 +; CHECK: !0 = !{i32 524334, void (i32)* @foo} +; CHECK: !1 = !{i32 524334, void (i32)* @goo} define void @foo(i32 %a) nounwind { entry: - ret void, !attach !0, !also !{ i32 %a } + ret void, !attach !0 } -!0 = metadata !{i32 524334, void (i32)* @foo} +!0 = !{i32 524334, void (i32)* @foo} diff --git a/test/Linker/metadata-b.ll b/test/Linker/metadata-b.ll index ef0270a..fd2fd28 100644 --- a/test/Linker/metadata-b.ll +++ b/test/Linker/metadata-b.ll @@ -3,7 +3,7 @@ define void @goo(i32 %b) nounwind { entry: - ret void, !attach !0, !and !{ i32 %b } + ret void, !attach !0 } -!0 = metadata !{i32 524334, void (i32)* @goo} +!0 = !{i32 524334, void (i32)* @goo} diff --git a/test/Linker/module-flags-1-a.ll b/test/Linker/module-flags-1-a.ll index 32f189c..fb3fcc1 100644 --- a/test/Linker/module-flags-1-a.ll +++ b/test/Linker/module-flags-1-a.ll @@ -2,15 +2,15 @@ ; Test basic functionality of module flags. -; CHECK: !0 = metadata !{i32 1, metadata !"foo", i32 37} -; CHECK: !1 = metadata !{i32 2, metadata !"bar", i32 42} -; CHECK: !2 = metadata !{i32 1, metadata !"mux", metadata !3} -; CHECK: !3 = metadata !{metadata !"hello world", i32 927} -; CHECK: !4 = metadata !{i32 1, metadata !"qux", i32 42} +; CHECK: !0 = !{i32 1, !"foo", i32 37} +; CHECK: !1 = !{i32 2, !"bar", i32 42} +; CHECK: !2 = !{i32 1, !"mux", !3} +; CHECK: !3 = !{!"hello world", i32 927} +; CHECK: !4 = !{i32 1, !"qux", i32 42} ; CHECK: !llvm.module.flags = !{!0, !1, !2, !4} -!0 = metadata !{ i32 1, metadata !"foo", i32 37 } -!1 = metadata !{ i32 2, metadata !"bar", i32 42 } -!2 = metadata !{ i32 1, metadata !"mux", metadata !{ metadata !"hello world", i32 927 } } +!0 = !{ i32 1, !"foo", i32 37 } +!1 = !{ i32 2, !"bar", i32 42 } +!2 = !{ i32 1, !"mux", !{ !"hello world", i32 927 } } !llvm.module.flags = !{ !0, !1, !2 } diff --git a/test/Linker/module-flags-1-b.ll b/test/Linker/module-flags-1-b.ll index bf3f5e5..b3d1412 100644 --- a/test/Linker/module-flags-1-b.ll +++ b/test/Linker/module-flags-1-b.ll @@ -1,8 +1,8 @@ ; This file is used with module-flags-1-a.ll ; RUN: true -!0 = metadata !{ i32 1, metadata !"foo", i32 37 } -!1 = metadata !{ i32 1, metadata !"qux", i32 42 } -!2 = metadata !{ i32 1, metadata !"mux", metadata !{ metadata !"hello world", i32 927 } } +!0 = !{ i32 1, !"foo", i32 37 } +!1 = !{ i32 1, !"qux", i32 42 } +!2 = !{ i32 1, !"mux", !{ !"hello world", i32 927 } } !llvm.module.flags = !{ !0, !1, !2 } diff --git a/test/Linker/module-flags-2-a.ll b/test/Linker/module-flags-2-a.ll index 3ae0288..5f03461 100644 --- a/test/Linker/module-flags-2-a.ll +++ b/test/Linker/module-flags-2-a.ll @@ -2,9 +2,9 @@ ; Test the 'override' behavior. -; CHECK: !0 = metadata !{i32 4, metadata !"foo", i32 37} +; CHECK: !0 = !{i32 4, !"foo", i32 37} ; CHECK: !llvm.module.flags = !{!0} -!0 = metadata !{ i32 1, metadata !"foo", i32 927 } +!0 = !{ i32 1, !"foo", i32 927 } !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-2-b.ll b/test/Linker/module-flags-2-b.ll index ab55e4b..93d7ac1 100644 --- a/test/Linker/module-flags-2-b.ll +++ b/test/Linker/module-flags-2-b.ll @@ -1,6 +1,6 @@ ; This file is used with module-flags-2-a.ll ; RUN: true -!0 = metadata !{ i32 4, metadata !"foo", i32 37 } ; Override the "foo" value. +!0 = !{ i32 4, !"foo", i32 37 } ; Override the "foo" value. !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-3-a.ll b/test/Linker/module-flags-3-a.ll index e7a720e..26a9391 100644 --- a/test/Linker/module-flags-3-a.ll +++ b/test/Linker/module-flags-3-a.ll @@ -2,13 +2,13 @@ ; Test 'require' behavior. -; CHECK: !0 = metadata !{i32 1, metadata !"foo", i32 37} -; CHECK: !1 = metadata !{i32 1, metadata !"bar", i32 42} -; CHECK: !2 = metadata !{i32 3, metadata !"foo", metadata !3} -; CHECK: !3 = metadata !{metadata !"bar", i32 42} +; CHECK: !0 = !{i32 1, !"foo", i32 37} +; CHECK: !1 = !{i32 1, !"bar", i32 42} +; CHECK: !2 = !{i32 3, !"foo", !3} +; CHECK: !3 = !{!"bar", i32 42} ; CHECK: !llvm.module.flags = !{!0, !1, !2} -!0 = metadata !{ i32 1, metadata !"foo", i32 37 } -!1 = metadata !{ i32 1, metadata !"bar", i32 42 } +!0 = !{ i32 1, !"foo", i32 37 } +!1 = !{ i32 1, !"bar", i32 42 } !llvm.module.flags = !{ !0, !1 } diff --git a/test/Linker/module-flags-3-b.ll b/test/Linker/module-flags-3-b.ll index 76be802..2e6e529 100644 --- a/test/Linker/module-flags-3-b.ll +++ b/test/Linker/module-flags-3-b.ll @@ -1,8 +1,6 @@ ; This file is used with module-flags-3-a.ll ; RUN: true -!0 = metadata !{ i32 3, metadata !"foo", - metadata !{ metadata !"bar", i32 42 } -} +!0 = !{i32 3, !"foo", !{!"bar", i32 42}} !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-4-a.ll b/test/Linker/module-flags-4-a.ll index a656c8b..14d850d 100644 --- a/test/Linker/module-flags-4-a.ll +++ b/test/Linker/module-flags-4-a.ll @@ -4,7 +4,7 @@ ; CHECK: linking module flags 'bar': does not have the required value -!0 = metadata !{ i32 1, metadata !"foo", i32 37 } -!1 = metadata !{ i32 1, metadata !"bar", i32 927 } +!0 = !{ i32 1, !"foo", i32 37 } +!1 = !{ i32 1, !"bar", i32 927 } !llvm.module.flags = !{ !0, !1 } diff --git a/test/Linker/module-flags-4-b.ll b/test/Linker/module-flags-4-b.ll index 3a460bb..25aaf19 100644 --- a/test/Linker/module-flags-4-b.ll +++ b/test/Linker/module-flags-4-b.ll @@ -1,8 +1,6 @@ ; This file is used with module-flags-4-a.ll ; RUN: true -!0 = metadata !{ i32 3, metadata !"foo", - metadata !{ metadata !"bar", i32 42 } -} +!0 = !{i32 3, !"foo", !{!"bar", i32 42}} !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-5-a.ll b/test/Linker/module-flags-5-a.ll index 8d625cd..00fb4d1 100644 --- a/test/Linker/module-flags-5-a.ll +++ b/test/Linker/module-flags-5-a.ll @@ -4,6 +4,6 @@ ; CHECK: linking module flags 'foo': IDs have conflicting override values -!0 = metadata !{ i32 4, metadata !"foo", i32 927 } +!0 = !{ i32 4, !"foo", i32 927 } !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-5-b.ll b/test/Linker/module-flags-5-b.ll index 1e99b20..7182317 100644 --- a/test/Linker/module-flags-5-b.ll +++ b/test/Linker/module-flags-5-b.ll @@ -1,6 +1,6 @@ ; This file is used with module-flags-5-a.ll ; RUN: true -!0 = metadata !{ i32 4, metadata !"foo", i32 37 } ; Override the "foo" value. +!0 = !{ i32 4, !"foo", i32 37 } ; Override the "foo" value. !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-6-a.ll b/test/Linker/module-flags-6-a.ll index 5329c43..e15fd34 100644 --- a/test/Linker/module-flags-6-a.ll +++ b/test/Linker/module-flags-6-a.ll @@ -4,6 +4,6 @@ ; CHECK: linking module flags 'foo': IDs have conflicting values -!0 = metadata !{ i32 1, metadata !"foo", i32 37 } +!0 = !{ i32 1, !"foo", i32 37 } !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-6-b.ll b/test/Linker/module-flags-6-b.ll index 2bc5a96..e277700 100644 --- a/test/Linker/module-flags-6-b.ll +++ b/test/Linker/module-flags-6-b.ll @@ -1,6 +1,6 @@ ; This file is used with module-flags-6-a.ll ; RUN: true -!0 = metadata !{ i32 1, metadata !"foo", i32 38 } +!0 = !{ i32 1, !"foo", i32 38 } !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-7-a.ll b/test/Linker/module-flags-7-a.ll index 976c8fe..46c9d26 100644 --- a/test/Linker/module-flags-7-a.ll +++ b/test/Linker/module-flags-7-a.ll @@ -4,6 +4,6 @@ ; CHECK: linking module flags 'foo': IDs have conflicting behaviors -!0 = metadata !{ i32 1, metadata !"foo", i32 37 } +!0 = !{ i32 1, !"foo", i32 37 } !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-7-b.ll b/test/Linker/module-flags-7-b.ll index 2bc7250..47d44e9 100644 --- a/test/Linker/module-flags-7-b.ll +++ b/test/Linker/module-flags-7-b.ll @@ -1,6 +1,6 @@ ; This file is used with module-flags-7-a.ll ; RUN: true -!0 = metadata !{ i32 2, metadata !"foo", i32 37 } +!0 = !{ i32 2, !"foo", i32 37 } !llvm.module.flags = !{ !0 } diff --git a/test/Linker/module-flags-8-a.ll b/test/Linker/module-flags-8-a.ll index 146cae7..b65a50f 100644 --- a/test/Linker/module-flags-8-a.ll +++ b/test/Linker/module-flags-8-a.ll @@ -2,13 +2,13 @@ ; Test append-type module flags. -; CHECK: !0 = metadata !{i32 5, metadata !"flag-0", metadata !1} -; CHECK: !1 = metadata !{i32 0, i32 0, i32 1} -; CHECK: !2 = metadata !{i32 6, metadata !"flag-1", metadata !3} -; CHECK: !3 = metadata !{i32 0, i32 1, i32 2} +; CHECK: !0 = !{i32 5, !"flag-0", !1} +; CHECK: !1 = !{i32 0, i32 0, i32 1} +; CHECK: !2 = !{i32 6, !"flag-1", !3} +; CHECK: !3 = !{i32 0, i32 1, i32 2} ; CHECK: !llvm.module.flags = !{!0, !2} -!0 = metadata !{ i32 5, metadata !"flag-0", metadata !{ i32 0 } } -!1 = metadata !{ i32 6, metadata !"flag-1", metadata !{ i32 0, i32 1 } } +!0 = !{ i32 5, !"flag-0", !{ i32 0 } } +!1 = !{ i32 6, !"flag-1", !{ i32 0, i32 1 } } !llvm.module.flags = !{ !0, !1 } diff --git a/test/Linker/module-flags-8-b.ll b/test/Linker/module-flags-8-b.ll index 08f9bc4..afd737a 100644 --- a/test/Linker/module-flags-8-b.ll +++ b/test/Linker/module-flags-8-b.ll @@ -1,7 +1,7 @@ ; This file is used with module-flags-6-a.ll ; RUN: true -!0 = metadata !{ i32 5, metadata !"flag-0", metadata !{ i32 0, i32 1 } } -!1 = metadata !{ i32 6, metadata !"flag-1", metadata !{ i32 1, i32 2 } } +!0 = !{ i32 5, !"flag-0", !{ i32 0, i32 1 } } +!1 = !{ i32 6, !"flag-1", !{ i32 1, i32 2 } } !llvm.module.flags = !{ !0, !1 } diff --git a/test/Linker/module-flags-dont-change-others.ll b/test/Linker/module-flags-dont-change-others.ll new file mode 100644 index 0000000..4cc9f39 --- /dev/null +++ b/test/Linker/module-flags-dont-change-others.ll @@ -0,0 +1,26 @@ +; RUN: llvm-link %s %S/Inputs/module-flags-dont-change-others.ll -S -o - | FileCheck %s + +; Test that module-flag linking doesn't change other metadata. In particular, +; !named should still point at the unmodified tuples (!3, !4, and !5) that +; happen to also serve as module flags. + +; CHECK: !named = !{!0, !1, !2, !3, !4, !5} +; CHECK: !llvm.module.flags = !{!6, !7, !8} +!named = !{!0, !1, !2, !3, !4, !5} +!llvm.module.flags = !{!3, !4, !5} + +; CHECK: !0 = !{} +; CHECK: !1 = !{!0} +; CHECK: !2 = !{!0, !1} +; CHECK: !3 = !{i32 1, !"foo", i32 927} +; CHECK: !4 = !{i32 5, !"bar", !0} +; CHECK: !5 = !{i32 6, !"baz", !1} +; CHECK: !6 = !{i32 4, !"foo", i32 37} +; CHECK: !7 = !{i32 5, !"bar", !1} +; CHECK: !8 = !{i32 6, !"baz", !2} +!0 = !{} +!1 = !{!0} +!2 = !{!0, !1} +!3 = !{i32 1, !"foo", i32 927} +!4 = !{i32 5, !"bar", !0} +!5 = !{i32 6, !"baz", !1} diff --git a/test/Linker/module-flags-pic-1-a.ll b/test/Linker/module-flags-pic-1-a.ll index bc4da95..ea93335 100644 --- a/test/Linker/module-flags-pic-1-a.ll +++ b/test/Linker/module-flags-pic-1-a.ll @@ -2,8 +2,8 @@ ; test linking modules with specified and default PIC levels -!0 = metadata !{ i32 1, metadata !"PIC Level", i32 1 } +!0 = !{ i32 1, !"PIC Level", i32 1 } !llvm.module.flags = !{!0} ; CHECK: !llvm.module.flags = !{!0} -; CHECK: !0 = metadata !{i32 1, metadata !"PIC Level", i32 1} +; CHECK: !0 = !{i32 1, !"PIC Level", i32 1} diff --git a/test/Linker/module-flags-pic-2-a.ll b/test/Linker/module-flags-pic-2-a.ll index 3ff9c8f..e09af6b 100644 --- a/test/Linker/module-flags-pic-2-a.ll +++ b/test/Linker/module-flags-pic-2-a.ll @@ -3,7 +3,7 @@ ; test linking modules with two different PIC levels -!0 = metadata !{ i32 1, metadata !"PIC Level", i32 1 } +!0 = !{ i32 1, !"PIC Level", i32 1 } !llvm.module.flags = !{!0} diff --git a/test/Linker/opaque.ll b/test/Linker/opaque.ll new file mode 100644 index 0000000..1ba878c --- /dev/null +++ b/test/Linker/opaque.ll @@ -0,0 +1,21 @@ +; RUN: llvm-link %p/opaque.ll %p/Inputs/opaque.ll -S -o - | FileCheck %s + +; CHECK-DAG: %A = type {} +; CHECK-DAG: %B = type { %C, %C, %B* } +; CHECK-DAG: %B.1 = type { %D, %E, %B.1* } +; CHECK-DAG: %C = type { %A } +; CHECK-DAG: %D = type { %E } +; CHECK-DAG: %E = type opaque + +; CHECK-DAG: @g1 = external global %B +; CHECK-DAG: @g2 = external global %A +; CHECK-DAG: @g3 = external global %B.1 + +; CHECK-DAG: getelementptr %A* null, i32 0 + +%A = type opaque +%B = type { %C, %C, %B* } + +%C = type { %A } + +@g1 = external global %B diff --git a/test/Linker/pr21374.ll b/test/Linker/pr21374.ll new file mode 100644 index 0000000..d777971 --- /dev/null +++ b/test/Linker/pr21374.ll @@ -0,0 +1,20 @@ +; RUN: llvm-link -S -o - %p/pr21374.ll %p/Inputs/pr21374.ll | FileCheck %s +; RUN: llvm-link -S -o - %p/Inputs/pr21374.ll %p/pr21374.ll | FileCheck %s + +; RUN: llvm-as -o %t1.bc %p/pr21374.ll +; RUN: llvm-as -o %t2.bc %p/Inputs/pr21374.ll + +; RUN: llvm-link -S -o - %t1.bc %t2.bc | FileCheck %s +; RUN: llvm-link -S -o - %t2.bc %t1.bc | FileCheck %s + +; Test that we get the same result with or without lazy loading. + +; CHECK: %foo = type { i8* } +; CHECK-DAG: bitcast i32* null to %foo* +; CHECK-DAG: define void @g(%foo* %x) + +%foo = type { i8* } +define void @f() { + bitcast i32* null to %foo* + ret void +} diff --git a/test/Linker/pr21494.ll b/test/Linker/pr21494.ll new file mode 100644 index 0000000..8a17233 --- /dev/null +++ b/test/Linker/pr21494.ll @@ -0,0 +1,23 @@ +; RUN: llvm-link %s -S -o - | FileCheck %s + +@g1 = private global i8 0 +; CHECK-NOT: @g1 + +@g2 = linkonce_odr global i8 0 +; CHECK-NOT: @g2 + +@a1 = private alias i8* @g1 +; CHECK-NOT: @a1 + +@a2 = linkonce_odr alias i8* @g2 +; CHECK-NOT: @a2 + +define private void @f1() { + ret void +} +; CHECK-NOT: @f1 + +define linkonce_odr void @f2() { + ret void +} +; CHECK-NOT: @f2 diff --git a/test/Linker/prefixdata.ll b/test/Linker/prefixdata.ll deleted file mode 100644 index 1f11dc7..0000000 --- a/test/Linker/prefixdata.ll +++ /dev/null @@ -1,9 +0,0 @@ -; RUN: echo > %t.ll -; RUN: llvm-link %t.ll %s -S -o - | FileCheck %s - -@i = linkonce_odr global i32 1 - -; CHECK: define void @f() prefix i32* @i -define void @f() prefix i32* @i { - ret void -} diff --git a/test/Linker/prologuedata.ll b/test/Linker/prologuedata.ll new file mode 100644 index 0000000..70204fd --- /dev/null +++ b/test/Linker/prologuedata.ll @@ -0,0 +1,21 @@ +; RUN: llvm-link %s -S -o - | FileCheck %s + +@g1 = global void()* @f2 +; CHECK: @g1 = global void ()* @f2 + +@p1 = global i8 42 +; CHECK: @p1 = global i8 42 + +@p2 = internal global i8 43 +; CHECK: @p2 = internal global i8 43 + +define void @f1() prologue i8* @p1 { + ret void +} +; CHECK: define void @f1() prologue i8* @p1 { + +define internal void @f2() prologue i8* @p2 { + ret void +} + +; CHECK: define internal void @f2() prologue i8* @p2 { diff --git a/test/Linker/replaced-function-matches-first-subprogram.ll b/test/Linker/replaced-function-matches-first-subprogram.ll new file mode 100644 index 0000000..c0ec5f3 --- /dev/null +++ b/test/Linker/replaced-function-matches-first-subprogram.ll @@ -0,0 +1,75 @@ +; RUN: llvm-link %s %S/Inputs/replaced-function-matches-first-subprogram.ll -S | FileCheck %s + +; Generated from C++ source: +; +; // repro/t.h +; template <class T> struct Class { +; int foo() { return 0; } +; }; +; // repro/d1/t1.cpp +; #include "t.h" +; int foo() { return Class<int>().foo(); } +; // repro/d2/t2.cpp +; #include "t.h" +; template struct Class<int>; + +%struct.Class = type { i8 } + +define i32 @_Z3foov() { +entry: + %tmp = alloca %struct.Class, align 1 + %call = call i32 @_ZN5ClassIiE3fooEv(%struct.Class* %tmp), !dbg !14 + ret i32 %call, !dbg !14 +} + +; CHECK: define weak_odr i32 @_ZN5ClassIiE3fooEv(%struct.Class* %this){{.*}}{ +; CHECK-NOT: } +; CHECK: !dbg ![[LOC:[0-9]+]] +define linkonce_odr i32 @_ZN5ClassIiE3fooEv(%struct.Class* %this) align 2 { +entry: + %this.addr = alloca %struct.Class*, align 8 + store %struct.Class* %this, %struct.Class** %this.addr, align 8 + %this1 = load %struct.Class** %this.addr + ret i32 0, !dbg !15 +} + +; CHECK: !llvm.dbg.cu = !{![[CU1:[0-9]+]], ![[CU2:[0-9]+]]} +!llvm.dbg.cu = !{!0} +!llvm.module.flags = !{!10, !11, !12} +!llvm.ident = !{!13} + +; Extract out the list of subprograms from each compile unit. +; CHECK-DAG: ![[CU1]] = !{!"0x11{{[^"]+}}", {{[^,]+}}, {{[^,]+}}, {{[^,]+}}, ![[SPs1:[0-9]+]], +; CHECK-DAG: ![[CU2]] = !{!"0x11{{[^"]+}}", {{[^,]+}}, {{[^,]+}}, {{[^,]+}}, ![[SPs2:[0-9]+]], +!0 = !{!"0x11\004\00clang version 3.6.0 (trunk 224193) (llvm/trunk 224197)\000\00\000\00\002", !1, !2, !2, !3, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d1/t1.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"t1.cpp", !"/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d1"} +!2 = !{} + +; Extract out each compile unit's single subprogram. The replaced subprogram +; should be dropped by the first compile unit. +; CHECK-DAG: ![[SPs1]] = !{![[SP1:[0-9]+]]} +; CHECK-DAG: ![[SPs2]] = !{![[SP2:[0-9]+]]} +!3 = !{!4, !7} +!4 = !{!"0x2e\00foo\00foo\00\002\000\001\000\000\00256\000\002", !1, !5, !6, null, i32 ()* @_Z3foov, null, null, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [foo] +!5 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d1/t1.cpp] +!6 = !{!"0x15\00\000\000\000\000\000\000", null, null, null, !2, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] + +; Extract out the file from the replaced subprogram. Confirm that each +; subprogram is pointing at the correct function. +; CHECK-DAG: ![[SP1]] = !{!"0x2e{{[^"]+}}", {{.*}}, i32 ()* @_Z3foov, +; CHECK-DAG: ![[SP2]] = !{!"0x2e{{[^"]+}}", ![[FILE:[0-9]+]], {{.*}}, i32 (%struct.Class*)* @_ZN5ClassIiE3fooEv, +!7 = !{!"0x2e\00foo\00foo\00\002\000\001\000\000\00256\000\002", !8, !9, !6, null, i32 (%struct.Class*)* @_ZN5ClassIiE3fooEv, null, null, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [foo] + +; The new subprogram should be pointing at the new directory. +; CHECK-DAG: ![[FILE]] = !{!"../t.h", !"/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d2"} +!8 = !{!"../t.h", !"/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d1"} +!9 = !{!"0x29", !8} ; [ DW_TAG_file_type ] [/Users/dexonsmith/data/llvm/staging/test/Linker/repro/d1/../t.h] +!10 = !{i32 2, !"Dwarf Version", i32 2} +!11 = !{i32 2, !"Debug Info Version", i32 2} +!12 = !{i32 1, !"PIC Level", i32 2} +!13 = !{!"clang version 3.6.0 (trunk 224193) (llvm/trunk 224197)"} +!14 = !MDLocation(line: 2, column: 20, scope: !4) + +; The same subprogram should be pointed to by inside the !dbg reference. +; CHECK: ![[LOC]] = !MDLocation(line: 2, column: 15, scope: ![[SP2]]) +!15 = !MDLocation(line: 2, column: 15, scope: !7) diff --git a/test/Linker/targettriple.ll b/test/Linker/targettriple.ll index c544a14..8778706 100644 --- a/test/Linker/targettriple.ll +++ b/test/Linker/targettriple.ll @@ -1,17 +1,23 @@ ; REQUIRES: shell ; RUN: llvm-link %s %S/Inputs/targettriple-a.ll -S -o - 2>%t.a.err | FileCheck %s -; RUN: (echo foo ;cat %t.a.err) | FileCheck --check-prefix=WARN-A %s +; RUN: cat %t.a.err | FileCheck --check-prefix=WARN-A %s --allow-empty ; RUN: llvm-link %s %S/Inputs/targettriple-b.ll -S -o - 2>%t.b.err | FileCheck %s ; RUN: cat %t.b.err | FileCheck --check-prefix=WARN-B %s +; RUN: llvm-link %s %S/Inputs/targettriple-c.ll -S -o - 2>%t.c.err | FileCheck %s +; RUN: cat %t.c.err | FileCheck --check-prefix=WARN-C %s --allow-empty ; RUN: llvm-link -suppress-warnings %s %S/Inputs/targettriple-b.ll -S -o - 2>%t.no-warn.err | FileCheck %s -; RUN: (echo foo ;cat %t.no-warn.err) | FileCheck --check-prefix=WARN-A %s +; RUN: cat %t.no-warn.err | FileCheck --check-prefix=WARN-A %s --allow-empty -target triple = "e" +target triple = "x86_64-unknown-linux-gnu" -; CHECK: target triple = "e" +; CHECK: target triple = "x86_64-unknown-linux-gnu" ; WARN-A-NOT: WARNING +; i386 and x86_64 map to different ArchType enums. ; WARN-B: WARNING: Linking two modules of different target triples: + +; x86_64h and x86_64 map to the same ArchType enum. +; WARN-C-NOT: WARNING diff --git a/test/Linker/testlink1.ll b/test/Linker/testlink.ll index 6ba6fd5..aad4b9b 100644 --- a/test/Linker/testlink1.ll +++ b/test/Linker/testlink.ll @@ -1,6 +1,4 @@ -; RUN: llvm-as < %s > %t.bc -; RUN: llvm-as < %p/testlink2.ll > %t2.bc -; RUN: llvm-link %t.bc %t2.bc -S | FileCheck %s +; RUN: llvm-link %s %S/Inputs/testlink.ll -S | FileCheck %s ; CHECK: %Ty2 = type { %Ty1* } ; CHECK: %Ty1 = type { %Ty2* } @@ -26,46 +24,51 @@ ; This should stay the same -; CHECK: @MyIntList = global %intlist { %intlist* null, i32 17 } +; CHECK-DAG: @MyIntList = global %intlist { %intlist* null, i32 17 } @MyIntList = global %intlist { %intlist* null, i32 17 } ; Nothing to link here. -; CHECK: @0 = external global i32 +; CHECK-DAG: @0 = external global i32 @0 = external global i32 -; CHECK: @Inte = global i32 1 +; CHECK-DAG: @Inte = global i32 1 @Inte = global i32 1 ; Intern1 is intern in both files, rename testlink2's. -; CHECK: @Intern1 = internal constant i32 42 +; CHECK-DAG: @Intern1 = internal constant i32 42 @Intern1 = internal constant i32 42 +@UseIntern1 = global i32* @Intern1 + ; This should get renamed since there is a definition that is non-internal in ; the other module. -; CHECK: @Intern2{{[0-9]+}} = internal constant i32 792 +; CHECK-DAG: @Intern2{{[0-9]+}} = internal constant i32 792 @Intern2 = internal constant i32 792 +@UseIntern2 = global i32* @Intern2 -; CHECK: @MyVarPtr = linkonce global { i32* } { i32* @MyVar } +; CHECK-DAG: @MyVarPtr = linkonce global { i32* } { i32* @MyVar } @MyVarPtr = linkonce global { i32* } { i32* @MyVar } -; CHECK: @MyVar = global i32 4 +@UseMyVarPtr = global { i32* }* @MyVarPtr + +; CHECK-DAG: @MyVar = global i32 4 @MyVar = external global i32 ; Take value from other module. -; CHECK: AConst = constant i32 1234 +; CHECK-DAG: AConst = constant i32 1234 @AConst = linkonce constant i32 123 ; Renamed version of Intern1. -; CHECK: @Intern1{{[0-9]+}} = internal constant i32 52 +; CHECK-DAG: @Intern1{{[0-9]+}} = internal constant i32 52 ; Globals linked from testlink2. -; CHECK: @Intern2 = constant i32 12345 +; CHECK-DAG: @Intern2 = constant i32 12345 -; CHECK: @MyIntListPtr = constant -; CHECK: @1 = constant i32 412 +; CHECK-DAG: @MyIntListPtr = constant +; CHECK-DAG: @1 = constant i32 412 declare i32 @foo(i32) diff --git a/test/Linker/type-unique-alias.ll b/test/Linker/type-unique-alias.ll new file mode 100644 index 0000000..e43450f --- /dev/null +++ b/test/Linker/type-unique-alias.ll @@ -0,0 +1,10 @@ +; RUN: llvm-link -S %s %p/Inputs/type-unique-alias.ll | FileCheck %s + +%t = type { i8 } + +@g = global %t zeroinitializer +@a = weak alias %t* @g + +; CHECK: @g = global %t zeroinitializer +; CHECK: @g2 = global %t zeroinitializer +; CHECK: @a = weak alias %t* @g diff --git a/test/Linker/type-unique-dst-types.ll b/test/Linker/type-unique-dst-types.ll new file mode 100644 index 0000000..30aecbb --- /dev/null +++ b/test/Linker/type-unique-dst-types.ll @@ -0,0 +1,19 @@ +; RUN: llvm-link %p/type-unique-dst-types.ll \ +; RUN: %p/Inputs/type-unique-dst-types2.ll \ +; RUN: %p/Inputs/type-unique-dst-types3.ll -S -o - | FileCheck %s + +; This tests the importance of keeping track of which types are part of the +; destination module. +; When the second input is merged in, the context gets an unused A.11. When +; the third module is then merged, we should pretend it doesn't exist. + +; CHECK: %A = type { %B } +; CHECK-NEXT: %B = type { i8 } + +; CHECK: @g3 = external global %A +; CHECK: @g1 = external global %A +; CHECK: @g2 = external global %A + +%A = type { %B } +%B = type { i8 } +@g3 = external global %A diff --git a/test/Linker/type-unique-name.ll b/test/Linker/type-unique-name.ll new file mode 100644 index 0000000..191b6dd --- /dev/null +++ b/test/Linker/type-unique-name.ll @@ -0,0 +1,13 @@ +; RUN: llvm-link -S %s %p/Inputs/type-unique-name.ll | FileCheck %s + +; Test that we keep the type name +; CHECK: %abc = type { i8 } + +%abc = type opaque + +declare %abc* @f() + +define %abc* @g() { + %x = call %abc* @f() + ret %abc* %x +} diff --git a/test/Linker/type-unique-odr-a.ll b/test/Linker/type-unique-odr-a.ll index e17cd2b..900b035 100644 --- a/test/Linker/type-unique-odr-a.ll +++ b/test/Linker/type-unique-odr-a.ll @@ -59,7 +59,7 @@ entry: define internal void @_ZL3barv() #0 { entry: %a = alloca %class.A, align 4 - call void @llvm.dbg.declare(metadata !{%class.A* %a}, metadata !24, metadata !{metadata !"0x102"}), !dbg !25 + call void @llvm.dbg.declare(metadata %class.A* %a, metadata !24, metadata !{!"0x102"}), !dbg !25 ret void, !dbg !26 } @@ -73,30 +73,30 @@ attributes #1 = { nounwind readnone } !llvm.module.flags = !{!20, !21} !llvm.ident = !{!22} -!0 = metadata !{metadata !"0x11\004\00clang version 3.5.0 \000\00\000\00\001", metadata !1, metadata !2, metadata !3, metadata !14, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [<unknown>] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"<unknown>", metadata !""} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x2\00A\001\0032\0032\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 1, size 32, align 32, offset 0] [def] [from ] -!5 = metadata !{metadata !"type-unique-odr-a.cpp", metadata !""} -!6 = metadata !{metadata !7, metadata !9} -!7 = metadata !{metadata !"0xd\00data\002\0032\0032\000\001", metadata !5, metadata !"_ZTS1A", metadata !8} ; [ DW_TAG_member ] [data] [line 2, size 32, align 32, offset 0] [private] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\004\000\000\000\006\00258\000\004", metadata !5, metadata !"_ZTS1A", metadata !10, null, null, null, i32 0, metadata !13} ; [ DW_TAG_subprogram ] [line 4] [protected] [getFoo] -!10 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !11, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!11 = metadata !{null, metadata !12} -!12 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] -!13 = metadata !{i32 786468} -!14 = metadata !{metadata !15, metadata !19} -!15 = metadata !{metadata !"0x2e\00baz\00baz\00_Z3bazv\0011\000\001\000\006\00256\000\0011", metadata !5, metadata !16, metadata !17, null, void ()* @_Z3bazv, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 11] [def] [baz] -!16 = metadata !{metadata !"0x29", metadata !5} ; [ DW_TAG_file_type ] [type-unique-odr-a.cpp] -!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!18 = metadata !{null} -!19 = metadata !{metadata !"0x2e\00bar\00bar\00_ZL3barv\007\001\001\000\006\00256\000\007", metadata !5, metadata !16, metadata !17, null, void ()* @_ZL3barv, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 7] [local] [def] [bar] -!20 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} -!21 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} -!22 = metadata !{metadata !"clang version 3.5.0 "} -!23 = metadata !{i32 11, i32 0, metadata !15, null} -!24 = metadata !{metadata !"0x100\00a\008\000", metadata !19, metadata !16, metadata !"_ZTS1A"} ; [ DW_TAG_auto_variable ] [a] [line 8] -!25 = metadata !{i32 8, i32 0, metadata !19, null} -!26 = metadata !{i32 9, i32 0, metadata !19, null} +!0 = !{!"0x11\004\00clang version 3.5.0 \000\00\000\00\001", !1, !2, !3, !14, !2, !2} ; [ DW_TAG_compile_unit ] [<unknown>] [DW_LANG_C_plus_plus] +!1 = !{!"<unknown>", !""} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x2\00A\001\0032\0032\000\000\000", !5, null, null, !6, null, null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 1, size 32, align 32, offset 0] [def] [from ] +!5 = !{!"type-unique-odr-a.cpp", !""} +!6 = !{!7, !9} +!7 = !{!"0xd\00data\002\0032\0032\000\001", !5, !"_ZTS1A", !8} ; [ DW_TAG_member ] [data] [line 2, size 32, align 32, offset 0] [private] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\004\000\000\000\006\00258\000\004", !5, !"_ZTS1A", !10, null, null, null, i32 0, !13} ; [ DW_TAG_subprogram ] [line 4] [protected] [getFoo] +!10 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !11, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!11 = !{null, !12} +!12 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] +!13 = !{i32 786468} +!14 = !{!15, !19} +!15 = !{!"0x2e\00baz\00baz\00_Z3bazv\0011\000\001\000\006\00256\000\0011", !5, !16, !17, null, void ()* @_Z3bazv, null, null, !2} ; [ DW_TAG_subprogram ] [line 11] [def] [baz] +!16 = !{!"0x29", !5} ; [ DW_TAG_file_type ] [type-unique-odr-a.cpp] +!17 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!18 = !{null} +!19 = !{!"0x2e\00bar\00bar\00_ZL3barv\007\001\001\000\006\00256\000\007", !5, !16, !17, null, void ()* @_ZL3barv, null, null, !2} ; [ DW_TAG_subprogram ] [line 7] [local] [def] [bar] +!20 = !{i32 2, !"Dwarf Version", i32 4} +!21 = !{i32 1, !"Debug Info Version", i32 2} +!22 = !{!"clang version 3.5.0 "} +!23 = !MDLocation(line: 11, scope: !15) +!24 = !{!"0x100\00a\008\000", !19, !16, !"_ZTS1A"} ; [ DW_TAG_auto_variable ] [a] [line 8] +!25 = !MDLocation(line: 8, scope: !19) +!26 = !MDLocation(line: 9, scope: !19) diff --git a/test/Linker/type-unique-odr-b.ll b/test/Linker/type-unique-odr-b.ll index e5f094e..b262191 100644 --- a/test/Linker/type-unique-odr-b.ll +++ b/test/Linker/type-unique-odr-b.ll @@ -26,7 +26,7 @@ define void @_ZN1A6getFooEv(%class.A* %this) #0 align 2 { entry: %this.addr = alloca %class.A*, align 8 store %class.A* %this, %class.A** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %this.addr}, metadata !24, metadata !{metadata !"0x102"}), !dbg !26 + call void @llvm.dbg.declare(metadata %class.A** %this.addr, metadata !24, metadata !{!"0x102"}), !dbg !26 %this1 = load %class.A** %this.addr ret void, !dbg !27 } @@ -54,33 +54,33 @@ attributes #1 = { nounwind readnone } !llvm.module.flags = !{!21, !22} !llvm.ident = !{!23} -!0 = metadata !{metadata !"0x11\004\00clang version 3.5.0 \000\00\000\00\001", metadata !1, metadata !2, metadata !3, metadata !14, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [<unknown>] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"<unknown>", metadata !""} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x2\00A\002\0032\0032\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 32, align 32, offset 0] [def] [from ] -!5 = metadata !{metadata !"type-unique-odr-b.cpp", metadata !""} -!6 = metadata !{metadata !7, metadata !9} -!7 = metadata !{metadata !"0xd\00data\003\0032\0032\000\001", metadata !5, metadata !"_ZTS1A", metadata !8} ; [ DW_TAG_member ] [data] [line 3, size 32, align 32, offset 0] [private] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\005\000\000\000\006\00258\000\005", metadata !5, metadata !"_ZTS1A", metadata !10, null, null, null, i32 0, metadata !13} ; [ DW_TAG_subprogram ] [line 5] [protected] [getFoo] -!10 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !11, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!11 = metadata !{null, metadata !12} -!12 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] -!13 = metadata !{i32 786468} -!14 = metadata !{metadata !15, metadata !16, metadata !20} -!15 = metadata !{metadata !"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\008\000\001\000\006\00256\000\008", metadata !5, metadata !"_ZTS1A", metadata !10, null, void (%class.A*)* @_ZN1A6getFooEv, null, metadata !9, metadata !2} ; [ DW_TAG_subprogram ] [line 8] [def] [getFoo] -!16 = metadata !{metadata !"0x2e\00f\00f\00_Z1fv\0011\000\001\000\006\00256\000\0011", metadata !5, metadata !17, metadata !18, null, void ()* @_Z1fv, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 11] [def] [f] -!17 = metadata !{metadata !"0x29", metadata !5} ; [ DW_TAG_file_type ] [type-unique-odr-b.cpp] -!18 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !19, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!19 = metadata !{null} -!20 = metadata !{metadata !"0x2e\00bar\00bar\00_ZL3barv\0010\001\001\000\006\00256\000\0010", metadata !5, metadata !17, metadata !18, null, void ()* @_ZL3barv, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 10] [local] [def] [bar] -!21 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} -!22 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} -!23 = metadata !{metadata !"clang version 3.5.0 "} -!24 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !15, null, metadata !25} ; [ DW_TAG_arg_variable ] [this] [line 0] -!25 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] -!26 = metadata !{i32 0, i32 0, metadata !15, null} -!27 = metadata !{i32 8, i32 0, metadata !15, null} -!28 = metadata !{i32 11, i32 0, metadata !16, null} -!29 = metadata !{i32 10, i32 0, metadata !20, null} +!0 = !{!"0x11\004\00clang version 3.5.0 \000\00\000\00\001", !1, !2, !3, !14, !2, !2} ; [ DW_TAG_compile_unit ] [<unknown>] [DW_LANG_C_plus_plus] +!1 = !{!"<unknown>", !""} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x2\00A\002\0032\0032\000\000\000", !5, null, null, !6, null, null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 32, align 32, offset 0] [def] [from ] +!5 = !{!"type-unique-odr-b.cpp", !""} +!6 = !{!7, !9} +!7 = !{!"0xd\00data\003\0032\0032\000\001", !5, !"_ZTS1A", !8} ; [ DW_TAG_member ] [data] [line 3, size 32, align 32, offset 0] [private] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\005\000\000\000\006\00258\000\005", !5, !"_ZTS1A", !10, null, null, null, i32 0, !13} ; [ DW_TAG_subprogram ] [line 5] [protected] [getFoo] +!10 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !11, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!11 = !{null, !12} +!12 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] +!13 = !{i32 786468} +!14 = !{!15, !16, !20} +!15 = !{!"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\008\000\001\000\006\00256\000\008", !5, !"_ZTS1A", !10, null, void (%class.A*)* @_ZN1A6getFooEv, null, !9, !2} ; [ DW_TAG_subprogram ] [line 8] [def] [getFoo] +!16 = !{!"0x2e\00f\00f\00_Z1fv\0011\000\001\000\006\00256\000\0011", !5, !17, !18, null, void ()* @_Z1fv, null, null, !2} ; [ DW_TAG_subprogram ] [line 11] [def] [f] +!17 = !{!"0x29", !5} ; [ DW_TAG_file_type ] [type-unique-odr-b.cpp] +!18 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !19, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!19 = !{null} +!20 = !{!"0x2e\00bar\00bar\00_ZL3barv\0010\001\001\000\006\00256\000\0010", !5, !17, !18, null, void ()* @_ZL3barv, null, null, !2} ; [ DW_TAG_subprogram ] [line 10] [local] [def] [bar] +!21 = !{i32 2, !"Dwarf Version", i32 4} +!22 = !{i32 1, !"Debug Info Version", i32 2} +!23 = !{!"clang version 3.5.0 "} +!24 = !{!"0x101\00this\0016777216\001088", !15, null, !25} ; [ DW_TAG_arg_variable ] [this] [line 0] +!25 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] +!26 = !MDLocation(line: 0, scope: !15) +!27 = !MDLocation(line: 8, scope: !15) +!28 = !MDLocation(line: 11, scope: !16) +!29 = !MDLocation(line: 10, scope: !20) diff --git a/test/Linker/type-unique-opaque.ll b/test/Linker/type-unique-opaque.ll new file mode 100644 index 0000000..b4f6966 --- /dev/null +++ b/test/Linker/type-unique-opaque.ll @@ -0,0 +1,16 @@ +; RUN: llvm-link -S %s %p/Inputs/type-unique-opaque.ll | FileCheck %s + +; Test that a failed attempt at merging %u2 and %t2 (for the other file) will +; not cause %u and %t to get merged. + +; CHECK: %u = type opaque +; CHECK: define %u* @g() { + +%u = type opaque +%u2 = type { %u*, i8 } + +declare %u2* @f() + +define %u* @g() { + ret %u* null +} diff --git a/test/Linker/type-unique-simple-a.ll b/test/Linker/type-unique-simple-a.ll index c01cd5c..ef29cd9 100644 --- a/test/Linker/type-unique-simple-a.ll +++ b/test/Linker/type-unique-simple-a.ll @@ -54,8 +54,8 @@ entry: %a.addr = alloca i32, align 4 %t = alloca %struct.Base, align 4 store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %a.addr}, metadata !15, metadata !{metadata !"0x102"}), !dbg !16 - call void @llvm.dbg.declare(metadata !{%struct.Base* %t}, metadata !17, metadata !{metadata !"0x102"}), !dbg !18 + call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !15, metadata !{!"0x102"}), !dbg !16 + call void @llvm.dbg.declare(metadata %struct.Base* %t, metadata !17, metadata !{!"0x102"}), !dbg !18 ret void, !dbg !19 } @@ -68,24 +68,24 @@ attributes #1 = { nounwind readnone } !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!14, !20} -!0 = metadata !{metadata !"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git c23b1db6268c8e7ce64026d57d1510c1aac200a0) (http://llvm.org/git/llvm.git 09b98fe3978eddefc2145adc1056cf21580ce945)\000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !9, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/simple/foo.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"foo.cpp", metadata !"/Users/mren/c_testing/type_unique_air/simple"} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x13\00Base\001\0032\0032\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 32, align 32, offset 0] [def] [from ] -!5 = metadata !{metadata !"./a.hpp", metadata !"/Users/mren/c_testing/type_unique_air/simple"} -!6 = metadata !{metadata !7} -!7 = metadata !{metadata !"0xd\00a\002\0032\0032\000\000", metadata !5, metadata !"_ZTS4Base", metadata !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !10} -!10 = metadata !{metadata !"0x2e\00f\00f\00_Z1fi\003\000\001\000\006\00256\000\003", metadata !1, metadata !11, metadata !12, null, void (i32)* @_Z1fi, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 3] [def] [f] -!11 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/simple/foo.cpp] -!12 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !13, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!13 = metadata !{null, metadata !8} -!14 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!15 = metadata !{metadata !"0x101\00a\0016777219\000", metadata !10, metadata !11, metadata !8} ; [ DW_TAG_arg_variable ] [a] [line 3] -!16 = metadata !{i32 3, i32 0, metadata !10, null} -!17 = metadata !{metadata !"0x100\00t\004\000", metadata !10, metadata !11, metadata !4} ; [ DW_TAG_auto_variable ] [t] [line 4] -!18 = metadata !{i32 4, i32 0, metadata !10, null} -!19 = metadata !{i32 5, i32 0, metadata !10, null} -!20 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git c23b1db6268c8e7ce64026d57d1510c1aac200a0) (http://llvm.org/git/llvm.git 09b98fe3978eddefc2145adc1056cf21580ce945)\000\00\000\00\000", !1, !2, !3, !9, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/simple/foo.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"foo.cpp", !"/Users/mren/c_testing/type_unique_air/simple"} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x13\00Base\001\0032\0032\000\000\000", !5, null, null, !6, null, null, !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 32, align 32, offset 0] [def] [from ] +!5 = !{!"./a.hpp", !"/Users/mren/c_testing/type_unique_air/simple"} +!6 = !{!7} +!7 = !{!"0xd\00a\002\0032\0032\000\000", !5, !"_ZTS4Base", !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!10} +!10 = !{!"0x2e\00f\00f\00_Z1fi\003\000\001\000\006\00256\000\003", !1, !11, !12, null, void (i32)* @_Z1fi, null, null, !2} ; [ DW_TAG_subprogram ] [line 3] [def] [f] +!11 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/simple/foo.cpp] +!12 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !13, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!13 = !{null, !8} +!14 = !{i32 2, !"Dwarf Version", i32 2} +!15 = !{!"0x101\00a\0016777219\000", !10, !11, !8} ; [ DW_TAG_arg_variable ] [a] [line 3] +!16 = !MDLocation(line: 3, scope: !10) +!17 = !{!"0x100\00t\004\000", !10, !11, !4} ; [ DW_TAG_auto_variable ] [t] [line 4] +!18 = !MDLocation(line: 4, scope: !10) +!19 = !MDLocation(line: 5, scope: !10) +!20 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/type-unique-simple-b.ll b/test/Linker/type-unique-simple-b.ll index fabdb03..fb1a529 100644 --- a/test/Linker/type-unique-simple-b.ll +++ b/test/Linker/type-unique-simple-b.ll @@ -10,8 +10,8 @@ entry: %a.addr = alloca i32, align 4 %t = alloca %struct.Base, align 4 store i32 %a, i32* %a.addr, align 4 - call void @llvm.dbg.declare(metadata !{i32* %a.addr}, metadata !18, metadata !{metadata !"0x102"}), !dbg !19 - call void @llvm.dbg.declare(metadata !{%struct.Base* %t}, metadata !20, metadata !{metadata !"0x102"}), !dbg !21 + call void @llvm.dbg.declare(metadata i32* %a.addr, metadata !18, metadata !{!"0x102"}), !dbg !19 + call void @llvm.dbg.declare(metadata %struct.Base* %t, metadata !20, metadata !{!"0x102"}), !dbg !21 ret void, !dbg !22 } @@ -38,30 +38,30 @@ attributes #3 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "n !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!17, !26} -!0 = metadata !{metadata !"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git c23b1db6268c8e7ce64026d57d1510c1aac200a0) (http://llvm.org/git/llvm.git 09b98fe3978eddefc2145adc1056cf21580ce945)\000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !9, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/simple/bar.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"bar.cpp", metadata !"/Users/mren/c_testing/type_unique_air/simple"} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x13\00Base\001\0032\0032\000\000\000", metadata !5, null, null, metadata !6, null, null, metadata !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 32, align 32, offset 0] [def] [from ] -!5 = metadata !{metadata !"./a.hpp", metadata !"/Users/mren/c_testing/type_unique_air/simple"} -!6 = metadata !{metadata !7} -!7 = metadata !{metadata !"0xd\00a\002\0032\0032\000\000", metadata !5, metadata !"_ZTS4Base", metadata !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!8 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!9 = metadata !{metadata !10, metadata !14} -!10 = metadata !{metadata !"0x2e\00g\00g\00_Z1gi\004\000\001\000\006\00256\000\004", metadata !1, metadata !11, metadata !12, null, void (i32)* @_Z1gi, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 4] [def] [g] -!11 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/simple/bar.cpp] -!12 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !13, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!13 = metadata !{null, metadata !8} -!14 = metadata !{metadata !"0x2e\00main\00main\00\007\000\001\000\006\00256\000\007", metadata !1, metadata !11, metadata !15, null, i32 ()* @main, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 7] [def] [main] -!15 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !16, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!16 = metadata !{metadata !8} -!17 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!18 = metadata !{metadata !"0x101\00a\0016777220\000", metadata !10, metadata !11, metadata !8} ; [ DW_TAG_arg_variable ] [a] [line 4] -!19 = metadata !{i32 4, i32 0, metadata !10, null} -!20 = metadata !{metadata !"0x100\00t\005\000", metadata !10, metadata !11, metadata !4} ; [ DW_TAG_auto_variable ] [t] [line 5] -!21 = metadata !{i32 5, i32 0, metadata !10, null} -!22 = metadata !{i32 6, i32 0, metadata !10, null} -!23 = metadata !{i32 8, i32 0, metadata !14, null} -!24 = metadata !{i32 9, i32 0, metadata !14, null} -!25 = metadata !{i32 10, i32 0, metadata !14, null} -!26 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} +!0 = !{!"0x11\004\00clang version 3.4 (http://llvm.org/git/clang.git c23b1db6268c8e7ce64026d57d1510c1aac200a0) (http://llvm.org/git/llvm.git 09b98fe3978eddefc2145adc1056cf21580ce945)\000\00\000\00\000", !1, !2, !3, !9, !2, !2} ; [ DW_TAG_compile_unit ] [/Users/mren/c_testing/type_unique_air/simple/bar.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"bar.cpp", !"/Users/mren/c_testing/type_unique_air/simple"} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x13\00Base\001\0032\0032\000\000\000", !5, null, null, !6, null, null, !"_ZTS4Base"} ; [ DW_TAG_structure_type ] [Base] [line 1, size 32, align 32, offset 0] [def] [from ] +!5 = !{!"./a.hpp", !"/Users/mren/c_testing/type_unique_air/simple"} +!6 = !{!7} +!7 = !{!"0xd\00a\002\0032\0032\000\000", !5, !"_ZTS4Base", !8} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] +!8 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!9 = !{!10, !14} +!10 = !{!"0x2e\00g\00g\00_Z1gi\004\000\001\000\006\00256\000\004", !1, !11, !12, null, void (i32)* @_Z1gi, null, null, !2} ; [ DW_TAG_subprogram ] [line 4] [def] [g] +!11 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [/Users/mren/c_testing/type_unique_air/simple/bar.cpp] +!12 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !13, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!13 = !{null, !8} +!14 = !{!"0x2e\00main\00main\00\007\000\001\000\006\00256\000\007", !1, !11, !15, null, i32 ()* @main, null, null, !2} ; [ DW_TAG_subprogram ] [line 7] [def] [main] +!15 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !16, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!16 = !{!8} +!17 = !{i32 2, !"Dwarf Version", i32 2} +!18 = !{!"0x101\00a\0016777220\000", !10, !11, !8} ; [ DW_TAG_arg_variable ] [a] [line 4] +!19 = !MDLocation(line: 4, scope: !10) +!20 = !{!"0x100\00t\005\000", !10, !11, !4} ; [ DW_TAG_auto_variable ] [t] [line 5] +!21 = !MDLocation(line: 5, scope: !10) +!22 = !MDLocation(line: 6, scope: !10) +!23 = !MDLocation(line: 8, scope: !14) +!24 = !MDLocation(line: 9, scope: !14) +!25 = !MDLocation(line: 10, scope: !14) +!26 = !{i32 1, !"Debug Info Version", i32 2} diff --git a/test/Linker/type-unique-simple2-a.ll b/test/Linker/type-unique-simple2-a.ll index 691c5c5..72a776b 100644 --- a/test/Linker/type-unique-simple2-a.ll +++ b/test/Linker/type-unique-simple2-a.ll @@ -48,7 +48,7 @@ define linkonce_odr void @_ZN1AC1Ev(%class.A* %this) unnamed_addr #2 align 2 { entry: %this.addr = alloca %class.A*, align 8 store %class.A* %this, %class.A** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %this.addr}, metadata !39, metadata !{metadata !"0x102"}), !dbg !41 + call void @llvm.dbg.declare(metadata %class.A** %this.addr, metadata !39, metadata !{!"0x102"}), !dbg !41 %this1 = load %class.A** %this.addr call void @_ZN1AC2Ev(%class.A* %this1) #1, !dbg !42 ret void, !dbg !42 @@ -64,7 +64,7 @@ define linkonce_odr void @_ZN1AC2Ev(%class.A* %this) unnamed_addr #2 align 2 { entry: %this.addr = alloca %class.A*, align 8 store %class.A* %this, %class.A** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %this.addr}, metadata !44, metadata !{metadata !"0x102"}), !dbg !45 + call void @llvm.dbg.declare(metadata %class.A** %this.addr, metadata !44, metadata !{!"0x102"}), !dbg !45 %this1 = load %class.A** %this.addr %0 = bitcast %class.A* %this1 to i8***, !dbg !46 store i8** getelementptr inbounds ([4 x i8*]* @_ZTV1A, i64 0, i64 2), i8*** %0, !dbg !46 @@ -80,50 +80,50 @@ attributes #4 = { nounwind readnone } !llvm.module.flags = !{!35, !36} !llvm.ident = !{!37} -!0 = metadata !{metadata !"0x11\004\00clang version 3.5 \000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !26, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [/<unknown>] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"<unknown>", metadata !""} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x2\00A\002\0064\0064\000\000\000", metadata !5, null, null, metadata !6, metadata !"_ZTS1A", null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 64, align 64, offset 0] [def] [from ] -!5 = metadata !{metadata !"./ab.h", metadata !""} -!6 = metadata !{metadata !7, metadata !14, metadata !19} -!7 = metadata !{metadata !"0xd\00_vptr$A\000\0064\000\000\0064", metadata !5, metadata !8, metadata !9} ; [ DW_TAG_member ] [_vptr$A] [line 0, size 64, align 0, offset 0] [artificial] [from ] -!8 = metadata !{metadata !"0x29", metadata !5} ; [ DW_TAG_file_type ] [/./ab.h] -!9 = metadata !{metadata !"0xf\00\000\0064\000\000\000", null, null, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from __vtbl_ptr_type] -!10 = metadata !{metadata !"0xf\00__vtbl_ptr_type\000\0064\000\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] [__vtbl_ptr_type] [line 0, size 64, align 0, offset 0] [from ] -!11 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !12, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!12 = metadata !{metadata !13} -!13 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!14 = metadata !{metadata !"0x2e\00setFoo\00setFoo\00_ZN1A6setFooEv\004\000\000\001\006\00259\000\004", metadata !5, metadata !"_ZTS1A", metadata !15, metadata !"_ZTS1A", null, null, i32 0, metadata !18} ; [ DW_TAG_subprogram ] [line 4] [setFoo] -!15 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !16, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!16 = metadata !{null, metadata !17} -!17 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] -!18 = metadata !{i32 786468} -!19 = metadata !{metadata !"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\005\000\000\001\006\00259\000\005", metadata !5, metadata !"_ZTS1A", metadata !20, metadata !"_ZTS1A", null, null, i32 0, metadata !25} ; [ DW_TAG_subprogram ] [line 5] [getFoo] -!20 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !21, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!21 = metadata !{metadata !22, metadata !17} -!22 = metadata !{metadata !"0x26\00\000\000\000\000\000", null, null, metadata !23} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from foo_t] -!23 = metadata !{metadata !"0x16\00foo_t\001\000\000\000\000", metadata !24, null, metadata !13} ; [ DW_TAG_typedef ] [foo_t] [line 1, size 0, align 0, offset 0] [from int] -!24 = metadata !{metadata !"a.cpp", metadata !""} -!25 = metadata !{i32 786468} -!26 = metadata !{metadata !27, metadata !31, metadata !34} -!27 = metadata !{metadata !"0x2e\00bar\00bar\00_Z3barv\002\000\001\000\006\00256\000\002", metadata !24, metadata !28, metadata !29, null, i32 ()* @_Z3barv, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 2] [def] [bar] -!28 = metadata !{metadata !"0x29", metadata !24} ; [ DW_TAG_file_type ] [/a.cpp] -!29 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !30, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!30 = metadata !{metadata !23} -!31 = metadata !{metadata !"0x2e\00A\00A\00_ZN1AC1Ev\002\000\001\000\006\00320\000\002", metadata !5, metadata !"_ZTS1A", metadata !15, null, void (%class.A*)* @_ZN1AC1Ev, null, metadata !32, metadata !2} ; [ DW_TAG_subprogram ] [line 2] [def] [A] -!32 = metadata !{metadata !"0x2e\00A\00A\00\000\000\000\000\006\00320\000\000", null, metadata !"_ZTS1A", metadata !15, null, null, null, i32 0, metadata !33} ; [ DW_TAG_subprogram ] [line 0] [A] -!33 = metadata !{i32 786468} -!34 = metadata !{metadata !"0x2e\00A\00A\00_ZN1AC2Ev\002\000\001\000\006\00320\000\002", metadata !5, metadata !"_ZTS1A", metadata !15, null, void (%class.A*)* @_ZN1AC2Ev, null, metadata !32, metadata !2} ; [ DW_TAG_subprogram ] [line 2] [def] [A] -!35 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!36 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} -!37 = metadata !{metadata !"clang version 3.5 "} -!38 = metadata !{i32 3, i32 0, metadata !27, null} -!39 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !31, null, metadata !40} ; [ DW_TAG_arg_variable ] [this] [line 0] -!40 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] -!41 = metadata !{i32 0, i32 0, metadata !31, null} -!42 = metadata !{i32 2, i32 0, metadata !43, null} -!43 = metadata !{metadata !"0xb\000", metadata !5, metadata !31} ; [ DW_TAG_lexical_block ] [/./ab.h] -!44 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !34, null, metadata !40} ; [ DW_TAG_arg_variable ] [this] [line 0] -!45 = metadata !{i32 0, i32 0, metadata !34, null} -!46 = metadata !{i32 2, i32 0, metadata !34, null} +!0 = !{!"0x11\004\00clang version 3.5 \000\00\000\00\000", !1, !2, !3, !26, !2, !2} ; [ DW_TAG_compile_unit ] [/<unknown>] [DW_LANG_C_plus_plus] +!1 = !{!"<unknown>", !""} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x2\00A\002\0064\0064\000\000\000", !5, null, null, !6, !"_ZTS1A", null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 64, align 64, offset 0] [def] [from ] +!5 = !{!"./ab.h", !""} +!6 = !{!7, !14, !19} +!7 = !{!"0xd\00_vptr$A\000\0064\000\000\0064", !5, !8, !9} ; [ DW_TAG_member ] [_vptr$A] [line 0, size 64, align 0, offset 0] [artificial] [from ] +!8 = !{!"0x29", !5} ; [ DW_TAG_file_type ] [/./ab.h] +!9 = !{!"0xf\00\000\0064\000\000\000", null, null, !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from __vtbl_ptr_type] +!10 = !{!"0xf\00__vtbl_ptr_type\000\0064\000\000\000", null, null, !11} ; [ DW_TAG_pointer_type ] [__vtbl_ptr_type] [line 0, size 64, align 0, offset 0] [from ] +!11 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !12, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!12 = !{!13} +!13 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!14 = !{!"0x2e\00setFoo\00setFoo\00_ZN1A6setFooEv\004\000\000\001\006\00259\000\004", !5, !"_ZTS1A", !15, !"_ZTS1A", null, null, i32 0, !18} ; [ DW_TAG_subprogram ] [line 4] [setFoo] +!15 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !16, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!16 = !{null, !17} +!17 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] +!18 = !{i32 786468} +!19 = !{!"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\005\000\000\001\006\00259\000\005", !5, !"_ZTS1A", !20, !"_ZTS1A", null, null, i32 0, !25} ; [ DW_TAG_subprogram ] [line 5] [getFoo] +!20 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !21, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!21 = !{!22, !17} +!22 = !{!"0x26\00\000\000\000\000\000", null, null, !23} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from foo_t] +!23 = !{!"0x16\00foo_t\001\000\000\000\000", !24, null, !13} ; [ DW_TAG_typedef ] [foo_t] [line 1, size 0, align 0, offset 0] [from int] +!24 = !{!"a.cpp", !""} +!25 = !{i32 786468} +!26 = !{!27, !31, !34} +!27 = !{!"0x2e\00bar\00bar\00_Z3barv\002\000\001\000\006\00256\000\002", !24, !28, !29, null, i32 ()* @_Z3barv, null, null, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [bar] +!28 = !{!"0x29", !24} ; [ DW_TAG_file_type ] [/a.cpp] +!29 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !30, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!30 = !{!23} +!31 = !{!"0x2e\00A\00A\00_ZN1AC1Ev\002\000\001\000\006\00320\000\002", !5, !"_ZTS1A", !15, null, void (%class.A*)* @_ZN1AC1Ev, null, !32, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [A] +!32 = !{!"0x2e\00A\00A\00\000\000\000\000\006\00320\000\000", null, !"_ZTS1A", !15, null, null, null, i32 0, !33} ; [ DW_TAG_subprogram ] [line 0] [A] +!33 = !{i32 786468} +!34 = !{!"0x2e\00A\00A\00_ZN1AC2Ev\002\000\001\000\006\00320\000\002", !5, !"_ZTS1A", !15, null, void (%class.A*)* @_ZN1AC2Ev, null, !32, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [A] +!35 = !{i32 2, !"Dwarf Version", i32 2} +!36 = !{i32 1, !"Debug Info Version", i32 2} +!37 = !{!"clang version 3.5 "} +!38 = !MDLocation(line: 3, scope: !27) +!39 = !{!"0x101\00this\0016777216\001088", !31, null, !40} ; [ DW_TAG_arg_variable ] [this] [line 0] +!40 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] +!41 = !MDLocation(line: 0, scope: !31) +!42 = !MDLocation(line: 2, scope: !43) +!43 = !{!"0xb\000", !5, !31} ; [ DW_TAG_lexical_block ] [/./ab.h] +!44 = !{!"0x101\00this\0016777216\001088", !34, null, !40} ; [ DW_TAG_arg_variable ] [this] [line 0] +!45 = !MDLocation(line: 0, scope: !34) +!46 = !MDLocation(line: 2, scope: !34) diff --git a/test/Linker/type-unique-simple2-b.ll b/test/Linker/type-unique-simple2-b.ll index f851316..25e67d4 100644 --- a/test/Linker/type-unique-simple2-b.ll +++ b/test/Linker/type-unique-simple2-b.ll @@ -22,7 +22,7 @@ define void @_ZN1A6setFooEv(%class.A* %this) unnamed_addr #0 align 2 { entry: %this.addr = alloca %class.A*, align 8 store %class.A* %this, %class.A** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %this.addr}, metadata !32, metadata !{metadata !"0x102"}), !dbg !34 + call void @llvm.dbg.declare(metadata %class.A** %this.addr, metadata !32, metadata !{!"0x102"}), !dbg !34 %this1 = load %class.A** %this.addr ret void, !dbg !35 } @@ -35,7 +35,7 @@ define i32 @_ZN1A6getFooEv(%class.A* %this) unnamed_addr #0 align 2 { entry: %this.addr = alloca %class.A*, align 8 store %class.A* %this, %class.A** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %this.addr}, metadata !36, metadata !{metadata !"0x102"}), !dbg !37 + call void @llvm.dbg.declare(metadata %class.A** %this.addr, metadata !36, metadata !{!"0x102"}), !dbg !37 %this1 = load %class.A** %this.addr ret i32 1, !dbg !38 } @@ -47,42 +47,42 @@ attributes #1 = { nounwind readnone } !llvm.module.flags = !{!29, !30} !llvm.ident = !{!31} -!0 = metadata !{metadata !"0x11\004\00clang version 3.5 \000\00\000\00\000", metadata !1, metadata !2, metadata !3, metadata !25, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [/<unknown>] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"<unknown>", metadata !""} -!2 = metadata !{} -!3 = metadata !{metadata !4} -!4 = metadata !{metadata !"0x2\00A\002\0064\0064\000\000\000", metadata !5, null, null, metadata !6, metadata !"_ZTS1A", null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 64, align 64, offset 0] [def] [from ] -!5 = metadata !{metadata !"./ab.h", metadata !""} -!6 = metadata !{metadata !7, metadata !14, metadata !19} -!7 = metadata !{metadata !"0xd\00_vptr$A\000\0064\000\000\0064", metadata !5, metadata !8, metadata !9} ; [ DW_TAG_member ] [_vptr$A] [line 0, size 64, align 0, offset 0] [artificial] [from ] -!8 = metadata !{metadata !"0x29", metadata !5} ; [ DW_TAG_file_type ] [/./ab.h] -!9 = metadata !{metadata !"0xf\00\000\0064\000\000\000", null, null, metadata !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from __vtbl_ptr_type] -!10 = metadata !{metadata !"0xf\00__vtbl_ptr_type\000\0064\000\000\000", null, null, metadata !11} ; [ DW_TAG_pointer_type ] [__vtbl_ptr_type] [line 0, size 64, align 0, offset 0] [from ] -!11 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !12, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!12 = metadata !{metadata !13} -!13 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!14 = metadata !{metadata !"0x2e\00setFoo\00setFoo\00_ZN1A6setFooEv\004\000\000\001\006\00259\000\004", metadata !5, metadata !"_ZTS1A", metadata !15, metadata !"_ZTS1A", null, null, i32 0, metadata !18} ; [ DW_TAG_subprogram ] [line 4] [setFoo] -!15 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !16, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!16 = metadata !{null, metadata !17} -!17 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] -!18 = metadata !{i32 786468} -!19 = metadata !{metadata !"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\005\000\000\001\006\00259\000\005", metadata !5, metadata !"_ZTS1A", metadata !20, metadata !"_ZTS1A", null, null, i32 0, metadata !24} ; [ DW_TAG_subprogram ] [line 5] [getFoo] -!20 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !21, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!21 = metadata !{metadata !22, metadata !17} -!22 = metadata !{metadata !"0x26\00\000\000\000\000\000", null, null, metadata !23} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from foo_t] -!23 = metadata !{metadata !"0x16\00foo_t\001\000\000\000\000", metadata !5, null, metadata !13} ; [ DW_TAG_typedef ] [foo_t] [line 1, size 0, align 0, offset 0] [from int] -!24 = metadata !{i32 786468} -!25 = metadata !{metadata !26, metadata !28} -!26 = metadata !{metadata !"0x2e\00setFoo\00setFoo\00_ZN1A6setFooEv\002\000\001\000\006\00259\000\002", metadata !27, metadata !"_ZTS1A", metadata !15, null, void (%class.A*)* @_ZN1A6setFooEv, null, metadata !14, metadata !2} ; [ DW_TAG_subprogram ] [line 2] [def] [setFoo] -!27 = metadata !{metadata !"b.cpp", metadata !""} -!28 = metadata !{metadata !"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\004\000\001\000\006\00259\000\004", metadata !27, metadata !"_ZTS1A", metadata !20, null, i32 (%class.A*)* @_ZN1A6getFooEv, null, metadata !19, metadata !2} ; [ DW_TAG_subprogram ] [line 4] [def] [getFoo] -!29 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!30 = metadata !{i32 1, metadata !"Debug Info Version", i32 2} -!31 = metadata !{metadata !"clang version 3.5 "} -!32 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !26, null, metadata !33} ; [ DW_TAG_arg_variable ] [this] [line 0] -!33 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] -!34 = metadata !{i32 0, i32 0, metadata !26, null} -!35 = metadata !{i32 2, i32 0, metadata !26, null} -!36 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !28, null, metadata !33} ; [ DW_TAG_arg_variable ] [this] [line 0] -!37 = metadata !{i32 0, i32 0, metadata !28, null} -!38 = metadata !{i32 4, i32 0, metadata !28, null} +!0 = !{!"0x11\004\00clang version 3.5 \000\00\000\00\000", !1, !2, !3, !25, !2, !2} ; [ DW_TAG_compile_unit ] [/<unknown>] [DW_LANG_C_plus_plus] +!1 = !{!"<unknown>", !""} +!2 = !{} +!3 = !{!4} +!4 = !{!"0x2\00A\002\0064\0064\000\000\000", !5, null, null, !6, !"_ZTS1A", null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 2, size 64, align 64, offset 0] [def] [from ] +!5 = !{!"./ab.h", !""} +!6 = !{!7, !14, !19} +!7 = !{!"0xd\00_vptr$A\000\0064\000\000\0064", !5, !8, !9} ; [ DW_TAG_member ] [_vptr$A] [line 0, size 64, align 0, offset 0] [artificial] [from ] +!8 = !{!"0x29", !5} ; [ DW_TAG_file_type ] [/./ab.h] +!9 = !{!"0xf\00\000\0064\000\000\000", null, null, !10} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 0, offset 0] [from __vtbl_ptr_type] +!10 = !{!"0xf\00__vtbl_ptr_type\000\0064\000\000\000", null, null, !11} ; [ DW_TAG_pointer_type ] [__vtbl_ptr_type] [line 0, size 64, align 0, offset 0] [from ] +!11 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !12, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!12 = !{!13} +!13 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!14 = !{!"0x2e\00setFoo\00setFoo\00_ZN1A6setFooEv\004\000\000\001\006\00259\000\004", !5, !"_ZTS1A", !15, !"_ZTS1A", null, null, i32 0, !18} ; [ DW_TAG_subprogram ] [line 4] [setFoo] +!15 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !16, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!16 = !{null, !17} +!17 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] +!18 = !{i32 786468} +!19 = !{!"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\005\000\000\001\006\00259\000\005", !5, !"_ZTS1A", !20, !"_ZTS1A", null, null, i32 0, !24} ; [ DW_TAG_subprogram ] [line 5] [getFoo] +!20 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !21, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!21 = !{!22, !17} +!22 = !{!"0x26\00\000\000\000\000\000", null, null, !23} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from foo_t] +!23 = !{!"0x16\00foo_t\001\000\000\000\000", !5, null, !13} ; [ DW_TAG_typedef ] [foo_t] [line 1, size 0, align 0, offset 0] [from int] +!24 = !{i32 786468} +!25 = !{!26, !28} +!26 = !{!"0x2e\00setFoo\00setFoo\00_ZN1A6setFooEv\002\000\001\000\006\00259\000\002", !27, !"_ZTS1A", !15, null, void (%class.A*)* @_ZN1A6setFooEv, null, !14, !2} ; [ DW_TAG_subprogram ] [line 2] [def] [setFoo] +!27 = !{!"b.cpp", !""} +!28 = !{!"0x2e\00getFoo\00getFoo\00_ZN1A6getFooEv\004\000\001\000\006\00259\000\004", !27, !"_ZTS1A", !20, null, i32 (%class.A*)* @_ZN1A6getFooEv, null, !19, !2} ; [ DW_TAG_subprogram ] [line 4] [def] [getFoo] +!29 = !{i32 2, !"Dwarf Version", i32 2} +!30 = !{i32 1, !"Debug Info Version", i32 2} +!31 = !{!"clang version 3.5 "} +!32 = !{!"0x101\00this\0016777216\001088", !26, null, !33} ; [ DW_TAG_arg_variable ] [this] [line 0] +!33 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] +!34 = !MDLocation(line: 0, scope: !26) +!35 = !MDLocation(line: 2, scope: !26) +!36 = !{!"0x101\00this\0016777216\001088", !28, null, !33} ; [ DW_TAG_arg_variable ] [this] [line 0] +!37 = !MDLocation(line: 0, scope: !28) +!38 = !MDLocation(line: 4, scope: !28) diff --git a/test/Linker/type-unique-src-type.ll b/test/Linker/type-unique-src-type.ll new file mode 100644 index 0000000..01b33a2 --- /dev/null +++ b/test/Linker/type-unique-src-type.ll @@ -0,0 +1,24 @@ +; RUN: llvm-as %s -o %t.bc +; RUN: llvm-link -S %t.bc -o - | FileCheck %s +; RUN: llvm-link -S %s -o - | FileCheck %s + +; Test that we don't try to map %C.0 and C and then try to map %C to a new type. +; This used to happen when lazy loading since we wouldn't then identify %C +; as a destination type until it was too late. + +; CHECK: %C.0 = type { %B } +; CHECK-NEXT: %B = type { %A } +; CHECK-NEXT: %A = type { i8 } + +; CHECK: @g1 = external global %C.0 +; CHECK: getelementptr %C.0* null, i64 0, i32 0, i32 0 + +%A = type { i8 } +%B = type { %A } +%C = type { %B } +%C.0 = type { %B } +define void @f1() { + getelementptr %C* null, i64 0, i32 0, i32 0 + ret void +} +@g1 = external global %C.0 diff --git a/test/Linker/type-unique-type-array-a.ll b/test/Linker/type-unique-type-array-a.ll index 1b908c6..9e2de88 100644 --- a/test/Linker/type-unique-type-array-a.ll +++ b/test/Linker/type-unique-type-array-a.ll @@ -51,8 +51,8 @@ entry: %coerce.dive = getelementptr %struct.SA* %sa, i32 0, i32 0 store i32 %sa.coerce, i32* %coerce.dive store %class.A* %a, %class.A** %a.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %a.addr}, metadata !24, metadata !{metadata !"0x102"}), !dbg !25 - call void @llvm.dbg.declare(metadata !{%struct.SA* %sa}, metadata !26, metadata !{metadata !"0x102"}), !dbg !27 + call void @llvm.dbg.declare(metadata %class.A** %a.addr, metadata !24, metadata !{!"0x102"}), !dbg !25 + call void @llvm.dbg.declare(metadata %struct.SA* %sa, metadata !26, metadata !{!"0x102"}), !dbg !27 %0 = load %class.A** %a.addr, align 8, !dbg !28 %1 = bitcast %struct.SA* %agg.tmp to i8*, !dbg !28 %2 = bitcast %struct.SA* %sa to i8*, !dbg !28 @@ -74,8 +74,8 @@ entry: %coerce.dive = getelementptr %struct.SA* %a, i32 0, i32 0 store i32 %a.coerce, i32* %coerce.dive store %class.A* %this, %class.A** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.A** %this.addr}, metadata !30, metadata !{metadata !"0x102"}), !dbg !31 - call void @llvm.dbg.declare(metadata !{%struct.SA* %a}, metadata !32, metadata !{metadata !"0x102"}), !dbg !33 + call void @llvm.dbg.declare(metadata %class.A** %this.addr, metadata !30, metadata !{!"0x102"}), !dbg !31 + call void @llvm.dbg.declare(metadata %struct.SA* %a, metadata !32, metadata !{!"0x102"}), !dbg !33 %this1 = load %class.A** %this.addr ret void, !dbg !34 } @@ -92,38 +92,38 @@ attributes #3 = { nounwind } !llvm.module.flags = !{!21, !22} !llvm.ident = !{!23} -!0 = metadata !{metadata !"0x11\004\00clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)\000\00\000\00\001", metadata !1, metadata !2, metadata !3, metadata !14, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [a.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"a.cpp", metadata !"/Users/manmanren/test-Nov/type_unique/rdar_di_array"} -!2 = metadata !{} -!3 = metadata !{metadata !4, metadata !10} -!4 = metadata !{metadata !"0x2\00A\005\008\008\000\000\000", metadata !1, null, null, metadata !5, null, null, metadata !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 5, size 8, align 8, offset 0] [def] [from ] -!5 = metadata !{metadata !6} -!6 = metadata !{metadata !"0x2e\00testA\00testA\00_ZN1A5testAE2SA\007\000\000\000\006\00256\000\007", metadata !1, metadata !"_ZTS1A", metadata !7, null, null, null, i32 0, null} ; [ DW_TAG_subprogram ] [line 7] [testA] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{null, metadata !9, metadata !"_ZTS2SA"} -!9 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] -!10 = metadata !{metadata !"0x13\00SA\001\0032\0032\000\000\000", metadata !1, null, null, metadata !11, null, null, metadata !"_ZTS2SA"} ; [ DW_TAG_structure_type ] [SA] [line 1, size 32, align 32, offset 0] [def] [from ] -!11 = metadata !{metadata !12} -!12 = metadata !{metadata !"0xd\00a\002\0032\0032\000\000", metadata !1, metadata !"_ZTS2SA", metadata !13} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!13 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!14 = metadata !{metadata !15, metadata !20} -!15 = metadata !{metadata !"0x2e\00topA\00topA\00_Z4topAP1A2SA\0011\000\001\000\006\00256\000\0011", metadata !1, metadata !16, metadata !17, null, void (%class.A*, i32)* @_Z4topAP1A2SA, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 11] [def] [topA] -!16 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [a.cpp] -!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!18 = metadata !{null, metadata !19, metadata !"_ZTS2SA"} -!19 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] -!20 = metadata !{metadata !"0x2e\00testA\00testA\00_ZN1A5testAE2SA\007\000\001\000\006\00256\000\007", metadata !1, metadata !"_ZTS1A", metadata !7, null, void (%class.A*, i32)* @_ZN1A5testAE2SA, null, metadata !6, metadata !2} ; [ DW_TAG_subprogram ] [line 7] [def] [testA] -!21 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!22 = metadata !{i32 2, metadata !"Debug Info Version", i32 2} -!23 = metadata !{metadata !"clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)"} -!24 = metadata !{metadata !"0x101\00a\0016777227\000", metadata !15, metadata !16, metadata !19} ; [ DW_TAG_arg_variable ] [a] [line 11] -!25 = metadata !{i32 11, i32 14, metadata !15, null} -!26 = metadata !{metadata !"0x101\00sa\0033554443\000", metadata !15, metadata !16, metadata !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [sa] [line 11] -!27 = metadata !{i32 11, i32 20, metadata !15, null} -!28 = metadata !{i32 12, i32 3, metadata !15, null} -!29 = metadata !{i32 13, i32 1, metadata !15, null} -!30 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !20, null, metadata !19} ; [ DW_TAG_arg_variable ] [this] [line 0] -!31 = metadata !{i32 0, i32 0, metadata !20, null} -!32 = metadata !{metadata !"0x101\00a\0033554439\000", metadata !20, metadata !16, metadata !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [a] [line 7] -!33 = metadata !{i32 7, i32 17, metadata !20, null} -!34 = metadata !{i32 8, i32 3, metadata !20, null} +!0 = !{!"0x11\004\00clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)\000\00\000\00\001", !1, !2, !3, !14, !2, !2} ; [ DW_TAG_compile_unit ] [a.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"a.cpp", !"/Users/manmanren/test-Nov/type_unique/rdar_di_array"} +!2 = !{} +!3 = !{!4, !10} +!4 = !{!"0x2\00A\005\008\008\000\000\000", !1, null, null, !5, null, null, !"_ZTS1A"} ; [ DW_TAG_class_type ] [A] [line 5, size 8, align 8, offset 0] [def] [from ] +!5 = !{!6} +!6 = !{!"0x2e\00testA\00testA\00_ZN1A5testAE2SA\007\000\000\000\006\00256\000\007", !1, !"_ZTS1A", !7, null, null, null, i32 0, null} ; [ DW_TAG_subprogram ] [line 7] [testA] +!7 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{null, !9, !"_ZTS2SA"} +!9 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1A] +!10 = !{!"0x13\00SA\001\0032\0032\000\000\000", !1, null, null, !11, null, null, !"_ZTS2SA"} ; [ DW_TAG_structure_type ] [SA] [line 1, size 32, align 32, offset 0] [def] [from ] +!11 = !{!12} +!12 = !{!"0xd\00a\002\0032\0032\000\000", !1, !"_ZTS2SA", !13} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] +!13 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!14 = !{!15, !20} +!15 = !{!"0x2e\00topA\00topA\00_Z4topAP1A2SA\0011\000\001\000\006\00256\000\0011", !1, !16, !17, null, void (%class.A*, i32)* @_Z4topAP1A2SA, null, null, !2} ; [ DW_TAG_subprogram ] [line 11] [def] [topA] +!16 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [a.cpp] +!17 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!18 = !{null, !19, !"_ZTS2SA"} +!19 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS1A"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1A] +!20 = !{!"0x2e\00testA\00testA\00_ZN1A5testAE2SA\007\000\001\000\006\00256\000\007", !1, !"_ZTS1A", !7, null, void (%class.A*, i32)* @_ZN1A5testAE2SA, null, !6, !2} ; [ DW_TAG_subprogram ] [line 7] [def] [testA] +!21 = !{i32 2, !"Dwarf Version", i32 2} +!22 = !{i32 2, !"Debug Info Version", i32 2} +!23 = !{!"clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)"} +!24 = !{!"0x101\00a\0016777227\000", !15, !16, !19} ; [ DW_TAG_arg_variable ] [a] [line 11] +!25 = !MDLocation(line: 11, column: 14, scope: !15) +!26 = !{!"0x101\00sa\0033554443\000", !15, !16, !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [sa] [line 11] +!27 = !MDLocation(line: 11, column: 20, scope: !15) +!28 = !MDLocation(line: 12, column: 3, scope: !15) +!29 = !MDLocation(line: 13, column: 1, scope: !15) +!30 = !{!"0x101\00this\0016777216\001088", !20, null, !19} ; [ DW_TAG_arg_variable ] [this] [line 0] +!31 = !MDLocation(line: 0, scope: !20) +!32 = !{!"0x101\00a\0033554439\000", !20, !16, !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [a] [line 7] +!33 = !MDLocation(line: 7, column: 17, scope: !20) +!34 = !MDLocation(line: 8, column: 3, scope: !20) diff --git a/test/Linker/type-unique-type-array-b.ll b/test/Linker/type-unique-type-array-b.ll index 85ee5a5..0fdae2a 100644 --- a/test/Linker/type-unique-type-array-b.ll +++ b/test/Linker/type-unique-type-array-b.ll @@ -30,8 +30,8 @@ entry: %coerce.dive = getelementptr %struct.SA* %sa, i32 0, i32 0 store i32 %sa.coerce, i32* %coerce.dive store %class.B* %b, %class.B** %b.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.B** %b.addr}, metadata !24, metadata !{metadata !"0x102"}), !dbg !25 - call void @llvm.dbg.declare(metadata !{%struct.SA* %sa}, metadata !26, metadata !{metadata !"0x102"}), !dbg !27 + call void @llvm.dbg.declare(metadata %class.B** %b.addr, metadata !24, metadata !{!"0x102"}), !dbg !25 + call void @llvm.dbg.declare(metadata %struct.SA* %sa, metadata !26, metadata !{!"0x102"}), !dbg !27 %0 = load %class.B** %b.addr, align 8, !dbg !28 %1 = bitcast %struct.SA* %agg.tmp to i8*, !dbg !28 %2 = bitcast %struct.SA* %sa to i8*, !dbg !28 @@ -53,8 +53,8 @@ entry: %coerce.dive = getelementptr %struct.SA* %sa, i32 0, i32 0 store i32 %sa.coerce, i32* %coerce.dive store %class.B* %this, %class.B** %this.addr, align 8 - call void @llvm.dbg.declare(metadata !{%class.B** %this.addr}, metadata !30, metadata !{metadata !"0x102"}), !dbg !31 - call void @llvm.dbg.declare(metadata !{%struct.SA* %sa}, metadata !32, metadata !{metadata !"0x102"}), !dbg !33 + call void @llvm.dbg.declare(metadata %class.B** %this.addr, metadata !30, metadata !{!"0x102"}), !dbg !31 + call void @llvm.dbg.declare(metadata %struct.SA* %sa, metadata !32, metadata !{!"0x102"}), !dbg !33 %this1 = load %class.B** %this.addr ret void, !dbg !34 } @@ -71,38 +71,38 @@ attributes #3 = { nounwind } !llvm.module.flags = !{!21, !22} !llvm.ident = !{!23} -!0 = metadata !{metadata !"0x11\004\00clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)\000\00\000\00\001", metadata !1, metadata !2, metadata !3, metadata !14, metadata !2, metadata !2} ; [ DW_TAG_compile_unit ] [b.cpp] [DW_LANG_C_plus_plus] -!1 = metadata !{metadata !"b.cpp", metadata !"/Users/manmanren/test-Nov/type_unique/rdar_di_array"} -!2 = metadata !{} -!3 = metadata !{metadata !4, metadata !10} -!4 = metadata !{metadata !"0x2\00B\005\008\008\000\000\000", metadata !1, null, null, metadata !5, null, null, metadata !"_ZTS1B"} ; [ DW_TAG_class_type ] [B] [line 5, size 8, align 8, offset 0] [def] [from ] -!5 = metadata !{metadata !6} -!6 = metadata !{metadata !"0x2e\00testB\00testB\00_ZN1B5testBE2SA\007\000\000\000\006\00256\000\007", metadata !1, metadata !"_ZTS1B", metadata !7, null, null, null, i32 0, null} ; [ DW_TAG_subprogram ] [line 7] [testB] -!7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!8 = metadata !{null, metadata !9, metadata !"_ZTS2SA"} -!9 = metadata !{metadata !"0xf\00\000\0064\0064\000\001088", null, null, metadata !"_ZTS1B"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1B] -!10 = metadata !{metadata !"0x13\00SA\001\0032\0032\000\000\000", metadata !1, null, null, metadata !11, null, null, metadata !"_ZTS2SA"} ; [ DW_TAG_structure_type ] [SA] [line 1, size 32, align 32, offset 0] [def] [from ] -!11 = metadata !{metadata !12} -!12 = metadata !{metadata !"0xd\00a\002\0032\0032\000\000", metadata !1, metadata !"_ZTS2SA", metadata !13} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] -!13 = metadata !{metadata !"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] -!14 = metadata !{metadata !15, metadata !20} -!15 = metadata !{metadata !"0x2e\00topB\00topB\00_Z4topBP1B2SA\0011\000\001\000\006\00256\000\0011", metadata !1, metadata !16, metadata !17, null, void (%class.B*, i32)* @_Z4topBP1B2SA, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 11] [def] [topB] -!16 = metadata !{metadata !"0x29", metadata !1} ; [ DW_TAG_file_type ] [b.cpp] -!17 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] -!18 = metadata !{null, metadata !19, metadata !"_ZTS2SA"} -!19 = metadata !{metadata !"0xf\00\000\0064\0064\000\000", null, null, metadata !"_ZTS1B"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1B] -!20 = metadata !{metadata !"0x2e\00testB\00testB\00_ZN1B5testBE2SA\007\000\001\000\006\00256\000\007", metadata !1, metadata !"_ZTS1B", metadata !7, null, void (%class.B*, i32)* @_ZN1B5testBE2SA, null, metadata !6, metadata !2} ; [ DW_TAG_subprogram ] [line 7] [def] [testB] -!21 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} -!22 = metadata !{i32 2, metadata !"Debug Info Version", i32 2} -!23 = metadata !{metadata !"clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)"} -!24 = metadata !{metadata !"0x101\00b\0016777227\000", metadata !15, metadata !16, metadata !19} ; [ DW_TAG_arg_variable ] [b] [line 11] -!25 = metadata !{i32 11, i32 14, metadata !15, null} -!26 = metadata !{metadata !"0x101\00sa\0033554443\000", metadata !15, metadata !16, metadata !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [sa] [line 11] -!27 = metadata !{i32 11, i32 20, metadata !15, null} -!28 = metadata !{i32 12, i32 3, metadata !15, null} -!29 = metadata !{i32 13, i32 1, metadata !15, null} -!30 = metadata !{metadata !"0x101\00this\0016777216\001088", metadata !20, null, metadata !19} ; [ DW_TAG_arg_variable ] [this] [line 0] -!31 = metadata !{i32 0, i32 0, metadata !20, null} -!32 = metadata !{metadata !"0x101\00sa\0033554439\000", metadata !20, metadata !16, metadata !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [sa] [line 7] -!33 = metadata !{i32 7, i32 17, metadata !20, null} -!34 = metadata !{i32 8, i32 3, metadata !20, null} +!0 = !{!"0x11\004\00clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)\000\00\000\00\001", !1, !2, !3, !14, !2, !2} ; [ DW_TAG_compile_unit ] [b.cpp] [DW_LANG_C_plus_plus] +!1 = !{!"b.cpp", !"/Users/manmanren/test-Nov/type_unique/rdar_di_array"} +!2 = !{} +!3 = !{!4, !10} +!4 = !{!"0x2\00B\005\008\008\000\000\000", !1, null, null, !5, null, null, !"_ZTS1B"} ; [ DW_TAG_class_type ] [B] [line 5, size 8, align 8, offset 0] [def] [from ] +!5 = !{!6} +!6 = !{!"0x2e\00testB\00testB\00_ZN1B5testBE2SA\007\000\000\000\006\00256\000\007", !1, !"_ZTS1B", !7, null, null, null, i32 0, null} ; [ DW_TAG_subprogram ] [line 7] [testB] +!7 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!8 = !{null, !9, !"_ZTS2SA"} +!9 = !{!"0xf\00\000\0064\0064\000\001088", null, null, !"_ZTS1B"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [artificial] [from _ZTS1B] +!10 = !{!"0x13\00SA\001\0032\0032\000\000\000", !1, null, null, !11, null, null, !"_ZTS2SA"} ; [ DW_TAG_structure_type ] [SA] [line 1, size 32, align 32, offset 0] [def] [from ] +!11 = !{!12} +!12 = !{!"0xd\00a\002\0032\0032\000\000", !1, !"_ZTS2SA", !13} ; [ DW_TAG_member ] [a] [line 2, size 32, align 32, offset 0] [from int] +!13 = !{!"0x24\00int\000\0032\0032\000\000\005", null, null} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] +!14 = !{!15, !20} +!15 = !{!"0x2e\00topB\00topB\00_Z4topBP1B2SA\0011\000\001\000\006\00256\000\0011", !1, !16, !17, null, void (%class.B*, i32)* @_Z4topBP1B2SA, null, null, !2} ; [ DW_TAG_subprogram ] [line 11] [def] [topB] +!16 = !{!"0x29", !1} ; [ DW_TAG_file_type ] [b.cpp] +!17 = !{!"0x15\00\000\000\000\000\000\000", i32 0, null, null, !18, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] +!18 = !{null, !19, !"_ZTS2SA"} +!19 = !{!"0xf\00\000\0064\0064\000\000", null, null, !"_ZTS1B"} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from _ZTS1B] +!20 = !{!"0x2e\00testB\00testB\00_ZN1B5testBE2SA\007\000\001\000\006\00256\000\007", !1, !"_ZTS1B", !7, null, void (%class.B*, i32)* @_ZN1B5testBE2SA, null, !6, !2} ; [ DW_TAG_subprogram ] [line 7] [def] [testB] +!21 = !{i32 2, !"Dwarf Version", i32 2} +!22 = !{i32 2, !"Debug Info Version", i32 2} +!23 = !{!"clang version 3.5.0 (trunk 214102:214113M) (llvm/trunk 214102:214115M)"} +!24 = !{!"0x101\00b\0016777227\000", !15, !16, !19} ; [ DW_TAG_arg_variable ] [b] [line 11] +!25 = !MDLocation(line: 11, column: 14, scope: !15) +!26 = !{!"0x101\00sa\0033554443\000", !15, !16, !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [sa] [line 11] +!27 = !MDLocation(line: 11, column: 20, scope: !15) +!28 = !MDLocation(line: 12, column: 3, scope: !15) +!29 = !MDLocation(line: 13, column: 1, scope: !15) +!30 = !{!"0x101\00this\0016777216\001088", !20, null, !19} ; [ DW_TAG_arg_variable ] [this] [line 0] +!31 = !MDLocation(line: 0, scope: !20) +!32 = !{!"0x101\00sa\0033554439\000", !20, !16, !"_ZTS2SA"} ; [ DW_TAG_arg_variable ] [sa] [line 7] +!33 = !MDLocation(line: 7, column: 17, scope: !20) +!34 = !MDLocation(line: 8, column: 3, scope: !20) diff --git a/test/Linker/type-unique-unrelated.ll b/test/Linker/type-unique-unrelated.ll new file mode 100644 index 0000000..26d05bb --- /dev/null +++ b/test/Linker/type-unique-unrelated.ll @@ -0,0 +1,31 @@ +; RUN: llvm-link -S %s %p/Inputs/type-unique-unrelated2.ll %p/Inputs/type-unique-unrelated3.ll | FileCheck %s + +; CHECK: %t = type { i8* } + +; CHECK: define %t @f2() { +; CHECK-NEXT: %x = call %t @f2() +; CHECK-NEXT: ret %t %x +; CHECK-NEXT: } + +; CHECK: define %t @g2() { +; CHECK-NEXT: %x = call %t @g() +; CHECK-NEXT: ret %t %x +; CHECK-NEXT: } + +; CHECK: define %t @g() { +; CHECK-NEXT: %x = call %t @f() +; CHECK-NEXT: ret %t %x +; CHECK-NEXT: } + +; The idea of this test is that the %t in this file and the one in +; type-unique-unrelated2.ll look unrelated until type-unique-unrelated3.ll +; is merged in. + +%t = type { i8* } +declare %t @f() + +define %t @f2() { + %x = call %t @f2() + ret %t %x +} + diff --git a/test/Linker/unique-fwd-decl-a.ll b/test/Linker/unique-fwd-decl-a.ll index b9c7b2f..c1a4b1d 100644 --- a/test/Linker/unique-fwd-decl-a.ll +++ b/test/Linker/unique-fwd-decl-a.ll @@ -5,5 +5,5 @@ ; CHECK: !b = !{!0} !a = !{!0} -!0 = metadata !{metadata !1} -!1 = metadata !{} +!0 = !{!1} +!1 = !{} diff --git a/test/Linker/unique-fwd-decl-order.ll b/test/Linker/unique-fwd-decl-order.ll new file mode 100644 index 0000000..e1d8c2e --- /dev/null +++ b/test/Linker/unique-fwd-decl-order.ll @@ -0,0 +1,20 @@ +; RUN: llvm-link %s %S/Inputs/unique-fwd-decl-order.ll -S -o - | FileCheck %s +; RUN: llvm-link %S/Inputs/unique-fwd-decl-order.ll %s -S -o - | FileCheck %s + +; This test exercises MDNode hashing. For the nodes to be correctly uniqued, +; the hash of a to-be-created MDNode has to match the hash of an +; operand-just-changed MDNode (with the same operands). +; +; Note that these two assembly files number the nodes identically, even though +; the nodes are in a different order. This is for the reader's convenience. + +; CHECK: !named = !{!0, !0} +!named = !{!0} + +; CHECK: !0 = !{!1} +!0 = !{!1} + +; CHECK: !1 = !{} +!1 = !{} + +; CHECK-NOT: !2 diff --git a/test/Linker/visibility.ll b/test/Linker/visibility.ll index 6436197..4938d7a 100644 --- a/test/Linker/visibility.ll +++ b/test/Linker/visibility.ll @@ -17,8 +17,8 @@ $c1 = comdat any ; CHECK-DAG: @v3 = hidden global i32 0 @v3 = protected global i32 0 -; CHECK-DAG: @v4 = hidden global i32 1, comdat $c1 -@v4 = global i32 1, comdat $c1 +; CHECK-DAG: @v4 = hidden global i32 1, comdat($c1) +@v4 = global i32 1, comdat($c1) ; Aliases ; CHECK: @a1 = hidden alias i32* @v1 diff --git a/test/Linker/weakextern.ll b/test/Linker/weakextern.ll index b9f2584..8d479a0 100644 --- a/test/Linker/weakextern.ll +++ b/test/Linker/weakextern.ll @@ -1,5 +1,5 @@ ; RUN: llvm-as < %s > %t.bc -; RUN: llvm-as < %p/testlink1.ll > %t2.bc +; RUN: llvm-as < %p/testlink.ll > %t2.bc ; RUN: llvm-link %t.bc %t.bc %t2.bc -o %t1.bc ; RUN: llvm-dis < %t1.bc | FileCheck %s ; CHECK: kallsyms_names = extern_weak |