diff options
author | Mike Rice <michael.p.rice@intel.com> | 2019-05-08 17:15:21 +0000 |
---|---|---|
committer | Mike Rice <michael.p.rice@intel.com> | 2019-05-08 17:15:21 +0000 |
commit | a0933bd8ec1515167ea653f7ee788b8bbde27d51 (patch) | |
tree | e1b73dcacfdce3d28fd9b6929fffc9d1c7979ec2 | |
parent | f31eba649422082783a19bb6b373f31f10f55de9 (diff) | |
download | bcm5719-llvm-a0933bd8ec1515167ea653f7ee788b8bbde27d51.tar.gz bcm5719-llvm-a0933bd8ec1515167ea653f7ee788b8bbde27d51.zip |
Include corecrt.h in stddef.h and vcruntime.h in stdarg.h to improve MS
compatibility. This allows some applications developed with MSVC to
compile with clang without any extra changes.
Fixes: llvm.org/PR40789
Differential Revision: https://reviews.llvm.org/D61646
llvm-svn: 360271
-rw-r--r-- | clang/lib/Headers/stdarg.h | 5 | ||||
-rw-r--r-- | clang/lib/Headers/stddef.h | 6 | ||||
-rw-r--r-- | clang/test/Headers/Inputs/ms-crt/corecrt.h | 1 | ||||
-rw-r--r-- | clang/test/Headers/Inputs/ms-crt/vcruntime.h | 1 | ||||
-rw-r--r-- | clang/test/Headers/c11.c | 3 | ||||
-rw-r--r-- | clang/test/Headers/ms-additional-includes.cpp | 10 | ||||
-rw-r--r-- | clang/test/Headers/ms-null-ms-header-vs-stddef.cpp | 3 |
7 files changed, 27 insertions, 2 deletions
diff --git a/clang/lib/Headers/stdarg.h b/clang/lib/Headers/stdarg.h index 0bc39408c1e..97b3c082ec8 100644 --- a/clang/lib/Headers/stdarg.h +++ b/clang/lib/Headers/stdarg.h @@ -10,6 +10,11 @@ #ifndef __STDARG_H #define __STDARG_H +#if defined(_MSC_VER) +/* Include otherwise unneeded header for MSVC compatibility. */ +#include <vcruntime.h> +#endif + #ifndef _VA_LIST typedef __builtin_va_list va_list; #define _VA_LIST diff --git a/clang/lib/Headers/stddef.h b/clang/lib/Headers/stddef.h index 15acd4427ca..860c909eff2 100644 --- a/clang/lib/Headers/stddef.h +++ b/clang/lib/Headers/stddef.h @@ -18,6 +18,12 @@ #if !__has_feature(modules) #define __STDDEF_H #endif + +#if defined(_MSC_VER) +/* Include otherwise unneeded header for MSVC compatibility. */ +#include <corecrt.h> +#endif + #define __need_ptrdiff_t #define __need_size_t #define __need_wchar_t diff --git a/clang/test/Headers/Inputs/ms-crt/corecrt.h b/clang/test/Headers/Inputs/ms-crt/corecrt.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/clang/test/Headers/Inputs/ms-crt/corecrt.h @@ -0,0 +1 @@ +#pragma once diff --git a/clang/test/Headers/Inputs/ms-crt/vcruntime.h b/clang/test/Headers/Inputs/ms-crt/vcruntime.h new file mode 100644 index 00000000000..6f70f09beec --- /dev/null +++ b/clang/test/Headers/Inputs/ms-crt/vcruntime.h @@ -0,0 +1 @@ +#pragma once diff --git a/clang/test/Headers/c11.c b/clang/test/Headers/c11.c index 6594823c273..e5e8ae425f9 100644 --- a/clang/test/Headers/c11.c +++ b/clang/test/Headers/c11.c @@ -2,7 +2,8 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c11 %s // RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -fmodules -fmodules-cache-path=%t %s -D__STDC_WANT_LIB_EXT1__=1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -ffreestanding %s -// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -triple i686-pc-win32 -fms-compatibility-version=17.00 %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -triple i686-pc-win32 \ +// RUN: -fms-compatibility-version=17.00 -isystem %S/Inputs/ms-crt %s noreturn int f(); // expected-error 1+{{}} diff --git a/clang/test/Headers/ms-additional-includes.cpp b/clang/test/Headers/ms-additional-includes.cpp new file mode 100644 index 00000000000..3c6506a5a51 --- /dev/null +++ b/clang/test/Headers/ms-additional-includes.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only --show-includes -triple i686-pc-win32 \ +// RUN: -isystem %S/Inputs/ms-crt -fms-compatibility-version=17.00 %s \ +// RUN: | FileCheck %s + +#include <stddef.h> +// CHECK: including file:{{.*}}stddef.h +// CHECK: including file:{{.*}}corecrt.h +#include <stdarg.h> +// CHECK: including file:{{.*}}stdarg.h +// CHECK: including file:{{.*}}vcruntime.h diff --git a/clang/test/Headers/ms-null-ms-header-vs-stddef.cpp b/clang/test/Headers/ms-null-ms-header-vs-stddef.cpp index f39a0cafaa0..bd81b6287bf 100644 --- a/clang/test/Headers/ms-null-ms-header-vs-stddef.cpp +++ b/clang/test/Headers/ms-null-ms-header-vs-stddef.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -fsyntax-only -triple i686-pc-win32 -fms-compatibility -fms-compatibility-version=17.00 %s +// RUN: %clang_cc1 -fsyntax-only -triple i686-pc-win32 -fms-compatibility \ +// RUN: -isystem %S/Inputs/ms-crt -fms-compatibility-version=17.00 %s // RUN: %clang_cc1 -fsyntax-only -triple i386-mingw32 %s // Something in MSVC's headers (pulled in e.g. by <crtdefs.h>) defines __null |