Let NULL and MSVC headers coexist better.

Fixes the two issues mentioned in PR12146.

llvm-svn: 155490
This commit is contained in:
Nico Weber 2012-04-24 21:27:01 +00:00
parent a8022fa70d
commit 1d725ecf93
2 changed files with 22 additions and 3 deletions

View File

@ -43,9 +43,12 @@ typedef __WCHAR_TYPE__ wchar_t;
#undef NULL #undef NULL
#ifdef __cplusplus #ifdef __cplusplus
#undef __null // VC++ hack. # if !defined(__MINGW32__) && !defined(_MSC_VER)
# define NULL __null # define NULL __null
# else # else
# define NULL 0
# endif
#else
# define NULL ((void*)0) # define NULL ((void*)0)
#endif #endif

View File

@ -0,0 +1,16 @@
// RUN: %clang -fsyntax-only -target i686-pc-win32 %s
// RUN: %clang -fsyntax-only -target i386-mingw32 %s
// Something in MSVC's headers (pulled in e.g. by <crtdefs.h>) defines __null
// to something, mimick that.
#define __null
#include <stddef.h>
// __null is used as a type annotation in MS headers, with __null defined to
// nothing in regular builds. This should continue to work even with stddef.h
// included.
void f(__null void* p) { }
// NULL should work fine even with __null defined to nothing.
void* p = NULL;