aboutsummaryrefslogtreecommitdiff
path: root/test/MC
diff options
context:
space:
mode:
authorSam Clegg <sbc@chromium.org>2017-09-15 19:22:01 +0000
committerSam Clegg <sbc@chromium.org>2017-09-15 19:22:01 +0000
commitd3108e59e53a91ba1496cef666ced66dedb1c02b (patch)
tree3c67e87ef656672597c6f3e578e085192b0cd430 /test/MC
parent22b2c0d9c2e0a99a85771a7569f409f9ef19c343 (diff)
downloadllvm-d3108e59e53a91ba1496cef666ced66dedb1c02b.tar.gz
[WebAssembly] MC: Fix crash in getProvitionalValue on weak references
- Create helper function for resolving weak references. - Add test that preproduces the crash. Differential Revision: https://reviews.llvm.org/D37916 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313381 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r--test/MC/WebAssembly/weak-alias.ll46
1 files changed, 43 insertions, 3 deletions
diff --git a/test/MC/WebAssembly/weak-alias.ll b/test/MC/WebAssembly/weak-alias.ll
index 1d80ea4aac6..79c597bc09a 100644
--- a/test/MC/WebAssembly/weak-alias.ll
+++ b/test/MC/WebAssembly/weak-alias.ll
@@ -1,8 +1,13 @@
; RUN: llc -mtriple wasm32-unknown-unknown-wasm -filetype=obj %s -o - | obj2yaml | FileCheck %s
-; foo_alias() function is weak alias of function foo()
+; 'foo_alias()' is weak alias of function 'foo()'
+; 'bar_alias' is weak alias of global variable 'bar'
; Generates two exports of the same function, one of them weak
+@bar = global i32 7, align 8
+@bar_alias = weak hidden alias i32, i32* @bar
+@bar_alias_address = global i32* @bar_alias, align 8
+
@foo_alias = weak hidden alias i32 (), i32 ()* @foo
define hidden i32 @call_alias() #0 {
@@ -29,6 +34,11 @@ entry:
; CHECK-NEXT: Field: foo_alias
; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: SigIndex: 0
+; CHECK-NEXT: - Module: env
+; CHECK-NEXT: Field: bar_alias
+; CHECK-NEXT: Kind: GLOBAL
+; CHECK-NEXT: GlobalType: I32
+; CHECK-NEXT: GlobalMutable: false
; CHECK: - Type: FUNCTION
; CHECK-NEXT: FunctionTypes: [ 0, 0 ]
@@ -41,9 +51,37 @@ entry:
; CHECK-NEXT: - Name: foo
; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2
+; CHECK-NEXT: - Name: bar
+; CHECK-NEXT: Kind: GLOBAL
+; CHECK-NEXT: Index: 1
+; CHECK-NEXT: - Name: bar_alias_address
+; CHECK-NEXT: Kind: GLOBAL
+; CHECK-NEXT: Index: 2
; CHECK-NEXT: - Name: foo_alias
; CHECK-NEXT: Kind: FUNCTION
; CHECK-NEXT: Index: 2
+; CHECK-NEXT: - Name: bar_alias
+; CHECK-NEXT: Kind: GLOBAL
+; CHECK-NEXT: Index: 1
+
+; CHECK: - Type: DATA
+; CHECK-NEXT: Relocations:
+; CHECK-NEXT: - Type: R_WEBASSEMBLY_MEMORY_ADDR_I32
+; CHECK-NEXT: Index: 0
+; CHECK-NEXT: Offset: 0x0000000F
+; CHECK-NEXT: Segments:
+; CHECK-NEXT: - SectionOffset: 6
+; CHECK-NEXT: MemoryIndex: 0
+; CHECK-NEXT: Offset:
+; CHECK-NEXT: Opcode: I32_CONST
+; CHECK-NEXT: Value: 0
+; CHECK-NEXT: Content: '07000000'
+; CHECK-NEXT: - SectionOffset: 15
+; CHECK-NEXT: MemoryIndex: 0
+; CHECK-NEXT: Offset:
+; CHECK-NEXT: Opcode: I32_CONST
+; CHECK-NEXT: Value: 8
+; CHECK-NEXT: Content: '00000000'
; CHECK: - Type: CUSTOM
; CHECK-NEXT: Name: name
@@ -56,9 +94,11 @@ entry:
; CHECK-NEXT: Name: foo
; CHECK-NEXT: - Type: CUSTOM
; CHECK-NEXT: Name: linking
-; CHECK-NEXT: DataSize: 0
-; CHECK-NEXT: DataAlignment: 0
+; CHECK-NEXT: DataSize: 12
+; CHECK-NEXT: DataAlignment: 8
; CHECK-NEXT: SymbolInfo:
; CHECK-NEXT: - Name: foo_alias
; CHECK-NEXT: Flags: 1
+; CHECK-NEXT: - Name: bar_alias
+; CHECK-NEXT: Flags: 1
; CHECK-NEXT: ...