diff options
author | Duncan Sands <baldrick@free.fr> | 2008-01-11 21:23:39 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2008-01-11 21:23:39 +0000 |
commit | eb824709cbc6810bfc35833833c5b5cb069f6c40 (patch) | |
tree | 1c84cb52e66a517aaede7bf3712d53e4022e12b1 | |
parent | 497e888daf9ba6489928e1153804ed12a7fe44c5 (diff) | |
download | external_llvm-eb824709cbc6810bfc35833833c5b5cb069f6c40.zip external_llvm-eb824709cbc6810bfc35833833c5b5cb069f6c40.tar.gz external_llvm-eb824709cbc6810bfc35833833c5b5cb069f6c40.tar.bz2 |
If there are attributes on the varargs part of a
call, don't discard them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45884 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AsmParser/llvmAsmParser.y | 18 | ||||
-rw-r--r-- | test/Assembler/2008-01-11-VarargAttrs.ll | 10 |
2 files changed, 26 insertions, 2 deletions
diff --git a/lib/AsmParser/llvmAsmParser.y b/lib/AsmParser/llvmAsmParser.y index 9f12b3e..9674bba 100644 --- a/lib/AsmParser/llvmAsmParser.y +++ b/lib/AsmParser/llvmAsmParser.y @@ -2675,8 +2675,15 @@ BBTerminatorInst : RET ResolvedVal { // Return with a result... if (Ty->isVarArg()) { if (I == E) - for (; ArgI != ArgE; ++ArgI) + for (; ArgI != ArgE; ++ArgI, ++index) { Args.push_back(ArgI->Val); // push the remaining varargs + if (ArgI->Attrs != ParamAttr::None) { + ParamAttrsWithIndex PAWI; + PAWI.index = index; + PAWI.attrs = ArgI->Attrs; + Attrs.push_back(PAWI); + } + } } else if (I != E || ArgI != ArgE) GEN_ERROR("Invalid number of parameters detected"); } @@ -3006,8 +3013,15 @@ InstVal : ArithmeticOps Types ValueRef ',' ValueRef { } if (Ty->isVarArg()) { if (I == E) - for (; ArgI != ArgE; ++ArgI) + for (; ArgI != ArgE; ++ArgI, ++index) { Args.push_back(ArgI->Val); // push the remaining varargs + if (ArgI->Attrs != ParamAttr::None) { + ParamAttrsWithIndex PAWI; + PAWI.index = index; + PAWI.attrs = ArgI->Attrs; + Attrs.push_back(PAWI); + } + } } else if (I != E || ArgI != ArgE) GEN_ERROR("Invalid number of parameters detected"); } diff --git a/test/Assembler/2008-01-11-VarargAttrs.ll b/test/Assembler/2008-01-11-VarargAttrs.ll new file mode 100644 index 0000000..c46b2a5 --- /dev/null +++ b/test/Assembler/2008-01-11-VarargAttrs.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llvm-dis | grep byval | count 2 + + %struct = type { } + +declare void @foo(...) + +define void @bar() { + call void (...)* @foo(%struct* byval null, %struct* byval null ) + ret void +} |