151f1ddf8SAndy Wingo# RUN: not llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -o %t.a1.o %s 2>&1 | FileCheck %s --check-prefix=MVP 251f1ddf8SAndy Wingo# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -mattr=+reference-types -o %t.a1.rt.o %s 351f1ddf8SAndy Wingo# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/call-indirect.s -o %t.a2.o 451f1ddf8SAndy Wingo# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -mattr=+reference-types %p/Inputs/call-indirect.s -o %t.a2.rt.o 551f1ddf8SAndy Wingo# RUN: not wasm-ld --allow-undefined --export-dynamic --no-entry -o %t.wasm %t.a1.rt.o %t.a2.o 2>&1 | FileCheck %s --check-prefix=RT-MVP 651f1ddf8SAndy Wingo# RUN: wasm-ld --allow-undefined --export-dynamic --no-entry -o- %t.a1.rt.o %t.a2.rt.o | obj2yaml | FileCheck %s 751f1ddf8SAndy Wingo 851f1ddf8SAndy Wingo .globl table_a 951f1ddf8SAndy Wingo .tabletype table_a, funcref 1051f1ddf8SAndy Wingo 1151f1ddf8SAndy Wingo .globl table_b 1251f1ddf8SAndy Wingotable_b: 1351f1ddf8SAndy Wingo .tabletype table_b, funcref 1451f1ddf8SAndy Wingo 1551f1ddf8SAndy Wingo .globl table_c 1651f1ddf8SAndy Wingotable_c: 1751f1ddf8SAndy Wingo .tabletype table_c, externref 1851f1ddf8SAndy Wingo 1951f1ddf8SAndy Wingo .globl call_indirect_explicit_tables 2051f1ddf8SAndy Wingocall_indirect_explicit_tables: 2151f1ddf8SAndy Wingo .functype call_indirect_explicit_tables () -> () 2251f1ddf8SAndy Wingo i32.const 0 2351f1ddf8SAndy Wingo call_indirect table_a, () -> () 2451f1ddf8SAndy Wingo# MVP: error: Expected (, instead got: table_a 2551f1ddf8SAndy Wingo i32.const 0 2651f1ddf8SAndy Wingo call_indirect table_b, () -> () 2751f1ddf8SAndy Wingo end_function 2851f1ddf8SAndy Wingo 29*c3536b26SDan Gohman# RT-MVP: wasm-ld: error: object file not built with 'reference-types' or 'call-indirect-overlong' feature conflicts with import of table table_a by file 3051f1ddf8SAndy Wingo 3151f1ddf8SAndy Wingo# CHECK: --- !WASM 3251f1ddf8SAndy Wingo# CHECK-NEXT: FileHeader: 3351f1ddf8SAndy Wingo# CHECK-NEXT: Version: 0x1 3451f1ddf8SAndy Wingo# CHECK-NEXT: Sections: 3551f1ddf8SAndy Wingo# CHECK-NEXT: - Type: TYPE 3651f1ddf8SAndy Wingo# CHECK-NEXT: Signatures: 3751f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 0 3851f1ddf8SAndy Wingo# CHECK-NEXT: ParamTypes: [] 3951f1ddf8SAndy Wingo# CHECK-NEXT: ReturnTypes: [] 4051f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 1 4151f1ddf8SAndy Wingo# CHECK-NEXT: ParamTypes: [] 4251f1ddf8SAndy Wingo# CHECK-NEXT: ReturnTypes: 4351f1ddf8SAndy Wingo# CHECK-NEXT: - I64 4451f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 2 4551f1ddf8SAndy Wingo# CHECK-NEXT: ParamTypes: [] 4651f1ddf8SAndy Wingo# CHECK-NEXT: ReturnTypes: 4751f1ddf8SAndy Wingo# CHECK-NEXT: - I32 4851f1ddf8SAndy Wingo# CHECK-NEXT: - Type: IMPORT 4951f1ddf8SAndy Wingo# CHECK-NEXT: Imports: 5051f1ddf8SAndy Wingo# CHECK-NEXT: - Module: env 5151f1ddf8SAndy Wingo# CHECK-NEXT: Field: table_a 5251f1ddf8SAndy Wingo# CHECK-NEXT: Kind: TABLE 5351f1ddf8SAndy Wingo# CHECK-NEXT: Table: 5451f1ddf8SAndy Wingo# CHECK-NEXT: Index: 0 5551f1ddf8SAndy Wingo# CHECK-NEXT: ElemType: FUNCREF 5651f1ddf8SAndy Wingo# CHECK-NEXT: Limits: 579ac5620cSAndy Wingo# CHECK-NEXT: Minimum: 0x0 5851f1ddf8SAndy Wingo# CHECK-NEXT: - Module: env 5951f1ddf8SAndy Wingo# CHECK-NEXT: Field: foo 6051f1ddf8SAndy Wingo# CHECK-NEXT: Kind: FUNCTION 6151f1ddf8SAndy Wingo# CHECK-NEXT: SigIndex: 2 6251f1ddf8SAndy Wingo# CHECK-NEXT: - Type: FUNCTION 6351f1ddf8SAndy Wingo# CHECK-NEXT: FunctionTypes: [ 0, 1, 0 ] 6451f1ddf8SAndy Wingo# CHECK-NEXT: - Type: TABLE 6551f1ddf8SAndy Wingo# CHECK-NEXT: Tables: 6651f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 1 6751f1ddf8SAndy Wingo# CHECK-NEXT: ElemType: FUNCREF 6851f1ddf8SAndy Wingo# CHECK-NEXT: Limits: 699ac5620cSAndy Wingo# CHECK-NEXT: Minimum: 0x0 7051f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 2 7151f1ddf8SAndy Wingo# CHECK-NEXT: ElemType: EXTERNREF 7251f1ddf8SAndy Wingo# CHECK-NEXT: Limits: 739ac5620cSAndy Wingo# CHECK-NEXT: Minimum: 0x0 7451f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 3 7551f1ddf8SAndy Wingo# CHECK-NEXT: ElemType: FUNCREF 7651f1ddf8SAndy Wingo# CHECK-NEXT: Limits: 7751f1ddf8SAndy Wingo# CHECK-NEXT: Flags: [ HAS_MAX ] 789ac5620cSAndy Wingo# CHECK-NEXT: Minimum: 0x3 7951f1ddf8SAndy Wingo# CHECK-NEXT: Maximum: 0x3 8051f1ddf8SAndy Wingo# CHECK-NEXT: - Type: MEMORY 8151f1ddf8SAndy Wingo# CHECK-NEXT: Memories: 829ac5620cSAndy Wingo# CHECK-NEXT: - Minimum: 0x2 8351f1ddf8SAndy Wingo# CHECK-NEXT: - Type: GLOBAL 8451f1ddf8SAndy Wingo# CHECK-NEXT: Globals: 8551f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 0 8651f1ddf8SAndy Wingo# CHECK-NEXT: Type: I32 8751f1ddf8SAndy Wingo# CHECK-NEXT: Mutable: true 8851f1ddf8SAndy Wingo# CHECK-NEXT: InitExpr: 8951f1ddf8SAndy Wingo# CHECK-NEXT: Opcode: I32_CONST 9051f1ddf8SAndy Wingo# CHECK-NEXT: Value: 66576 9151f1ddf8SAndy Wingo# CHECK-NEXT: - Type: EXPORT 9251f1ddf8SAndy Wingo# CHECK-NEXT: Exports: 9351f1ddf8SAndy Wingo# CHECK-NEXT: - Name: memory 9451f1ddf8SAndy Wingo# CHECK-NEXT: Kind: MEMORY 9551f1ddf8SAndy Wingo# CHECK-NEXT: Index: 0 9651f1ddf8SAndy Wingo# CHECK-NEXT: - Name: table_b 9751f1ddf8SAndy Wingo# CHECK-NEXT: Kind: TABLE 9851f1ddf8SAndy Wingo# CHECK-NEXT: Index: 1 9951f1ddf8SAndy Wingo# CHECK-NEXT: - Name: table_c 10051f1ddf8SAndy Wingo# CHECK-NEXT: Kind: TABLE 10151f1ddf8SAndy Wingo# CHECK-NEXT: Index: 2 10251f1ddf8SAndy Wingo# CHECK-NEXT: - Name: call_indirect_explicit_tables 10351f1ddf8SAndy Wingo# CHECK-NEXT: Kind: FUNCTION 10451f1ddf8SAndy Wingo# CHECK-NEXT: Index: 1 10551f1ddf8SAndy Wingo# CHECK-NEXT: - Name: bar 10651f1ddf8SAndy Wingo# CHECK-NEXT: Kind: FUNCTION 10751f1ddf8SAndy Wingo# CHECK-NEXT: Index: 2 10851f1ddf8SAndy Wingo# CHECK-NEXT: - Name: call_bar_indirect 10951f1ddf8SAndy Wingo# CHECK-NEXT: Kind: FUNCTION 11051f1ddf8SAndy Wingo# CHECK-NEXT: Index: 3 11151f1ddf8SAndy Wingo# CHECK-NEXT: - Type: ELEM 11251f1ddf8SAndy Wingo# CHECK-NEXT: Segments: 11351f1ddf8SAndy Wingo# CHECK-NEXT: - Flags: 2 11451f1ddf8SAndy Wingo# CHECK-NEXT: TableNumber: 3 11551f1ddf8SAndy Wingo# CHECK-NEXT: ElemKind: FUNCREF 11651f1ddf8SAndy Wingo# CHECK-NEXT: Offset: 11751f1ddf8SAndy Wingo# CHECK-NEXT: Opcode: I32_CONST 11851f1ddf8SAndy Wingo# CHECK-NEXT: Value: 1 11951f1ddf8SAndy Wingo# CHECK-NEXT: Functions: [ 2, 0 ] 12051f1ddf8SAndy Wingo# CHECK-NEXT: - Type: CODE 12151f1ddf8SAndy Wingo# CHECK-NEXT: Functions: 12251f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 1 12351f1ddf8SAndy Wingo# CHECK-NEXT: Locals: [] 12451f1ddf8SAndy Wingo# CHECK-NEXT: Body: 41001180808080008080808000410011808080800081808080000B 12551f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 2 12651f1ddf8SAndy Wingo# CHECK-NEXT: Locals: [] 12751f1ddf8SAndy Wingo# CHECK-NEXT: Body: 42010B 12851f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 3 12951f1ddf8SAndy Wingo# CHECK-NEXT: Locals: [] 13051f1ddf8SAndy Wingo# CHECK-NEXT: Body: 41002802808880800011818080800083808080001A41002802848880800011828080800083808080001A0B 13151f1ddf8SAndy Wingo# CHECK-NEXT: - Type: DATA 13251f1ddf8SAndy Wingo# CHECK-NEXT: Segments: 13351f1ddf8SAndy Wingo# CHECK-NEXT: - SectionOffset: 7 13451f1ddf8SAndy Wingo# CHECK-NEXT: InitFlags: 0 13551f1ddf8SAndy Wingo# CHECK-NEXT: Offset: 13651f1ddf8SAndy Wingo# CHECK-NEXT: Opcode: I32_CONST 13751f1ddf8SAndy Wingo# CHECK-NEXT: Value: 1024 13851f1ddf8SAndy Wingo# CHECK-NEXT: Content: '0100000002000000' 13951f1ddf8SAndy Wingo# CHECK-NEXT: - Type: CUSTOM 14051f1ddf8SAndy Wingo# CHECK-NEXT: Name: name 14151f1ddf8SAndy Wingo# CHECK-NEXT: FunctionNames: 14251f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 0 14351f1ddf8SAndy Wingo# CHECK-NEXT: Name: foo 14451f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 1 14551f1ddf8SAndy Wingo# CHECK-NEXT: Name: call_indirect_explicit_tables 14651f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 2 14751f1ddf8SAndy Wingo# CHECK-NEXT: Name: bar 14851f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 3 14951f1ddf8SAndy Wingo# CHECK-NEXT: Name: call_bar_indirect 15051f1ddf8SAndy Wingo# CHECK-NEXT: GlobalNames: 15151f1ddf8SAndy Wingo# CHECK-NEXT: - Index: 0 15251f1ddf8SAndy Wingo# CHECK-NEXT: Name: __stack_pointer 153