llvm-project/llvm/test/CodeGen/WebAssembly/function-bitcasts-varargs.ll
Sam Clegg 41d7047de5 [WebAssembly] Ensure bitcasts that would result in invalid wasm are removed by FixFunctionBitcasts
Rather than allowing invalid bitcasts to be lowered to wasm
call instructions that won't validate, generate wrappers that
contain unreachable thereby delaying the error until runtime.

Differential Revision: https://reviews.llvm.org/D49517

llvm-svn: 338744
2018-08-02 17:38:06 +00:00

32 lines
1.0 KiB
LLVM

; RUN: llc < %s -asm-verbose=false -wasm-temporary-workarounds=false | FileCheck %s
; Test that function pointer casts casting away varargs are replaced with
; wrappers.
target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"
define void @callWithArgs() {
entry:
call void bitcast (void (...)* @underspecified to void (i32, i32)*)(i32 0, i32 1)
call void(...) bitcast (void (i32, i32)* @specified to void (...)*)(i32 0, i32 1)
ret void
}
declare void @underspecified(...)
declare void @specified(i32, i32)
; CHECK: callWithArgs:
; CHECK: i32.const $push1=, 0
; CHECK-NEXT: i32.const $push0=, 1
; CHECK-NEXT: call .Lunderspecified_bitcast@FUNCTION, $pop1, $pop0
; CHECK: call .Lspecified_bitcast@FUNCTION, $pop{{[0-9]+$}}
; CHECK: .Lunderspecified_bitcast:
; CHECK-NEXT: .param i32, i32{{$}}
; CHECK: call underspecified@FUNCTION, $pop{{[0-9]+$}}
; CHECK: .Lspecified_bitcast:
; CHECK-NEXT: .param i32{{$}}
; CHECK: call specified@FUNCTION, $pop{{[0-9]+}}, $pop{{[0-9]+$}}