From 3ea39890d11480b9e357870d3c7ae63a011be4be Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Mon, 20 Oct 2014 15:47:24 +0000 Subject: [PATCH 1/1] 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 --- lib/IR/Function.cpp | 6 ++++++ 1 file changed, 6 insertions(+) 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); } -- 2.34.1