Commit Graph

1728 Commits

Author SHA1 Message Date
Xi Ge
6f5b40543d Revert "Handle package exportability."
This reverts commit d182d01c28.
2024-06-11 11:54:00 -07:00
Hamish Knight
592462b7f9 Merge pull request #74260 from hamishknight/another-implicit-self-fix
[Sema] Restore 5.10 implicit self behavior prior to Swift 6 mode
2024-06-11 11:04:48 +01:00
iMostafa
9769418dfa Better message diagnostics for inout @escaping closure 2024-06-10 21:40:10 +02:00
Hamish Knight
fe272e6cdd [Sema] Restore 5.10 implicit self behavior prior to Swift 6 mode
Unfortunately we've encountered another source
breaking case here:

```
class C {
  func method() {}

  func foo() {
    Task { [weak self] in
      Task {
        method()
      }
    }
  }
}
```

In 5.10 we'd only do the unqualified lookup for
`self` when directly in a `weak self` closure,
but with the implicit self rework, we'd start
using the `weak self` here, leading to a
type-checker error.

At this point, adding more edge cases to the
existing logic is going to make things much more
complicated. Instead, reinstate the 5.10 implicit
self lookup behavior and diagnostic logic,
switching over to the new logic only under Swift 6
mode.

rdar://129475277
2024-06-10 20:29:16 +01:00
Allan Shortlidge
344a894ab5 Merge pull request #73841 from jamieQ/diagnose-noasync-in-defer
[Sema]: improve noasync diagnostics in defer statement bodies
2024-05-25 17:20:01 -07:00
Jamie
e68c36bca2 [Sema]: improve noasync diagnostics in defer statement bodies
updates noasync diagnostics in TypeCheckAvailability.cpp to diagnose
defer bodies as if they had the same `isAsyncContext()` value as their
nearest non-defer parent scope.

resolves: https://github.com/apple/swift/issues/73614
2024-05-25 09:53:20 -05:00
Andrew Trick
b5b0c75ccd Remove diagnostic: lifetime_dependence_on_bitwise_copyable
Allow lifetime depenendence on types that are BitwiseCopyable & Escapable.

This is unsafe in the sense that the compiler will not diagnose any use of the
dependent value outside of the lexcial scope of the source value. But, in
practice, dependence on an UnsafePointer is often needed. In that case, the
programmer should have already taken responsibility for ensuring the lifetime of the
pointer over all dependent uses. Typically, an unsafe pointer is valid for the
duration of a closure. Lifetime dependence prevents the dependent value from
being returned by the closure, so common usage is safe by default.

Typical example:

func decode(_ bufferRef: Span<Int>) { /*...*/ }

extension UnsafeBufferPointer {
  // The client must ensure the lifetime of the buffer across the invocation of `body`.
  // The client must ensure that no code modifies the buffer during the invocation of `body`.
  func withUnsafeSpan<Result>(_ body: (Span<Element>) throws -> Result) rethrows -> Result {
    // Construct Span using its internal, unsafe API.
    try body(Span(unsafePointer: baseAddress!, count: count))
  }
}

func decodeArrayAsUBP(array: [Int]) {
  array.withUnsafeBufferPointer { buffer in
    buffer.withUnsafeSpan {
      decode($0)
    }
  }
}

In the future, we may add SILGen support for tracking the lexical scope of
BitwiseCopyable values. That would allow them to have the same dependence
behavior as other source values.
2024-05-22 17:10:56 -07:00
Becca Royal-Gordon
d9912009b0 Merge pull request #73309 from beccadax/objcimpl-category-on-objc 2024-05-21 10:19:14 -07:00
Becca Royal-Gordon
07b9fe9ce6 Support @objc(CustomName) on extensions
This now specifies a category name that’s used in TBDGen, IRGen, and PrintAsClang. There are also now category name conflict diagnostics; these subsume some @implementation diagnostics.

(It turns out there was already a check for @objc(CustomName) to make sure it wasn’t a selector!)
2024-05-16 13:40:13 -07:00
Kavon Farvardin
0420310623 NCGenerics: it's no longer "experimental"
resolves rdar://127701059
2024-05-08 10:49:12 -07:00
Slava Pestov
3aa133fc66 Merge pull request #70575 from calda/cal--fix-70089
[SE-0365] Fix issue where implicit self was unexpectedly disallowed in nested closures
2024-05-07 11:37:21 -04:00
Cal Stephens
b525b9c7da Merge tag 'swift-DEVELOPMENT-SNAPSHOT-2024-05-01-a' of github.com:apple/swift into cal--fix-70089
Tag build swift-DEVELOPMENT-SNAPSHOT-2024-05-01-a
2024-05-04 12:19:16 -07:00
Ellie Shin
d182d01c28 Handle package exportability.
This PR treats package access level as exportable, preventing
internally imported types from accidentally being declared in
package decl signatures.

Added package-specific cases to ExportabilityReason and
DisallowedOriginKind to track the validity of imported types
at use sites with package access scope. Added tests to cover
variety of use cases.

Resolves rdar://117586046&125050064&124484388&124306642
2024-05-02 05:17:03 -07:00
Allan Shortlidge
50835e8590 Basic: Add minimum availability version for visionOS.
This fixes an issue where diagnostics were not emitted for missing availability
attributes when compiling for visionOS.

Resolves rdar://127073463
2024-04-25 15:10:51 -07:00
Ellie Shin
53e8940674 Merge pull request #73124 from apple/elsh/pkg-frozen
Allow @frozen and @_fixed_layout for package access level.
2024-04-19 00:12:44 -07:00
Ellie Shin
0a9b7b9146 Update attr tests 2024-04-18 17:56:04 -07:00
Meghana Gupta
2a9a78004c Merge pull request #73096 from meg-gupta/unsafeattr
Allow `@_unsafeNonescapableResult` on accessors
2024-04-17 22:37:53 -07:00
Meghana Gupta
2db6fe2ea7 Allow _unsafeNonescapableResult on accessors 2024-04-17 16:58:06 -07:00
Artem Chikin
1f14158a1d Introduce VisionOS Platform
This change introduces a new compilation target platform to the Swift compiler - visionOS.

- Changes to the compiler build infrastrucuture to support building compiler-adjacent artifacts and test suites for the new target.
- Addition of the new platform kind definition.
- Support for the new platform in language constructs such as compile-time availability annotations or runtime OS version queries.
- Utilities to read out Darwin platform SDK info containing platform mapping data.
- Utilities to support re-mapping availability annotations from iOS to visionOS (e.g. 'updateIntroducedPlatformForFallback', 'updateDeprecatedPlatformForFallback', 'updateObsoletedPlatformForFallback').
- Additional tests exercising platform-specific availability handling and availability re-mapping fallback code-path.
- Changes to existing test suite to accomodate the new platform.
2024-04-10 09:38:02 -07:00
Allan Shortlidge
e16a5330d3 Sema: Signatures of decls in local contexts always inherit availability.
Declarations nested in inlinable function bodies, such as `var` declarations,
should not introduce new `TypeRefinementContext` nodes that are restricted to
the deployment target. This bug was preventing availability checking from
noticing availability errors when the occurred in a `var` declaration inside of
a fragile function body:

```
@available(macOS 12.0, *)
public struct X {
  public init() {}
}

@_alwaysEmitIntoClient
public func x() {
  // This should be diagnosed, X is not always available
  let _ = X()
}
```

Resolves rdar://125564069
2024-03-29 12:49:21 -07:00
fummicc1
4dda7efc0f [AST] Improve diagnostics message for swift users.
Use `initializer` instead of `constructor` because it is more official word to express its meaning.
2024-03-27 12:32:25 +09:00
Allan Shortlidge
ed77b8ff32 AST: #if hasAttribute(retroactive) should evaluate true.
The implementation of `#if hasAttribute(...)` only accepted declaration
attributes. It should also accept type attributes, like `@retroactive`.

Resolves rdar://125195051
2024-03-25 14:03:00 -07:00
Slava Pestov
336750effd Merge pull request #72495 from slavapestov/fix-protocol-superclass
AST: Remove ProtocolDecl::getSuperclass()
2024-03-22 07:40:46 -04:00
Slava Pestov
f42330151a Sema: Fix @marker attribute checking 2024-03-21 14:49:05 -04:00
Allan Shortlidge
0096904caa Parse: Diagnose empty version numbers.
The compiler treats version tuples that are all zeros as empty, or the same as
not having a version. Diagnose attempts to specify all-zeroes versions in
attributes and availability queries to prevent surprising behavior.

Resolves rdar://124661151
2024-03-19 18:17:56 -07:00
Cal Stephens
3315cab336 Merge branch 'main' into cal--fix-70089 2024-03-18 16:44:09 -07:00
Rintaro Ishizaki
47372122a1 [Parse] Adjust diagnostic location for platform condition arguments
Previously, diagnostics for arguments of platform conditions (e.g.
'os(macOS)') used to point the condition name position instead of the
argument position.
Adjust the position to the start of the argument.

rdar://124160048
2024-03-18 23:23:27 +09:00
Cal Stephens
f21aee7baa Improve quality of 'capture self explicitly to enable implicit self in this closure' and 'variable other than self captured here under the name self does not enable implicit self' diagnostics 2024-03-12 10:45:17 -07:00
Doug Gregor
e0df6e01bd Merge pull request #72234 from DougGregor/attr-implements-assoc-failure-type
[Associated type inference] Support `@_implements` on type witnesses and use it for async sequence `Failure`
2024-03-11 21:03:54 -07:00
Doug Gregor
04ed519520 [Associated type inference] Support @_implements on type witnesses
Extend the longstanding support for `@_implements` on witnesses to also
work on type witnesses, as part of associated type inference. This permits
an associated type witness to have a different name from the associated
type itself.
2024-03-11 12:30:06 -07:00
Holly Borla
d3ed4a40e8 Merge pull request #72214 from hborla/isolated-struct-properties
[Concurrency] Allow struct members to have isolation annotations.
2024-03-09 17:30:19 -08:00
Holly Borla
8bfe832c47 [Concurrency] Allow struct members to have isolation annotations. 2024-03-09 14:15:04 -08:00
Slava Pestov
10a2ddb95e RequirementMachine: Fix MaxConcreteNesting check to take initial rules into account
Fixes rdar://123357717.
2024-03-06 21:42:49 -05:00
Anthony Latsis
a315b22ff7 Remove non-essential uses of SimpleIdentTypeRepr & GenericIdentTypeRepr 2024-03-02 14:59:21 +03:00
Doug Gregor
6fbc06ee07 Merge pull request #72015 from DougGregor/attr-weaklinked-coff-ifdef
Move diagnostic about `@_weakLinked` not working for COFF into the type checker
2024-03-01 19:37:54 -08:00
Doug Gregor
ed6b713e35 Move diagnostic about @_weakLinked not working for COFF into the type checker
This allows us to use `@_weakLinked` inside of a `#if` properly.
2024-03-01 12:18:58 -08:00
Holly Borla
9ba481ad53 [Diagnostics] Clarify the wording of error_in_future_swift_version. 2024-03-01 12:05:51 -08:00
Slava Pestov
1b99dd2451 RequirementMachine: Tweak RewriteSystem::recordConflict() heuristic again 2024-02-29 18:13:28 -05:00
Slava Pestov
780c4e9a6d Sema: Fix isValidKeyPathDynamicMemberLookup() for noncopyable generics 2024-02-24 07:25:59 -05:00
Slava Pestov
7909d83229 AST: Refactor directReferencesForTypeRepr() to track inverses 2024-02-24 07:25:59 -05:00
Kavon Farvardin
f296d8e158 NCGenerics: mass XFAIL tests
It's easier to get a handle on regressions while working through
failures if the tests that are known to not pass are XFAIL'd for
NoncopyableGenerics.
2024-02-20 18:26:05 -05:00
Slava Pestov
70c9f8a47e RequirementMachine: Leave behind conflicting requirements in the minimized signature
Requirement lowering only expects that it won't see two requirements
of the same kind (except for conformance requirements). So only mark
those as conflicting.

This addresses a crash-on-invalid and improves diagnostics for
move-only generics, because a conflict won't drop the copyability
of a generic parameter and expose a move-only-naive user to
confusing error messages.

Fixes #61031.
Fixes #63997.
Fixes rdar://problem/111991454.
2024-02-15 14:32:31 -05:00
Holly Borla
f1cd9cb422 [Test] Remove REQUIRES: asserts from tests that use -swift-version 6. 2024-02-13 07:13:35 -08:00
Hamish Knight
658be5b40f Merge pull request #64667 from Rajveer100/branch-for-issue-61601
Added unimplemented expression cases in the ASTPrinter
2024-02-05 11:42:09 +00:00
Rajveer
48847da5e6 Added the expression cases of the form 'visit...Expr()'
Part of Issue #61601
2024-02-02 13:51:37 +05:30
Alex Hoppen
b3f9e08255 Merge pull request #71237 from ahoppen/ahoppen/attribute-parser-changes
Disallow spaces between `@`, attribute name and `(` in Swift 6
2024-01-31 20:53:34 -08:00
Alex Hoppen
c6e425a559 [Parse] Disallow space between attribute name and '(' in Swift 6 mode
This allows us to resolve disambiguities of whether a parenthesis belong to an argument to the attribute or if it is eg. the start of a tuple.
2024-01-31 18:24:42 -08:00
Andrew Trick
4ac55b476f Rename @_unsafeNonEscapableResult to @_unsafeNonescapableResult 2024-01-30 08:38:57 -08:00
Allan Shortlidge
35afd7fa90 AST: App extension platforms always inherit availability from their parents. 2024-01-29 16:57:29 -08:00
John McCall
41cdfb04ad Introduce a proper TypeAttribute class hierarchy.
The old TypeAttributes reprsentation wasn't too bad for a small number of
simple attributes.  Unfortunately, the number of attributes has grown over
the years by quite a bit, which makes TypeAttributes fairly bulky even at
just a single SourceLoc per attribute.  The bigger problem is that we want
to carry more information than that on some of these attributes, which is
all super ad hoc and awkward.  And given that we want to do some things
for each attribute we see, like diagnosing unapplied attributes, the linear
data structure does require a fair amount of extra work.

I switched around the checking logic quite a bit in order to try to fit in
with the new representation better.  The most significant change here is the
change to how we handle implicit noescape, where now we're passing the
escaping attribute's presence down in the context instead of resetting the
context anytime we see any attributes at all.  This should be cleaner overall.

The source range changes around some of the @escaping checking is really a
sort of bugfix --- the existing code was really jumping from the @ sign
all the way past the autoclosure keyword in a way that I'm not sure always
works and is definitely a little unintentional-feeling.

I tried to make the parser logic more consistent around recognizing these
parameter specifiers; it seems better now, at least.
2024-01-28 22:30:26 -05:00