Commit Graph

123 Commits

Author SHA1 Message Date
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