Commit Graph

818 Commits

Author SHA1 Message Date
Kevin Ballard
2530957bc6 Use shims for all calls to Dispatch APIs that take blocks
This ensures that blocks that come from `DispatchWorkItem`s will
function correctly.

The only exception is __dispatch_barrier_sync() as the block passed to
that call is not `@convention(block)` so it doesn't matter.

Fixes SR-2246.
2016-08-01 17:08:14 -07:00
Dave Abrahams
43652bebf7 [stdlib] Remove incorrect format specifier checks
String.init(format:locale:arguments:) contained a check to make sure
that the format string didn't try to format more arguments than were
actually passed.  However, the check didn't guarantee safety (since the
format specifiers didn't have to match the *type* of the passed
argument) and contained bugs such as
https://bugs.swift.org/browse/SR-1378.  Since the check was not a
guarantor of safety and was wrong, it is hereby removed.

If checks are to be reintroduced, they should both be correct and
guarantee complete safety.  Doing this check correctly is a nontrivial
job (the code in Clang to parse such specifiers is well over 500 lines),
and should be taken on as a distinct project.
2016-08-01 15:43:50 -07:00
Kevin Ballard
6fe9b13f12 Add fast path for queue.async(flags: .barrier)
Fixes SR-2248.
2016-08-01 14:58:30 -07:00
Daniel Duan
c9b73dacc2 [Sema] ban multi-arguments to tuple coercion
Implements part of SE-0110. Single argument in closures will not be accepted if
there exists explicit type with a number of arguments that's not 1.

```swift
let f: (Int, Int) -> Void = { x in } // this is now an error
```

Note there's a second part of SE-0110 which could be considered additive,
which says one must add an extra pair of parens to specify a single arugment
type that is a tuple:

```swift
let g ((Int, Int)) -> Void = { y in } // y should have type (Int, Int)
```

This patch does not implement that part.
2016-07-31 16:22:57 -07:00
Rintaro Ishizaki
58676616ea [Dispatch] .size to .stride 2016-07-30 18:24:06 +09:00
Dmitri Gribenko
382d215ad3 stdlib: SE-0101: remove the last few uses of old APIs (sizeof, alignof, strideof) 2016-07-30 00:38:18 -07:00
Joe Groff
c748ba6c12 Merge pull request #3870 from jckarter/no-bridged-default-literal-types
Sema: Don't try bridged classes as default literal types.
2016-07-29 22:16:53 -07:00
Robert Widmann
b79fa44da5 Merge pull request #3878 from CodaFi/decltype
[SE-0096] Implement type(of:)
2016-07-29 18:05:01 -07:00
Doug Gregor
b9363fe6bd [SE-0111] Enable SE-0111 by default. 2016-07-29 17:28:24 -07:00
Robert Widmann
4f465224ea Polish off uses of dynamicType in tests 2016-07-29 16:59:14 -07:00
Robert Widmann
14dc86cf15 Polish off uses of dynamicType in codebase 2016-07-29 16:58:40 -07:00
Michael Ilseman
04ad9feee6 [noescape by default] Add explicit @escaping as needed 2016-07-29 16:25:46 -07:00
Michael Ilseman
23990bf888 [noescape by default] Add explicit @escaping as needed 2016-07-29 16:16:01 -07:00
Dmitri Gribenko
99dffd7682 Merge pull request #3854 from rintaro/SE-0101-memorylayout
[SE-0101] Implement: Reconfiguring sizeof and related functions into a unified MemoryLayout struct - Part 1
2016-07-29 15:56:27 -07:00
Doug Gregor
8219d4f42b Merge pull request #3853 from milseman/noescape_by_default
SE-0103 Noescape by default
2016-07-29 15:27:52 -07:00
Joe Groff
11f03cd8b5 Sema: Don't try bridged classes as default literal types.
One last bit of SE-0072. We shouldn't fall back to bridged classes in the absence of type context for literals anymore. By itself, this kind of hoses the use of literals with NS types, but I think we can get most of the QoI back with overlay changes I plan to propose following this.
2016-07-29 15:18:31 -07:00
Dmitri Gribenko
621d3b7c66 Merge pull request #3827 from mwwa/libdispatch-data-leak
[libdispatch-data-leak] DisaptchData never calls destructor
2016-07-29 14:58:37 -07:00
Michael Ilseman
ccda8f33d1 [noescape by default] Proliferate @escaping
Adds an explicit @escaping throughout the standard library, validation
test suite, and tests. This will be necessary as soon as noescape is
the default for closure parameters.
2016-07-29 13:48:07 -07:00
Maxim Moiseev
a99221bfde [overlay] CryptoTokenKit (#3859)
This is work in progress
2016-07-29 12:39:37 -07:00
Devin Coughlin
8cb358195d Merge pull request #3797 from devincoughlin/dispatch_deprecation
[libdispatch] Fix deprecation annotations for macOS, watchOS.
2016-07-29 11:42:06 -07:00
Jordan Rose
b5003f4c48 Private members may not satisfy protocol requirements, ever. (#3842)
* Private members may not satisfy protocol requirements, ever.

...because by construction they can be invoked from outside of the
type.

Finishing up SE-0025 ('private' and 'fileprivate').

* Update docs and mark SE-0025 ('private' and 'fileprivate') as done!

There's still improvements we can make (see 508e825f), but the feature
is in place and should be working correctly.
2016-07-29 11:24:05 -07:00
Rintaro Ishizaki
06603c10bc [SE-0101] .size to .stride 2016-07-30 03:11:46 +09:00
Rintaro Ishizaki
091506315b [SE-0101] Implement: Reconfiguring sizeof and related functions into MemoryLayout struct
As of now:

* old APIs are just marked as `deprecated` not `unavaiable`. To make it
  easier to co-operate with other toolchain repos.
* Value variant of API is implemented as public @private
  `_ofInstance(_:)`.
2016-07-30 03:09:28 +09:00
Dmitri Gribenko
e5db796212 Merge pull request #3843 from atrick/rawptr-convert
Remove "illegal" UnsafePointer casts from the stdlib.
2016-07-28 22:40:16 -07:00
Dmitri Gribenko
4bed3391f7 Merge pull request #3849 from kballard/data_iterator
Implement a custom Data.Iterator
2016-07-28 22:27:36 -07:00
Andrew Trick
0b75ee975e Remove "illegal" UnsafePointer casts from the stdlib.
Update for SE-0107: UnsafeRawPointer

This adds a "mutating" initialize to UnsafePointer to make
Immutable -> Mutable conversions explicit.

These are quick fixes to stdlib, overlays, and test cases that are necessary
in order to remove arbitrary UnsafePointer conversions.

Many cases can be expressed better up by reworking the surrounding
code, but we first need a working starting point.
2016-07-28 20:42:23 -07:00
Tony Parker
d0720163ee Merge pull request #3769 from parkera/indexset_optional_find
IndexSet's find family of methods should have optional returns
2016-07-28 20:42:14 -07:00
Kevin Ballard
a021c89236 Implement a custom Data.Iterator
This iterator uses an inline 32-byte buffer so it doesn't have to call
copyBytes(to:count:) for every single byte. It results in an approximate
6x speedup on my computer.
2016-07-28 18:45:40 -07:00
Ted Kremenek
4a872ed636 Revert "Implement a custom Data.Iterator" (#3848) 2016-07-28 18:33:31 -07:00
Dmitri Gribenko
69255f02cb Merge pull request #3831 from kballard/data_iterator
Implement a custom Data.Iterator
2016-07-28 18:11:16 -07:00
Jordan Rose
805e06ef01 Flip the switch on 'private' and 'fileprivate'.
Merge pull request #3767 from jrose-apple/private-and-fileprivate
2016-07-28 15:40:02 -07:00
Matt Wright
e32016ffd7 [libdispatch-time-signedness] Correct signedness handling of DispatchTimeInterval
* DispatchTimeInterval's internal interval computation should be
    done with signed integers to allow for negative intervals. This
    moves all the unsigned conversions out to the API calls that can
    only accept positive intervals (timer sources and IO interval) and
    allows intermediate TimeIntervals to have a negative value.
2016-07-28 15:00:44 -07:00
Matt Wright
a151db06cd [libdispatch-data-leak] DisaptchData never calls destructor
* _swift_dispatch_data_create should have been marked as returning a
    retained object, otherwise the object is never fully released and
    the destructor is never executed.

    Fixes: <rdar://problem/27577958>
2016-07-28 15:00:32 -07:00
Kevin Ballard
69c3d71ba3 Implement a custom Data.Iterator
This iterator uses an inline 32-byte buffer so it doesn't have to call
copyBytes(to:count:) for every single byte. It results in an approximate
6x speedup on my computer.
2016-07-28 13:27:31 -07:00
Tony Parker
ef99d39d3b Adapt to UnsafeRawPointer changes in Data initializer and deallocator API 2016-07-28 13:21:50 -07:00
Mishal Shah
185618f9ec Merge pull request #3803 from jckarter/id-as-any-stdlib-spot-fixes
Id as any stdlib spot fixes
2016-07-28 12:07:26 -07:00
Tony Parker
57e184a072 IndexSet's find family of methods should have optional returns 2016-07-28 10:37:42 -07:00
Jordan Rose
3a792f7382 One more 'fileprivate' in newly-added Foundation code. 2016-07-28 09:55:23 -07:00
Dmitri Gribenko
ea5138ce73 Merge pull request #3785 from apple/Foundation-AnyHashable-tests
AnyHashable tests for Foundation types: add tests for bridging back to Swift types + fixes that make tests pass
2016-07-28 09:02:09 -07:00
Jordan Rose
4b0b325358 [CMake] Add missing SDK overlay dependencies. (#3799)
...plus the hacked-up tool I used to find them.
2016-07-27 16:10:24 -07:00
Devin Coughlin
c459f34029 [libdispatch] Fix deprecation annotations for macOS, watchOS.
Several libdispatch APIs in Queue.swift are annotated as:

public enum GlobalQueuePriority {
  @available(OSX, deprecated: 10.10, message: "Use qos attributes instead")
  @available(*, deprecated: 8.0, message: "Use qos attributes instead")
  case high

This annotation means ".high is deprecated on all OSes in version 8.0 and
above", so the compiler had false positive deprecation warnings on macOS
when the minimum deployment target is 10.9 and false negatives on watchOS
when the deployment target is 2.0.

The fix is to explicitly enumerate the platforms the API is deprecated on. This
is not ideal (see SR-2155) but avoids the false positives and negatives.

This fixes https://bugs.swift.org/browse/SR-2153
2016-07-27 14:10:25 -07:00
Joe Groff
84f8becfc3 Initialize dictionaries with expected capacities. 2016-07-27 13:34:28 -07:00
swift-ci
dfc3933a05 Merge pull request #3792 from atrick/rawptr-stdlib 2016-07-27 09:47:30 -07:00
Joe Groff
4b9e49827d Make all _toAnyHashable() implements @nonobjc. 2016-07-27 09:25:30 -07:00
Dmitri Gribenko
c0b183a208 Merge pull request #3781 from apple/stdlib-AnyHashable-for-Foundation.NSDecimalNumber
Add AnyHashable support for Foundation.Decimal
2016-07-27 09:22:48 -07:00
Andrew Trick
9886e4ef54 Use UnsafeRawPointer in StringCore.
This is another necessary step in introducing changes
for SE-0107: UnsafeRawPointer.

UnsafeRawPointer is great for bytewise pointer operations.

OpaquePointer goes away.

The _RawByte type goes away.

StringBuffer always binds memory to the correct CodeUnit
when allocating memory.

Before accessing the string, a dynamic element width check
allows us to assume the bound memory type.

Generic entry points like atomicCompareExchange no longer handle
both kinds of pointers. Normally that's good because you
should not be using generics in that case, just upcast
to raw pointer. However, with pointers-to-pointers
you can't do that.
2016-07-27 09:07:35 -07:00
Andrew Trick
3e2372b6a3 Use UnsafeRawPointer in GLKit _indexHomogeneousValue.
To obey the memory model.
2016-07-27 08:05:55 -07:00
Dmitri Gribenko
168b563315 Foundation: stop exporting certain overlay methods to Objective-C 2016-07-27 01:14:56 -07:00
Dmitri Gribenko
ea693dd8d1 Add AnyHashable support for Foundation.Decimal
Add a custom AnyHashable representation to Foundation.Decimal, so that
it behaves like all other bridged types.
2016-07-27 01:14:16 -07:00
Bob Wilson
58395b3b2f [SE-0127] Add "to:" argument label to withUnsafe[Mutable]Pointer.
rdar://problem/26529498
2016-07-26 17:44:33 -07:00