1; RUN: llc -filetype=obj -o %t.o %s
2; RUN: llc -filetype=obj %S/Inputs/weak-alias.ll -o %t2.o
3; RUN: wasm-ld --export-dynamic %t.o %t2.o -o %t.wasm
4; RUN: obj2yaml %t.wasm | FileCheck %s
5
6; Test that the strongly defined alias_fn from this file is used both here
7; and in call_alias.
8
9target triple = "wasm32-unknown-unknown"
10
11define i32 @alias_fn() local_unnamed_addr #1 {
12  ret i32 1
13}
14
15; Function Attrs: nounwind uwtable
16define void @_start() local_unnamed_addr #1 {
17entry:
18  %call = tail call i32 @alias_fn() #2
19  ret void
20}
21
22; CHECK:      --- !WASM
23; CHECK-NEXT: FileHeader:
24; CHECK-NEXT:   Version:         0x1
25; CHECK-NEXT: Sections:
26; CHECK-NEXT:   - Type:            TYPE
27; CHECK-NEXT:     Signatures:
28; CHECK-NEXT:       - Index:           0
29; CHECK-NEXT:         ParamTypes:      []
30; CHECK-NEXT:         ReturnTypes:
31; CHECK-NEXT:           - I32
32; CHECK-NEXT:       - Index:           1
33; CHECK-NEXT:         ParamTypes:      []
34; CHECK-NEXT:         ReturnTypes:     []
35; CHECK-NEXT:   - Type:            FUNCTION
36; CHECK-NEXT:     FunctionTypes:   [ 0, 1, 0, 0, 0, 0, 0 ]
37; CHECK-NEXT:   - Type:            TABLE
38; CHECK-NEXT:     Tables:
39; CHECK-NEXT:       - Index:           0
40; CHECK-NEXT:         ElemType:        FUNCREF
41; CHECK-NEXT:         Limits:
42; CHECK-NEXT:           Flags:           [ HAS_MAX ]
43; CHECK-NEXT:           Initial:         0x3
44; CHECK-NEXT:           Maximum:         0x3
45; CHECK-NEXT:   - Type:            MEMORY
46; CHECK-NEXT:     Memories:
47; CHECK-NEXT:       - Initial:         0x2
48; CHECK-NEXT:   - Type:            GLOBAL
49; CHECK-NEXT:     Globals:
50; CHECK-NEXT:       - Index:           0
51; CHECK-NEXT:         Type:            I32
52; CHECK-NEXT:         Mutable:         true
53; CHECK-NEXT:         InitExpr:
54; CHECK-NEXT:           Opcode:          I32_CONST
55; CHECK-NEXT:           Value:           66560
56; CHECK-NEXT:   - Type:            EXPORT
57; CHECK-NEXT:     Exports:
58; CHECK-NEXT:       - Name:            memory
59; CHECK-NEXT:         Kind:            MEMORY
60; CHECK-NEXT:         Index:           0
61; CHECK-NEXT:       - Name:            alias_fn
62; CHECK-NEXT:         Kind:            FUNCTION
63; CHECK-NEXT:         Index:           0
64; CHECK-NEXT:       - Name:            _start
65; CHECK-NEXT:         Kind:            FUNCTION
66; CHECK-NEXT:         Index:           1
67; CHECK-NEXT:       - Name:            direct_fn
68; CHECK-NEXT:         Kind:            FUNCTION
69; CHECK-NEXT:         Index:           2
70; CHECK-NEXT:       - Name:            call_direct
71; CHECK-NEXT:         Kind:            FUNCTION
72; CHECK-NEXT:         Index:           3
73; CHECK-NEXT:       - Name:            call_alias
74; CHECK-NEXT:         Kind:            FUNCTION
75; CHECK-NEXT:         Index:           4
76; CHECK-NEXT:       - Name:            call_alias_ptr
77; CHECK-NEXT:         Kind:            FUNCTION
78; CHECK-NEXT:         Index:           5
79; CHECK-NEXT:       - Name:            call_direct_ptr
80; CHECK-NEXT:         Kind:            FUNCTION
81; CHECK-NEXT:         Index:           6
82; CHECK-NEXT:   - Type:            ELEM
83; CHECK-NEXT:     Segments:
84; CHECK-NEXT:       - Offset:
85; CHECK-NEXT:           Opcode:          I32_CONST
86; CHECK-NEXT:           Value:           1
87; CHECK-NEXT:         Functions:       [ 0, 2 ]
88; CHECK-NEXT:   - Type:            CODE
89; CHECK-NEXT:     Functions:
90; CHECK-NEXT:       - Index:           0
91; CHECK-NEXT:         Locals:
92; CHECK-NEXT:         Body:            41010B
93; CHECK-NEXT:       - Index:           1
94; CHECK-NEXT:         Locals:
95; CHECK-NEXT:         Body:            1080808080001A0B
96; CHECK-NEXT:       - Index:           2
97; CHECK-NEXT:         Locals:
98; CHECK-NEXT:         Body:            41000B
99; CHECK-NEXT:       - Index:           3
100; CHECK-NEXT:         Locals:
101; CHECK-NEXT:         Body:            1082808080000B
102; CHECK-NEXT:       - Index:           4
103; CHECK-NEXT:         Locals:
104; CHECK-NEXT:         Body:            1080808080000B
105; CHECK-NEXT:       - Index:           5
106; CHECK-NEXT:         Locals:
107; CHECK-NEXT:           - Type:            I32
108; CHECK-NEXT:             Count:           2
109; CHECK-NEXT:         Body:            23808080800041106B220024808080800020004181808080003602081080808080002101200041106A24808080800020010B
110; CHECK-NEXT:       - Index:           6
111; CHECK-NEXT:         Locals:
112; CHECK-NEXT:           - Type:            I32
113; CHECK-NEXT:             Count:           2
114; CHECK-NEXT:         Body:            23808080800041106B220024808080800020004182808080003602081082808080002101200041106A24808080800020010B
115; CHECK-NEXT:   - Type:            CUSTOM
116; CHECK-NEXT:     Name:            name
117; CHECK-NEXT:     FunctionNames:
118; CHECK-NEXT:       - Index:           0
119; CHECK-NEXT:         Name:            alias_fn
120; CHECK-NEXT:       - Index:           1
121; CHECK-NEXT:         Name:            _start
122; CHECK-NEXT:       - Index:           2
123; CHECK-NEXT:         Name:            direct_fn
124; CHECK-NEXT:       - Index:           3
125; CHECK-NEXT:         Name:            call_direct
126; CHECK-NEXT:       - Index:           4
127; CHECK-NEXT:         Name:            call_alias
128; CHECK-NEXT:       - Index:           5
129; CHECK-NEXT:         Name:            call_alias_ptr
130; CHECK-NEXT:       - Index:           6
131; CHECK-NEXT:         Name:            call_direct_ptr
132; CHECK-NEXT:     GlobalNames:
133; CHECK-NEXT:       - Index:           0
134; CHECK-NEXT:         Name:            __stack_pointer
135; CHECK-NEXT: ...
136