From 964a4bf7e28558174279c1a0deaf72b8d201348b Mon Sep 17 00:00:00 2001 From: Egor Zhdan Date: Tue, 30 Sep 2025 13:25:09 +0100 Subject: [PATCH] Make SwiftSyntaxCShims compatible with C++ This fixes a build failure in some external projects that depend on SwiftSyntax and enable C++ interop: ``` Undefined symbols for architecture arm64: "swiftsyntax_platform_mutex_lock(PlatformMutex)", referenced from: SwiftSyntax.SyntaxDataArena.layout(for: SwiftSyntax.ArenaAllocatedPointer) -> SwiftSyntax.ArenaAllocatedBufferPointer?> in Syntax.swift.o ``` rdar://161624532 --- Sources/_SwiftSyntaxCShims/include/Atomics.h | 8 ++++++++ Sources/_SwiftSyntaxCShims/include/PlatformMutex.h | 8 ++++++++ Sources/_SwiftSyntaxCShims/include/swiftsyntax_errno.h | 8 ++++++++ Sources/_SwiftSyntaxCShims/include/swiftsyntax_stdio.h | 8 ++++++++ 4 files changed, 32 insertions(+) diff --git a/Sources/_SwiftSyntaxCShims/include/Atomics.h b/Sources/_SwiftSyntaxCShims/include/Atomics.h index cdbc4b68f7b..e5111b81682 100644 --- a/Sources/_SwiftSyntaxCShims/include/Atomics.h +++ b/Sources/_SwiftSyntaxCShims/include/Atomics.h @@ -16,6 +16,10 @@ #include #include +#ifdef __cplusplus +extern "C" { +#endif + typedef struct { _Atomic(bool) value; } AtomicBool; @@ -50,4 +54,8 @@ static inline void swiftsyntax_atomic_pointer_set(AtomicPointer *_Nonnull atomic atomic->value = newValue; } +#ifdef __cplusplus +} +#endif + #endif // SWIFTSYNTAX_ATOMICBOOL_H diff --git a/Sources/_SwiftSyntaxCShims/include/PlatformMutex.h b/Sources/_SwiftSyntaxCShims/include/PlatformMutex.h index 3288a0f1746..184368f2c4e 100644 --- a/Sources/_SwiftSyntaxCShims/include/PlatformMutex.h +++ b/Sources/_SwiftSyntaxCShims/include/PlatformMutex.h @@ -15,6 +15,10 @@ #include "_bridging.h" +#ifdef __cplusplus +extern "C" { +#endif + typedef struct PlatformMutex { void *opaque; } PlatformMutex; @@ -31,4 +35,8 @@ void swiftsyntax_platform_mutex_unlock(PlatformMutex m); SWIFT_NAME_S("PlatformMutex.destroy(self:)") void swiftsyntax_platform_mutex_destroy(PlatformMutex m); +#ifdef __cplusplus +} +#endif + #endif // SWIFTSYNTAX_PLATFORMMUTEX_H diff --git a/Sources/_SwiftSyntaxCShims/include/swiftsyntax_errno.h b/Sources/_SwiftSyntaxCShims/include/swiftsyntax_errno.h index 1a6c7cb1dd8..756574e4cb1 100644 --- a/Sources/_SwiftSyntaxCShims/include/swiftsyntax_errno.h +++ b/Sources/_SwiftSyntaxCShims/include/swiftsyntax_errno.h @@ -17,9 +17,17 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + SWIFT_NAME_S("getter:swift_syntax_errno()") static inline int swiftsyntax_errno(void) { return errno; } +#ifdef __cplusplus +} +#endif + #endif // SWIFTSYNTAX_ERRNO_H diff --git a/Sources/_SwiftSyntaxCShims/include/swiftsyntax_stdio.h b/Sources/_SwiftSyntaxCShims/include/swiftsyntax_stdio.h index 207fda17818..fe28242a261 100644 --- a/Sources/_SwiftSyntaxCShims/include/swiftsyntax_stdio.h +++ b/Sources/_SwiftSyntaxCShims/include/swiftsyntax_stdio.h @@ -17,6 +17,10 @@ #include +#ifdef __cplusplus +extern "C" { +#endif + SWIFT_NAME_S("getter:swift_syntax_stdout()") static inline FILE *swiftsyntax_stdout(void) { return stdout; @@ -32,4 +36,8 @@ static inline FILE *swiftsyntax_stderr(void) { return stderr; } +#ifdef __cplusplus +} +#endif + #endif // SWIFTSYNTAX_STDIO_H