Imported Upstream version 5.18.0.205

Former-commit-id: 7f59f7e792705db773f1caecdaa823092f4e2927
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2018-11-16 08:20:38 +00:00
parent 5cd5df71cc
commit 8e12397d70
28486 changed files with 3867013 additions and 66 deletions

View File

@@ -0,0 +1,8 @@
; RUN: llvm-as < %s > %t.bc
; RUN: echo | llvm-as > %t.tmp.bc
; RUN: llvm-link %t.tmp.bc %t.bc
@X = constant i32 5 ; <i32*> [#uses=2]
@Y = internal global [2 x i32*] [ i32* @X, i32* @X ] ; <[2 x i32*]*> [#uses=0]

View File

@@ -0,0 +1,10 @@
; This fails linking when it is linked with an empty file as the first object file
; RUN: llvm-as > %t1.bc < /dev/null
; RUN: llvm-as < %s > %t2.bc
; RUN: llvm-link %t1.bc %t2.bc
@work = global i32 (i32, i32)* @zip ; <i32 (i32, i32)**> [#uses=0]
declare i32 @zip(i32, i32)

View File

@@ -0,0 +1,9 @@
; This fails linking when it is linked with an empty file as the first object file
; RUN: llvm-as > %t.LinkTest.bc < /dev/null
; RUN: llvm-as < %s > %t.bc
; RUN: llvm-link %t.LinkTest.bc %t.bc
@work = global i32 4 ; <i32*> [#uses=1]
@test = global i32* getelementptr (i32, i32* @work, i64 1) ; <i32**> [#uses=0]

View File

@@ -0,0 +1,17 @@
; RUN: llvm-as %S/Inputs/2003-01-30-LinkerRename.ll -o %t.1.bc
; RUN: llvm-as %s -o %t.2.bc
; RUN: llvm-link %t.1.bc %t.2.bc -S | FileCheck %s
; CHECK: @bar = global i32 ()* @foo.2
; CHECK: define internal i32 @foo.2() {
; CHECK-NEXT: ret i32 7
; CHECK-NEXT: }
; CHECK: define i32 @foo() {
; CHECK-NEXT: ret i32 0
; CHECK-NEXT: }
define i32 @foo() {
ret i32 0
}

View File

@@ -0,0 +1,11 @@
; This fails because the linker renames the non-opaque type not the opaque
; one...
; RUN: echo "%%Ty = type opaque @GV = external global %%Ty*" | llvm-as > %t.1.bc
; RUN: llvm-as < %s > %t.2.bc
; RUN: llvm-link %t.1.bc %t.2.bc -S | FileCheck %s
; CHECK: = global %Ty
%Ty = type {i32}
@GV = global %Ty* null

View File

@@ -0,0 +1,10 @@
; RUN: echo " define linkonce void @foo() { ret void } " > %t.ll
; RUN: llvm-link %s %t.ll -S | FileCheck %s
; CHECK: linkonce{{.*}}foo
declare void @foo()
define void @use_foo() {
call void @foo()
ret void
}

View File

@@ -0,0 +1,17 @@
; This one fails because the LLVM runtime is allowing two null pointers of
; the same type to be created!
; RUN: echo "%%T = type i32" | llvm-as > %t.2.bc
; RUN: llvm-as %s -o %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc
%T = type opaque
declare %T* @create()
define void @test() {
%X = call %T* @create( ) ; <%T*> [#uses=1]
%v = icmp eq %T* %X, null ; <i1> [#uses=0]
ret void
}

View File

@@ -0,0 +1,10 @@
; This one fails because the LLVM runtime is allowing two null pointers of
; the same type to be created!
; RUN: echo "%M = type { %N*} %N = type opaque" | llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc
%M = type { i32* }
%N = type i32

View File

@@ -0,0 +1,21 @@
; RUN: llvm-link %S/Inputs/2003-05-31-LinkerRename.ll %s -S | FileCheck %s
; CHECK: @bar = global i32 ()* @foo.2
; CHECK: define internal i32 @foo.2() {
; CHECK-NEXT: ret i32 7
; CHECK-NEXT: }
; CHECK: define i32 @test() {
; CHECK-NEXT: %X = call i32 @foo()
; CHECK-NEXT: ret i32 %X
; CHECK-NEXT: }
; CHECK: declare i32 @foo()
declare i32 @foo()
define i32 @test() {
%X = call i32 @foo()
ret i32 %X
}

View File

@@ -0,0 +1,7 @@
; RUN: echo "%%T = type opaque" | llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc
%T = type opaque
@a = constant { %T* } zeroinitializer ; <{ %T* }*> [#uses=0]

View File

@@ -0,0 +1,7 @@
; RUN: echo "%%T = type i32" | llvm-as > %t.1.bc
; RUN: llvm-as < %s > %t.2.bc
; RUN: llvm-link %t.1.bc %t.2.bc
%T = type opaque
@X = constant { %T* } zeroinitializer ; <{ %T* }*> [#uses=0]

View File

@@ -0,0 +1,8 @@
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "%M = type { i32, i32* } " | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc
%M = type { i32, %N* }
%N = type opaque
;%X = global { int, %N* } { int 5, %N* null }

View File

@@ -0,0 +1,11 @@
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "%%T1 = type opaque %%T2 = type opaque @S = external global { i32, %%T1* } declare void @F(%%T2*)"\
; RUN: | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc -S | FileCheck %s
; CHECK-NOT: opaque
; After linking this testcase, there should be no opaque types left. The two
; S's should cause the opaque type to be resolved to 'int'.
@S = global { i32, i32* } { i32 5, i32* null } ; <{ i32, i32* }*> [#uses=0]
declare void @F(i32*)

View File

@@ -0,0 +1,10 @@
; It's a bad idea to go recursively traipsing through types without a safety
; net.
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "%M = type { %M*, i32* }" | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc
%T1 = type opaque
%M = type { %M*, %T1* }

View File

@@ -0,0 +1,10 @@
; Linking a module with a specified pointer size to one without a
; specified pointer size should not cause a warning!
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "" | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc 2>&1 | FileCheck %s
; CHECK-NOT: warning
target datalayout = "e-p:64:64"

View File

@@ -0,0 +1,12 @@
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "%M = type { i32} " | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out2.bc %t.out1.bc
%M = type opaque
define void @foo(i32* %V) {
ret void
}
declare void @foo.upgrd.1(%M*)

View File

@@ -0,0 +1,18 @@
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "%M = type i32" | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out2.bc %t.out1.bc
%M = type opaque
define void @foo(i32* %V) {
ret void
}
declare void @foo.upgrd.1(%M*)
define void @other() {
call void @foo.upgrd.1( %M* null )
call void @foo( i32* null )
ret void
}

View File

@@ -0,0 +1,15 @@
; RUN: llvm-as < %s > %t.out1.bc
; RUN: echo "%M = type i32" | llvm-as > %t.out2.bc
; RUN: llvm-link %t.out2.bc %t.out1.bc
%M = type opaque
; GLobal using the resolved function prototype
@0 = global void (%M*)* @foo ; <void (%M*)**>:0 [#uses=0]
define void @foo.upgrd.1(i32* %V) {
ret void
}
declare void @foo(%M*)

View File

@@ -0,0 +1,8 @@
; The linker should merge link-once globals into strong external globals,
; just like it does for weak symbols!
; RUN: echo "@X = global i32 7" | llvm-as > %t.2.bc
; RUN: llvm-as < %s > %t.1.bc
; RUN: llvm-link %t.1.bc %t.2.bc
@X = linkonce global i32 7

View File

@@ -0,0 +1,20 @@
; Linking these two translation units causes there to be two LLVM values in the
; symbol table with the same name and same type. When this occurs, the symbol
; table class is DROPPING one of the values, instead of renaming it like a nice
; little symbol table. This is causing llvm-link to die, at no fault of its
; own.
; RUN: llvm-as < %s > %t.out2.bc
; RUN: echo "%%T1 = type opaque @GVar = external global %%T1*" | llvm-as > %t.out1.bc
; RUN: llvm-link %t.out1.bc %t.out2.bc
%T1 = type opaque
%T2 = type i32
@GVar = global i32* null ; <i32**> [#uses=0]
define void @foo(i32* %X) {
%X.upgrd.1 = bitcast i32* %X to %T1* ; <%T1*> [#uses=0]
ret void
}

Some files were not shown because too many files have changed in this diff Show More