diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2009-10-30 14:33:14 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2009-10-30 14:33:14 +0000 |
commit | ab7c709f433c79d9dcd1111203726bc492087ce4 (patch) | |
tree | 2cce79b81584801a9369e9bb4ed4343a4d31e853 /llvm/test/CodeGen/ARM/2009-10-30.ll | |
parent | b535352681bfcd8f5cca94248bc8ec56cae32b57 (diff) | |
download | bcm5719-llvm-ab7c709f433c79d9dcd1111203726bc492087ce4.tar.gz bcm5719-llvm-ab7c709f433c79d9dcd1111203726bc492087ce4.zip |
This fixes functions like
void f (int a1, int a2, int a3, int a4, int a5,...)
In ARMTargetLowering::LowerFormalArguments if the function has 4 or
more regular arguments we used to set VarArgsFrameIndex using an
offset of 0, which is only correct if the function has exactly 4
regular arguments.
llvm-svn: 85590
Diffstat (limited to 'llvm/test/CodeGen/ARM/2009-10-30.ll')
-rw-r--r-- | llvm/test/CodeGen/ARM/2009-10-30.ll | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/2009-10-30.ll b/llvm/test/CodeGen/ARM/2009-10-30.ll new file mode 100644 index 00000000000..82563869bd9 --- /dev/null +++ b/llvm/test/CodeGen/ARM/2009-10-30.ll @@ -0,0 +1,17 @@ +; RUN: llc < %s -mtriple=arm-linux-gnueabi | FileCheck %s +; This test checks that the address of the varg arguments is correctly +; computed when there are 5 or more regular arguments. + +define void @f(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, ...) { +entry: +;CHECK: sub sp, sp, #4 +;CHECK: add r0, sp, #8 +;CHECK: str r0, [sp], #+4 +;CHECK: bx lr + %ap = alloca i8*, align 4 + %ap1 = bitcast i8** %ap to i8* + call void @llvm.va_start(i8* %ap1) + ret void +} + +declare void @llvm.va_start(i8*) nounwind |