Commit Graph

17 Commits

Author SHA1 Message Date
Gabor Horvath
00fa738209 [cxx-interop] Fix calling convention for rvalue reference params
In C++, we always expected to invoke the dtor for moved-from objects.
This is not the case for swift. Fortunately, @inCxx calling convention
is already expressing that the caller supposed to destroy the object.
This fixes the missing dtor calls when calling C++ functions taking
rvalue references. Fixes #77894.

rdar://140786022
2025-03-03 11:47:12 +00:00
Egor Zhdan
5b5ffde79e [cxx-interop] Do not crash when passing Bool as const T& parameter
The type bridging logic assumed that if a value of type `Swift.Bool` is passed to a Clang function as an argument, then the type of the parameter must be a Clang built-in type (usually `_Bool`). This is not always correct. For instance, the type might be a templated const reference.

rdar://125508505
2024-05-09 15:28:33 +01:00
Alex Lorenz
62fd801828 [interop] C++ parameter of reference type should be imported as its pointee type in Swift even if parameter's type is type alias
This finally allows std::vector.push_back to be called with the pushed value directly passed into it
2023-05-03 18:23:03 -07:00
Puyan Lotfi
84a69c4143 [C++-Interop] Import const &T function parameters as @in_guaranteed
When passing value types as a const-ref to a C++ API, ensure that the
caller is tasked with handling the lifetime of the instance passed in.
2022-09-12 16:27:27 -04:00
Daniel Rodríguez Troitiño
691dcc9bb3 Test case for const T& in Obj-C++ methods
Add a test case that checks the behaviour introduced during the refactor
of `importFunctionParameterList` and `importMethodParamsAndReturnType`.

The test checks that both Obj-C++ methods and C++ functions treat `const
T&` parameters in the same way.
2022-09-02 11:51:15 -07:00
Zoe Carver
b681b0a503 Merge pull request #41810 from zoecarver/fix-crash-ref-to-depentent-param 2022-03-29 18:34:51 -07:00
zoecarver
16c8d0b4d3 [cxx-interop] Bail on parameter that are reference types to dependent types.
Currently, just like for return types, we can't import references to dependent types. Refs https://github.com/apple/swift/pull/41660.
2022-03-29 14:58:55 -07:00
zoecarver
caf83c2375 [cxx-interop] Import const-refs as value types when importing clang function types.
Otherwise, it will pass the value as a poitner.
2022-03-29 11:42:57 -07:00
zoecarver
b839741d57 [cxx-interop] Support references to template types. 2022-03-04 13:54:42 -08:00
Zoe Carver
4c62dae594 Merge pull request #41660 from zoecarver/import-ref-to-dependent-type
[cxx-interop] Bail on dependent reference types. We don't know how to handle those yet.
2022-03-04 08:58:46 -08:00
zoecarver
5537b72c13 [cxx-interop] Bail on dependent reference types. We don't know how to handle those yet. 2022-03-03 17:15:33 -08:00
Alex Lorenz
ebb21d7ec1 [cxx-interop] Import const T& parameters as T.
This change allows Swift code to pass immutable values to const references in C++.
2022-03-03 14:42:27 -08:00
Saleem Abdulrasool
df9d1e815f Interop/Cxx: explicitly require C++ for modules
The C++ interop modules require C++ support.  Explicitly require C++ as
a feature when building these modules.  This has no impact on the
changes as all the tests enable C++ already.
2021-01-06 16:59:42 -08:00
zoecarver
317272852b [cxx-interop] Bail if the type a reference type is wrapping is unkown.
If we can't find the type a reference type is wrapping (the pointee
type), then don't import that type instead of crashing later.
2020-11-01 12:55:44 -08:00
Marcel Hlopko
e293330563 [CxxInterop] Import C++ references. (#31784) 2020-05-15 10:42:37 +02:00
Saleem Abdulrasool
6bf7593fd5 Revert "[CxxInterop] Import C++ references." (#31777) 2020-05-14 10:43:22 +02:00
Marcel Hlopko
30b5fd52e8 [CxxInterop] Import C++ references. (#31702) 2020-05-13 13:34:28 +02:00