Commit Graph

5778 Commits

Author SHA1 Message Date
Doug Gregor
47987cbcf9 [AST] Fix use-after-free due to a rogue getPointer().
ASan found this amusing stack-use-after-scope problem in the AST
that's been around for a long while. It was introduced when
`ModuleDecl::lookupConformance()` changed from returning an

    llvm::PointerIntPair<ProtocolConformance *, 2>

to an

    Optional<ProtocolConformanceRef>

In the former, `getPointer()` grabbed the `ProtocolConformance*`, which
was fine. In the latter, it produced a `ProtocolConformanceRef*`
pointing into a temporary value.

Fixes rdar://problem/31708629.
2017-04-24 08:35:52 -07:00
Doug Gregor
de66b0c25c [GSB] Warn about redeclarations of associated types from inherited protocols.
Introduce a warning about redeclaring the associated types from an
inherited protocol in the protocol being checked:

* If the new declaration is an associated type, note that the
  declaration could be replaced by requirements in the protocol's
  where clause.
* If the new declaration is a typealias, note that it could be
  replaced by a same-type constraint in the protocol's where clause.
2017-04-24 07:55:42 -07:00
swift-ci
c698197ae1 Merge remote-tracking branch 'origin/master' into master-next 2017-04-24 01:48:35 -07:00
Slava Pestov
b4aaaee956 AST: Fix crash in SubstitutionMap::dump() with empty SubstitutionMap
The SubstitutionMap type has a "null value" where there's no
generic signature and no entries. There's nothing to dump in
this case.
2017-04-24 00:52:10 -07:00
Slava Pestov
26aa02324b AST: Fix "concrete conformance under abstract conformance" hack for archetypes
This manifested as test/Prototypes/PatternMatching.swift failing
under 'ninja check-swift-validation-optimize'.

I'll add a test later if I have time to reduce a test case, but this
whole hack is hopefully going away soon anyway.

Fixes one of the three failures outlined in <rdar://problem/31780356>.
2017-04-24 00:52:10 -07:00
swift-ci
0bcb6b816c Merge remote-tracking branch 'origin/master' into master-next 2017-04-23 02:28:30 -07:00
Slava Pestov
620db5f74c AST: Narrower workaround for "concrete conformance under abstract conformance" bug
Instead of just falling back to module lookup any time conformance
substitution fails, only do it in the case we know doesn't work.

This should shake out some more bugs, hopefully without causing
too much pain.
2017-04-23 01:49:01 -07:00
Slava Pestov
c89ebec356 AST: Fix ProtocolConformanceRef::subst() with self-conforming existentials 2017-04-23 01:49:01 -07:00
Slava Pestov
7b8e26b621 AST: Remove unnecessary canonicalization step in SubstitutionMap::lookupConformance() 2017-04-23 01:49:01 -07:00
Slava Pestov
a8452b4076 AST: Fix crash in ProtocolConformance::subst() when specializing with dynamic Self
Looking up the conformance @dynamic_self C<T> : P simply returns
the normal conformance C<T> : P.

If we later apply a substitution map to the conformance to
specialize T, we would call isSpecialized() on the substituted
type, which would return false. We would then hit an assertion
because the type type @dynamic_self C<Int> is not equal to the
(erroneously unsubstituted) conformance type C<T>.

Tweak the logic slightly to avoid this.
2017-04-23 01:49:00 -07:00
swift-ci
f9243286d1 Merge remote-tracking branch 'origin/master' into master-next 2017-04-22 22:48:29 -07:00
Doug Gregor
facf1996b1 [Clang importer] Don't transfer IBAction attributes that don't make sense.
Fixes an error emitted on declarations imported from Objective-C,
rdar://problem/31776315.
2017-04-22 21:38:23 -07:00
swift-ci
6abdee2a39 Merge remote-tracking branch 'origin/master' into master-next 2017-04-21 22:08:31 -07:00
Slava Pestov
2aba021c6e IDE: Don't use Objective-C USRs for AnyObject
It's not a real @objc protocol.
2017-04-21 20:36:32 -07:00
swift-ci
4ef7b46971 Merge remote-tracking branch 'origin/master' into master-next 2017-04-21 18:08:32 -07:00
Joe Groff
3d178be169 Merge pull request #8875 from jckarter/keypaths
Keypaths
2017-04-21 17:51:17 -07:00
swift-ci
723137a890 Merge remote-tracking branch 'origin/master' into master-next 2017-04-21 12:28:43 -07:00
Arnold Schwaighofer
8979fcc4d9 Merge pull request #8868 from aschwaighofer/fix_repl_for_late_import_Foundation_and_cgfloat
ASTContext: Add CGFloat as a trivial representable kind even if we loaded CoreGraphics later
2017-04-21 12:24:07 -07:00
Joe Groff
f887044f01 Fix AST printer of generic signatures to consider depths of generic parameters at…depth
We would consider types that structurally contain generic parameters as being depthless, leading to same-type requirements being printed at the wrong depth, defeating the SIL parser. Superclass constraints can also involve a generic base class referring to generic parameters at depth.
2017-04-21 11:49:09 -07:00
swift-ci
80534d3de2 Merge remote-tracking branch 'origin/master' into master-next 2017-04-20 16:28:32 -07:00
swift-ci
930c488ff6 Merge pull request #8893 from practicalswift/gardening-20170420b 2017-04-20 16:18:09 -07:00
swift-ci
4e7ffb6e32 Merge remote-tracking branch 'origin/master' into master-next 2017-04-20 15:48:31 -07:00
Doug Gregor
583d567705 Merge pull request #8888 from DougGregor/the-subsequence-of-my-subsequence
[Stdlib] For Collections, the SubSequence of a Subsequence is SubSequence
2017-04-20 15:46:37 -07:00
Doug Gregor
65c8334b99 [GSB] Hack: self-derived sources are showing up very late; ignore them.
There's a more pervasive issue here that needs further study;
essentially, we can end up with self-derived sources getting
reinjected later, and will either need to avoid that reinjection or
need to expand what this localized hack does, filtering out
self-derived constraints when we enumerate requirements.
2017-04-20 13:11:21 -07:00
swift-ci
8932679fa1 Merge remote-tracking branch 'origin/master' into master-next 2017-04-20 13:08:31 -07:00
practicalswift
797c2d8118 [gardening] Fix end of namespace comments 2017-04-20 22:01:01 +02:00
Arnold Schwaighofer
599cca2f1b ASTContext: Add trivially representable types even if we loaded their library later
Add CGFloat (and other types that this applies to) as a trivial type even after
the one-time initialization of the ForeignRepresentableCache.

This allows

  let str = ""
  import Foundation
  let pt = CGPoint(x: 1.0, y: 2.0)

to work.

Before we would populate the cache the first time on the first line "let str =
..." and because the CoreGraphics module was not loaded we would not add CGFloat
as a trivial type. When we come to query for CGFloat on the third line we would
return NSNumber instead of CGFloat as a type and that would crash IRGen.

rdar://31610342
2017-04-20 09:35:06 -07:00
practicalswift
5b9267b8b4 [gardening] Use override as appropriate 2017-04-20 13:47:10 +02:00
practicalswift
a596961187 [gardening] Make parameter name comments match actual parameter names 2017-04-20 13:47:10 +02:00
practicalswift
431e5a1440 [gardening] Use consistent end of namespace comments 2017-04-20 13:47:10 +02:00
swift-ci
faa74d7167 Merge remote-tracking branch 'origin/master' into master-next 2017-04-20 01:48:41 -07:00
Slava Pestov
16b033c111 Merge pull request #8876 from slavapestov/subclass-existentials-sema-casts
Update Sema cast checks for subclass existentials... and more!
2017-04-20 01:28:53 -07:00
swift-ci
b733669ef5 Merge remote-tracking branch 'origin/master' into master-next 2017-04-20 01:08:30 -07:00
swift-ci
0f4ebfd66e Merge pull request #8593 from DougGregor/stdlib-se-0142 2017-04-20 00:49:04 -07:00
Slava Pestov
f4b91cd118 AST: Remove unused 'resolver' argument from TypeBase::getSuperclass() 2017-04-20 00:37:38 -07:00
Doug Gregor
a926beab5b [GSB] Hack to limit recursion in the type graph.
This stops after 5 recurrences of the same associated type. It is a
gross hack and a terrible idea, here as a placeholder to prevent us
from running off the rails in ill-formed code. This will go away when
we get further along the path with recursive protocol constraints.
2017-04-20 00:09:23 -07:00
Doug Gregor
b91bd28aba [GSB] Use precise potential-archetype identity when forming protocol-requirement sources.
When we’re determining what type should be used to key a ProtocolRequirement based on the source’s potential archetype and the target’s potential archetype, use potential archetype identity (==) rather than equivalence-class membership to cover the basis case. This ensures that interesting identity relationships in the enclosing context (e.g., the current GenericSignatureBuilder) don’t cause us to compute incorrect stored types.
2017-04-19 23:15:32 -07:00
Joe Groff
595e0e4ede Merge branch 'master' into keypaths 2017-04-19 18:38:24 -07:00
swift-ci
edf0e6ed66 Merge remote-tracking branch 'origin/master' into master-next 2017-04-19 11:28:45 -07:00
Graydon Hoare
6a94c9fb9e Merge pull request #8735 from graydon/rdar-30959593-operators-defeat-incrementality
Attribute @_implements & deriving enum equality not-named ==
2017-04-19 11:18:55 -07:00
Doug Gregor
eba4affe3e [GSB] Don’t drop derived-via-concrete constraints too early.
When computing the connected components of within an equivalence class (based on derived same-type requirements), we might need derived-via-concrete constraints to maintain connectedness of the larger graph. Therefore, delay their removal until after we’ve computed connected components.
2017-04-19 08:42:05 -07:00
Doug Gregor
b676e43889 [GSB] Use RequirementSource::isProtocolRequirement() more. 2017-04-19 08:42:05 -07:00
Doug Gregor
e48f4191ca [GSB] Add EquivalenceClass::dump(). NFC 2017-04-19 08:42:05 -07:00
swift-ci
a38445389f Merge remote-tracking branch 'origin/master' into master-next 2017-04-19 00:08:33 -07:00
Doug Gregor
8584e97408 [AST] Sink ProtocolConformance::getWitness() down into NormalProtocolConformance.
NormalProtocolConformance has the only correct implementation of this
functionality. Instead, providing a safer getWitnessDecl() that
doesn't promise substitutions that are incorrect (and not actually
used by any clients).
2017-04-18 23:35:24 -07:00
Graydon Hoare
c25210f6eb Move IsUserAccessible bit from VarDecl up to ValueDecl (and adjust bits). 2017-04-18 23:21:43 -07:00
Doug Gregor
d9af96ffe4 [AST] Remove more interface-type redundancy from ProtocolConformance. 2017-04-18 17:15:15 -07:00
Doug Gregor
4da11aab58 [AST] Teach SpecializedProtocolConformance to profile its substitutions.
Otherwise, we could theoretically get collisions, although they are
quite unlikely to matter in practice.
2017-04-18 17:15:15 -07:00
Doug Gregor
ebdd56a1f0 [AST] Eliminate the "interface type" from protocol conformances.
We don't need this notion.
2017-04-18 17:15:15 -07:00
swift-ci
8b5ed16f83 Merge remote-tracking branch 'origin/master' into master-next 2017-04-18 16:48:30 -07:00