diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-04 22:11:23 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-04 22:11:23 +0000 |
| commit | 0c75eea8f661a82866688fd1fc4465883c4dd7d5 (patch) | |
| tree | 96848f3b7cc25f95142a52b6dd2ba93f1de6e413 /test/CodeGen/variadic-null-win64.c | |
| parent | bab175ec4b075c8076ba14c762900392533f6ee4 (diff) | |
Diffstat (limited to 'test/CodeGen/variadic-null-win64.c')
| -rw-r--r-- | test/CodeGen/variadic-null-win64.c | 8 |
1 files changed, 7 insertions, 1 deletions
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) |
