diff options
Diffstat (limited to 'contrib/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp')
| -rw-r--r-- | contrib/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/contrib/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp b/contrib/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp index adf904ee0269..76a2ff3f9803 100644 --- a/contrib/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp +++ b/contrib/llvm/lib/Target/WebAssembly/WebAssemblyFixFunctionBitcasts.cpp @@ -84,7 +84,7 @@ static void FindUses(Value *V, Function &F,  //  - Call with fewer arguments than needed: arguments are filled in with undef  //  - Return value is not needed: drop it  //  - Return value needed but not present: supply an undef -//   +//  // For now, return nullptr without creating a wrapper if the wrapper cannot  // be generated due to incompatible types.  static Function *CreateWrapper(Function *F, FunctionType *Ty) { @@ -148,6 +148,11 @@ bool FixFunctionBitcasts::runOnModule(Module &M) {      if (!Ty)        continue; +    // Wasm varargs are not ABI-compatible with non-varargs. Just ignore +    // such casts for now. +    if (Ty->isVarArg() || F->isVarArg()) +      continue; +      auto Pair = Wrappers.insert(std::make_pair(std::make_pair(F, Ty), nullptr));      if (Pair.second)        Pair.first->second = CreateWrapper(F, Ty);  | 
