From e9f8eb07d24c1d38b3aa8e54d6707b208bfb197c Mon Sep 17 00:00:00 2001 From: Max Desiatov Date: Sun, 10 May 2020 17:37:45 +0100 Subject: [PATCH] ClangImporter: support __isoc_va_list for WASI/musl --- lib/ClangImporter/ImportType.cpp | 2 +- lib/ClangImporter/MappedTypes.def | 1 + test/Interop/C/va_list/Inputs/module.modulemap | 4 ++++ test/Interop/C/va_list/Inputs/va_list.h | 10 ++++++++++ test/Interop/C/va_list/va_list.swift | 6 ++++++ 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/Interop/C/va_list/Inputs/module.modulemap create mode 100644 test/Interop/C/va_list/Inputs/va_list.h create mode 100644 test/Interop/C/va_list/va_list.swift diff --git a/lib/ClangImporter/ImportType.cpp b/lib/ClangImporter/ImportType.cpp index 7871ee6977ce7..35ef5f19642e2 100644 --- a/lib/ClangImporter/ImportType.cpp +++ b/lib/ClangImporter/ImportType.cpp @@ -787,7 +787,7 @@ namespace { } static const llvm::StringLiteral vaListNames[] = { - "va_list", "__gnuc_va_list", "__va_list" + "va_list", "__gnuc_va_list", "__isoc_va_list", "__va_list" }; ImportHint hint = ImportHint::None; diff --git a/lib/ClangImporter/MappedTypes.def b/lib/ClangImporter/MappedTypes.def index c1a8c8039dcd1..7f11008619a99 100644 --- a/lib/ClangImporter/MappedTypes.def +++ b/lib/ClangImporter/MappedTypes.def @@ -128,6 +128,7 @@ MAP_STDLIB_TYPE("u_int64_t", UnsignedInt, 64, "UInt64", false, DoNothing) // There's an explicit workaround in ImportType.cpp's VisitDecayedType for that. MAP_STDLIB_TYPE("va_list", VaList, 0, "CVaListPointer", false, DoNothing) MAP_STDLIB_TYPE("__gnuc_va_list", VaList, 0, "CVaListPointer", false, DoNothing) +MAP_STDLIB_TYPE("__isoc_va_list", VaList, 0, "CVaListPointer", false, DoNothing) MAP_STDLIB_TYPE("__va_list", VaList, 0, "CVaListPointer", false, DoNothing) // libkern/OSTypes.h types. diff --git a/test/Interop/C/va_list/Inputs/module.modulemap b/test/Interop/C/va_list/Inputs/module.modulemap new file mode 100644 index 0000000000000..be337a926c6bb --- /dev/null +++ b/test/Interop/C/va_list/Inputs/module.modulemap @@ -0,0 +1,4 @@ +module ImportCVAList { + header "va_list.h" + export * +} diff --git a/test/Interop/C/va_list/Inputs/va_list.h b/test/Interop/C/va_list/Inputs/va_list.h new file mode 100644 index 0000000000000..2601016af7088 --- /dev/null +++ b/test/Interop/C/va_list/Inputs/va_list.h @@ -0,0 +1,10 @@ +#include + +typedef va_list __gnuc_va_list; +typedef va_list __isoc_va_list; +typedef va_list __va_list; + +va_list va; +__gnuc_va_list gnu; +__isoc_va_list isoC; +__va_list underscore; diff --git a/test/Interop/C/va_list/va_list.swift b/test/Interop/C/va_list/va_list.swift new file mode 100644 index 0000000000000..859f94343fe8e --- /dev/null +++ b/test/Interop/C/va_list/va_list.swift @@ -0,0 +1,6 @@ +// RUN: %target-swift-ide-test -print-module -module-to-print=ImportCVAList -I %S/Inputs -source-filename=x | %FileCheck %s + +// CHECK: var va: CVaListPointer +// CHECK: var gnu: CVaListPointer +// CHECK: var isoC: CVaListPointer +// CHECK: var underscore: CVaListPointer