Commit Graph

1942 Commits

Author SHA1 Message Date
Susana Monteiro
0337f7e64a Merge pull request #83067 from susmonteiro/rename-virtual-methods
[cxx-interop] Adding swift_name attributes to virtual methods overrides
2025-07-18 11:57:46 +01:00
Artem Chikin
57dd4cefdb Merge pull request #83139 from artemcm/DoNotCleanCacheWithoutMess
[Test] Do not clear the module cache when not needed between compiler runs
2025-07-17 15:53:36 -07:00
Artem Chikin
ebbb493852 [Test] Do not clear the module cache when not needed between compiler runs
In 'no-cxx-overlay-for-non-interop-interface.swift', test semantics should not be affected by having a persistent module cache between them
2025-07-17 10:40:38 -07:00
susmonteiro
585ca5e2da [cxx-interop] Adding swift_name attributes to virtual methods overrides 2025-07-17 16:23:32 +01:00
Erik Eckstein
dbb1c53e33 tests: fix Interop/Cxx/foreign-reference/array-of-classes.swift
This test can only run on the host OS

rdar://156051900
2025-07-17 16:00:15 +02:00
Erik Eckstein
f962d76362 GenericSpecializer: don't pre-specialize C++ reference type for AnyObject
Reference counting is not compatible.
Fixes a runtime crash if a C++ reference type is put into an Array.

https://github.com/swiftlang/swift/issues/83082
rdar://155919841
2025-07-16 21:30:36 +02:00
fahadnayyar
a4eeae2a01 [cxx-interop] Re-enable warnings for unannotated C++ APIs returning SWIFT_SHARED_REFERENCE types under an experimental feature flag (#82488)
This patch re-enables diagnostics for unannotated C++ functions or
methods returning `SWIFT_SHARED_REFERENCE` types. These warnings now
fire only **once per source location**, even in the presence of multiple
template instantiations. This avoids diagnostic duplication that was a
key source of noise in the compilation of larger codebases.

These warnings were previously disabled starting in **Swift 6.2** via
[PR-#81411](https://github.com/swiftlang/swift/pull/81411) due to
concerns around false positives and excessive duplication in projects
adopting C++ interop. This patch addresses the duplication issue by
adding source-location-based caching, which ensures that a warning is
emitted only once per source location, even across template
instantiations with different types.

However, the false positive issue remains to be investigated and will be
addressed in a follow-up patch. Until that happens, the warnings are
gated behind a new experimental feature flag:
`WarnUnannotatedReturnOfCxxFrt`. This feature will be enabled by default
only after thorough qualification and testing on large C++ codebases.

rdar://154261051
2025-07-15 02:56:34 -07:00
fahadnayyar
439afd6406 Revert "Test Interop/Cxx/stdlib/overlay/custom-collection.swift fails on bots" (#82502)
I'm not able to reproduce the CI issue reported in rdar://143950805
locally. I don't have access to the logs from the failing bot link:
https://ci.swift.org/job/oss-swift_tools-RA_stdlib-RD_test-simulator/5086.

So, I'm trying to re-enable this test and do some custom PR testing to
see if the bot is still failing.

rdar://143950805
2025-07-13 16:15:11 -07:00
Ben Barham
dd809c6452 Revert "[cxx-interop] Allow import-as-member for types in namespaces"
This reverts commit e95f6a3ce9.
2025-07-09 12:50:34 -07:00
Doug Gregor
b0739a55b3 Merge pull request #82850 from DougGregor/span-back-deployment-version-fixes
Fix deployment version for Span back-deployment library
2025-07-08 13:05:01 -07:00
Gábor Horváth
c33ce3f029 Merge pull request #82840 from Xazax-hun/unqualified-name-lookup-fix
[cxx-interop] Fix unqualified name lookup failure
2025-07-08 17:53:35 +01:00
Egor Zhdan
66b8960613 Merge pull request #82817 from egorzhdan/egorzhdan/dictionary-init
[cxx-interop] Allow creating Dictionary from `std::map`
2025-07-08 17:38:20 +01:00
Gabor Horvath
4de92656dd [cxx-interop] Fix unqualified name lookup failure
When MemberImportVisibility is enabled we failed to find certain base
methods from the extensions when said base methods are imported from
C++.

rdar://154887575
2025-07-08 12:41:01 +01:00
Doug Gregor
5900c8a9e3 Update tests for Span back-deployment 2025-07-07 22:57:44 -07:00
Joe Groff
8a817da6d8 Merge pull request #82707 from jckarter/afd-clang-imports
Lower imported C structs and unions as addressable-for-dependencies.
2025-07-07 13:23:49 -07:00
Egor Zhdan
19c7884ec5 [cxx-interop] Allow creating Dictionary from std::map
This adds an initializer to `Swift.Dictionary` that takes an instance of `std::map` or `std::unordered_map`.

rdar://155050682
2025-07-05 21:54:11 +01:00
Egor Zhdan
c06951e3af Merge pull request #74146 from swiftlang/egorzhdan/std-optional-init-value
[cxx-interop] Instantiate `std::optional` value constructors
2025-07-04 16:33:28 +01:00
Susana Monteiro
7c1852e2c7 Merge pull request #82485 from swiftlang/susmonteiro/rename-virtual-methods
[cxx-interop] Allow virtual methods to be renamed with SWIFT_NAME
2025-07-03 15:19:23 +01:00
Gábor Horváth
507f82c7af Merge pull request #82717 from Xazax-hun/instantiation-fail-error-location
[cxx-interop] Add source location to instantiation error
2025-07-03 14:43:57 +01:00
Egor Zhdan
dcc3842535 [cxx-interop] Instantiate std::optional value constructors
This improves support for initializing instances of `std::optional` from Swift. Previously only a null optional could be initialized directly from Swift. Now instantiations of `std::optional` will get a Swift initializer that takes the wrapped value as a parameter.

rdar://118026392
2025-07-03 14:00:27 +01:00
Egor Zhdan
a18db8f49f Merge pull request #82579 from swiftlang/egorzhdan/import-as-member-from-namespace
[cxx-interop] Allow import-as-member for functions declared within a namespace
2025-07-02 22:49:14 +01:00
Egor Zhdan
d3dc17a067 [cxx-interop] Allow import-as-member for functions declared within a namespace
This makes it possible to use trigger import-as-member for C++ functions declared within namespaces. Previously only functions declared at the file level were supported.

rdar://138930205
2025-07-02 16:40:40 +01:00
Joe Groff
78a5f358b4 Lower imported C structs and unions as addressable-for-dependencies.
C code is highly likely to want to use pointers as references between dependent
structs, and we would like to be able to readily map these to lifetime-dependent
Swift values. Making C types addressable-for-dependencies ensures that any function
producing a dependency on such a value receives a stable in-memory address for that
value, allowing borrows and inout accesses to always be representable as pointers.

rdar://153648393
2025-07-02 08:31:18 -07:00
susmonteiro
b3e228845b [cxx-interop] Allow virtual methods to be renamed with swift_name 2025-07-02 16:09:02 +01:00
Gabor Horvath
15a6cca3f6 [cxx-interop] Add source location to instantiation error
Previously, the diagnostic was emitted with an unknown location.
2025-07-02 14:01:46 +01:00
Egor Zhdan
01719983dc Merge pull request #82627 from swiftlang/egorzhdan/void-begin-crash
[cxx-interop] Do not crash for `void begin()`
2025-07-01 17:35:16 +01:00
Gábor Horváth
bd3c3024af Merge pull request #82625 from swiftlang/gaborh/nonescapable-noncopyable
[cxx-interop] Add test for move-only non-escapable types
2025-07-01 15:36:00 +02:00
Gábor Horváth
11cb7e5800 Merge pull request #82333 from swiftlang/gaborh/default-arg-duplicate-symbols 2025-07-01 13:50:00 +02:00
Gábor Horváth
b00ff4568b Merge pull request #82480 from swiftlang/gaborh/addressable_params_copy
[cxx-interop] Avoid copies when accessing pointee
2025-06-30 17:41:39 +02:00
Egor Zhdan
883ff18adb [cxx-interop] Do not crash for void begin()
When importing C++ methods, Swift always assumes that methods named `begin()` and `end()` are unsafe, since these methods commonly return iterator types that are inherently unsafe in Swift.

Some additional logic in Sema tries to diagnose usages of `.begin()` and `.end()` from Swift and suggest safe alternatives. That logic had a null pointer dereference bug.

rdar://153814676 / resolves https://github.com/swiftlang/swift/issues/82361
2025-06-30 16:26:56 +01:00
Gabor Horvath
8af85a37a5 [cxx-interop] Add test for move-only non-escapable types
rdar://153658277
2025-06-30 15:20:56 +01:00
Gabor Horvath
33e41f1281 [cxx-interop] Fix duplicate symbol error with default arguments
We synthesize a Swift function that only calls a C++ funtion that
produces the default argument. We produce this function for each module
that imports the C++ function with the default argument. This symbol
needs to be public as it is created in the context of the Clang module
and used from the Swift module. To avoid the linker errors, we always
emit this function into the client which is also the right thing to do
as the whole body is a single function call.

rdar://138513915
2025-06-30 08:23:52 +01:00
finagolfin
55cee0144d [test] Fix or disable tests for 32-bit platforms (#82501)
Fix two IRGen tests that are failing on Android armv7 and disable eight ClangImporter, C++ Interop, and SILOptimizer tests, two of which that were already failing on other 32-bit platforms.
2025-06-30 10:39:26 +05:30
Egor Zhdan
deb3090616 [cxx-interop] Test import-as-member for inline functions
rdar://138930477
2025-06-27 15:22:10 +01:00
Egor Zhdan
f8664adbad Merge pull request #82496 from swiftlang/egorzhdan/allow-qual-swift-name
[cxx-interop] Allow import-as-member for types in namespaces
2025-06-27 13:22:25 +01:00
Egor Zhdan
e95f6a3ce9 [cxx-interop] Allow import-as-member for types in namespaces
This adds support for `swift_name` attribute being used with C++ types that are declared within namespaces, e.g.
```
__attribute__((swift_name("MyNamespace.MyType.my_method()")))
```

Previously import-as-member would only accept a top-level unqualified type name.

rdar://138934888
2025-06-26 12:39:50 +01:00
Gabor Horvath
7474a51691 [cxx-interop] Avoid copies when accessing pointee
Previously, we would get two copies, one accessing the pointee and one
when we pass the pointee as a method as the implicit self argument.
These copies are unsafe as they might introduce slicing. When
addressable paramaters features are enabled, we no longer make these
copies for the standard STL types. Custom smart pointers can replicate
this by making the lifetime dependency between the implicit object
parameter and the returned reference of operator* explicit via a
lifetime annotation.

rdar://154213694&128293252&112690482
2025-06-25 17:09:55 +01:00
Egor Zhdan
1a84348447 Merge pull request #82454 from swiftlang/egorzhdan/runtime-avail
[cxx-interop] Fix test failure on older macOS
2025-06-24 18:18:53 +01:00
Egor Zhdan
a292113ef2 [cxx-interop] Fix test failure on older macOS
The runtime logic for printing a foreign reference type is behind `if #available(SwiftStdlib 6.2, *)`, which means it won't run on older versions of macOS, even if you use a newer Swift runtime.

rdar://153735437
2025-06-24 13:36:22 +01:00
Evan Wilde
7f3fdb322d Merge pull request #82355 from etcwilde/ewilde/fbsd-cxx-interop-runtime
FreeBSD: Link C++ runtimes when Cxx interop is enabled
2025-06-23 14:21:02 -07:00
Egor Zhdan
cc9c51deea [cxx-interop] Fix printing of namespaces declared in bridging headers
If a C++ namespace has redeclarations in a bridging header, printing AST for the namespace would crash the compiler. This is because such a redeclaration would not have an owning Clang module, and the AST printer did not account for that.

This change fixes the crash.

rdar://151715540
2025-06-23 16:25:48 +01:00
michael-yuji
cf2f7154a5 Merge pull request #77836 from michael-yuji/mchiu/freebsd
[FreeBSD] Adding FreeBSD support
2025-06-18 19:59:48 -07:00
Evan Wilde
3a48d6e95e FreeBSD: Enable a few more C++ interop tests
Some of these tests were marked as unsupported since they were only
checking for macOS and Linux. They seem to be passing on FreeBSD as
well, so enabling them here.
2025-06-18 16:16:34 -07:00
Egor Zhdan
4b39802f63 Merge pull request #82299 from swiftlang/egorzhdan/old-runtime-tests
[cxx-interop] Disable test with an older runtime
2025-06-18 13:14:23 +01:00
(null)
d6811260a9 Merge commit '665515c781999a81094bbe4f8302a7cb1a6a6b39' into mchiu/freebsd 2025-06-17 15:12:23 -04:00
Egor Zhdan
f6e61728c5 Merge pull request #82161 from swiftlang/egorzhdan/template-param-nullability
[cxx-interop] Import nullability of templated function parameters correctly
2025-06-17 16:51:47 +01:00
Egor Zhdan
62d56067c8 [cxx-interop] Disable test with an older runtime
848fad00 introduced support for printing foreign reference types. It changes both the compiler and the runtime, and having the runtime change applied is required for the test to pass. Let's not try to run it with an old runtime.

This change also splits up a test for printing of value types from a test for printing of foreign reference types, since we don't have any runtime restrictions for value types.

rdar://153205860
2025-06-17 16:27:16 +01:00
Gábor Horváth
304d558f43 Merge pull request #82203 from swiftlang/gaborh/shared-references-are-safe
[cxx-interop] Shared references are considered safe
2025-06-17 16:12:59 +01:00
Egor Zhdan
607dd4a7d4 [cxx-interop] Import nullability of templated function parameters correctly
This teaches ClangImporter to respect the `_Nonnull`/`_Nullable` arguments on templated function parameters.

Previously Swift would only import a non-annotated function overload. Using an overload that has either  `_Nonnull` or `_Nullable` would result in a compiler error. The non-annotated overload would get imported with incorrect nullability: Swift would always assume non-null pointers, which was inconsistent with non-templated function parameters, which are mapped to implicitly unwrapped optionals.

With this change all three possible overloads are imported, and all of them get the correct nullability in Swift.

rdar://151939344
2025-06-13 18:15:52 +01:00
Gabor Horvath
ddacdf416d [cxx-interop] Shared references are considered safe
This patch makes sure we don't get warnings in strict memory safe mode
when using shared references. Those types are reference counted so we
are unlikely to run into lifetime errors.

rdar://151039766
2025-06-13 15:41:51 +01:00