diff options
author | Reid Kleckner <reid@kleckner.net> | 2014-10-10 00:05:45 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2014-10-10 00:05:45 +0000 |
commit | 79b0fd7a489c9aa793b3dab80ce78819f887fa0c (patch) | |
tree | 0465b8346f6328316f2a8c487e33a5a55b9cf9ef /clang/test/CodeGen/variadic-null-win64.c | |
parent | df782e42296db1b73a03fc7a445361eb82363594 (diff) | |
download | bcm5719-llvm-79b0fd7a489c9aa793b3dab80ce78819f887fa0c.tar.gz bcm5719-llvm-79b0fd7a489c9aa793b3dab80ce78819f887fa0c.zip |
Promote null pointer constants used as arguments to variadic functions
Make it possible to pass NULL through variadic functions on 64-bit
Windows targets. The Visual C++ headers define NULL to 0, when they
should define it to 0LL on Win64 so that NULL is a pointer-sized
integer.
Fixes PR20949.
Reviewers: thakis, rsmith
Differential Revision: http://reviews.llvm.org/D5480
llvm-svn: 219456
Diffstat (limited to 'clang/test/CodeGen/variadic-null-win64.c')
-rw-r--r-- | clang/test/CodeGen/variadic-null-win64.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/test/CodeGen/variadic-null-win64.c b/clang/test/CodeGen/variadic-null-win64.c new file mode 100644 index 00000000000..4f57e7b39f9 --- /dev/null +++ b/clang/test/CodeGen/variadic-null-win64.c @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 %s -emit-llvm -o - -triple x86_64-windows-msvc | FileCheck %s --check-prefix=WINDOWS +// RUN: %clang_cc1 %s -emit-llvm -o - -triple x86_64-linux | FileCheck %s --check-prefix=LINUX + +// 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. + +#define NULL 0 + +void v(const char *f, ...); +void f(const char *f) { + v(f, 1, 2, 3, NULL); +} +// WINDOWS: define void @f(i8* %f) +// WINDOWS: call void (i8*, ...)* @v(i8* {{.*}}, i32 1, i32 2, i32 3, i64 0) +// LINUX: define void @f(i8* %f) +// LINUX: call void (i8*, ...)* @v(i8* {{.*}}, i32 1, i32 2, i32 3, i32 0) |