2022-10-06 12:12:57 +02:00
|
|
|
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm %s -o - | FileCheck %s
|
2011-08-27 01:09:30 +00:00
|
|
|
|
2011-08-16 21:41:35 +00:00
|
|
|
// PR4678
|
2011-08-27 01:09:30 +00:00
|
|
|
namespace test0 {
|
|
|
|
// test1 should be compmiled to be a varargs function in the IR even
|
|
|
|
// though there is no way to do a va_begin. Otherwise, the optimizer
|
|
|
|
// will warn about 'dropped arguments' at the call site.
|
2011-08-16 21:41:35 +00:00
|
|
|
|
2020-12-30 20:45:56 -08:00
|
|
|
// CHECK-LABEL: define{{.*}} i32 @_ZN5test05test1Ez(...)
|
2011-08-27 01:09:30 +00:00
|
|
|
int test1(...) {
|
|
|
|
return -1;
|
|
|
|
}
|
2011-08-16 21:41:35 +00:00
|
|
|
|
2022-01-16 18:53:11 +09:00
|
|
|
// CHECK: call noundef i32 (...) @_ZN5test05test1Ez(i32 noundef 0)
|
2011-08-27 01:09:30 +00:00
|
|
|
void test() {
|
|
|
|
test1(0);
|
|
|
|
}
|
2011-08-16 21:41:35 +00:00
|
|
|
}
|
|
|
|
|
2011-08-27 01:09:30 +00:00
|
|
|
namespace test1 {
|
|
|
|
struct A {
|
|
|
|
int x;
|
|
|
|
int y;
|
|
|
|
};
|
|
|
|
|
|
|
|
void foo(...);
|
|
|
|
|
|
|
|
void test() {
|
|
|
|
A x;
|
|
|
|
foo(x);
|
|
|
|
}
|
2020-12-30 20:45:56 -08:00
|
|
|
// CHECK-LABEL: define{{.*}} void @_ZN5test14testEv()
|
2011-08-27 01:09:30 +00:00
|
|
|
// CHECK: [[X:%.*]] = alloca [[A:%.*]], align 4
|
|
|
|
// CHECK-NEXT: [[TMP:%.*]] = alloca [[A]], align 4
|
2022-10-06 12:12:57 +02:00
|
|
|
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 [[TMP]], ptr align 4 [[X]], i64 8, i1 false)
|
|
|
|
// CHECK-NEXT: [[T1:%.*]] = load i64, ptr [[TMP]], align 4
|
2015-04-16 23:25:00 +00:00
|
|
|
// CHECK-NEXT: call void (...) @_ZN5test13fooEz(i64 [[T1]])
|
2011-08-27 01:09:30 +00:00
|
|
|
// CHECK-NEXT: ret void
|
2011-08-16 21:41:35 +00:00
|
|
|
}
|