Commit Graph

13881 Commits

Author SHA1 Message Date
Mike Ash
50ea66d1d9 Merge pull request #33585 from mikeash/type-lookup-error-reporting
Add error reporting when looking up types by demangled name.
2020-08-28 17:42:47 -04:00
Mike Ash
fd6922f92d Add error reporting when looking up types by demangled name. 2020-08-28 14:43:51 -04:00
tbkka
524cfae1b2 [Dynamic Casting] Overhauled Runtime (#33561)
* Dynamic Cast Rework: Runtime

This is a completely refactored version of the core swift_dynamicCast
runtime method.

This fixes a number of bugs, especially in the handling of multiply-wrapped
types such as Optional within Any.  The result should be much closer to the
behavior specified by `docs/DynamicCasting.md`.

Most of the type-specific logic is simply copied over from the
earlier implementation, but the overall structure has been changed
to be uniformly recursive.  In particular, this provides uniform
handling of Optional, existentials, Any and other common "box"
types along all paths.  The consistent structure should also be
easier to update in the future with new general types.

Benchmarking does not show any noticable performance implications.

**Temporarily**, the old implementation is still available.  Setting the
environment variable `SWIFT_OLD_DYNAMIC_CAST_RUNTIME` before launching a program
will use the old runtime implementation.  This is only to facilitate testing;
once the new implementation is stable, I expect to completely remove the old
implementation.
2020-08-27 11:06:40 -07:00
Kuba (Brecka) Mracek
1fec2b5584 Respect SWIFT_STDLIB_SINGLE_THREADED_RUNTIME and use nonatomic refcounting in swift_retain, swift_release, etc. (#33644) 2020-08-27 10:25:32 -07:00
Kuba (Brecka) Mracek
9de7b59388 Subsume SWIFT_STDLIB_USE_NONATOMIC_RC into SWIFT_STDLIB_SINGLE_THREADED_RUNTIME (#33643) 2020-08-26 21:28:30 -07:00
Mike Ash
c059fc2d0d Merge pull request #33642 from mikeash/fix-remotemirror-uninitialized-data-access
[RemoteMirror] Fix potential uninitialized data access in convertChild.
2020-08-26 16:22:30 -04:00
Mike Ash
9962f799b7 [RemoteMirror] Fix potential uninitialized data access in convertChild.
The else branch of the type checking code just does assert(false). When asserts are off, the code will fall through and access the uninitialized FieldInfo variable. Instead, return something sensible for this error case.
2020-08-26 11:46:13 -04:00
Kuba (Brecka) Mracek
9ead8d57fa Add a single-threaded stdlib mode, use it for the 'minimal' stdlib (#33437) 2020-08-25 06:03:14 -07:00
Kyle Macomber
d71d92eced Merge pull request #31105 from valeriyvan/RemoveRedundantBufferZeroingUnicodeHelpers
[stdlib] Removes redundant buffer zeroing in foreignErrorCorrectedGrapheme func by using `init(unsafeUninitializedCapacity:initializingWith:)
2020-08-24 14:53:03 -07:00
swift-ci
b574795d17 Merge pull request #33608 from valeriyvan/Array-NSURL 2020-08-24 09:34:46 -07:00
Valeriy Van
84928c611d Fixes example snippet in Array.swift
Uses URL instead of NSURL, otherwise example deson't compile
2020-08-24 13:43:25 +02:00
Alex Efremov
83b2ebe8f1 [AutoDiff] Support forward mode differentiation of functions with inout parameters (#33584)
Adds forward mode support for `apply` instruction with `inout` arguments.

Example of supported code:
```
func add(_ x: inout Float, _ y: inout Float) -> Float {
  var result = x
  result += y
  return result
}
print(differential(at: 1, 1, in: add)(1, 1)) // prints "2"
```
2020-08-21 17:57:39 -07:00
Mike Ash
39d4e0125e Merge pull request #33487 from mikeash/concurrenthashmap
[Runtime] Reimplement protocol conformance cache with a hash table
2020-08-21 12:14:23 -04:00
Mike Ash
ecd6d4ddec Add a new ConcurrentReadableHashMap type. Switch the protocol conformance cache
to use it.

ConcurrentReadableHashMap is lock-free for readers, with writers using a lock to
ensure mutual exclusion amongst each other. The intent is to eventually replace
all uses ConcurrentMap with ConcurrentReadableHashMap.

ConcurrentReadableHashMap provides for relatively quick lookups by using a hash
table. Rearders perform an atomic increment/decrement in order to inform writers
that there are active readers. The design attempts to minimize wasted memory by
storing the actual elements out-of-line, and having the table store indices into
a separate array of elements.

The protocol conformance cache now uses ConcurrentReadableHashMap, which
provides faster lookups and less memory use than the previous ConcurrentMap
implementation. The previous implementation caches
ProtocolConformanceDescriptors and extracts the WitnessTable after the cache
lookup. The new implementation directly caches the WitnessTable, removing an
extra step (potentially a quite slow one) from the fast path.

The previous implementation used a generational scheme to detect when negative
cache entries became obsolete due to new dynamic libraries being loaded, and
update them in place. The new implementation just clears the entire cache when
libraries are loaded, greatly simplifying the code and saving the memory needed
to track the current generation in each negative cache entry. This means we need
to re-cache all requested conformances after loading a dynamic library, but
loading libraries at runtime is rare and slow anyway.

rdar://problem/67268325
2020-08-20 13:05:30 -04:00
Kuba Mracek
b3509fcab3 Fix build with SWIFT_RUNTIME_MACHO_NO_DYLD=1 in ImageInspectionStatic.cpp 2020-08-19 08:35:21 -07:00
NevinBR
a62bf48e68 [stdlib] [NFC] FloatingPointRandom.swift created (#33463)
* Moved `random` methods out of FloatingPoint.swift

* Added `random` methods to FloatingPointRandom.swift

* Added FloatingPointRandom.swift to CMakeLists.txt

* Added FloatingPointRandom.swift to GroupInfo.json

* Moved filename within CMakeLists.txt
2020-08-18 18:12:35 -04:00
Kuba (Brecka) Mracek
db18deaf91 Add a SWIFT_RUNTIME_MACHO_NO_DYLD stdlib mode that doesn't dynamically look up sections in modules, and only assumes a single static module (#33441) 2020-08-18 11:46:42 -07:00
Kuba (Brecka) Mracek
7a9f894c88 Avoid using -sil-inline-generics and -sil-partial-specialization when building MinSizeRel stdlib to save ~15% on codesize (#33444) 2020-08-17 20:58:54 -07:00
Kuba (Brecka) Mracek
28a2826ef4 Start using optimization (-O0/-O2/-O3/-Os) and debug (-g) flags from CMAKE_CXX_FLAGS_${CFLAGS_BUILD_TYPE} (#33388) 2020-08-17 19:26:24 -07:00
Kuba (Brecka) Mracek
4cfaeee6df Match the #ifdefs between _swift_isNonPointerIsaObjCClass and objectUsesNativeSwiftReferenceCounting (#33510) 2020-08-17 17:34:11 -07:00
Mike Ash
937e141316 Merge pull request #28968 from 3405691582/environ_llvm_assert
[stdlib] Fix a LLVM assert on *BSD.
2020-08-15 13:41:49 -04:00
swift-ci
ba9921b204 Merge pull request #33494 from kubamracek/metadata-cpp-objc-interop 2020-08-15 00:13:12 -07:00
Kuba Mracek
99e518bb85 Guard Obj-C specifics in Metadata.cpp with SWIFT_OBJC_INTEROP 2020-08-14 21:20:34 -07:00
Kuba (Brecka) Mracek
925835f158 NFC: Use SWIFT_APPLE_PLATFORMS and remove is_darwin_based_sdk 2020-08-14 21:04:02 -07:00
Kuba (Brecka) Mracek
aa924196ff Add a flag to build the stdlib without COMPATIBILITY_OVERRIDE (#33438) 2020-08-14 17:06:38 -07:00
Kuba (Brecka) Mracek
11c9184c6c Use SWIFT_SDK_${sdk}_OBJECT_FORMAT to choose whether to use lipo and multi-arch builds 2020-08-14 17:05:51 -07:00
swift-ci
75ea939d00 Merge pull request #33465 from nate-chandler/generic-metadata-prespecialization-components/return-canonical-prespecializations-from-getGenericMetadata 2020-08-14 15:07:37 -07:00
Kuba (Brecka) Mracek
f91fe9c0c1 Use SWIFT_SDK_${prefix}_USE_ISYSROOT to select which SDKs should be building with -isysroot (#33469) 2020-08-14 14:33:28 -07:00
Nate Chandler
a5a7c98be0 [metadata prespecialization] getGenericMetadata finds records.
Previously, the metadata accessor for which canonical prespecializations
had been formed included checks against the passed-in arguments to
determine whether the access matched a prespecialized record or not.

Now that the prespecialized records are attached to the nominal type
descriptor for the type, eliminate this hard-coded generated code and
instead let swift_getGenericMetadata do the work of looking through the
prespecializations.
2020-08-14 11:19:10 -07:00
nate-chandler
6dddf96faf Merge pull request #33442 from nate-chandler/generic-metadata-prespecialization-components/record-canonical-prespecializations
[metadata prespecialization] Add canonical prespecialization to end of type descriptors.
2020-08-14 09:59:26 -07:00
David Zarzycki
c2fc2108d0 Merge pull request #33448 from davezarzycki/pr33448
[NFC] Fix -Wsuggest-override warnings
2020-08-14 04:46:12 -04:00
Nate Chandler
b1408028a7 [metadata prespecialization] Allow more noncanonical records.
Previously, noncanonical records were only allowed if one of the
arguments was from the module where the record was to be emitted.

Here, that restriction is lifted.  Now getSpecializedGenericMetadata
will, on first run, register all canonical metadata with the global
cache before attempting to bless the passed-in noncanonical record,
allowing noncanonical records to be for the same arguments as a
canonical record (since in the case that a canonical record does exist,
it will be returned).
2020-08-13 17:44:49 -07:00
Kuba (Brecka) Mracek
e2e69578a6 For the 'minimal' stdlib, disable Objective-C interop (#33427) 2020-08-13 15:26:04 -07:00
David Zarzycki
1e940c2c7e [NFC] Fix -Wsuggest-override warnings
LLVM, as of 77e0e9e17daf0865620abcd41f692ab0642367c4, now builds with
-Wsuggest-override. Let's clean up the swift sources rather than disable
the warning locally.
2020-08-13 16:17:46 -04:00
Kuba (Brecka) Mracek
ef89b0dc51 Add a 'standalone_minimal' preset to build a minimal, static, OS independent, self-contained binaries of stdlib. (#33286) 2020-08-12 07:28:34 -07:00
Dan Zheng
4391f4264e [AutoDiff] Fix Optional differentiation crash. (#33386)
Fix `Optional` differentiation crash for non-resilient `Wrapped` reference type.
Add `NonresilientTracked` type to `DifferentiationUnittest` for testing.

Resolves SR-13377.
2020-08-11 09:14:12 -07:00
Saleem Abdulrasool
b9cf2498e9 Merge pull request #33394 from compnerd/direct-call
Windows: include `direct.h` in `sys.stat` module
2020-08-11 07:53:50 -07:00
Saleem Abdulrasool
7cee2bf487 Windows: include direct.h in sys.stat module
On Unicies `sys/stat.h` will provide `mkdir`.  Windows provides the
POSIX requirement through the portable name `_mkdir` which is declared
in the `direct.h` header.  This adds the additional header to the `ucrt`
module to allow access to this function.
2020-08-10 16:25:42 -07:00
Stephen Canon
457b9990e9 Add checks that the endpoints of partial ranges are not-NaN. (#33378)
We can't actually check for NaN (because the notion doesn't exist for Comparable), but we can require that the endpoint is non-exceptional by checking if it equals itself.
2020-08-10 14:06:46 -04:00
Slava Pestov
63da97d51c Merge pull request #33371 from slavapestov/do-not-derive-in-all-cases
Sema: Don't need to derive CaseIterable's AllCases associated type
2020-08-08 01:10:59 -04:00
Kyle Macomber
9bbe6e7365 Merge pull request #28639 from YOCKOW/sr-10689-cherry-pick
SR-10689: Fix bugs of DataProtocol's firstRange(of:in:)/lastRange(of:in:).
2020-08-07 15:39:03 -07:00
swift-ci
2bff31e7ca Merge pull request #33362 from mikeash/fix-isa-mask-assert3 2020-08-07 13:52:08 -07:00
Slava Pestov
3ae31d5173 Sema: Don't need to derive CaseIterable's AllCases associated type
Just declaring a default in the standard library works fine.
2020-08-07 16:48:40 -04:00
Mike Ash
e57961c95f [Runtime] Fix the ISA mask assert for ARM64 running on ARM64e hardware. 2020-08-07 14:18:16 -04:00
Saleem Abdulrasool
d30366f6c4 Dispatch: correct DispatchTimeInterval calculation on ASi
There is no guarantee that Mach ticks and nanoseconds have a 1:1
relationship.  Use the `uptimeNanoseconds` field which will convert the
raw value (which is in Mach ticks) to the time unit of nanoseconds.
This was caught by the Dispatch stridable test in the Swift test suite.

rdar://problem/56623421
2020-08-07 09:28:23 -07:00
Mike Ash
2ee68b9a16 Merge pull request #33341 from mikeash/fix-isa-mask-assert2
[Runtime] Fix the isa mask assert for ARM64e.
2020-08-07 10:41:44 -04:00
Ben Rimmington
d3f0de804d [SE-0163] Migrate from deprecated Unicode APIs (part 3) (#33175) 2020-08-06 23:44:55 +01:00
Mike Ash
e26aeca7eb [Runtime] Fix the isa mask assert for ARM64e.
Swift's isa mask includes the signature bits. objc_debug_isa_class_mask does not. Switch to objc_absolute_packed_isa_class_mask instead, which does.

While we're at it, get rid of the now-unnecessary guards for back-deployment.

rdar://problem/60148213
2020-08-06 16:33:59 -04:00
Dario Rexin
41176b14d4 Fix glibc.modulemap generation 2020-08-04 20:36:19 -07:00
Dario Rexin
7e60a73335 Merge pull request #33168 from drexin/wip-fix-resource-folder
Properly compute resource folder when linking statically
2020-08-04 12:52:38 -07:00