Commit Graph

285 Commits

Author SHA1 Message Date
Doug Gregor
f2e66d1cd7 Break recursion when deserializing constrained protocol extensions.
When reading the generic parameters of a constrained protocol
extension, cross-refencing an associated type would perform name
lookup into the protocol extension itself, causing fatal recursion
during deserialization. Fixed by avoiding additional deserialization
when looking for an associated type. Fixes rdar://problem/20812303.

Swift SVN r28228
2015-05-06 23:56:58 +00:00
Joe Groff
7b2a6e5e8d IRGen: Emit the "done" check for Builtin.once inline.
This matches how dispatch_once works in C, dramatically cutting the cost of a global accessor by avoiding the runtime call in the hot path and giving the global a unique branch for the CPU to predict away. For now, only do this for Darwin; non-ObjC platforms don't necessarily expose their "done" value as ABI like ours do.

While we're here, change "once" to take a thin function pointer. We don't ever emit global initializers with context dependencies, and this simplifies the runtime glue between swift_once and dispatch_once/std::call_once a bit.

Swift SVN r28166
2015-05-05 15:35:57 +00:00
Jordan Rose
413cfa245d [test] Rename union.swift to enum.swift.
They haven't been "unions" for a long, long time.

Swift SVN r28132
2015-05-04 21:57:01 +00:00
Jordan Rose
3cf2915dd0 [serialization] Force-serialize derived decls for local types too.
Otherwise, when a file contains a local enum, the decl for its synthesized
== ends up disappearing, and we get a dangling XREF.

rdar://problem/20429123

Swift SVN r28131
2015-05-04 21:57:00 +00:00
Doug Gregor
793b3326af Implement the new rules for argument label defaults.
The rule changes are as follows:
  * All functions (introduced with the 'func' keyword) have argument
  labels for arguments beyond the first, by default. Methods are no
  longer special in this regard.
  * The presence of a default argument no longer implies an argument
  label.

The actual changes to the parser and printer are fairly simple; the
rest of the noise is updating the standard library, overlays, tests,
etc.

With the standard library, this change is intended to be API neutral:
I've added/removed #'s and _'s as appropriate to keep the user
interface the same. If we want to separately consider using argument
labels for more free functions now that the defaults in the language
have shifted, we can tackle that separately.

Fixes rdar://problem/17218256.

Swift SVN r27704
2015-04-24 19:03:30 +00:00
Joe Groff
fd138326ba SIL: Reject '@cc', '@thin', and '@objc_block' in SIL.
Since it's an internal interface, there's no need for migration in SIL.

Swift SVN r27610
2015-04-22 22:40:08 +00:00
Nadav Rotem
32211041d2 Rename @semantics -> @_semantics.
Swift SVN r27533
2015-04-21 17:10:06 +00:00
Dmitri Hrybenko
736f17cda3 Annotate tests that require ObjC runtime
Swift SVN r27420
2015-04-17 06:10:56 +00:00
Joe Groff
e4e0f35aed IRGen: Implement an @_alignment attribute.
This is an internal-only affordance for the numerics team to be able to work on SIMD-compatible types. For now, it can only increase alignment of fixed-layout structs and enums; dynamic layout, classes, and other obvious extensions are left to another day when we can design a proper layout control design.

Swift SVN r27323
2015-04-15 17:23:30 +00:00
Erik Eckstein
03d393ef5c Re-apply r27206: Convert all external function definitions to declarations when compiling with -Onone.
... with disabled test 1_stdlib/Bit.swift for ios.

Most likely the problem of 1_stdlib/Bit.swift (only on armv7) is just uncovered by this change.
Unfortunately I have no possibility to debug the problem on a device. Therefore I filed rdar://problem/20521110




Swift SVN r27274
2015-04-14 07:38:28 +00:00
Joe Groff
c0a2994564 AST: Start printing function types with @convention instead of old attributes.
And update tests to match.

Swift SVN r27262
2015-04-13 22:51:34 +00:00
Michael Gottesman
75ea31dba9 Turn on +0 self by default.
The only caveat is that:

1. We do not properly recognize when we have a let binding and we
perform a guaranteed dynamic call. In such a case, we add an extra
retain, release pair around the call. In order to get that case I will
need to refactor some code in Callee. I want to make this change, but
not at the expense of getting the rest of this work in.

2. Some of the protocol witness thunks generated have unnecessary
retains or releases in a similar manner.

But this is a good first step.

I am going to send a large follow up email with all of the relevant results, so
I can let the bots chew on this a little bit.

rdar://19933044

Swift SVN r27241
2015-04-12 22:23:37 +00:00
Greg Parker
a42837bee2 Revert r27206.
This broke test 1_stdlib/Bit.swift on armv7.


Swift SVN r27236
2015-04-11 07:28:41 +00:00
Jordan Rose
746391c1fb [test] Weaken test for r27087 to handle our separate-overlay build.
We can't know the number of search paths provided to %target-swift-build
in advance, but we /can/ make sure they're not duplicated.

Follow-up to rdar://problem/20291720

Swift SVN r27218
2015-04-10 22:25:57 +00:00
Erik Eckstein
c3b253d305 Convert all external function definitions to declarations when compiling with -Onone.
This avoids that an unoptimized imported function is linked instead the optimized version from the stdlib.
rdar://problem/20485253

It gives considerable performance improvmenets for some benchmarks with -Onone. E.g.
PopFrontUnsafePointer: +281%
ArrayOfPOD: +92%
StrComplexWalk: +91%
ArrayOfGenericPOD: +61%
Several others are within the range of +10% to +30%.

For the implementation I added runSILPassesForOnone() in Passes.cpp.
Here we can add other optimizations for -Onone in the future.



Swift SVN r27206
2015-04-10 09:53:17 +00:00
Joe Groff
7be9c21c8b SILGen: Rework OpenExistentialExpr emission to better handle guaranteed contexts.
Try to emit the existential as a guaranteed value, and if we succeed, only +1 the bound opaque value if it's needed as a consumed value. This lets us avoid retaining or copying the existential if the existential can be produced and its contained value consumed at +0.

Swift SVN r27200
2015-04-10 02:58:57 +00:00
Jordan Rose
700ca49f62 [test] Make sure tests that use a mock SDK don't pick up external overlays.
...take two.

rdar://problem/20474694

Swift SVN r27152
2015-04-09 01:02:30 +00:00
Mark Lacey
bd14e0cc4c Remove -sil-devirt-threshold frontend option.
This was used by "deep devirtualization", which is no longer around, so
it is currently ignored.

Swift SVN r27138
2015-04-08 21:53:47 +00:00
John McCall
79cc258f65 Lower 'throws' to an error result.
Swift SVN r27108
2015-04-08 00:09:29 +00:00
Jordan Rose
f0d529719c Deduplicate search paths.
Now that we can pick up search paths from frameworks (necessary to debug
them properly), we can end up with exponential explosions leading to the
same search path coming up thousands of times, which destroys compilation
time /and/ debugger responsiveness. This is already hitting people with
frameworks compiled for app extensions (due to a mistaken approximation
of whether or not something is a framework), but we're turning this on for
all frameworks in the immediate future.

rdar://problem/20291720

Swift SVN r27087
2015-04-07 18:24:12 +00:00
Joe Pamer
9781bda6a0 Introduce support for serializing and deserializing throwing function types.
Swift SVN r27026
2015-04-05 19:33:03 +00:00
Doug Gregor
10934bb273 Start requiring 'final' on members of protocol extensions.
Part of rdar://problem/11735843.

Swift SVN r26941
2015-04-03 18:09:24 +00:00
Chris Willmore
690daa539a Back out changes for in-place methods/operators from Xcode 7.
This reverts commits r26508, r26545, and r26576.

Swift SVN r26900
2015-04-02 21:14:28 +00:00
Jordan Rose
1ffd301e2e [test] Add a testability test that mimics debugging a unit test.
If module A is testable,
and module B depends on the testable bits of module A,
module C should still be able to use B.

Swift SVN r26836
2015-04-01 23:33:10 +00:00
Jordan Rose
e9074c4cb8 [serialization] Use cross-references for cross-file conformance references.
...rather than re-emitting the conformance in the current file, and then
trying to cross-reference the decl context that owns the conformance, which
may be an extension.

rdar://problem/20383044

Swift SVN r26822
2015-04-01 21:18:44 +00:00
Jordan Rose
960a4f164a Add LangOptions::EnableTargetOSChecking, so that LLDB can ignore OS mismatches.
In particular, this is problematic when libraries are loaded dynamically, and
may have newer deployment targets than the main executable.

Swift SVN r26786
2015-04-01 01:12:29 +00:00
Doug Gregor
e519eb3059 Add a simple test for (de-)serialization of protocol extensions.
Swift SVN r26772
2015-03-31 18:56:05 +00:00
Mark Lacey
1f23ff27bb Remove the transparent bit from apply instructions.
We no longer need or use it since we can always refer to the same bit on
the applied function when deciding whether to inline during mandatory
inlining.

Resolves rdar://problem/19478366.

Swift SVN r26534
2015-03-25 08:36:34 +00:00
Mark Lacey
3bb5122aaa During mandatory inlining, look at isTransparent() on the callee.
Mandatory inlining normally only looks at isTransparent() on the apply
instruction. This change makes it also inline in cases where the apply
is not marked isTransparent(), but the applied function is. This can
arise in cases where previous transparent inlining exposes new
opportunities, e.g. when a transparent function is passed as a parameter
to another transparent function.

Resolves rdar://problem/19419019.

Swift SVN r26516
2015-03-25 02:48:11 +00:00
Chris Willmore
1ee6f7e67c Implement syntax changes for in-place methods.
Rename 'assignment' attribute of infix operators to 'mutating'. Add
'has_assignment' attribute, which results in an implicit declaration of
the assignment version of the same operator. Parse "func =foo"
declaration and "foo.=bar" expression. Validate some basic properties of
in-place methods.

Not yet implemented: automatic generation of wrapper for =foo() if foo()
is implemented, or vice versa; likewise for operators.

Swift SVN r26508
2015-03-25 00:22:41 +00:00
Jordan Rose
98fd4f6aa9 Delete obsoleted test from previous commit.
rdar://problem/20274745

Swift SVN r26495
2015-03-24 18:45:33 +00:00
Jordan Rose
69dc123a9f Don't diagnose failing to load an autolinked library in immediate mode.
Otherwise, we can run into trouble when the SDK is out of sync with the
host OS.

rdar://problem/20274745

Swift SVN r26494
2015-03-24 18:44:55 +00:00
Doug Gregor
55589c0947 Remove the prohibition on public extensions of generic types.
Now that we've separated out archetypes, (de-)serialization of such
extensions is working. Fixes rdar://problem/16974298.

Swift SVN r26484
2015-03-24 06:48:27 +00:00
Jordan Rose
2795a472f8 App extension modules aren't distributed publicly.
Therefore, serialize options for debugging, and expose their internal classes
in the generated header.

rdar://problem/20214578

Swift SVN r26345
2015-03-20 01:36:31 +00:00
Doug Gregor
a2a1862202 Start using getLocalConformances() for serialization.
The lit and testsuite changes are hacks to work around the problems with the -enable-source-import model. Some day, we’ll get a “real” mock SDK with compiled overlays so these hacks can go away.

Swift SVN r26327
2015-03-19 22:10:09 +00:00
Joe Groff
de28f9c49c Update tests for added _ErrorType requirements.
Swift SVN r26296
2015-03-19 03:52:40 +00:00
Jordan Rose
c6739b6b6c Add the -enable-testing flag, and serialize it.
This flag indicates that internal APIs within the module should be made
available to client code for testing purposes. Currently does nothing.

Not ready for developer consumption yet, ergo a hidden frontend-only flag.

Part of testability (rdar://problem/17732115)

Swift SVN r26292
2015-03-19 02:20:38 +00:00
Joe Groff
fdde2a8e99 SIL: Add instructions for boxed existential operations.
Parsing and serialization for {Alloc,Open,Dealloc}ExistentialBox instructions to represent operations on ErrorType boxes.

Swift SVN r26145
2015-03-15 03:32:37 +00:00
Joe Groff
962a87f444 SIL: Rename address-only existential instructions to '{init,deinit,open}_existential_addr'.
For better consistency with other address-only instruction variants, and to open the door to new exciting existential representations (such as a refcounted boxed representation for ErrorType).

Swift SVN r25902
2015-03-09 23:55:31 +00:00
Jordan Rose
bbb41c1b66 Use 'common' linkage for force-load symbols rather than 'weak_odr'.
As suggested by John. This results in the symbols being coalesced at static
link time into a single strong symbol in a built dylib. Fortunately we don't
care about the contents of these global symbols, so common linkage's
forced zero-initialization is fine. (Hey, C's tentative definitions are
useful for something after all.)

rdar://problem/20072051

Swift SVN r25804
2015-03-06 19:42:15 +00:00
Jordan Rose
e5b8ff9e84 Continue tweaking the wording of the ObjC selector conflict diagnostics.
Per feedback from Doug. More rdar://problem/19927828

Swift SVN r25740
2015-03-04 02:25:04 +00:00
Jordan Rose
c91952130f Wordsmith the errors for Objective-C selector conflicts.
Also, if warning about an accessor that comes from a stored property,
point to the property rather than the (implicit, source-location-less)
accessor decl.

Both of these changes are aimed at improving the presentation in Xcode.

rdar://problem/19927828

Swift SVN r25725
2015-03-03 23:25:46 +00:00
Xi Ge
95a431885b When printing the interfaces in a module, denit is not informative
. Thus, this change allows swift-ide-test to ignore deinit when printing
interfaces. Also, to ignore is the default setting. Attribut -skip-deinit
can switch it off.
rdar://19079711

Swift SVN r25608
2015-02-27 21:48:23 +00:00
Jordan Rose
82b9cf5a75 Re-apply "[test] Rely on the stdlib as little as possible."
Correctly, this time.

Swift SVN r25299
2015-02-14 18:57:46 +00:00
Ben Langmuir
5d9f0b9616 Revert "[test] Rely on the stdlib as little as possible."
This is breaking on the bots.

This reverts commit r25294

Swift SVN r25298
2015-02-14 17:36:50 +00:00
Jordan Rose
5ad7181663 [test] Rely on the stdlib as little as possible.
I can't get this to reproduce with anything more self-contained,
unfortunately: it seems that IntegerLiteralConvertible is the interesting
protocol, and the type has to come from the standard library.

Swift SVN r25294
2015-02-14 02:42:43 +00:00
Jordan Rose
55174867bd [Serialization] Use references for inherited conformances from other modules.
...rather than trying to serialize them again, which could lead to attempting
to cross-reference an ExtensionDecl, which can't be done.

rdar://problem/19794141

Swift SVN r25292
2015-02-14 02:09:19 +00:00
Dmitri Hrybenko
f43843f25c tests: use the new substitution for the mock SDK
This is required to correctly use the mock SDK when the SDK overlay is
built and tested separately.  (Otherwise, the mock SDK might not get
used, because the overlay SDK options would expand from the
%-substitution, appear first on the command line, and shadow the mock
SDK in the search path).

Swift SVN r25185
2015-02-11 18:57:29 +00:00
Joe Groff
63463f54ac SIL: Mangle the static-ness of declarations.
This lets us disambiguate the symbols for static and instance properties, and enables us to eventually leave the useless "self" type mangling out of method symbols. Fixes rdar://19012022 and dupes thereof, including crasher #1341.

Swift SVN r25111
2015-02-10 02:37:35 +00:00
Erik Eckstein
9dfd349faf Add a new Thunk-flag in SILFunction which specifies that a function is a thunk.
This will have an effect on inlining into thunks.
Currently this flag is set for witness thunks and thunks from function signature optimization.
No change in code generation, yet.



Swift SVN r24998
2015-02-05 16:45:05 +00:00