1*67e74705SXin Li // RUN: %clang_cc1 -triple sparc -emit-llvm -o - %s | FileCheck %s 2*67e74705SXin Li #include <stdarg.h> 3*67e74705SXin Li 4*67e74705SXin Li // CHECK-LABEL: define i32 @get_int 5*67e74705SXin Li // CHECK: [[RESULT:%[a-z_0-9]+]] = va_arg {{.*}}, i32{{$}} 6*67e74705SXin Li // CHECK: store i32 [[RESULT]], i32* [[LOC:%[a-z_0-9]+]] 7*67e74705SXin Li // CHECK: [[RESULT2:%[a-z_0-9]+]] = load i32, i32* [[LOC]] 8*67e74705SXin Li // CHECK: ret i32 [[RESULT2]] get_int(va_list * args)9*67e74705SXin Liint get_int(va_list *args) { 10*67e74705SXin Li return va_arg(*args, int); 11*67e74705SXin Li } 12*67e74705SXin Li 13*67e74705SXin Li struct Foo { 14*67e74705SXin Li int x; 15*67e74705SXin Li }; 16*67e74705SXin Li 17*67e74705SXin Li struct Foo dest; 18*67e74705SXin Li 19*67e74705SXin Li // CHECK-LABEL: define void @get_struct 20*67e74705SXin Li // CHECK: [[RESULT:%[a-z_0-9]+]] = va_arg {{.*}}, %struct.Foo*{{$}} 21*67e74705SXin Li // CHECK: [[RESULT2:%[a-z_0-9]+]] = bitcast {{.*}} [[RESULT]] to i8* 22*67e74705SXin Li // CHECK: call void @llvm.memcpy{{.*}}@dest{{.*}}, i8* [[RESULT2]] get_struct(va_list * args)23*67e74705SXin Livoid get_struct(va_list *args) { 24*67e74705SXin Li dest = va_arg(*args, struct Foo); 25*67e74705SXin Li } 26*67e74705SXin Li 27*67e74705SXin Li enum E { Foo_one = 1 }; 28*67e74705SXin Li 29*67e74705SXin Li enum E enum_dest; 30*67e74705SXin Li 31*67e74705SXin Li // CHECK-LABEL: define void @get_enum 32*67e74705SXin Li // CHECK: va_arg i8** {{.*}}, i32 get_enum(va_list * args)33*67e74705SXin Livoid get_enum(va_list *args) { 34*67e74705SXin Li enum_dest = va_arg(*args, enum E); 35*67e74705SXin Li } 36