]> granicus.if.org Git - clang/commitdiff
Include corecrt.h in stddef.h and vcruntime.h in stdarg.h to improve MS
authorMike Rice <michael.p.rice@intel.com>
Wed, 8 May 2019 17:15:21 +0000 (17:15 +0000)
committerMike Rice <michael.p.rice@intel.com>
Wed, 8 May 2019 17:15:21 +0000 (17:15 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@360271 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/stdarg.h
lib/Headers/stddef.h
test/Headers/Inputs/ms-crt/corecrt.h [new file with mode: 0644]
test/Headers/Inputs/ms-crt/vcruntime.h [new file with mode: 0644]
test/Headers/c11.c
test/Headers/ms-additional-includes.cpp [new file with mode: 0644]
test/Headers/ms-null-ms-header-vs-stddef.cpp

index 0bc39408c1e5feaadd6f0420d14324b477420b93..97b3c082ec8bd95afca5a5881d09bb102f50deda 100644 (file)
 #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
index 15acd4427ca14000111aad5071563bc7f2dc09f4..860c909eff2983076f6643bc5a53f510c9961e52 100644 (file)
 #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/test/Headers/Inputs/ms-crt/corecrt.h b/test/Headers/Inputs/ms-crt/corecrt.h
new file mode 100644 (file)
index 0000000..6f70f09
--- /dev/null
@@ -0,0 +1 @@
+#pragma once
diff --git a/test/Headers/Inputs/ms-crt/vcruntime.h b/test/Headers/Inputs/ms-crt/vcruntime.h
new file mode 100644 (file)
index 0000000..6f70f09
--- /dev/null
@@ -0,0 +1 @@
+#pragma once
index 6594823c273346552a21ef51d7bf0f3a501e6de2..e5e8ae425f9e210b6addc08edc18e5ae2c5f98cb 100644 (file)
@@ -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/test/Headers/ms-additional-includes.cpp b/test/Headers/ms-additional-includes.cpp
new file mode 100644 (file)
index 0000000..3c6506a
--- /dev/null
@@ -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
index f39a0cafaa0db3cc305d01c02ffccbbe15fa14c9..bd81b6287bf4fa2db2c22bd4741ef2e21cbb10d9 100644 (file)
@@ -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