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
This commit is contained in:
Mike Rice 2019-05-08 17:15:21 +00:00
parent f31eba6494
commit a0933bd8ec
7 changed files with 27 additions and 2 deletions

View File

@ -10,6 +10,11 @@
#ifndef __STDARG_H #ifndef __STDARG_H
#define __STDARG_H #define __STDARG_H
#if defined(_MSC_VER)
/* Include otherwise unneeded header for MSVC compatibility. */
#include <vcruntime.h>
#endif
#ifndef _VA_LIST #ifndef _VA_LIST
typedef __builtin_va_list va_list; typedef __builtin_va_list va_list;
#define _VA_LIST #define _VA_LIST

View File

@ -18,6 +18,12 @@
#if !__has_feature(modules) #if !__has_feature(modules)
#define __STDDEF_H #define __STDDEF_H
#endif #endif
#if defined(_MSC_VER)
/* Include otherwise unneeded header for MSVC compatibility. */
#include <corecrt.h>
#endif
#define __need_ptrdiff_t #define __need_ptrdiff_t
#define __need_size_t #define __need_size_t
#define __need_wchar_t #define __need_wchar_t

View File

@ -0,0 +1 @@
#pragma once

View File

@ -0,0 +1 @@
#pragma once

View File

@ -2,7 +2,8 @@
// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 %s // 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 -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 -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+{{}} noreturn int f(); // expected-error 1+{{}}

View File

@ -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

View 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 // RUN: %clang_cc1 -fsyntax-only -triple i386-mingw32 %s
// Something in MSVC's headers (pulled in e.g. by <crtdefs.h>) defines __null // Something in MSVC's headers (pulled in e.g. by <crtdefs.h>) defines __null