Commit Graph

243 Commits

Author SHA1 Message Date
Chris Lattner
d5934da6e3 QoI: improve the error message for when whitespace is inconsistent on either
side of the = to say that, instead of talking about prefix/postfix = operators,
which are "not a thing".
2015-12-16 14:27:17 -08:00
Maxim Moiseev
2c95bb6d51 BooleanType => Boolean 2015-12-10 14:56:32 -08:00
Maxim Moiseev
844b81c46b SequenceType => Sequence 2015-12-09 17:16:56 -08:00
David Walter
f71dc7f790 Reverted more whitespace 2015-12-07 02:34:45 +01:00
David Walter
ab4c05e47c Some more 2015-12-07 00:24:35 +01:00
Chris Lattner
124b0e44c8 Fix <rdar://problem/23719432> [practicalswift] Compiler crashes on &(Int:_)
We were using the wrong conversion from lvalue to rvalue, which wasn't digging
into tuple lvalues.
2015-12-02 08:07:18 -08:00
Chris Lattner
4b8ccacf63 Fix <rdar://problem/22243469> QoI: Poor error message with throws, default arguments, & overloads
and probably others.

When we're type-checking a failed ApplyExpr that has an overload set that
prevents getting a specific type to feed into the initial typechecking of
the argument list, ranking can often narrow down the list of candidates
further, to the point where there is only one candidate left or where all
candidates agree that one argument is wrong.

In this case, re-type-check the subexpr with the expected type.  In the case of
rdar://problem/22243469 we now produce:

t.swift:6:11: error: invalid conversion from throwing function of type '() throws -> ()' to non-throwing function type '() -> Void'
  process {
          ^

instead of:

t.swift:6:3: error: cannot invoke 'process' with an argument list of type '(() throws -> ())'
  process {
  ^
t.swift:6:3: note: overloads for 'process' exist with these partially matching parameter lists: (UInt, fn: () -> Void)
  process {
  ^

Which is a heck of a lot less specific.  Similarly, in the testcase from rdar://23550816, instead
of producing:

  takeTwoFuncsWithDefaults { $0 + 1 }
error: cannot invoke 'takeTwoFuncsWithDefaults' with an argument list of type '((Int -> Int)?)'
note: expected an argument list of type '(f1: (Int -> Int)?, f2: (String -> String)?)'

we now produce:
error: cannot convert value of type '_ -> Int' to expected argument type '(String -> String)?'

which is a lot closer to what we want to complain about.
2015-11-17 20:27:47 -08:00
Chris Lattner
2f04cb13f1 Fix <rdar://problem/23550816> QoI: Poor diagnostic in argument list of "print" (varargs related)
When passing a contextual type to a call, if we have a scalar element
initializing a varargs parameter list, we need to use the varargs element type
contextually.  Fixing this improves some confusing diagnostics.
2015-11-15 15:13:21 -08:00
Chris Lattner
13792f915e Fix <rdar://problem/23086402> Swift compiler crash in CSDiag 2015-11-15 14:13:23 -08:00
David Farler
3434f9642b Disallow 'var' pattern bindings in if, while, and guard statements
Make the following patterns illegal:

  if var x = ... {
    ...
  }

  guard var x = ... else {
    ...
  }

  while var x = ... {
    ...
  }

And provide a replacement fixit 'var' -> 'let'.

rdar://problem/23172698

Swift SVN r32855
2015-10-24 01:46:30 +00:00
Chris Lattner
92fc60f619 fix rdar://22387625 QoI: Common errors: 'let x= 5' and 'let x =5' could use Fix-its
Swift SVN r32004
2015-09-16 20:12:14 +00:00
Chris Lattner
e47065b68c Dial back the specificity of these diagnostics a bit to not mention Float80 to avoid breaking test on targets that lack it.
Swift SVN r31892
2015-09-11 06:15:35 +00:00
Chris Lattner
96eaa14f3b Fix an arbitrary restriction where we would not propagate the result type of
call expression onto a callee when it was a binary expression.  Doing this
requires improving the diagnostics for when the contextual result type is
incompatible with all candidates, but that is general goodness all around.

This fixes:
<rdar://problem/22333090> QoI: Propagate contextual information in a call to operands

and improves a number of diagnostics where the problem is that an operator
is used in a context that expects a type that it cannot produce.



Swift SVN r31891
2015-09-11 06:12:05 +00:00
Chris Lattner
f062afb712 fix rdar://22240342 - Crash in diagRecursivePropertyAccess
Swift SVN r31595
2015-09-01 02:55:38 +00:00
Chris Lattner
ada5487153 add fixit tests to random other tests.
Swift SVN r31006
2015-08-04 20:35:36 +00:00
Chris Lattner
509ff78787 Fix in <rdar://problem/21600924> Typo "be be" in live issue
Swift SVN r30883
2015-07-31 21:24:26 +00:00
Chris Lattner
1a0a0315fe wordsmith a diagnostic, NFC otherwise.
Swift SVN r30731
2015-07-28 23:35:25 +00:00
Chris Lattner
06cc05daa9 reword a diagnostic, as suggested by Jordan
Swift SVN r30712
2015-07-28 04:03:25 +00:00
Chris Lattner
8c3e62d7c5 Provide contextually sensitive conversion failure messages for situations in
which we have a contextual type that was the failure reason.  These are a bit
longer but also more explicit than the previous diagnostics.



Swift SVN r30669
2015-07-26 23:06:40 +00:00
Chris Lattner
5d3dc0d77b Now that sufficient complexity is pushed into the right corners of the compiler,
we can start taking advantage of ambiguously typed subexpressions in CSDiags.  We
start by validating the callee function of ApplyExprs, which substantially improves
our abilities to generate precise diagnostics about malformed calls.

This is the minimal introduction of this concept to CSDiags, a lot of refactoring
is yet to come, however, this is enough to resolve:

<rdar://problem/21080030> Bad diagnostic for invalid method call in boolean expression
<rdar://problem/21784170> Incongruous `unexpected trailing closure` error in `init` function which is cast and called without trailing closure.

one of the testcases from:
<rdar://problem/20789423> Unclear diagnostic for multi-statement closure with no return type

and a bunch of other places where we got weird "unexpected trailing closure" 
diagnostics that made no sense.  As usual, it is two steps forward and one step back,
as this exposed some other weird latent issues like:
<rdar://problem/21900971> QoI: Bogus conversion error in generics case




Swift SVN r30429
2015-07-21 01:06:55 +00:00
John McCall
bc3b47b98a Infer the return type of a closure to be () if it contains no
return statements, or a return statement with no operand.

Also, fix a special-case diagnostic about converting a return
expression to (1) only apply to converting the actual return
expression, not an arbitrary sub-expression, and (2) use the
actual operand and return types, not the drilled-down types
that caused the failure.

Swift SVN r30420
2015-07-20 21:52:18 +00:00
Slava Pestov
c1b3569192 Parse: Fix crash with invalid protocol compositions, and improve error recovery
Fixes <rdar://problem/19686707>.

Swift SVN r30304
2015-07-17 05:57:22 +00:00
Chris Lattner
55bcdb9099 Reapply the fix for <rdar://problem/21369926> Malformed Swift Enums crash playground service
Completely revamp getTypeOfIndependentSubExpression, to return the subexpression produced by 
type checking instead of just a type. This is important for cases when type checking changes
the root of the AST (e.g. resolving an unresolved_dot_expr) and allows us to eliminate grungy 
and unsafe recovery code that was in place to work around this.  The last point makes the
examples in Constraints/lvalues.swift better (giving a somewhat generic error instead of an 
specific-but-incorrect error that 'z' is immutable), 

but more importantly, it fixes a class of crashers like:
 <rdar://problem/21369926> Malformed Swift Enums crash playground service 
where we'd end up with a LiteralExpr typed as Int instead of a Builtin integer type of some sort.



Swift SVN r30028
2015-07-09 17:32:59 +00:00
Chris Lattner
31facf7204 revert r29932, which is triggering a problem on the ASAN bot that I need to investigate.
Swift SVN r29978
2015-07-08 17:14:43 +00:00
Chris Lattner
e8877e9555 Several changes:
- Fix a diagnostic to not include redundant ''s around a type name.
 - Rework CleanupIllFormedExpression to be simpler and to not 
   unconditionally destroy data when it doesn't.  This makes a code 
   completion test a bit more precise.
 - Completely revamp getTypeOfIndependentSubExpression, to return the 
   subexpression produced by type checking instead of just a type.  This
   is important for cases when type checking changes the root of the AST
   (e.g. resolving an unresolved_dot_expr) and allows us to eliminate
   grungy and unsafe recovery code that was in place to work around this.

The last point makes the examples in Constraints/lvalues.swift better (giving
a somewhat generic error instead of an specific-but-incorrect error that 'z'
is immutable), but more importantly, it fixes a class of crashers like
<rdar://problem/21369926> Malformed Swift Enums crash playground service

where we'd end up with a LiteralExpr typed as Int instead of a Builtin integer
type of some sort.



Swift SVN r29932
2015-07-07 04:35:31 +00:00
Chris Lattner
b075f810ba Reimplement error recovery in C-style for statement, where we'd turn a ClosureExpr
into the body of the for statement.  Instead of ripping the body of the closureexpr
out and putting it into the C Style for, wrap up the closureExpr into a call.  This
avoids breaking AST invariants because the ClosureExpr will be the DeclContext for
anything inside of it.

This fixes <rdar://problem/21679557> compiler crashes on "for{{"
... which was Practical Swift's shortest crasher.



Swift SVN r29916
2015-07-06 06:19:30 +00:00
Chris Lattner
8637bb4c01 fix <rdar://problem/21679169> compiler crashes on "{(=_=_)in"
Swift SVN r29914
2015-07-06 04:46:56 +00:00
Dmitri Hrybenko
4cdf37a68b stdlib: rename the generic parameter from T to Element on unsafe pointers
Fixed AutoreleasingUnsafeMutablePointer, UnsafePointer,
UnsafeMutablePointer.

Part of rdar://21429126

Swift SVN r29637
2015-06-24 20:42:04 +00:00
Doug Gregor
149d4bcb95 Disallow unnamed function parameters written without the "_:".
Now, instead of writing, e.g.,

  func f(Int) { ... }

one must write the more-generally-consistent and explicit

  func f(_: Int) { ... }

Fixes rdar://problem/16737312.

Swift SVN r29609
2015-06-24 16:01:39 +00:00
Chris Lattner
3ad108b0be Reapply r29419:
Enhance fixItRemove() to be a bit more careful about what whitespace it leaves around: if the thing it is removing has leading and trailing whitespace already, this nukes an extra space to avoid leaving double spaces or incorrectly indented results.  

This includes an extra fix for looking off the start of a buffer, which extractText doesn't and can't handle.

This fixes <rdar://problem/21045509> Fixit deletes 'let' from non-binding 'if case let' statements, but leaves an extra space




Swift SVN r29449
2015-06-17 16:31:26 +00:00
Ted Kremenek
d13549e607 Revert "enhance fixItRemove() to be a bit more careful about what whitespace it leaves around:"
This was breaking the bots.

Swift SVN r29432
2015-06-17 02:20:52 +00:00
Chris Lattner
6b3167ab36 enhance fixItRemove() to be a bit more careful about what whitespace it leaves around:
if the thing it is removing has leading and trailing whitespace already, this nukes
an extra space to avoid leaving double spaces or incorrectly indented results.  This
fixes <rdar://problem/21045509> Fixit deletes 'let' from non-binding 'if case let' statements, but leaves an extra space



Swift SVN r29419
2015-06-17 00:55:59 +00:00
Chris Lattner
84787421c5 fix <rdar://problem/21196171> compiler should recover better from "unicode Specials" characters
There are a few changes here:
 - Exclude the "unicode specials" block (http://en.wikipedia.org/wiki/Specials_(Unicode_block))
   from being considered part of the valid identifier characters.
 - Have the compiler produce a fixit hint that replaces invalid UTF8 codepoints and invalid
   characters in general with whitespace with a blank space.
 - When the lexer sees an invalid character like this at the start of a token, rescan for the
   next token, improving error recovery, instead of returning tok::invalid.
 - Fix the order that diagnostics are generated in the curly quoted string case to report the
   end quote last.  This interacts better with Xcode's fixit hints, because just fixing the last
   quote allows the compiler to detect that remaining problem, but fixing the first quote hides
   the second one with our current implementation.



Swift SVN r29222
2015-06-02 04:18:34 +00:00
Chris Lattner
cf1cb14205 recommit 28958/28959, there was a testcase that didn't get updated correctly
but it was between the two revisions.


Swift SVN r28964
2015-05-23 15:50:16 +00:00
Ted Kremenek
381eb52207 Revert "Further consolidate mutation code, this time for DeclRefExprs. With that"
Backing out to fix th build.

Swift SVN r28958
2015-05-23 07:55:04 +00:00
Chris Lattner
291d7eaad7 Further consolidate mutation code, this time for DeclRefExprs. With that
done, the rest of the infrastructure is all common and can be simplified.  This
leaves us with a quite small and maintainable subsystem for diagnosing these
kinds of problems.

 include/swift/AST/DiagnosticsSema.def |   28 ++-----
 lib/Sema/CSDiag.cpp                   |  132 ++++++++++------------------------
 2 files changed, 48 insertions(+), 112 deletions(-)




Swift SVN r28957
2015-05-23 05:49:19 +00:00
Chris Lattner
3f0ca3e2c8 - Change the general assignment failure diagnostic to include the type of the
result and make it more specific.
- Move the 'assignment failure' diagnostic logic to CSDiags.cpp where it belongs.



Swift SVN r28937
2015-05-22 22:07:26 +00:00
Chris Lattner
678b99f347 Fix <rdar://problem/20985280> QoI: improve diagnostic on improper pattern match on type
Where before we would diagnose something like "catch MyType {" with two errors (one of
which complaining about a ~= the user didn't write) and two notes, we now produce:

 error: 'is' keyword required to pattern match against type name

with a fixit hint to insert the 'is'.



Swift SVN r28761
2015-05-19 06:25:50 +00:00
Chris Lattner
8f75af282f fix spello in diagnostic.
Swift SVN r28700
2015-05-18 06:06:28 +00:00
Chris Lattner
5b49a63f46 Fix an egregious lack of QoI: <rdar://problem/16990885> support curly quotes for string literals
Swift SVN r28699
2015-05-18 05:59:43 +00:00
Chris Lattner
e49c66d8b0 fix <rdar://problem/19833424> QoI: Bad error message when using Objective-C literals (@"Hello") in Swift files
Before:

t.swift:2:9: error: expected initial value after '='
let x = @"foo"
        ^
t.swift:2:8: error: consecutive statements on a line must be separated by ';'
let x = @"foo"
       ^
       ;
t.swift:2:10: error: expected an attribute name
let x = @"foo"
         ^
t.swift:2:10: error: expected declaration
let x = @"foo"
         ^

now:

t.swift:2:9: error: string literals in Swift are not preceeded by an '@' sign
let x = @"foo"
        ^



Swift SVN r28698
2015-05-18 05:41:53 +00:00
Chris Lattner
e4b6afb9ae Start moving the testsuite to the "_ = foo()" idiom for evaluating an
expression but ignoring its value.  This is the right canonical way to do
this.  NFC, just testsuite changes.



Swift SVN r28638
2015-05-15 20:15:54 +00:00
Ted Kremenek
02041a9e6f Revert "Revert "fix <rdar://problem/20883210> QoI: Following a "let" condition with boolean condition spouts nonsensical errors""
I thought this was the culprit behind the SourceKit test failure, but I was wrong.

Swift SVN r28621
2015-05-15 07:05:55 +00:00
Ted Kremenek
3ab75178de Revert "fix <rdar://problem/20883210> QoI: Following a "let" condition with boolean condition spouts nonsensical errors"
This is causing a regression with 'while ... where', and manifests in the SourceKit tests.

Swift SVN r28616
2015-05-15 06:50:10 +00:00
Chris Lattner
e6344e4ad6 fix <rdar://problem/20883210> QoI: Following a "let" condition with boolean condition spouts nonsensical errors
Swift SVN r28596
2015-05-15 01:14:20 +00:00
Chris Lattner
7059871abf Convert some 'var' bindings to 'let' when they are not mutated, some
var/let bindings to _ when they are never used, and use some values that
are only written.  This is a testsuite cleanup, NFC. More to come.


Swift SVN r28406
2015-05-11 00:20:55 +00:00
Chris Lattner
31b00de99f Remove the migration logic for let/else -> guard. We don't need it at WWDC,
and there are crashers that it admits (e.g. rdar://20866942).



Swift SVN r28330
2015-05-08 23:17:10 +00:00
Chris Lattner
ec95a37e08 rework the disambiguation logic that determines whether a token stream is
likely to be a c-style for loop or a for-each loop.  NFC except in one recovery
cases where we already spray crazy diagnostics.


Swift SVN r28023
2015-05-01 04:42:56 +00:00
Chris Lattner
31c01eab73 Change the meaning of "if let x = foo()" back to Xcode 6.4 semantics. The compiler
includes a number of QoI things to help people write the correct code.  I will commit
the testcase for it as the next patch.

The bulk of this patch is moving the stdlib, testsuite and validation testsuite to
the new syntax.  I moved a few uses of "as" patterns back to as? expressions in the 
stdlib as well.



Swift SVN r27959
2015-04-30 04:38:13 +00:00
Chris Lattner
aa4f01b228 fix a fixit I accidentally broke and re-adjust a testcase back to the way it was.
Swift SVN r27942
2015-04-29 23:09:47 +00:00