Commit Graph

7762 Commits

Author SHA1 Message Date
Kuba Mracek
65a57c7811 [embedded] Add an explaining message into StaticString's fatalError 2023-09-16 13:40:43 -07:00
Kuba Mracek
92b075b518 [embedded] Drop several #ifs and fatalError()s by adding an unavailable ExpressibleByStringInterpolation String conformance 2023-09-16 13:40:25 -07:00
Kuba Mracek
cba7cdfad6 [embedded] Drop an unnecessary change in Integers.swift 2023-09-16 13:25:21 -07:00
Kuba Mracek
829967436e [embedded] Simplify AnyObject/Builtin.NativeObject split in arrays by using a typealias 2023-09-16 13:21:46 -07:00
Kuba Mracek
544ee14c47 [embedded] Provide alternate === and !== implementations instead of trying to switch away from existentials in a unified way 2023-09-16 12:47:34 -07:00
Kuba Mracek
ae2e903574 [embedded] Build an initial embedded Swift standard library
This isn't a "complete" port of the standard library for embedded Swift, but
something that should serve as a starting point for further iterations on the
stdlib.

- General CMake logic for building a library as ".swiftmodule only" (ONLY_SWIFTMODULE).
- CMake logic in stdlib/public/core/CMakeLists.txt to start building the embedded stdlib for a handful of hardcoded target triples.
- Lots of annotations throughout the standard library to make types, functions, protocols unavailable in embedded Swift (@_unavailableInEmbedded).
- Mainly this is about stdlib functionality that relies on existentials, type erasure, metatypes, reflection, string interpolations.
- We rely on function body removal of unavailable functions to eliminate the actual problematic SIL code (existentials).
- Many .swift files are not included in the compilation of embedded stdlib at all, to simplify the scope of the annotations.
- EmbeddedStubs.swift is used to stub out (as unavailable and fatalError'd) the missing functionality.
2023-09-16 12:38:46 -07:00
Kuba Mracek
b625bf9e25 [stdlib] Remove the essential/non-essential file split in the stdlib 2023-09-13 16:31:58 -07:00
Guillaume Lessard
561890f3ce [se-0405] tie deprecation to swift 6 language mode 2023-09-13 09:47:34 -07:00
Guillaume Lessard
0c916f507d [stdlib] replace uses of String(validatingUTF8:)
- use the new name `String(validatingCString:)`
2023-09-11 14:17:05 -07:00
Guillaume Lessard
1f0f30219c [se-0405] rename String.init?(validatingUTF8:) 2023-09-11 14:17:05 -07:00
Mike Ash
acbcd5f557 [Stdlib] Fix bridgedStorage lifetime in SwiftNativeNSArray._destroyBridgedStorage.
Extend the lifetime of bridgedStorage until after the contents are deinitialized. When two threads race in withUnsafeBufferOfObjects, the loser uses _destroyBridgedStorage to destroy its candidate buffer, and we need to extend the lifetime of that buffer since the parameter is the only extant reference to it.

rdar://99565140
2023-09-08 15:21:21 -04:00
nate-chandler
e7783563ce Merge pull request #68285 from nate-chandler/effects-diagnostic
[Diagnostics] Require explicit releasenone.
2023-09-08 07:04:31 -07:00
Nate Chandler
2637c41e26 [stdlib] Explicitly annotate with releasenone.
Annotated all functions with arguments that are consumed and are
annotated `@_effects(readnone)` or `@_effects(readonly)` with
`@_effects(releasenone)`.
2023-09-05 08:18:06 -07:00
Manu
02b5fa2c8e Fix some typos in the codebase 2023-08-31 18:50:10 -03:00
Nate Chandler
504ce43753 [stdlib] Delete bad @_effects(readonly) annotation
`Dictionary.init(dictionaryLiteral:)` was annotated
`@_effects(readonly)` which means among other things that it doesn't
release any references. Being an init, however, it consumes its
arguments, and so does in fact release.

rdar://114699006
2023-08-30 12:33:58 -07:00
Karoy Lorentey
c7658428f5 Merge pull request #68067 from lorentey/fix-Set.insert-overload-decl
[stdlib] Add @discardableResult to Set.insert’s AnyHashable overload
2023-08-24 14:30:10 -07:00
Nishith Kumar M Shah
056b4943a3 Fix String.hasPrefix and String.hasSuffix when self and arg are in NFC form (#67729) 2023-08-23 11:23:59 -05:00
Karoy Lorentey
4a8d23d303 [stdlib] Add @discardableResult to Set.insert’s AnyHashable overload
Unlike the core Set.insert, this utility declaration wasn’t declared @discardableOverload, introducing an undesirable inconsistency.

rdar://114008680
2023-08-22 13:44:51 -07:00
swift-ci
978395bc11 Merge pull request #62959 from meg-gupta/simplifycfgossapr3
Migrate simple and dominator based jump threading to OSSA
2023-08-18 17:18:10 -07:00
Meghana Gupta
8fafdd1148 Add @always(__inline) to _parseInteger(UnsafeBufferPointer<UInt8>, Int)
Integer parsing seems to be very sensitive to inlining.
With simplifycfg, _parseInteger function gets bigger and ends up not being inlined
causing significant performance regression in the integer parsing benchmarks.

Add @always(__inline) to recover the performance.
2023-08-18 14:32:14 -07:00
Ben Rimmington
98ada1b200 [stdlib] Fix buffer size of small-capacity strings (#67929) 2023-08-16 10:00:42 +01:00
David Smith
dade932a85 Revert "Try using withContiguousStorageIfAvailable in RangeReplaceableCollection.append(contentsOf:) before falling back to a slow element-by-element loop. Fixes rdar://109059874" (#67842)
This reverts commit 465aa22b81.
2023-08-10 01:39:20 -07:00
Stephen Canon
20a11db290 Revert "[stdlib] Fix calling convention mismatch for debugger utility functions" 2023-08-09 07:31:58 -04:00
Max Desiatov
cc72301a87 Merge pull request #66531 from swiftwasm/pr-8addaa1d85ba6750d500373b55bd9451e869c8e6
[stdlib] Fix calling convention mismatch for debugger utility functions
2023-08-01 09:49:37 +01:00
Max Desiatov
819d9847a5 stdlib/public/core: use UInt(bitPattern:) to make sure casts work 2023-07-31 16:50:52 +01:00
Stéphan Kochen
7b460ce495 build: fix accidental cmake expansions
As of CMake 3.25, there are now global variables `LINUX=1`, `ANDROID=1`,
etc. These conflict with expressions that used these names as unquoted
strings in positions where CMake accepts 'variable|string', for example:

- `if(sdk STREQUAL LINUX)` would fail, because `LINUX` is now defined and
  expands to 1, where it would previously coerce to a string.

- `if(${sdk} STREQUAL "LINUX")` would fail if `sdk=LINUX`, because the
  left-hand side expands twice.

In this patch, I looked for a number of patterns to fix up, sometimes a
little defensively:

- Quoted right-hand side of `STREQUAL` where I was confident it was
  intended to be a string literal.

- Removed manual variable expansion on left-hand side of `STREQUAL`,
  `MATCHES` and `IN_LIST` where I was confident it was unintended.

Fixes #65028.
2023-07-17 21:50:50 +02:00
swift-ci
b158328ebc Merge pull request #67271 from glessard/string-init-from-substring-utf8view
[doc] adjust to reflect the current implementation.
2023-07-12 18:37:48 -07:00
Guillaume Lessard
8912098c01 [doc] adjust to reflect the current implementation. 2023-07-12 14:13:19 -07:00
Dario Rexin
29ce7a341d [Stdlib] Add some prespecializations to the stdlib (#66446)
* [Stdlib] Add some prespecializations to the stdlib

This adds prespecializations for commonly used types to the stdlib

* Add false positives to ABI checker ignore list

* Update multithread_module.swift

* Update multithread_module.swift

* Update multithread_module.swift
2023-07-06 15:27:09 -07:00
Guillaume Lessard
98c50c3504 Merge pull request #67003 from glessard/idiomatic-rebinding-7
Rebind Memory Idiomatically
2023-06-29 13:53:09 -07:00
Guillaume Lessard
fd7ced19ea [gardening] a simplification 2023-06-28 16:37:41 -07:00
Alejandro Alonso
141fa804b1 Make _createOffsetBasedKeyPath and _rerootKeyPath only available with reflection 2023-06-26 23:09:39 -07:00
eeckstein
c8ec463312 Merge pull request #66920 from eeckstein/managedbuffer-inlinable-deinit
stdlib: make deinit of `ManagedBuffer` inlinable
2023-06-27 06:52:48 +02:00
Erik Eckstein
a5744b2bb5 stdlib: make deinit of ManagedBuffer inlinable
This allows to eliminate dead allocations of a ManagedBuffer object.

https://github.com/apple/swift/issues/66496
2023-06-26 12:10:15 +02:00
Alejandro Alonso
d9d26eec9d Add support for classes in _createOffsetBasedKeyPath 2023-06-22 14:07:41 -07:00
Stephen Canon
185820a148 Fix sign of fractional units in Duration initializers from Double. (#66582)
* Fix sign of fractional units in Duration initializers from Double.

When separating a double duration into integral and fractional parts, we got the sign wrong. This fixes that bug.

* Fixup variable name.
2023-06-13 08:46:46 -04:00
Yuta Saito
8124738fc2 [stdlib] Fix calling convention mismatch for debugger utility functions
The functions `swift_retainCount`, `swift_unownedRetainCount`, and
`swift_weakRetainCount` are declared in `HeapObject.h` as using
the C calling convention, but the Swift declarations referenced them
by `@_silgen_name`, which uses the Swift calling convention. This
patch fixes the mismatch without any ABI/API breakage by calling the
utility functions through C interop.
2023-06-10 07:40:50 +00:00
Doug Gregor
feb5c09d93 Remove OptionSet macro from the standard library. 2023-06-06 23:37:38 -07:00
Jager-yoo
aca5038625 Change word order for clarity in Unicode handling doc 2023-06-04 17:05:50 +09:00
Lucy Satheesan
8b8f5472a4 Merge pull request #66085 from oxy/gh56321
[stdlib] don't copy array contents on `removeAll(keepingCapacity: true)`
2023-05-25 09:00:38 -07:00
Stephen Canon
db0a7287a5 Rework the .seconds, .milliseconds, and .microseconds constructors to preserve exact values (#66111)
When constructing a Duration from Double, we should do it in such a way that exact integer inputs are preserved exactly, so long as they are represented as a Duration. This was not previously the case. Now it is.
2023-05-24 23:07:17 -04:00
Lucy Satheesan
ff76106177 [stdlib] don't copy array contents on removeAll(keepingCapacity: true) 2023-05-24 07:52:39 -07:00
Lucy Satheesan
492da020cf [gardening] remove superfluous #if 2023-05-24 07:52:38 -07:00
David Smith
e342ac4ee3 Don't reserveCapacity in append(contentsOf:), it breaks API guarantees of asymptotic complexity (#65927)
Don't reserveCapacity in append(contentsOf:), it breaks API guarantees of asymptotic complexity. Fixes rdar://109577273
2023-05-19 12:13:55 -07:00
swift-ci
dabfcb284c Merge pull request #65778 from Catfish-Man/contiguous-conundrum
Try using withContiguousStorageIfAvailable in RangeReplaceableCollection.append(contentsOf:) before falling back to a slow element-by-element loop.
2023-05-19 04:10:56 -07:00
Doug Gregor
ac5cd478ee Merge pull request #65982 from DougGregor/fix-generic-param-shadowing 2023-05-17 15:34:07 -07:00
Doug Gregor
8b4fe6be18 Eliminate some unnecessary shadowing generic parameters 2023-05-17 11:04:11 -07:00
Nate Cook
23c19333df [stdlib] Fix String.reserveCapacity underallocation (#65902)
When called on a string that is not uniquely referenced,
`String.reserveCapacity(_:)` ignores the current capacity, using
the passed-in capacity for the size of its new storage. This can
result in an underallocation and write past the end of the new
buffer.

This fix changes the new size calculation to use the current UTF-8
count as the minimum. Non-native or non-unique strings
now allocate the requested capacity (or space enough for the
current contents, if that's larger than what's requested).

rdar://109275875
Fixes #53483
2023-05-17 12:11:23 -05:00
David Smith
5efc2da08d _onFastPath, in inlineable code, will end up applying to the caller. We don't want that, so omit it 2023-05-15 12:53:58 -07:00
Nate Cook
89b9e48eae [stdlib] Implement Never conformance to Codable (#64899)
Proposed as SE-0396: Conform Never to Codable;
approved on 5/5/2023.
2023-05-09 13:10:10 -05:00