Commit Graph

44 Commits

Author SHA1 Message Date
Saleem Abdulrasool
1040116e32 IRGen: rework linking against CxxStdlib
Rewrite the handling for the `CxxStdlib` implicit linking to use a
slightly more functional style for filtering.  Additionally, add Windows
to the list providing the overlay.  The Windows linking scenario is a
slightly more complicated as the library names differ between static and
dynamic variants to disambiguate between import libraries and static
libraries.  Take this into account when embedding the library name so
that the linker can find the appropriate content.
2023-08-08 09:03:37 -07:00
Alex Lorenz
c215abdd8c [cxx-interop][linux] modularize the bits part of libstdc++
Fixes https://github.com/apple/swift/issues/64457
2023-07-27 10:20:28 -07:00
Arnold Schwaighofer
79894ff461 Fix test/Interop with opaque pointers 2023-07-03 03:36:07 -07:00
Arnold Schwaighofer
c1a93e0bde Move tests over to use the %use_no_opaque_pointers option 2023-06-14 10:49:48 -07:00
Slava Pestov
1957bd6065 Sema: Reword diagnostics to say 'without a type annotation' instead of 'without more context' 2023-06-09 17:44:42 -04:00
Alex Lorenz
60fd510744 [interop] lookup FRT retain/release functions in top level module
Lookups in submodules do not work and are explicitly ignored in the clang importer
2023-05-01 18:58:39 -07:00
Alex Lorenz
4b3c51fd64 Merge pull request #65081 from hyp/eng/5.8-frt
[interop] add availability for foreign reference types
2023-04-12 06:55:00 -07:00
Alex Lorenz
380f9a7008 [interop] add availability for foreign reference types
Such types have runtime support only SwiftStdlib 5.8 and above
2023-04-11 15:28:22 -07:00
Alex Lorenz
b60d635db7 [interop] make interop diagnostics more consistent with the rest of Swift diagnostics 2023-04-10 16:20:07 -07:00
Alex Lorenz
64a4b3159c [interop] add SWIFT_ prefix to the C++ interop annotations 2023-04-06 12:11:25 -07:00
Alex Lorenz
9feb76419b [interop] ignore exceptions in existing interop tests 2023-02-22 11:00:51 -08:00
Butta
4b22ca1550 [android][test] Fix two C++ Interop tests that were split off for Android, enable two more new ones, and set an executable_test
Also, make some related changes, like updating a path in the Android doc, making sure the
`unknown` vendor is always used, and using `CPU` instead of `CODEGENERATOR`.
2022-11-08 22:13:36 +05:30
Zoe Carver
b0de482d82 Merge pull request #61757 from zoecarver/frt-method-call-crash
[cxx-interop] Fix crash when lowering self arg in foriegn reference t…
2022-10-27 09:54:07 -07:00
zoecarver
96cd6188ef [cxx-interop] Fix crash when lowering self arg in foriegn reference type method call. 2022-10-26 18:22:50 -07:00
zoecarver
1f3af47633 [cxx-interop] Emit retain/release correctly for FRT's that are stored in optionals and have custom ref counting instructions. 2022-10-26 17:35:20 -07:00
zoecarver
c5aaa6098d [cxx-interop] Start fixing issue with layout of FRTs that contain base classes or un-importable memebers. 2022-10-17 10:18:25 -07:00
Zoe Carver
73ace80a5e Merge pull request #60907 from zoecarver/reference-types-in-namespace
[cxx-interop] Fix foreign reference types with reference counting that live in a namespace.
2022-09-01 15:01:09 -07:00
zoecarver
625760a3a8 [cxx-interop] Fix foreign reference types with reference counting that live in a namespace.
Before this patch we tried to do lookup in the _ObjC module for the retain/release functions. Now we use the clang module that the reference type lives in.
2022-09-01 10:48:36 -07:00
zoecarver
8df9fca041 [cxx-interop] Don't import constructors of foreign reference types.
The logic is here for this in the importer, which means the module interface tests make it appear that the behavior is correct, but lazy member lookup still finds the constructors, so this patch fixes that part.
2022-08-25 10:45:12 -07:00
Ehud Adler
f11e2afe07 [cxx-interop] Always import cxx shim when cxx-interop is enabled (#60336) 2022-08-05 08:28:47 -04:00
Zoe Carver
84b359e332 Merge pull request #60283 from zoecarver/frt-static-extension
[cxx-interop] Fix static extensions on foreign reference types.
2022-07-28 17:42:34 -07:00
zoecarver
d3b71ba907 [cxx-interop] Fix static extensions on foreign reference types.
Foreign reference types don't have dynamic metadata like other Swift classes.
2022-07-28 11:59:47 -07:00
Erik Eckstein
eb817ab8c1 disable Interop/Cxx/foreign-reference/reference-counted.swift
It fails on CI

rdar://97532642
2022-07-25 07:29:33 +02:00
zoecarver
8134567bc3 [nfc] Require ObjC interop for one test. 2022-07-23 16:57:01 -07:00
zoecarver
13b0a5bc37 [nfc] Clang format changes. 2022-07-21 17:34:36 -04:00
zoecarver
74d76e2888 [cxx-interop] Add diagnostics and validation for retain/release function; require all foreign reference types to provide retain release functions or be immortal. 2022-07-21 12:25:21 -04:00
zoecarver
b443dfc74e [cxx-interop] Add silgen test to check triviality of foreign reference types. 2022-07-21 10:25:57 -04:00
zoecarver
4021082a55 [wip][cxx-interop] Support for custom reference counting operations. 2022-07-21 10:25:57 -04:00
zoecarver
9d1d03124b [nfc][cxx-interop] Add diagnostics when something cannot be imported. 2022-07-18 17:15:15 -04:00
zoecarver
6acffbbee6 [cxx-interop] Flip the switch: only import safe APIs. 2022-07-18 17:15:15 -04:00
zoecarver
3805828ad0 [cxx-interop] Add CxxShim library; move __swift_interopStaticCast into it. 2022-07-05 15:52:51 -07:00
Egor Zhdan
5aea9195e3 [cxx-interop] Update tests for foreign reference types
This fixes errors in tests:
```
/home/build-user/swift/test/Interop/Cxx/foreign-reference/Inputs/singleton.h:8:14: error: 'operator new' is missing exception specification 'noexcept'
inline void *operator new(size_t, void *p) { return p; }
             ^
/usr/lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/new:173:33: note: previous declaration is here
_GLIBCXX_NODISCARD inline void* operator new(std::size_t, void* __p) _GLIBCXX_USE_NOEXCEPT
```
2022-07-04 19:06:11 +01:00
Zoe Carver
90fa95c2d8 Merge pull request #59697 from zoecarver/use-call-for-attrs
[cxx-interop] Record extra layer of indirection when calculating clang type from SILType.
2022-06-27 10:08:56 -07:00
zoecarver
f86f9b7035 [cxx-interop] Record extra layer of indirection when calulating clang type from SILType. 2022-06-24 16:05:41 -07:00
Andrew Trick
b57ceb46cd [nfc] Disable test/Interop/Cxx/foreign-reference/witness-table.swift
Temporarily disable broken test.
2022-06-23 12:58:21 -07:00
zoecarver
96086a0afc [nfc][cxx-interop] Disable FRT test on Windows (not yet supported). 2022-06-16 15:03:15 -07:00
zoecarver
f972f664d3 [cxx-interop] Runtime support for foreign reference types. 2022-06-14 12:18:05 -07:00
Butta
3933fc0006 [android][test] Fix several tests on the Android CI
- #58975 switched many tests from XFAIL on linux to linux-gnu, so seven
  fail on the Android CI and two natively. They are now explicitly excluded.
- #39605 added several C++ Interop tests, 11 of which fail on the Android CI,
  so disable them for now.
- #42478 removed the @noescape attribute for the non-Android
  SIL/clang-function-types tests, so I remove it for Android too.
- My pull #40779 moved the Swift pointer tags to the second byte, so
  SILOptimizer/concat_string_literals.64 will need to be updated for that,
  disabled it for now.
- Compiler-rt moved the directory in which it places those libraries for
  Android, llvm/llvm-project@a68ccba, so lit.cfg is updated for that.
2022-06-09 14:35:41 +05:30
zoecarver
336cd29333 [cxx-interop] Add support for calling members of base classes on UFOs. 2022-04-21 13:40:59 -07:00
zoecarver
491f556b77 [cxx-interop] Add basic support for using UFOs as members, etc.
This does not add support for using UFOs in generic contexts, this just emits their struct/field metadata as opaque pointers.
2022-04-18 14:47:02 -07:00
zoecarver
839839f924 [cxx-interop] Rename enable-cxx-interop -> enable-experimental-cxx-interop.
Also removes the driver flag, this will now also always be guarded on `-Xfrontend`.
2022-04-07 19:15:25 -07:00
Erik Eckstein
6a020f8f15 Stabilize and simplify SIL linkage and serialization
The main point of this change is to make sure that a shared function always has a body: both, in the optimizer pipeline and in the swiftmodule file.
This is important because the compiler always needs to emit code for a shared function. Shared functions cannot be referenced from outside the module.
In several corner cases we missed to maintain this invariant which resulted in unresolved-symbol linker errors.

As side-effect of this change we can drop the shared_external SIL linkage and the IsSerializable flag, which simplifies the serialization and linkage concept.
2022-03-09 15:28:05 +01:00
zoecarver
036361d1e4 [cxx-interop] Add SIL function representation cxx_method; Support extending C++ types.
There are three major changes here:
    1. The addition of "SILFunctionTypeRepresentation::CXXMethod".
    2. C++ methods are imported with their members *last*. Then the arguments are switched when emitting the IR for an application of the function.
    3. Clang decls are now marked as foreign witnesses.

These are all steps towards being able to have C++ protocol conformance.
2022-01-06 14:26:47 -08:00
zoecarver
fc3b3a1d71 [cxx-interop] Implement foreign reference types.
This is an expiremental feature to allow an attribute, `import_as_ref`, to import a C++ record as a non-reference-counted reference type in Swift.
2021-12-08 15:35:18 +00:00