1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li // rdar://7309675 4*67e74705SXin Li // PR4678 5*67e74705SXin Li namespace test0 { 6*67e74705SXin Li // test1 should be compmiled to be a varargs function in the IR even 7*67e74705SXin Li // though there is no way to do a va_begin. Otherwise, the optimizer 8*67e74705SXin Li // will warn about 'dropped arguments' at the call site. 9*67e74705SXin Li 10*67e74705SXin Li // CHECK-LABEL: define i32 @_ZN5test05test1Ez(...) test1(...)11*67e74705SXin Li int test1(...) { 12*67e74705SXin Li return -1; 13*67e74705SXin Li } 14*67e74705SXin Li 15*67e74705SXin Li // CHECK: call i32 (...) @_ZN5test05test1Ez(i32 0) test()16*67e74705SXin Li void test() { 17*67e74705SXin Li test1(0); 18*67e74705SXin Li } 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li namespace test1 { 22*67e74705SXin Li struct A { 23*67e74705SXin Li int x; 24*67e74705SXin Li int y; 25*67e74705SXin Li }; 26*67e74705SXin Li 27*67e74705SXin Li void foo(...); 28*67e74705SXin Li test()29*67e74705SXin Li void test() { 30*67e74705SXin Li A x; 31*67e74705SXin Li foo(x); 32*67e74705SXin Li } 33*67e74705SXin Li // CHECK-LABEL: define void @_ZN5test14testEv() 34*67e74705SXin Li // CHECK: [[X:%.*]] = alloca [[A:%.*]], align 4 35*67e74705SXin Li // CHECK-NEXT: [[TMP:%.*]] = alloca [[A]], align 4 36*67e74705SXin Li // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[TMP]] to i8* 37*67e74705SXin Li // CHECK-NEXT: [[T1:%.*]] = bitcast [[A]]* [[X]] to i8* 38*67e74705SXin Li // CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(i8* [[T0]], i8* [[T1]], i64 8, i32 4, i1 false) 39*67e74705SXin Li // CHECK-NEXT: [[T0:%.*]] = bitcast [[A]]* [[TMP]] to i64* 40*67e74705SXin Li // CHECK-NEXT: [[T1:%.*]] = load i64, i64* [[T0]], align 4 41*67e74705SXin Li // CHECK-NEXT: call void (...) @_ZN5test13fooEz(i64 [[T1]]) 42*67e74705SXin Li // CHECK-NEXT: ret void 43*67e74705SXin Li } 44