Commit Graph

1487 Commits

Author SHA1 Message Date
Joe Groff
adba1535e5 Merge pull request #20211 from Azoy/sr8811-warning
[Sema] Uninhabited stored property downgrade to warning
2018-11-12 11:18:33 -08:00
Suyash Srijan
6a92a6dd94 Adds missing new line at EOF 2018-11-10 20:09:09 +00:00
Suyash Srijan
15ebc07421 Fixes incorrect diagnostic when using keypath with tuples 2018-11-10 17:19:09 +00:00
Azoy
a1bcbe8087 update tests
fix conflict with reflection test
2018-11-09 00:22:32 -06:00
Azoy
18d2cc5b01 Uninhabited downgrade to warning 2018-11-09 00:21:14 -06:00
Pavel Yaskevich
66a79301b4 [CSDiagnostics] Diagnose contextual closure result mismatches via fixes
Let's keep track of type mismatch between type deduced
for the body of the closure vs. what is requested
contextually, it makes it much easier to diagnose
problems like:

```swift
func foo(_: () -> Int) {}
foo { "hello" }
```

Because we can pin-point problematic area of the source
when the rest of the system is consistent.

Resolves: rdar://problem/40537960
2018-11-07 14:28:50 -08:00
Azoy
5dcf823d8d Fix non instance member tests 2018-10-23 21:09:38 -05:00
Rintaro Ishizaki
8f7254d722 [Lexer] Skip comments in interpolated expression in string literal
when skipping to the end of the interpolated expression.
i.e. Skip the comment as a comment.

Previously, ')' or '"' in comment in interpolated expression used to
cause assertion failure or mis-compilation in no-assert build.

rdar://problem/20289969
2018-10-09 09:35:50 +09:00
Mike Ash
5f17b450c3 [Stdlib] Make all the functions in LibcShims.h either INTERNAL or inline. Move LibcShimsInline.h to LibcOverlayShims.h for more consistent naming. Fix up several tests that needed the mock Darwin overlay built. Fix one SourceKit test that no longer produces is_system: 1 on an import Darwin line. 2018-10-03 09:55:34 -04:00
Rintaro Ishizaki
07545b9049 [Test] Add typechecker test cases for unresolved member expr
Some uncommon cases including:
* Closure static properties
* Nested types
2018-09-29 17:21:59 +09:00
Ben Cohen
098a8919c4 Remove redundant implementations of !=(Equatable,Equatable) 2018-09-25 15:24:23 -07:00
Pavel Yaskevich
63b802ca88 [AST/Printing] Don't omit empty labels in special names
This makes diagnostics more verbose and accurate, because
it's possible to distinguish how many parameters there are
based on the message itself.

Also there are multiple diagnostic messages in a format of
`<descriptive-kind> <decl-name> ...` that get printed as
e.g. `subscript 'subscript'` if empty labels are omitted.
2018-09-24 18:36:53 -07:00
Pavel Yaskevich
27d0d26222 Revert "[CSDiagnostics] Don't mention special names in requirement diagnostics" 2018-09-21 14:44:04 -07:00
Pavel Yaskevich
02d5401499 [CSDiagnostics] Don't mention special names in requirement diagnostics
Instead of `initializer 'init' of ...` diagnostic should only
mention kind e.g. `initializer of ...` of the declaration
with a special name.
2018-09-21 00:35:21 -07:00
Joe Groff
7d78b09794 Merge pull request #19382 from jckarter/identity-key-path-syntax
Implement the final approved syntax for SE-227 identity key paths.
2018-09-20 08:03:42 -07:00
Joe Groff
93b5de61e7 Implement the final approved syntax for SE-227 identity key paths.
`\.self` is the final chosen syntax. Implement support for this syntax, and remove the stopgap builtin and `WritableKeyPath._identity` property that were in place before.
2018-09-19 11:45:13 -07:00
Rintaro Ishizaki
7b701d57d3 [Lexer] Improve diagnostics for single-quote string literal
Ignore the contents of interpolation.
2018-09-19 18:58:54 +09:00
Davide Italiano
4fed893d74 [AST] Preserve sugar for generic typealiases.
<rdar://problem/43110802>
2018-09-17 15:34:37 -07:00
Mark Lacey
352e4a2de4 [ConstraintSystem] Infer empty closures as returning () more eagerly.
We previously allowed these closures to default to (), but be inferred
as other types as well, which means that we will find some expressions
to be ambiguous because we end up finding multiple viable solutions
where there is really only one reasonable solution.

Fixes: rdar://problem/42337247
2018-09-12 13:30:35 -07:00
gregomni
13d02bb85c Make the rvalue-as-lvalue fix symmetric for bind constraints, which causes another set of assignment errors to be discovered in
the CS and slightly reduces the code in CSDiag.
2018-08-29 19:07:29 -07:00
gregomni
821f63fe98 Make assignments and assignment failure diagnoses directly in the CS.
More specific diagnoses for assigning to read-only keypaths.
'computeAssignDestType' is dead code now.
ConstraintFix shouldRecordFix()
2018-08-24 20:39:03 -07:00
gregomni
aeb96274d2 Apply the solution to the CS before diagnosing solution fixes. 2018-08-18 08:38:16 -07:00
Pavel Yaskevich
65e67034f8 Merge pull request #18550 from xedin/improve-conformance-req-diags
[Diagnostics] Improve missing conformance diagnostics by using affect…
2018-08-08 00:36:40 -07:00
Pavel Yaskevich
ba085e5bdc [Diagnostics] Improve missing conformance diagnostics for sub-types and members
If generic parameter associated with missing conformance comes
from different context diagnose the problem as "referencing" a
specific declaration from affected type.
2018-08-07 18:55:43 -07:00
Pavel Yaskevich
ad171e05cc [Diagnostics] Improve missing conformance diagnostics by using affected declaration
Instead of simply pointing out which type had conformance failures,
let's use affected declaration instead, which makes diagnostics much
richer e.g.

```
'List<[S], S.Id>' requires that 'S.Id' conform to 'Hashable'
```

versus

```
initializer 'init(_🆔)' requires that 'E' conform to 'Hashable' [with 'E' = 'S.Id']
```

Since latter message uses information about declaration, it can also
point to it in the source. That makes is much easier to understand when
problem is related to overloaded (function) declarations.
2018-08-07 12:59:53 -07:00
Pavel Yaskevich
dc6f86d9b7 [CSRanking] Fix solution filtering not to erase everything when set is completely ambiguous
Since constraint solver has been improved to diagnose more problems
via "fixes", sometimes applying fixes might lead to producing solutions
which are completely ambiguous when compared to each other, and/or are
incomparable, which leads to `findBestSolutions` erasing all of them
while trying to compute best "partial" solution, which is incorrect.

Resolves: rdar://problem/42678836
2018-08-06 17:25:58 -07:00
Pavel Yaskevich
913f3710c6 Merge pull request #18484 from xedin/diag-req-failures-via-fixes
[ConstraintSystem] Diagnose missing conformance requirements via "fixes"
2018-08-03 19:23:06 -07:00
Pavel Yaskevich
c2bf3d5ba9 [TypeChecker] NFC: Fix all of the diagnostics improved by conformance tracking 2018-08-02 21:55:16 -07:00
Doug Gregor
f39fe1a755 [Tests] Put NSObject Equatable/Hashable back in the ObjectiveC module.
Technically, these operations belong in the ObjectiveC module, where NSObject
is defined. Keep them there. However, we need to build the mock ObjectiveC
overlay with `-disable-objc-attr-requires-foundation-module` now.
2018-08-01 09:25:28 -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
Pavel Yaskevich
a9ebaef2e5 Merge pull request #18227 from xedin/diagnose-missing-labels-using-fixes
[ConstraintSystem] Use fixes to diagnose missing/extraneous/incorrect argument labels
2018-07-26 12:01:28 -07:00
Mark Lacey
f3a5a9d595 Merge pull request #18252 from rudkx/add-test-for-rdar32057712
Add test for the long-ago fixed rdar://problem/32057712.
2018-07-26 09:24:52 -07:00
Mark Lacey
fc164731b9 Add test for the long-ago fixed rdar://problem/32057712. 2018-07-26 00:55:27 -07:00
Doug Gregor
9b888533d4 [Serialization] Serialize Objective-C method names for accessors.
Due to some short-circuiting in the serialization logic, we never
added @objc getters/setters to a module’s Objective-C method table.
2018-07-25 16:48:50 -07:00
Pavel Yaskevich
84cd99a3eb [Diagnostics] Enable extraneous/incorrect label diagnostics via solver fixes
This builds on initial commit which added `RelabelArguments` fix
to the solver that only supported `missingLabels` at that moment,
but now it supports all three posibilities - missing/extraneous and
incorrect labels.
2018-07-25 14:34:26 -07:00
Rintaro Ishizaki
183a1ae180 Merge pull request #17696 from rintaro/sema-rebindself-target
[Sema] Don't make argument paren target of RebindSelfInConstructorExpr
2018-07-22 17:01:05 -07:00
Pavel Yaskevich
9371aaa49b [TypeChecker/SE-0213] NFC: Add couple of additional test-cases 2018-07-17 12:08:59 -07:00
Doug Gregor
945c09b1cc [Type checker] Improve diagnostics when an optional value is not unwrapped.
When we determine that an optional value needs to be unwrapped to make
an expression type check, use notes to provide several different
Fix-It options (with descriptions) rather than always pushing users
toward '!'. Specifically, the errors + Fix-Its now looks like this:

    error: value of optional type 'X?' must be unwrapped to a value of
        type 'X'
      f(x)
        ^
    note: coalesce using '??' to provide a default when the optional
        value contains 'nil'
      f(x)
        ^
          ?? <#default value#>
    note: force-unwrap using '!' to abort execution if the optional
        value contains 'nil'
      f(x)
         ^
         !

Fixes rdar://problem/42081852.
2018-07-13 11:02:04 -07:00
Brent Royal-Gordon
70f788ed7f Merge pull request #17656 from brentdax/thats-what-a-diagnostics-all-about
[Sema] Improve error for inout on conversion
2018-07-11 16:19:34 -07:00
Brent Royal-Gordon
7545b1945f [Sema] Improve error for inout on conversion
The diagnostic when a user attempts to pass an argument requiring an implicit conversion (e.g. declared as a subclass, type conforming to protocol, etc.) to an inout parameter seems to be confusing for users—see e.g. SR-8155, SR-8148. This change replaces it with a more specific diagnostic which clearly suggests a solution. It also includes a fix-it suggesting the user change the type of the original variable if it’s a local with a simple type signature.
2018-07-10 12:31:36 -07:00
Slava Pestov
1d476edfaf Sema: Also diagnose availability inside keypath index expressions 2018-07-05 23:10:37 -07:00
Slava Pestov
cf9b0d6466 Sema: Fix some keypath diagnostic crashers
We would crash in these cases:

- If all lookup results were subscripts
- If all results were unavailable
2018-07-05 23:01:14 -07:00
Slava Pestov
4531d1c0ba Sema: Check availability of key path components
Fixes <https://bugs.swift.org/browse/SR-7406> / <rdar://problem/39319212>.
2018-07-05 17:44:46 -07:00
Rintaro Ishizaki
e694837fc3 [Sema] Don't make argument paren target of RebindSelfInConstructorExpr
For `use(self.init())`, target of RebindSelfInConstructorExpr should be
call expression instead of paren expression.

rdar://problem/41416911
Possibly: rdar://problem/41593987
2018-07-03 17:12:02 +09:00
Slava Pestov
31ab93b82c Remove Swift 3-specific tests 2018-07-02 21:14:22 -07:00
Joe Groff
01dea286ee Merge pull request #17679 from jckarter/nested-collection-upcast-peephole
Sema: Clear the types of exprs changed by collection upcast peepholes.
2018-07-02 19:05:17 -07:00
Joe Groff
64c1737211 Sema: Clear the types of exprs changed by collection upcast peepholes.
`finish{Array,Dictionary}Expr` currently invoke `cs.cacheExprTypes` after building their semantic exprs, which in a nested collection expression, immediately undoes the type changes done by this peephole, leading to crashes due to inconsistencies in the AST later. rdar://problem/41040820
2018-07-02 15:00:30 -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
Mark Lacey
16a0808f2c Revert "[TypeChecker] Fix crash with Objective C keypaths." 2018-06-26 17:18:12 -07:00