Commit Graph

975 Commits

Author SHA1 Message Date
Slava Pestov
8fc7f7e1e6 Sema: Fix ConstraintSystem::getTypeOfMemberReference() for protocol typealiases 2018-08-01 23:01:56 -07:00
Slava Pestov
463a467046 Merge pull request #18026 from slavapestov/inherited-availability-attribute-part-2
Sema: Fix availability of inherited designated initializers, part 2
2018-07-30 18:40:11 -07:00
Jordan Rose
6290d9be60 Introduce DescriptiveDeclKind::Property (#18183)
...and collapse StaticVar/ClassVar and StaticLet/ClassLet into
StaticProperty/ClassProperty.

"var" and "let" aren't great nouns to use in diagnostics to begin with,
especially alongside semantic terms like "instance method". Focus on
the type vs. non-type aspect instead with "property", which better
matches how people talk about member vars (and lets) anyway.
2018-07-30 09:23:59 -07:00
Mark Lacey
78d83e5703 Use %target-typecheck-verify-swift where possible. 2018-07-26 23:13:43 -07:00
Mark Lacey
b275edd305 Merge pull request #17967 from vguerra/SR7307
[TypeChecker] SR-7307 : Warn when a block contains defer as last statement
2018-07-26 21:09:01 -07:00
swift-ci
418abf53a3 Merge pull request #18259 from DougGregor/skip-finalize-other-decls-on-error 2018-07-26 10:48:52 -07:00
Doug Gregor
40919f900c [Type checker] Don't finalize decls from other source files after an error.
Per feedback from Jordan, this avoids extra work without missing
additional diagnostics from the current source file.
2018-07-26 09:41:07 -07:00
Doug Gregor
aa43611dfb Merge pull request #18199 from DougGregor/finalize-class-extension-members
[Type checker] Finalize referenced members of class extensions.
2018-07-26 09:06:41 -07:00
Doug Gregor
6a8d3211aa [Type checker] Move ad-hoc isObjC/isDynamic checking to finalization.
Whenever we visit a declaration via the DeclChecker, add it to the
list of declarations to finalize. This makes sure that we can centralize
the notion of “finalize for SILGen” and that it will be called for
everything in the source file being processed.
2018-07-25 20:55:13 -07:00
Jordan Rose
2e4501105a Merge pull request #18048 from jrose-apple/finding-ways-to-scope
Limit ValueDecl::getFormalAccess and get rid of adjustAccessLevelForProtocolExtension
2018-07-25 16:43:41 -07:00
Victor Guerra
ffd13662d1 addressing comments on PR
- moving WARNING definition from DiagnosticsCommon.def to DiagnosticsSema.def
- improving WARNING message to better align with guidelines described in docs/Diagnostics.md as suggested by @xwu.
- adapting expected warning message in tests.
2018-07-25 23:18:41 +02:00
Slava Pestov
336f51e5bc Sema: Fix availability of inherited designated initializers, part 2
We need to explicitly handle nested types here.

Fixes the (re-opened) <rdar://problem/40853731>,
<https://bugs.swift.org/browse/SR-7881>.
2018-07-24 16:13:45 -07:00
Victor Guerra
38cf5fed8c NOTE should actually be a WARNING.
Updating test as well to check that the fix-it is applied correctly.
2018-07-24 23:15:32 +02:00
Victor Guerra
03fff5d8b8 Fixing formating and a more clear explanation for diagnostic. 2018-07-24 23:15:31 +02:00
Victor Guerra
4ced94a6cb [TypeChecker] SR-7307 : Diagnose defer statments that appear at the end block. 2018-07-24 23:15:31 +02:00
Jordan Rose
fef3a3768c Use access scopes instead of adjustAccessLevelForProtocolExtension
This gets adjustAccessLevelForProtocolExtension, a hack of sorts to
begin with, out of ValueDecl's general API, and down to a helper for
isAccessibleFrom and isSetterAccessibleFrom. (The only reason these
two don't go through access scopes is as an optimization.)
2018-07-23 16:36:16 -07:00
John McCall
7a4aeed570 Implement generalized accessors using yield-once coroutines.
For now, the accessors have been underscored as `_read` and `_modify`.
I'll prepare an evolution proposal for this feature which should allow
us to remove the underscores or, y'know, rename them to `purple` and
`lettuce`.

`_read` accessors do not make any effort yet to avoid copying the
value being yielded.  I'll work on it in follow-up patches.

Opaque accesses to properties and subscripts defined with `_modify`
accessors will use an inefficient `materializeForSet` pattern that
materializes the value to a temporary instead of accessing it in-place.
That will be fixed by migrating to `modify` over `materializeForSet`,
which is next up after the `read` optimizations.

SIL ownership verification doesn't pass yet for the test cases here
because of a general fault in SILGen where borrows can outlive their
borrowed value due to being cleaned up on the general cleanup stack
when the borrowed value is cleaned up on the formal-access stack.
Michael, Andy, and I discussed various ways to fix this, but it seems
clear to me that it's not in any way specific to coroutine accesses.

rdar://35399664
2018-07-23 18:59:58 -04:00
Ding Ye
f735f97c64 [Sema] Fix inappropriate diagnostics of access control for members in private extensions. (#18105)
When a `fileprivate` method is declared in a `private`
extension, a warning is raised since access level
`fileprivate` is literally higher than `private`.
This is not appropriate because extensions are top level
declarations, for which `private` and `fileprivate` are
equivalent. This patch stops such warnings.

Resolves: SR-8306.
2018-07-20 13:46:57 -07:00
Doug Gregor
363ef63409 [Code completion] Split out tests that require Objective-C interop.
A bunch of tests that technically require Objective-C interop were
not labeled as such, and worked in the absence of Objective-C interop
due to bugs in the type checker.
2018-07-18 21:17:12 -07:00
Slava Pestov
cc06543e87 Sema: Remove third pass over parameter list when validating generic functions and subscripts
The code for performing the third pass using the GenericToArchetypeResolver
is still there, but it only runs for non-generic declarations.

The next step is to consolidate this path with the generic path.
2018-07-18 01:54:24 -07:00
Mark Lacey
51f8c93f58 Merge pull request #17918 from rudkx/remove-inc-dec-operators
Remove the '++' and '--' operators.
2018-07-14 16:27:57 -07:00
Mark Lacey
8ee52763f0 Remove the '++' and '--' operators.
We still had unavailable versions of these for floating-point types
only. We shouldn't need to keep these around, and can instead just
emit a helpful diagnostic for anyone that attempts to use them.

Unfortunately I don't see any way for the diagnostic to produce an
actual fix-it, so it just suggests '+= 1' or '-= 1' without actually
producing a fix.
2018-07-12 15:46:57 -07:00
Mark Lacey
85115dd2c9 Merge pull request #17756 from mdiep/synthesize-equatable-hashable-for-uninhabited-types
Derive Equatable & Hashable for uninhabited types
2018-07-12 12:22:34 -07:00
Ding Ye
4a05369b5a Improve interface of InputMatcher with some renaming and rephrasing;
split test cases into different files for different swift versions.
2018-07-11 15:26:56 +10:00
Ding Ye
64274a9b17 Handle parameters with default values and variadics. 2018-07-11 15:26:55 +10:00
Ding Ye
c4c730f8d1 [Sema] Diagnostic: improve diagnostics for ApplyExpr.
When diagnosing ApplyExpr, the existing implementation
tries to resolve the function subexpression independently
in the first place, without considering the argument
information. As a result, such resolved function type
may not produce the best diagnostic message.
This patch adds condideration of the number of arguments
to decide the better function subexpression for diagnostic
purpose.

Resolves: SR-7918, SR-7786, SR-7440, SR-7295, SR-5154.
2018-07-11 15:26:55 +10:00
Slava Pestov
559c0fd33d AST: Remove assertion in typo correction
CSDiag can try doing lookups on unbound generic types, so just remove this
assertion.
2018-07-10 17:01:12 -07:00
Matt Diephouse
30949c75ef Derive Equatable & Hashable for uninhabited types 2018-07-10 14:49:06 -04:00
Jordan Rose
c468ca1e48 Handle stray LoadExprs in RawRepresentable fix-its (#17804)
When there are multiple possible overloads for a call, the partially-
type-checked argument expression might end up with a LoadExpr outside
of the call ParenExpr instead of inside it. Account for this in a one-
off way for the 'rawValue' / 'init(rawValue:)' fix-its.

Yet more https://bugs.swift.org/browse/SR-8150
2018-07-09 15:22:18 -07:00
Huon Wilson
d21eedb088 Merge pull request #17786 from huonw/crossfile-synthesis-implication
[AST] Choose an implied conformance source next to the type, if possible.
2018-07-10 08:10:11 +10:00
Hamish Knight
c66e68fb93 [Parse][Sema] Emit immediate deallocation warning on the '=' token for PBDs (#17700)
Pass through the location of the equal '=' token for pattern binding decl entries, and use this location for the immediate deallocation diagnostic. Previously, we were just diagnosing on the start of the initialiser expression.

Additionally, this commit moves the call to `diagnoseUnownedImmediateDeallocation` from `typeCheckBinding` to `typeCheckPatternBinding`. This not only gives us easier access to the PBD entry, but also avoids calling the diagnostic logic for statement conditions such as `if let x = <expr>`. We currently never diagnose on these anyway, as the 'weak' and 'unowned' keywords cannot be applied to such bindings.

Resolves [SR-7340](https://bugs.swift.org/browse/SR-7340).
2018-07-06 10:47:49 -07:00
Huon Wilson
80a74b4dfc [AST] Choose an implied conformance source next to the type, if possible.
If a conformance to a protocol is implied by several other
conformances (i.e. protocol P: Equatable {} and protocol Q: Equatable {} and a
type declares conformance to both P and Q), we should choose a source that's in
the same file as the type, if we can, because automatic synthesis of
conformances (for Equatable, Hashable, etc.) only works in that case.

Fixes rdar://problem/41852654.
2018-07-06 18:24:21 +10:00
Huon Wilson
d3dc80da6b [test] Avoid needing an entry point in struct/enum synthesis conformance tests.
The special handling of interleaved decls and statements is confusing and makes
other testing hard.
2018-07-06 18:24:21 +10:00
Jordan Rose
9116f95826 Merge pull request #17714 from jrose-apple/raw-deal
Prefer RawRepresentable fix-its that don't require an extra conversion

https://bugs.swift.org/browse/SR-8150
2018-07-03 16:03:53 -07:00
Jordan Rose
b318ab125d Prefer RawRepresentable fix-its that don't require an extra conversion
That is, if a type has a raw value of Int, and the function being
called has overloads for both Int and UInt, we always want to offer a
fix-it that leads to the 'Int' overload, not insert a conversion to
UInt that might be incorrect.

More https://bugs.swift.org/browse/SR-8150.
2018-07-03 13:24:36 -07:00
Jordan Rose
cc82ae00d9 Fix RawRepresentable fix-its for single unlabeled arguments
They were being put outside the call parentheses instead of inside.
We even had tests for this; I just got them wrong.

https://bugs.swift.org/browse/SR-8150
2018-07-03 13:24:22 -07:00
Slava Pestov
31ab93b82c Remove Swift 3-specific tests 2018-07-02 21:14:22 -07:00
Jordan Rose
e783027061 Space Engine: uninhabited types map to empty spaces (#17680)
Without this, the compiler ended up complaining about missing cases
that can't actually occur, like `Optional<Never>.some(_)`. This was a
regression from Swift 4.1.

https://bugs.swift.org/browse/SR-8125
2018-07-02 18:27:46 -07:00
John McCall
9bee3cac5a Generalize storage implementations to support generalized accessors.
The storage kind has been replaced with three separate "impl kinds",
one for each of the basic access kinds (read, write, and read/write).
This makes it far easier to mix-and-match implementations of different
accessors, as well as subtleties like implementing both a setter
and an independent read/write operation.

AccessStrategy has become a bit more explicit about how exactly the
access should be implemented.  For example, the accessor-based kinds
now carry the exact accessor intended to be used.  Also, I've shifted
responsibilities slightly between AccessStrategy and AccessSemantics
so that AccessSemantics::Ordinary can be used except in the sorts of
semantic-bypasses that accessor synthesis wants.  This requires
knowing the correct DC of the access when computing the access strategy;
the upshot is that SILGenFunction now needs a DC.

Accessor synthesis has been reworked so that only the declarations are
built immediately; body synthesis can be safely delayed out of the main
decl-checking path.  This caused a large number of ramifications,
especially for lazy properties, and greatly inflated the size of this
patch.  That is... really regrettable.  The impetus for changing this
was necessity: I needed to rework accessor synthesis to end its reliance
on distinctions like Stored vs. StoredWithTrivialAccessors, and those
fixes were exposing serious re-entrancy problems, and fixing that... well.
Breaking the fixes apart at this point would be a serious endeavor.
2018-06-30 05:19:03 -04:00
Doug Gregor
2a5702720d Merge pull request #16967 from dingobye/sr7660
[Sema] Fix spurious use_local_before_declaration errors.
2018-06-27 09:37:32 -07:00
Slava Pestov
3701f745c4 Migrate various Sema tests to Swift 4 2018-06-25 01:02:20 -07:00
Slava Pestov
b7d0a7931f Merge pull request #17321 from slavapestov/swift4-default-tests
Run tests with -swift-version 4
2018-06-20 07:37:57 -07:00
Doug Gregor
a66df57aaf [Mangling] Update SILGen and IRGen tests for mangling change. 2018-06-19 23:24:38 -07:00
Slava Pestov
5d2752f7d2 Run tests with -swift-version 4 by default
Some test now fail, so add an explicit -swift-version 3.
2018-06-19 23:24:19 -07:00
Robert Widmann
9bd02e1d17 Allow eliding ownership conventions in a copyable context
Allow witnesses to protocols in a copyable context to elide explicit
ownership conventions.  This allows clients like the standard library to
standardize on one ownership convention without an ABI or API breaking
change in 3rd party code.

In the future, moveonly contexts must disallow this default behavior
else the witness thunks could silently transfer ownership.

rdar://40774922

protocol P {
  __consuming func implicit(x: __shared String)
  __consuming func explicit(x: __owned String)
  __consuming func mismatch(x: __shared String)
}

class C : P {
  // C.implicit(x:) takes self and x '@guaranteed' thru the witness thunk
  func implicit(x: String) {}
  // C.explicit(x:) takes self and x @owned with no convention changes
  __consuming func explicit(x: __owned String) {}
  // Would inherit __consuming, but x has been spelled __owned so the requirement match fails.
  func mismatch(x: __owned String) {}
}
2018-06-19 12:25:50 -07:00
Doug Gregor
18569e5f77 Merge pull request #16963 from DougGregor/evaluator-type-checker
[Type checker] Use the request-evaluator in the type checker.
2018-06-15 22:41:31 -07:00
Slava Pestov
0d92918f5b Sema: Check access control in 'where' clauses of protocols and associated types
We weren't checking this before, which would let you define a
public protocol that no public type could conform to.

This is a source-breaking change, so stage it in with a warning.
It becomes an error in -swift-version 5 mode.
2018-06-15 13:23:58 -07:00
Slava Pestov
a7e51721ce Sema: Fix minor inconsistencies with access control diagnostics
The various 'isExplicit' checks were wrong -- they should apply
to protocol requirements only, not protocol extension members.

Also, we weren't performing this check for type aliases in
protocols, so you would get a misleading diagnostic telling you
the type alias must be declared private/internal, when in fact
type aliases in protocols cannot have their own access control.

Finally, the "should be declared <X>" diagnostics (the
!isExplicit case) need to state the most visible access level
that will work, and in a few cases we would say private instead
of fileprivate here.
2018-06-15 13:23:58 -07:00
Doug Gregor
17f42aa77a [Type checker] Stop using the iterative type checker for global typealiases.
The ITC is providing no benefit here; stop using it.
2018-06-14 15:29:57 -07:00
Joe Groff
823ed14449 Merge pull request #16987 from AnthonyLatsis/warn-unconstructible-enum
[Diagnostics][Sema] warn inconstructible enum
2018-06-13 19:13:25 -07:00