diff options
Diffstat (limited to 'test/CodeGen')
| -rw-r--r-- | test/CodeGen/object-size.c | 13 | ||||
| -rw-r--r-- | test/CodeGen/variadic-null-win64.c | 8 |
2 files changed, 20 insertions, 1 deletions
diff --git a/test/CodeGen/object-size.c b/test/CodeGen/object-size.c index a3f3bce92956..fe4c1859a272 100644 --- a/test/CodeGen/object-size.c +++ b/test/CodeGen/object-size.c @@ -536,3 +536,16 @@ void PR30346() { // CHECK: store i32 14 gi = __builtin_object_size(sa->sa_data, 3); } + +extern char incomplete_char_array[]; +// CHECK-LABEL: @incomplete_and_function_types +int incomplete_and_function_types() { + // CHECK: call i64 @llvm.objectsize.i64.p0i8 + gi = __builtin_object_size(incomplete_char_array, 0); + // CHECK: call i64 @llvm.objectsize.i64.p0i8 + gi = __builtin_object_size(incomplete_char_array, 1); + // CHECK: call i64 @llvm.objectsize.i64.p0i8 + gi = __builtin_object_size(incomplete_char_array, 2); + // CHECK: store i32 0 + gi = __builtin_object_size(incomplete_char_array, 3); +} diff --git a/test/CodeGen/variadic-null-win64.c b/test/CodeGen/variadic-null-win64.c index 3e079cbf8e51..23c85b835756 100644 --- a/test/CodeGen/variadic-null-win64.c +++ b/test/CodeGen/variadic-null-win64.c @@ -3,15 +3,21 @@ // Make it possible to pass NULL through variadic functions on platforms where // NULL has an integer type that is more narrow than a pointer. On such -// platforms we widen null pointer constants to a pointer-sized integer. +// platforms we widen null pointer constants passed to variadic functions to a +// pointer-sized integer. We don't apply this special case to K&R-style +// unprototyped functions, because MSVC doesn't either. #define NULL 0 void v(const char *f, ...); +void kr(); void f(const char *f) { v(f, 1, 2, 3, NULL); + kr(f, 1, 2, 3, 0); } // WINDOWS: define void @f(i8* %f) // WINDOWS: call void (i8*, ...) @v(i8* {{.*}}, i32 1, i32 2, i32 3, i64 0) +// WINDOWS: call void bitcast (void (...)* @kr to void (i8*, i32, i32, i32, i32)*)(i8* {{.*}}, i32 1, i32 2, i32 3, i32 0) // LINUX: define void @f(i8* %f) // LINUX: call void (i8*, ...) @v(i8* {{.*}}, i32 1, i32 2, i32 3, i32 0) +// LINUX: call void (i8*, i32, i32, i32, i32, ...) bitcast (void (...)* @kr to void (i8*, i32, i32, i32, i32, ...)*)(i8* {{.*}}, i32 1, i32 2, i32 3, i32 0) |
