From: Steven Wu Date: Mon, 20 Oct 2014 15:47:24 +0000 (+0000) Subject: Fix Intrinsic::getType not working with vararg X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3ea39890d11480b9e357870d3c7ae63a011be4be;p=oota-llvm.git Fix Intrinsic::getType not working with vararg VarArg Intrinsic functions are encoded with "void" type as the last argument. Now Intrinsic::getType can correctly return all the intrinsic function type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220205 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/Function.cpp b/lib/IR/Function.cpp index 83f71a89162..13747cafec9 100644 --- a/lib/IR/Function.cpp +++ b/lib/IR/Function.cpp @@ -739,6 +739,12 @@ FunctionType *Intrinsic::getType(LLVMContext &Context, while (!TableRef.empty()) ArgTys.push_back(DecodeFixedType(TableRef, Tys, Context)); + // DecodeFixedType returns Void for IITDescriptor::Void and IITDescriptor::VarArg + // If we see void type as the type of the last argument, it is vararg intrinsic + if (!ArgTys.empty() && ArgTys.back()->isVoidTy()) { + ArgTys.pop_back(); + return FunctionType::get(ResultTy, ArgTys, true); + } return FunctionType::get(ResultTy, ArgTys, false); }