Commit Graph

22465 Commits

Author SHA1 Message Date
Roman Levenstein
1494d155c6 Don't sink open_existential instructions.
We don't sink open_existential_* instructions, because there may be some instructions depending on them, e.g. ametatype_inst, etc. But this kind of dependency cannot be expressed in SIL as a use yet. As a result, sinking open_existential may break the invariant that these instructions should dominate their uses.
2016-05-12 12:05:49 -07:00
Roman Levenstein
2eff3a1e9b Do not hoist metatype instructions with opened existentials.
Hoisting this instructions may break the invariant that each such instruction should be dominated by an open_existential instruction.
2016-05-12 12:05:20 -07:00
Erik Eckstein
db288e958b SimplifyCFG: fix a crash in debug output 2016-05-12 08:38:38 -07:00
Slava Pestov
6196ad4e0b SIL: Teach SILVerifier::isLoweringOf() about DynamicSelfType
The concrete type of an existential might involve dynamic Self
in some cases.

Fixes <rdar://problem/22003864>.
2016-05-11 23:43:31 -07:00
Doug Gregor
3650ce8ecd SE-0064 / SR-1239: Fix-Its for string-literal selectors naming property accessors.
When we see a string literal used to initializer a Selector, and that
string literal names the selector for the getter or setter of an
Objective-C property, suggest #selector(getter: ...) or

This completes SE-0064. Big thanks for Alex Hoppen (@ahoppen) for his
contributions here.
2016-05-11 23:03:37 -07:00
Alex Hoppen
a0a74aeb46 SE-0064 / SR-1239: Code completion for #selector of property getters/setters.
Implement basic code completion support for #selector with property
getters/setters. The vast majority of this implementation comes from
Alex Hoppen (@ahoppen), with only a handful of my own tweaks. Alex has
more interesting ideas on improving this that I wasn't quite ready to
commit to, so this is more basic than the overall goal.
2016-05-11 23:03:37 -07:00
Slava Pestov
c552b3c614 Sema: Remove unnecessary cast that leading to crash when subscript witness was mislabeled
Fixes <rdar://problem/22981205>.
2016-05-11 22:51:32 -07:00
Slava Pestov
3bc64f37b8 Sema: Re-purpose unavailable override checking code for protocol conformances
This was easy with a bit of refactoring, but eventually I'd love to
converge override checking and witness checking logic a bit more.

Fixes <rdar://26183366>.
2016-05-11 22:51:32 -07:00
swift-ci
954ea0eb99 Merge pull request #2488 from compnerd/return-type 2016-05-11 22:36:29 -07:00
swiftix
4eaed25a5e Merge pull request #2491 from swiftix/devirtualizer-fixes
Small fixes for the sil-devirtualizer
2016-05-11 21:35:46 -07:00
Joe Groff
04d5a6a19f Merge pull request #2487 from jckarter/r26210805
SILGen: Partial applications of methods don't lie about their nonnull-ness.
2016-05-11 21:04:14 -07:00
swift-ci
ebd20fb790 Merge pull request #2493 from rudkx/callee-analysis 2016-05-11 20:27:40 -07:00
Jordan Rose
d72d0942fe Handle renaming for "unavailable in Swift" decls.
...like the "Ref" forms of imported CF types.

rdar://problem/25883961
2016-05-11 17:29:16 -07:00
Mark Lacey
921dededad Use a bump pointer allocator in the callee set creation.
Shaves about 19% of the time from the construction of these sets. The
SmallVector size was chosen to minimize the number of dynamic
allocations we end up doing while building the stdlib. This should be a
reasonable size for most projects, too. It's a bit wasteful in space,
but the total amount of allocated space here is pretty small to begin
with.
2016-05-11 17:07:27 -07:00
Alex Hoppen
d2e045c8b5 Implement SE-0064 / SR-1239: #selector for property getters and setters
Implements the core functionality of SE-0064 / SR-1239, which
introduces support for accessing the Objective-C selectors of the
getter and setter of an @objc property via #selector(getter:
propertyName) and #selector(setter: propertyName).

Introduce a bunch of QoI around mistakes using #selector to refer to a
property without the "getter:" or "setter:", using Fix-Its to help the
user get it right. There is more to do in this area, still, but we
have an end-to-end feature working.

Much of the implementation and nearly all of the test cases are from
Alex Hoppen (@ahoppen). I've done a bit of refactoring, simplified the
AST representation, and replaced Alex's custom
expression-to-declaration logic with an extension to the constraint
solver. The last bit might be short-lived, based on swift-evolution
PR280, which narrows the syntax of #selector considerably.
2016-05-11 16:51:27 -07:00
Roman Levenstein
73b6a38edc [sil-devirtualizer] Do not perform a speculative devirtualization for no-opt callees. 2016-05-11 16:28:50 -07:00
Jordan Rose
670f7b5b6d Optionals of imported value types are not @objc.
While we could bridge 'NSRange' to 'NSRange' and 'NSRange?' to
'NSValue * _Nullable', that (a) would be confusing, and (b) isn't
actually implemented at the moment. Fix my mistake in 477933b to
start accepting these.
2016-05-11 16:18:24 -07:00
John McCall
e75dae491e Don't diagnose failures to call symmetrically-typed binary operators
as a failure to convert the individual operand, since the operator
is likely conceptually generic in some way and the choice of any
specific overload is probably arbitrary.

Since we now fall back to a better-informed diagnostics point, take
advantage of this to generate a specialized diagnostic when trying to
compare values of function type with ===.

Fixes rdar://25666129.

This reverts commit 073f427942,
i.e. it reapplies 35ba809fd0 with a
test fix to expect an extra note in one place.
2016-05-11 16:09:28 -07:00
Ted Kremenek
073f427942 Revert "Don't diagnose failures to call symmetrically-typed binary operators"
This reverts commit 35ba809fd0.
2016-05-11 15:53:24 -07:00
Roman Levenstein
28f7b09c1d Add a more strict check for conversions between metatypes.
Now it is more inline with the check performed by the verifier.
2016-05-11 15:25:08 -07:00
Roman Levenstein
f200dfdc72 Addresses are always ABI compatible.
Now it is more inline with the check performed by the verifier.
2016-05-11 15:25:08 -07:00
John McCall
35ba809fd0 Don't diagnose failures to call symmetrically-typed binary operators
as a failure to convert the individual operand, since the operator
is likely conceptually generic in some way and the choice of any
specific overload is probably arbitrary.

Since we now fall back to a better-informed diagnostics point, take
advantage of this to generate a specialized diagnostic when trying to
compare values of function type with ===.

Fixes rdar://25666129.
2016-05-11 15:10:25 -07:00
Jordan Rose
18c7592863 Add frontend option "-warn-long-function-bodies=<N>".
This is a /slightly/ more user-friendly option than
-debug-time-function-bodies; pass it a limit in milliseconds and
the compiler will warn whenever a function or multi-statement closure
takes longer than that to type-check.

Since it's a frontend option (and thus usually passed with -Xfrontend),
I went with the "joined" syntax as the common case. The usual "separate"
syntax of "-warn-long-function-bodies <N>" is also available.

As a frontend option, this is UNSUPPORTED and may be removed without
notice at any future date.

Additional caveats:
- Other parts of type-checking not measured by this may also be slow.
- May include first-use penalties (i.e. "this is slow because it's
  the first function that references an imported type, which causes
  many things to be imported")
- Does not report anything whatsoever about other phases of compilation
  (SILGen, optimization, IRGen, assembly emission, whatever).
- Does not catch anything accidentally being type-checked multiple times
  (a known issue for initial value expressions on properties).
2016-05-11 15:08:17 -07:00
Saleem Abdulrasool
a0602badff IRGen: mark the end point at unreachable
warning: control may reach end of non-void function [-Wreturn-type]

Add a llvm_unreachable to indicate that the function will always return or fail
more obviously rather than returning a garbage value.
2016-05-11 15:05:25 -07:00
Joe Groff
3ce22b8955 SILGen: Partial applications of methods don't lie about their nonnull-ness.
Fixes rdar://problem/26210805.
2016-05-11 14:37:09 -07:00
Argyrios Kyrtzidis
6b8ee42248 [fixcode] Accept the fixit for adding bang to unwrap optional.
This is useful for getting fixits for the IOU handling changes.
2016-05-11 13:58:24 -07:00
Argyrios Kyrtzidis
e5821519a4 [fixcode] Accept the warning fixit for single argument function types requiring parentheses. 2016-05-11 13:33:00 -07:00
eeckstein
f3b0010d41 Merge pull request #2462 from eeckstein/swift-merge-funcs
Add an LLVM pass to merge similar functions.
2016-05-11 12:19:12 -07:00
Ted Kremenek
942e524285 Revert "SE-0036: Requiring Leading Dot Prefixes for Enum Instance Member Implementations" (#2477) 2016-05-11 11:02:37 -07:00
Erik Eckstein
f0022a5aac Add an LLVM pass to merge similar functions.
It's like LLVM's MergeFunctions pass, except that it can also merge functions which differ by some constants.
The intention is to merge specialized functions which only differ by metadata lookups. But it can also merge other types of functions.
It gives ~7% code size reducation for the stdlib.

There are still some open TODOs, e.g. to share common code with LLVM's MergeFunctions pass (currently much code is just copied).
2016-05-11 09:46:46 -07:00
Jordan Rose
14a7334aef Merge pull request #2224: SE-0036: Requiring Leading Dot Prefixes for Enum Instance Member Implementations
from @ahoppen
2016-05-10 19:58:09 -07:00
David Farler
414cfe7487 Minor changes to keyword-as-identifier diagnostics
- Remove stray newline
- Adjust wording when recommending backticks for a keyword identifier
- Provide fix-it when encountering a keyword as an identifier

rdar://problem/25761380
2016-05-10 14:49:21 -07:00
Jordan Rose
bd18590686 Override checking: believe full-name matches over types. (#2466)
This at least emits notes when someone overrides something but
gets the types a little wrong (more than just mismatched optionals,
as handled in d669d152).

Part of rdar://problem/26183575
2016-05-10 14:39:40 -07:00
Joe Groff
063e755e7e Merge pull request #2456 from jckarter/sr1323
AST: More robust rewrite of ProtocolConformance::getInheritedConformance.
2016-05-10 12:42:04 -07:00
Doug Gregor
aec6ea71a0 Merge pull request #2463 from milseman/newtype
[SILGen] Recognize swift_newtype-ed CF foreign class types
2016-05-10 12:00:08 -07:00
Jordan Rose
07b7e38429 Merge #2457 "Fix @objc checking for optional value types"
We previously treated 'NSFoo?' as ObjC-compatible simply because
'NSFoo' was an imported type or was marked '@objc'.
2016-05-10 11:39:27 -07:00
David Farler
b4dbdc49c2 Provide a more specific diag when using keywords as identifiers
When declaring a function like func repeat(){}, the diagnostic is
"expected an identifier" but 'repeat' looks like a reasonable
identifier at first glance, so actually say why it isn't.

rdar://problem/25761380
2016-05-10 11:08:13 -07:00
Joe Groff
01f98fa4dc AST: More robust rewrite of ProtocolConformance::getInheritedConformance.
A recursive implementation is cleaner, and more cleanly preserves class inheritance and generic specialization through the operation to get the refined protocol conformance. Fixes SR-1323.
2016-05-10 10:41:16 -07:00
Michael Ilseman
9dd6217a14 [SILGen] Recognize swift_newtype-ed CF foreign class types
Teach isClangTypeMoreIndirectThanSubstType about swift_newtype-ed
typedefs, which may be of CF foreign class type. In these cases, we
should reason about the underlying, wrapped type. Includes
refactoring of common logic and tests.
2016-05-10 10:21:15 -07:00
Doug Gregor
e7c81c527c Bail out earlier when we try to recursively validate a generic signature.
Fixes one of the crashers I recently regressed.
2016-05-09 23:22:54 -07:00
Doug Gregor
945831023a [SILGen] Eliminate SILGen-specific handling of imported, synthesized conformances
Now that Sema communicates its "used" conformances to SILGen, there is
no reason for SILGen to separately look for "used" conformances. NFC
2016-05-09 20:59:30 -07:00
Doug Gregor
dfc8d5a5f8 [Sema/SILGen] Track per-source-file "used" conformances to reference in SILGen
Sema was dutifully tracking conformances that were "used" as part of
type checking, so it could make sure that those conformances got
completed for SILGen to use. However, this information never actually
made it to SILGen, which included its own (more conservative, not
broad enough) heuristics for finding "used" conformances. Teach Sema
to record conformances within the appropriate source file, and have
SILGen reference the conformances when it emits SIL for the source
file.
2016-05-09 20:43:12 -07:00
Jordan Rose
54f07d3e36 Refine e1ed30576 to use existing AST queries.
Joe asked me at the time if such a thing existed, and I had forgotten
about this one. This should be effectively NFC because any other type
should be filtered out by Sema.
2016-05-09 19:51:36 -07:00
Jordan Rose
477933be1d Fix @objc checking for optional value types.
We previously treated 'NSFoo?' as ObjC-compatible simply because 'NSFoo'
was an imported type or was marked '@objc'.
2016-05-09 19:44:55 -07:00
Jordan Rose
4d9e8d9212 Constify several DeclContext parameters. NFC. 2016-05-09 17:51:46 -07:00
Doug Gregor
d93f0d1f01 Merge pull request #2454 from milseman/newtype
[swift_new_type] Audited and un-audited CF reference types
2016-05-09 16:41:44 -07:00
Jordan Rose
f952d2ee3a Provide fix-its when overriding something that's been renamed.
This is the second half of the previous commit. The most common case
of this will be due to the new rules for imported Objective-C API,
but it will also catch things like "I forgot to make the first
parameter not have an argument label".
2016-05-09 16:02:35 -07:00
Jordan Rose
e67fe08a26 Improve message when trying to override an unavailable member. 2016-05-09 16:02:35 -07:00
Michael Ilseman
c62eb2e5aa [swift_newtype] Handle un-audited CF types
Special case logic for CF types, which may be coming in as
unmanaged. In this case, we will use audit information if present to
import with the new type, otherwise we have to fall back to
Unmanaged<CF...>.

We still import global variables that must be unmanaged onto the new
type, though they keep their unmanaged types. This helps to
consolidate the definitions, as well as make future migration easier
if they get audited.

Test cases included.
2016-05-09 14:26:26 -07:00
Jordan Rose
135e9b99f1 [PrintAsObjC] Emit Xcode-7-compatible class properties.
There's not yet a released version of Apple Clang that supports
Objective-C class properties, so make sure the generated header
guards any uses of them with a __has_feature check, and provides
declarations of the accessor methods as well.

https://bugs.swift.org/browse/SR-1442
2016-05-09 14:13:57 -07:00