diff options
author | Sam Clegg <sbc@chromium.org> | 2017-09-15 19:22:01 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2017-09-15 19:22:01 +0000 |
commit | d3108e59e53a91ba1496cef666ced66dedb1c02b (patch) | |
tree | 3c67e87ef656672597c6f3e578e085192b0cd430 /test/MC | |
parent | 22b2c0d9c2e0a99a85771a7569f409f9ef19c343 (diff) | |
download | llvm-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.ll | 46 |
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: ... |