summaryrefslogtreecommitdiffstats
path: root/llvm/test/LTO/Resolution/X86
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/LTO/Resolution/X86')
-rw-r--r--llvm/test/LTO/Resolution/X86/Inputs/appending-var-2.ll14
-rw-r--r--llvm/test/LTO/Resolution/X86/appending-var.ll16
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/test/LTO/Resolution/X86/Inputs/appending-var-2.ll b/llvm/test/LTO/Resolution/X86/Inputs/appending-var-2.ll
new file mode 100644
index 00000000000..29bc8433d3e
--- /dev/null
+++ b/llvm/test/LTO/Resolution/X86/Inputs/appending-var-2.ll
@@ -0,0 +1,14 @@
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+%"foo" = type { i8 }
+
+@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 (%"foo"*)* @bar to i8*)], section "llvm.metadata"
+
+; Function Attrs: norecurse nounwind readnone uwtable
+define dso_local i32 @bar(%"foo"* nocapture readnone %this) align 2 !type !0 {
+entry:
+ ret i32 0
+}
+
+!0 = !{i64 0, !"typeid1"}
diff --git a/llvm/test/LTO/Resolution/X86/appending-var.ll b/llvm/test/LTO/Resolution/X86/appending-var.ll
new file mode 100644
index 00000000000..4d259d7f8db
--- /dev/null
+++ b/llvm/test/LTO/Resolution/X86/appending-var.ll
@@ -0,0 +1,16 @@
+; Check we don't crash when linking a global variable with appending linkage
+; if the types in their elements don't have a straightforward mapping, forcing
+; us to use bitcasts.
+
+; RUN: opt %s -o %t1.o
+; RUN: opt %p/Inputs/appending-var-2.ll -o %t2.o
+
+; RUN: llvm-lto2 run -o %t3.o %t1.o %t2.o -r %t1.o,bar, -r %t2.o,bar,px
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+%"foo.1" = type { i8, i8 }
+declare dso_local i32 @bar(%"foo.1"* nocapture readnone %this) local_unnamed_addr
+
+@llvm.used = appending global [1 x i8*] [i8* bitcast (i32 (%"foo.1"*)* @bar to i8*)], section "llvm.metadata"
OpenPOWER on IntegriCloud