Commit Graph

308 Commits

Author SHA1 Message Date
Rintaro Ishizaki
24c7ea15e7 [Parse] Disable token receiver while parsing types in editor placeholder
Otherwise, for `<#T##Type#>`, `TokReceiver` records
 `{'<#T##Type#>', 'Type'}`.
2017-12-16 10:48:12 +09:00
Slava Pestov
3b54234c6e Add two new crasher test cases found with the code completion fuzzer 2017-09-20 23:41:57 -07:00
Slava Pestov
ddd0666e94 IDE: Fix mismatched ErrorType check
In one place we were calling hasError() and in another directly checking
for ErrorType; if we had a type containing an ErrorType as a structural
component, we would hit an assertion.
2017-09-19 23:08:37 -07:00
Slava Pestov
7ba0f1ac82 IDE: Fix crash when completing unbound generic type in type context 2017-09-19 23:08:37 -07:00
Slava Pestov
ab8677faab IDE: Always use the right DeclContext
We have a hack where we use the ParsedDecl as the DeclContext,
to handle completion during function signature parsing, which
happens before the FuncDecl has been created.

While fixing this properly would require a bigger change to the
parser and AST, for now we just check if the ParsedDecl is a
child context of CurDeclContext, and only use it then.
2017-09-19 23:08:37 -07:00
Ben Langmuir
534c0cc2cb [code-completion] Generic where clauses
Complete generic parameters and their members inside generic where
clauses on structs, classes, enums, extensions, typealiases, funcs,
subscripts and inits.

Still not handled correctly are associatedtypes.

rdar://problem/20582394
2017-07-31 09:57:00 -07:00
Doug Gregor
9f0f71dea1 Resolved another crasher 2017-06-19 23:38:55 -07:00
Slava Pestov
773d7b3225 Sema: Remove more methods from GenericTypeResolver
resolveGenericTypeParamType(), resolveTypeOfDecl() and
resolveTypeOfContext() would all take the type of a
declaration, and optionally map it into context.

Replace them with a mapTypeIntoContext() that takes a
type and either returns it verbatim or maps it into
context.
2017-06-15 21:31:35 -07:00
Pavel Yaskevich
f09d2ad397 [ConstraintSolver] Forbid forming solutions with free generic type parameters
`FreeTypeVariableBinding::GenericParameters` mode allowed to bind
all free type variables with fresh generic parameter types, which
is incorrect (at least) if there are multiple generic solutions
present, because such parameters couldn't be compared.

This mode was used for code completion, which is now switched to use
`FreeTypeVariableBinding::UnresolvedType` instead.
2017-06-01 14:05:05 -07:00
Slava Pestov
e58ae766a3 Fix and un-XFAIL regressed crashers from recent stdlib change 2017-05-17 05:51:51 -07:00
practicalswift
4f05554682 [gardening] Remove assert requirement from fixed crashers 2017-05-13 10:57:05 +02:00
Huon Wilson
8c8f35ee78 [Parse] Don't tell CodeCompletion nonsense about protocol/AT where clauses.
This doesn't give particularly useful information yet (i.e. Self isn't
listed, see rdar://problem/31981641 ), but it does stop the completion
code from just directly crashing.

Fixes rdar://problem/31981486.
2017-05-12 16:00:00 +10:00
Pavel Yaskevich
ddaccf88bb [QoI] Properly diagnose closure parameter distructuring after SE-0110
Swift 3 supported limited argument destructuring when it comes to
declaring (trailing) closures. Such behavior has been changed by
SE-0110. This patch aims to provide better error message as well
as fix-it (if structure of the expected and actual arguments matches)
to make the migration easier and disambiguate some of the common
mistakes.

Resolves: SR-4738, SR-4745, rdar://problem/31892961.
2017-05-08 23:04:37 -07:00
Slava Pestov
2fe863266c AST: Fix crashes when name lookup finds declarations outside of a protocol or extension that's nested in another type
When performing a name lookup from inside of a protocol
or extension, skip directly to the source file context
when we are done visiting the protocol or extension.

Otherwise, if we have invalid code where the protocol
or extension is nested inside another type, we might
find a member whose type contains generic parameters
of the outer type; these parameters will not resolve,
since we do not model protocols or extensions nested
inside generic contexts (yet?).

This supercedes an earlier workaround for a similar
issue; the new workaround fixes more crashes.

This is needed to avoid crasher regressions with an
upcoming patch.
2017-05-07 03:01:47 -07:00
Maxim Moiseev
1c1b2b966d [stdlib] String : RangeReplaceableCollection & BidirectionalCollection (#8921)
* [stdlib] String : RangeReplaceableCollection & BidirectionalCollection

* Add source compatibility hack for Swift.max

* Add source compatibility hack for Swift.min

* Remove redundant conformance in benchmarks

* Fix stupid typo I thought I'd already pushed

* XFAIL testing now-redundant conformance

* XFAIL an IDE test for now
2017-04-23 20:04:54 -07:00
Slava Pestov
4817bd4214 Add some SourceKit crasher test cases
The unfixed ones were discovered by fuzzing. I have fixes for most
of them in an in-progress PR.

One that was already fixed is just a regression test I'm adding.
2017-04-11 14:26:10 -07:00
Slava Pestov
730cd388b4 Re-add a 'REQUIRES: asserts' that was spuriously deleted to fix no-asserts build 2016-12-12 17:42:36 -08:00
Slava Pestov
e063e8297c Sema: Some fixes for the ITC
- In functions called from resolveType(), consistently
  use a Type() return value to indicate 'unsatisfied
  dependency', and ErrorType to indicate failure.

- Plumb the unsatisfiedDependency callback through the
  resolution of the arguments of BoundGenericTypes, and
  also pass down the options.

- Before doing a conformance check on the argument of a
  BoundGenericType, kick off a TypeCheckSuperclass request
  if the type in question is a class. This ensures we don't
  recurse through NominalTypeDecl::prepareConformanceTable(),
  which wants to see a class with a valid superclass.

- The ResolveTypeOfDecl request was assuming that
  the request was satisfied after calling validateDecl().
  This is not the case when the ITC is invoked from a
  recursive call to validateDecl(), hack this up by returning
  *true* from isResolveTypeDeclSatisfied(); otherwise we
  assert in satisfy(), and we can't make forward progress
  in this case anyway.

- Fix a bug in cycle breaking; it seems if we don't invoke
  the cycle break callback on all pending requests, we end
  up looping forever in an outer call to satisfy().

- Remove unused TR_GlobalTypeAlias option.
2016-12-09 17:36:49 -08:00
Xi Ge
6bbdf4a837 [Mangler] Check the order of generic type parameters before mangling them to avoid assertion hit. 2016-12-09 09:51:40 -08:00
Jordan Rose
49e6c06eef [validation-test] Remove "REQUIRES: asserts" from /fixed/ crash cases. (#6156) 2016-12-08 19:06:32 -08:00
swift-ci
bff17cb5ee Merge pull request #6119 from bitjammer/sr-3354-crash-case 2016-12-06 19:20:25 -08:00
David Farler
ff830ce4aa Add separate compiler crasher case for SR-3354
This isn't specifically related to code completion, but an
infinite recursion in the type checker.

https://bugs.swift.org/browse/SR-3354
2016-12-06 19:03:06 -08:00
Xi Ge
54e8527d5c [code-completion] Ensure consumeDecl() does not alter the state of parser. (#6110)
This also fixes IDE/crashers/029-swift-decl-walk.swift.
2016-12-06 16:01:29 -08:00
Ben Langmuir
ef7f8f7c9a Merge pull request #6102 from benlangmuir/fix-032
[code-completion] Allow ErrorType in solution to avoid assertion failure
2016-12-06 12:26:33 -08:00
Ben Langmuir
49f144205f Merge pull request #6085 from nathawes/rdar28867801
[code-completion] Fix crash in printParameterList when paramListTy is…
2016-12-06 11:46:26 -08:00
Ben Langmuir
c01bff7ddb [code-completion] Allow ErrorType in solution to avoid assertion failure
When CSGen encounters an error it may set a type to ErrorType, but the
system will still "solve".
2016-12-06 10:42:16 -08:00
Slava Pestov
dbdb8d62ea Merge pull request #6094 from slavapestov/cleanup-generic-resolver-workaround
Cleanup generic resolver workaround
2016-12-06 10:24:18 -08:00
Slava Pestov
fdaa886065 Sema: Rework resolveTypeInContext()
Separate the "find the correct context" part from "substitute in the
base type" part. The former can go away completely after a bit of
refactoring.
2016-12-06 09:39:28 -08:00
swift-ci
20c44e6de4 Merge pull request #6095 from akyrtzi/fix-ide-crash-103 2016-12-06 09:06:31 -08:00
Argyrios Kyrtzidis
7a390e1fac [code-completion] Improve robustness of Solution::computeSubstitutions and check if OpenedTypes contains the provided locator.
Fixes validation-test/IDE/crashers/103-swift-constraints-solution-resolvelocatortodecl.swift.
2016-12-06 08:28:53 -08:00
Doug Gregor
6c7277be2c [Type checker] Work around issues with badly broken generic code.
The GenericTypeOrArchetypeResolver changes are effectively porting
some existing hacks from the now-dead
PartialGenericTypeOrArchetypeResolver, which dodges some regressions
in the compiler-crashers suite and fixes 11 new crashers. There is
undoubtedly a more principled approach to fix these problems, most of
which now step from recursively looking for a generic environment that
isn't there, but doing so requires improvements to our name lookup.
2016-12-05 22:44:24 -08:00
Xi Ge
1f7a5f4412 Fixing /IDE/crashers/016-swift-mangle-mangler-mangleidentifier.swift (#6079) 2016-12-05 21:20:35 -08:00
Xi Ge
1570f8e4f1 Fixing IDE/crashers/091-swift-typechecker-computedefaultaccessibility.swift (#6084) 2016-12-05 20:52:07 -08:00
swift-ci
e0bec70809 Merge pull request #6090 from bitjammer/guard-null-generic-env 2016-12-05 19:59:12 -08:00
David Farler
25e623addb Don't resolve a generic type parameter type from null environments
The generic environment of a GenericTypeToArchetypeResolver may be
`nullptr`, as returned by DeclContext::getGenericEnvironmentOfContext,
during prechecking of closure expressions at the necessarily non-generic
top level.

Fixes a couple of crashers.
2016-12-05 19:34:02 -08:00
swift-ci
5b822979a1 Merge pull request #6088 from bitjammer/correct-utf-8-illegal-octets 2016-12-05 17:51:10 -08:00
swift-ci
de858041e7 Merge pull request #6087 from akyrtzi/fix-ide-crash-084 2016-12-05 17:51:09 -08:00
David Farler
330c2d96e6 Make the lexer UTF-8 RFC 3629 correct re: prefix octets
RFC 2279 states that, in UTF-8:
"The octet values FE and FF never appear."

RFC 3629 states that, in UTF-8:
"The octet values C0, C1, F5 to FF never appear."

Generalize the check to advance past invalid starting bytes for
a UTF-8 sequence to fix a crash in the lexer.
2016-12-05 17:21:17 -08:00
Argyrios Kyrtzidis
fc678740db [code-completion] Avoid a tentantive parse when in code-completion mode and make sure CodeCompletionExpr has a token range.
The tentantive parse is used for diagnostic purposes but can cause code-completion to delay the same decl twice.
The range of CodeCompletionExpr was previously character range which invalidated invariants of the AST.

Fixes:
	validation-test/IDE/crashers_fixed/084-swift-parser-consumedecl.swift
	validation-test/IDE/crashers_fixed/104-swift-gettypeofcompletioncontextexpr.swift
2016-12-05 17:09:49 -08:00
Nathan Hawes
528f38aadb [code-completion] Fix crash in printParameterList when paramListTy is Error type rdar://problem/28867801 2016-12-05 15:16:13 -08:00
Argyrios Kyrtzidis
b0705b455a [code-completion] Fix assertion hit when calling 'DeclContext::getResilienceExpansion()' with invalid code
Fixes:
	validation-test/IDE/crashers/074-swift-valuedecl-geteffectiveaccess.swift
	validation-test/IDE/crashers/095-swift-declcontext-getresilienceexpansion.swift
2016-12-05 14:39:53 -08:00
swift-ci
796994cd80 Merge pull request #6080 from akyrtzi/fix-crash-014 2016-12-05 13:30:31 -08:00
Argyrios Kyrtzidis
f548c2ba52 [code-completion] Fix assertion hit when completing after incomplete property.
Make sure to call getPtrOrNull() instead of get() directly.
2016-12-05 12:48:48 -08:00
swift-ci
159a1d93a2 Merge pull request #6077 from nkcsgexi/ide-crash-012 2016-12-05 12:29:03 -08:00
swift-ci
c14391de1f Merge pull request #6076 from benlangmuir/fix-040 2016-12-05 12:16:08 -08:00
Xi Ge
5699b5a1e0 Fixing /IDE/crashers/012-swift-mangle-mangler-manglecontext.swift 2016-12-05 11:55:21 -08:00
Ben Langmuir
1ca799bfda [code-completion] Fix crash in typeCheckConstructorBodyUntil with null nominal context
With erroneous code, such as in code-completion, it's not safe to assume
that the constructor is inside a nominal decl context.

rdar://problem/28867794
2016-12-05 11:52:18 -08:00
Ben Langmuir
9894eeda45 [code-completion] Fix crash with missing func body in type-checking
We already fail early on a missing body in normal type-checking, but we
missed the case where we call typeCheckAbstractFunctionBodyUntil
directly, as in code-completion.

rdar://problem/28822204
2016-12-05 10:42:56 -08:00
Doug Gregor
46e6a38e50 Mark three crashers as resolved 2016-12-01 15:25:43 -08:00
Slava Pestov
7b59e75d34 IDE: hasType() => hasInterfaceType() 2016-11-29 03:05:31 -07:00