Commit Graph

709 Commits

Author SHA1 Message Date
Slava Pestov
2734f3ca05 stdlib: Add SIMDMaskScalar.SIMDMaskScalar == SIMDMaskScalar requirement to SIMDScalar
In theory this is a source break if someone had a weird custom
conforming type, but I suspect in practice conformances to
this protocol are never defined.

The reason we want this requirement is that often you will see
code like the following:

  protocol Point {
    associatedtype Scalar: SIMDScalar
    associatedtype Vector: SIMD where Vector.Scalar == Scalar
  }

  extension Point where Vector == SIMD2<Scalar> { ... }

When `Vector` is equated with `SIMD2<Scalar>`, we get an infinite
sequence of implied same-type requirements:

  Vector.MaskStorage == SIMD2<Scalar.MaskScalar>
  Vector.MaskStorage.MaskStorage == SIMD2<Scalar.MaskScalar.MaskScalar>
  ...

The protocol fails to typecheck with an error because the requirement
machine cannot build a rewrite system.

If SIMDScalar requires that MaskScalar.MaskScalar == MaskScalar, then
we instead get

  Vector.MaskStorage == SIMD2<Scalar.MaskScalar>
  Vector.MaskStorage.MaskStorage == SIMD2<Scalar.MaskScalar>

  Vector.MaskStorage.MaskStorage == Vector.MaskStorage
  ...

Which ties off the recursion.

In theory, a more advanced implementation could represent this kind of
infinite recursion in 'closed form', but we don't have that yet, and I
believe adding this same-type requirement makes sense anyway.

Fixes rdar://problem/95075552.
2022-06-22 21:26:15 -04:00
Richard Wei
94e8f5393e Enable string processing by default.
Make frontend flag `-enable-experimental-string-processing` default to true.
2022-06-12 20:25:16 -07:00
Xi Ge
dfb53212d8 ABIChecker: add an option to avoid diagnosing about certain given SPI groups
rdar://92032848
2022-06-04 22:28:37 -07:00
Xi Ge
0567a9b142 ABI checker: include SPI group names in ABI descriptor files 2022-06-04 21:45:14 -07:00
Xi Ge
e46b5f5966 ABIChecker: for decls with @_originallyDefinedIn, use original module names in ABI descriptors
rdar://93615410
2022-06-03 22:41:43 -07:00
Xi Ge
7bab30c718 ABIChecker: diagnose moving a non-final member from a class to an extension to the class
rdar://93498817
2022-06-03 12:54:41 -07:00
Xi Ge
26952f74de ABI checker: include a field to indicate whether a decl is from extension 2022-06-03 12:54:11 -07:00
Josh Soref
55d9c8353b Spelling apidigester (#42542)
* spelling: analyzer

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: considered

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: diagnostic

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: inherited

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: interface

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: invoke

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: populating

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: referenced

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

* spelling: requirement

Signed-off-by: Josh Soref <jsoref@users.noreply.github.com>

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2022-04-22 18:53:51 -07:00
Guillaume Lessard
838cd33c5a [test] fix false results from the ABI checker 2022-04-14 17:49:23 -06:00
Yuta Saito
30b9fc90a8 Concurrency: fix inconsistent _asyncLet_get signatures 2022-03-30 20:58:40 +09:00
Evan Wilde
90b279bc66 Merge pull request #41933 from etcwilde/ewilde/concurrency-reland-runasyncmain-cleanups
Cleaning up _runAsyncMain
2022-03-21 16:59:34 -07:00
Evan Wilde
4700bc7e70 Add _runAsyncMain to api digester list
Adding `_runAsyncMain` to the api-digester list since we're adding
`@preconcurrency` when we add `@Sendable`. These two should negate each
other, but the api-digester isn't quite smart enough to understand that.
2022-03-21 13:02:20 -07:00
Slava Pestov
ae2feb5d8e Merge pull request #41663 from slavapestov/rqm-enable-stdlib-inferred-signatures
stdlib: Build with -requirement-machine-inferred-signatures=verify
2022-03-17 23:41:46 -04:00
Slava Pestov
2028a030f5 stdlib: Build with -requirement-machine-inferred-signatures=verify 2022-03-08 15:57:19 -05:00
Konrad `ktoso` Malawski
369f3e62d9 [Concurrency] ignore @_marker protocol AnyActor ABI warnings
These are not an issue because adding a @_marker protocol conformance has no ABI impact - the protocol is not available at runtime.
2022-03-08 20:00:27 +09:00
Philippe Hausler
b0f0cb257d Audit and correct AsyncSequence Sendability (#41253)
* Audit and correct AsyncSequence Sendability

* Annotate availability on Sendable conformances for AsyncSequences

* Fix typo of Sendable.Iterator

* Correct tests to use sendable builders

* Add @preconcurrency annotations and fixup one remaining missing @Sendable case

* Move preconcurrency to correct syntactical position

* Use unchecked Sendable conditional conformance instead of marking all internals as preconcurrency and sendable

* Use unchecked Sendable conditional conformance instead of marking all internals as preconcurrency and sendable for dropWhile

* claim ABI changes for marking of @preconcurrency as expected
2022-03-04 21:21:32 -08:00
Xi Ge
e1aaee4fec Frontend: add a frontend flag to generate empty ABI descriptors to workaround deserialization issues
ABI descriptors should always be emitted as sidecars for library-evolution-enabled modules.
However, generating these files requires traversing the entire module (like indexing), which may
hit additional deserialization issues. To unblock builds, this patch introduces a flag to skip
the traversing logic so that we emit an empty ABI descriptor file. The empty file serves as
a placeholder so that build system doesn't need to know the details.
2022-02-23 23:18:20 -08:00
Xi Ge
0992e97e5e ConstValues: record the values of const variable references in the side-car file 2022-02-21 19:22:25 -08:00
Xi Ge
23556aee05 ABIChecker: teach ABI descriptor JSON to also keep track of constant values known at compile-time
Emitted at the emit-module step, ABI descriptor is of an entensible JSON format. This patch sets
up a segment in the file to also keep track of all compile-time constant values for other tools
to consume. As the initial step, we only keep track of string literals in the source files.
2022-02-13 21:32:21 -08:00
Xi Ge
3ef8165626 ABI checker: refactor the format of the ABI descriptor JSON to be more extensible. NFC 2022-02-12 14:39:51 -08:00
Slava Pestov
e687234dc7 Move a few lines from stability-stdlib-abi-with-asserts.test to stability-stdlib-abi-without-asserts.test 2022-02-07 12:52:44 -05:00
Guillaume Lessard
1161f92bd7 Merge pull request #39529 from glessard/se-withMemoryRebound 2022-02-05 09:01:05 -07:00
Guillaume Lessard
b2aaaebcda [test] override the judgment of the ABI digester test 2022-02-05 02:42:50 -07:00
Slava Pestov
76571c71e4 Update test/api-digester for rdar://problem/46313629 2022-02-04 19:10:59 -05:00
Karoy Lorentey
8d709fd86d Merge pull request #41045 from lorentey/reenable-abi-checker
[test] Reenable the stdlib ABI checker in PR tests
2022-01-31 13:32:12 -08:00
Karoy Lorentey
f36a72e222 [test] api-digester/dump-module.swift: Adjust for updated availability of CodingKeyRepresentable 2022-01-28 16:54:50 -08:00
Karoy Lorentey
df1356aa1e [test] Reenable the stdlib ABI checker in PR tests
The asserts test currently requires array_cow_checks, but that feature isn't enabled by default during PR tests.

rdar://88153292
2022-01-27 14:19:38 -08:00
Slava Pestov
f89e8055d2 Sema: Back out https://github.com/apple/swift/pull/36752 entirely
Unfortunately, we can't make this optimization work internally for now.
However, we can revisit it later. One strategy would be to emit the
witness as a private declaration, so that clients call it through the
witness table.

Fixes rdar://problem/86861522.
2022-01-24 14:05:17 -05:00
Doug Gregor
a5f676028b Eliminate remaining dependencies on a single underlying opaque type
The first generic parameter of an `OpaqueTypeDecl` was still being used
as the "underlying" interface type of the opaque type, which is
incorrect for both structural and named opaque result types. Eliminate
this notion, because the (declared) interface type already has the
correct structure.

Only ABI checking depended on the old "underlying" type, so rework it to
instead substitute into properly for structural opaque result types as
well.

Deserialization required a small adjustment to eliminate a cycle
because the interface type of an `OpaqueTypeDecl` involves opaque
archetype types, which reference the declaration itself... so
deserialize the interface type later, now that it's correct.
2022-01-04 11:55:42 -08:00
Doug Gregor
353daabf8d Replace UnsafeSendable with @unchecked Sendable in the standard library. 2021-11-12 07:56:10 -08:00
Morten Bek Ditlevsen
0251957ae3 [SE-0320] Added protocol CodingKeyRepresentable (#34458) 2021-10-30 11:33:42 +01:00
Artem Chikin
2ba1dc8b4e Update stability-concurrency-abi.test expected output 2021-10-25 13:17:41 -07:00
Artem Chikin
d2b062df49 Revert "ABI checker: use dedicated mangled name field to diagnose mangled name changes"
This reverts commit b937d0da86.
2021-10-25 11:02:21 -07:00
Doug Gregor
2850b65bd9 Simplify implementation and fix a test 2021-10-22 08:30:50 -07:00
Doug Gregor
5f9721c7fb Ensure that we hop off the main actor after MainActor.run.
Asynchronous functions isolated to global actors hop to the global at
the beginning of the function but do not hop back on return. For
`MainActor.run`, this means that we would not "hop back" off the main
actor after executing the closure, which lead to too much code running
on the main thread. Dropping the "async" ensures that we hop back.
While we my also want the general "hop back" semantics for
asynchronous actor-isolated functions, for now this addresses the
problem with `MainActor.run`.

Fixes rdar://82138050.
2021-10-21 23:26:02 -07:00
Xi Ge
daab430ea3 test: rebaseline stable ABI for _Concurrency 2021-10-21 13:06:11 -07:00
Xi Ge
b937d0da86 ABI checker: use dedicated mangled name field to diagnose mangled name changes 2021-10-21 10:51:19 -07:00
Xi Ge
5cf758d7ff ABI Checker: include mangled names in ABI descriptor files
Previously, we use USR as a delegate for mangled name. However, USR won't incorporate name changes made
by attributes like @_silgen_name. Instead, we should add a dedicated field for canonical mangled names.

rdar://84202064
2021-10-21 10:10:10 -07:00
Xi Ge
fee60ffd4f Revert "ABI Checker: include mangled names in ABI descriptor files"
This reverts commit a870b06055.
2021-10-21 10:09:49 -07:00
Xi Ge
87e4607cf8 Merge pull request #39846 from nkcsgexi/84202064
ABI Checker: include mangled names in ABI descriptor files
2021-10-21 09:09:58 -07:00
Xi Ge
a870b06055 ABI Checker: include mangled names in ABI descriptor files
Previously, we use USR as a delegate for mangled name. However, USR won't incorporate name changes made
by attributes like @_silgen_name. Instead, we should add a dedicated field for canonical mangled names.

rdar://84202064
2021-10-20 20:58:00 -07:00
Xi Ge
819e53e94f ABI checker: removing deprecated APIs should be considered acceptable 2021-10-20 13:16:52 -07:00
Xi Ge
2c1bfcd1ba ABI checker: downgrade missing @available attributes to warnings. rdar://84278884 2021-10-15 11:14:16 -07:00
Doug Gregor
11fc58287c Update _Concurrency library ABI diff to account for @frozen reversion. 2021-10-12 11:38:15 -07:00
Doug Gregor
d8b2118cf4 Merge pull request #39668 from DougGregor/concurrency-abi-permanence 2021-10-09 10:38:52 -07:00
Doug Gregor
4961220a2d Add ABI baseline and checking for _Concurrency library on macOS
Add the generated ABI baseline for the _Concurency model on x86_64
macOS, along with a test that checks the built _Concurrency model
against that baseline.

Right now, the test is a mess, because we have some ABI breaks to
unwind. Add it so the test passes, and then we'll audit and address
every change.

Fixes rdar://83673282.
2021-10-08 21:18:30 -07:00
Meghana Gupta
c7e301fa97 Disable test clang-module-dump.swift to unblock CI 2021-10-08 17:52:58 -07:00
Zoe Carver
f189992189 Merge pull request #39431 from zoecarver/lazy-pt3-print-objc-module
[cxx-interop] Print decls in the __ObjC module.
2021-10-07 17:50:59 -07:00
Erik Eckstein
eb9621fe86 stdlib: add a build-script option --enable-array-cow-checks to enable compilation of COW checks.
And set this option in various presets for buildbots.

Don't enable the checks by default because when linking against the OS library (which does not support COW checking) it will result in unresolved symbol errors.
So far it was handled by an availability checks against 9999 (which was a hack), but this does not work anymore.

Note, all this is only relevant for assert builds of the stdlib.

rdar://83673798
2021-09-30 18:06:52 +02:00
zoecarver
3454f903bf [cxx-interop] Print decls in the __ObjC module.
This is one change from #38675.
2021-09-23 15:27:32 -07:00