Commit Graph

1782 Commits

Author SHA1 Message Date
Slava Pestov
3ab5b6fa19 IRGen/Runtime: Remove parent field from type metadata
We no longer need this for anything, so remove it from metadata
altogether. This simplifies logic for emitting type metadata and
makes type metadata smaller.

We still pass the parent metadata pointer to type constructors;
removing that is a separate change.
2017-09-25 15:45:17 -07:00
Slava Pestov
9bdb71b614 Runtime: Stop looking at parent type metadata in _buildDemanglingForNominalType()
Wean the routine that builds a mangling tree from metadata from
looking at the parent metadata pointer, instead using the nested
depth to partition the arguments into a list of arguments for
each nesting depth.
2017-09-25 15:45:16 -07:00
Saleem Abdulrasool
58e89b3fff Merge pull request #11998 from compnerd/qualifiers
runtime: clean up last of -Wqual-cast warnings
2017-09-23 10:09:37 -07:00
Calvin Hill
aee81d272f Add Initial platform support for Haiku. (#11583) 2017-09-22 21:06:56 -04:00
Saleem Abdulrasool
7bd2256120 runtime: clean up last of -Wqual-cast warnings
This fixes up the remaining cast qualifier warnings from GCC 6.  Use
multiple casts to adjust the const qualification.  Prefer C++ style
casts.  NFC.
2017-09-22 14:14:13 -07:00
Saleem Abdulrasool
fec7fe17dc runtime: fix the DLL storage attribute
Ensure that the proper DLL storage is annotated on the declaration.
This currently mismatched on Windows.  On non-COFF targets, we would
just honour the visibility as specified on the definition.
2017-09-22 13:07:28 -07:00
Paul Menage
0766f03182 [Metadata] Unpoison memory being returned from the metadata allocator
Call __asan_unpoison_memory_region() rather than __asan_poison_memory_region()
2017-09-19 16:46:49 -07:00
Arnold Schwaighofer
3ae6d7cb4d runtime/IRGen: return the argument from swift_retain family of functions
On architectures where the calling convention uses the same argument register as
return register this allows the argument register to be live through the calls.

We use LLVM's 'returned' attribute on the parameter to facilitate this.

We used to perform this optimization via an optimization pass. This was ripped
out some time ago around commit 955e4ed652.
By using LLVM's 'returned' attribute on swift_*retain, we get the same
optimization from the LLVM backend.
2017-09-19 07:16:37 -07:00
Saleem Abdulrasool
7ae7cc5b17 Merge pull request #11976 from compnerd/llp64
runtime: make LLP64 clean
2017-09-18 21:26:12 -07:00
Roman Levenstein
937352a03b Merge pull request #11910 from swiftix/resilience-performance1
Add experimental support for tracking the invocations of runtime functions
2017-09-18 16:23:00 -07:00
Saleem Abdulrasool
8bf538cab1 Merge pull request #11947 from compnerd/windows-demangling
runtime: add undecoration support for Windows
2017-09-18 14:50:33 -07:00
Roman Levenstein
acff3212b5 Add a comment explaining why the file needs to be compiled even in no-asserts builds 2017-09-18 13:18:27 -07:00
Roman Levenstein
51bb830763 #include should be on the next line after #define 2017-09-18 13:17:48 -07:00
Roman Levenstein
d8c5238449 Move FUNCTION_TO_TRACK definitions closer to the includes of "RuntimeInvocationsTracking.def" 2017-09-18 12:52:40 -07:00
Roman Levenstein
7aa8d6f2b6 Warn if FUNCTION_TO_TRACK is not defined 2017-09-18 12:51:30 -07:00
Roman Levenstein
460de35b82 Expose runtime APIs for runtime function counters in such a way that they can be used from C 2017-09-18 12:50:59 -07:00
Saleem Abdulrasool
635bb00d61 runtime: make LLP64 clean
This is a blanket pass replacing use of `__LP64__` with
`__POINTER_WIDTH__ == 64`.  The latter is more expressive and also LLP64
clean.  This change is needed to enable support for Windows x86_64 which
is a LLP64 environment.
2017-09-17 18:41:10 -07:00
swift-ci
f39d4319ee Merge pull request #11974 from compnerd/const-is-your-friend 2017-09-17 18:03:27 -07:00
Saleem Abdulrasool
ef70671f77 runtime: clean up some warnings
This is a smorgasbord of warning cleanups in the runtime.  This just
adjusts the casts for the various types.  There were a number of casts
which lost const qualifiers on the type.
2017-09-17 16:20:16 -07:00
Saleem Abdulrasool
13183f87b9 Merge pull request #11946 from compnerd/runtime-warnings
Runtime warnings
2017-09-17 14:58:27 -07:00
Saleem Abdulrasool
a22fc82535 runtime: clean up -Wformat warning
Add explicit casts to convert the `void *` to an integral value to
convert via printf.  NFC.
2017-09-15 17:52:37 -07:00
Saleem Abdulrasool
fb68207f0c runtime: add undecoration support for Windows
Use the Windows API `UnDecorateSymbolName` rather than `__cxa_demangle`
to undecorate the C++ symbols.  `__cxa_demangle` is only available in
the itanium ABI, not under MS ABI.  This allows us to properly
undecorate symbols on Windows.
2017-09-15 17:48:43 -07:00
Roman Levenstein
2012451eb1 Fix a macro-definition 2017-09-15 17:31:15 -07:00
Roman Levenstein
1996d5fb64 Address review comments. 2017-09-15 16:39:08 -07:00
Arnold Schwaighofer
90f51f2599 runtime: Also return the destination argument of the unknownWeak- and unknownUnownedInit/Assign functions
rdar://18172130
2017-09-15 11:28:27 -07:00
Saleem Abdulrasool
d0a6131b53 runtime: clean up -Wunused-function warning
This function is only used when backtracing is enabled.  Use a
preprocessor guard to avoid defining the function when not used.  This
prevents a -Wunused-function warning.  NFC.
2017-09-15 10:12:34 -07:00
Roman Levenstein
3392b765ea Provide runtime function counters for object allocation, deallocation and initialization of static or stack-promoted objects 2017-09-15 09:24:56 -07:00
Roman Levenstein
ec1e051a36 Add runtime library support for tracking the invocations of runtime functions. 2017-09-14 16:43:13 -07:00
Arnold Schwaighofer
efe22fc9e6 runtime: return the destination address in swift_weakInit/Assign/Copy/Take operations
rdar://18172130
2017-09-13 14:10:21 -07:00
Arnold Schwaighofer
5326fb73f7 Merge pull request #11877 from aschwaighofer/replace_array_witnesses
Use array copy runtime implementation instead of the array value witnesses
2017-09-13 07:54:13 -07:00
Greg Parker
0bae31c1f0 [runtime] Add some missing -isNSWhatever__ methods to SwiftObject. (#11891)
SR-5636, rdar://33764085
2017-09-13 03:01:37 -07:00
Arnold Schwaighofer
8a85a9efd5 Use array copy runtime implementation instead of the array value witnesses
And add builtins for the added runtime functions (assign-take, assign-copy).

rdar://27412867
SR-3376
2017-09-12 12:43:26 -07:00
Arnold Schwaighofer
0a97f6787b Merge pull request #11823 from aschwaighofer/array_witnesses_runtime_impl
Runtime implementation of array witnesses
2017-09-11 07:24:08 -07:00
Arnold Schwaighofer
1292d30099 Move local types into anonymous namespace 2017-09-09 08:12:38 -07:00
Glenna Buford
a452f9002a [SR-5814] removes dead code around REFLECT_OBJC_IVARS 2017-09-09 17:09:32 +02:00
Arnold Schwaighofer
aa12b26192 Runtime implementation of array witnesses
(using these to replace the current array witnesses is next)

rdar://27412867
SR-3376
2017-09-08 15:20:36 -07:00
Greg Parker
dd38ace506 [runtime] Fix more const cast warnings. (#11725)
* [runtime] Fix more const cast warnings.
2017-09-05 13:13:01 -07:00
Greg Parker
c262440e70 [runtime] Fix some const cast warnings. 2017-08-31 18:22:17 -07:00
Amr Aboelela
2447658199 In case of Android and the library is in /system/lib, or if the library doesn't end with .so, we will give warning only and return empty sectionInfo. 2017-08-30 10:27:15 -07:00
Kuba (Brecka) Mracek
d03a575279 Unify the capitalization across all user-visible error messages (#11599)
* Unify the capitalization across all user-visible error messages (fatal errors, assertion failures, precondition failures) produced by the runtime, standard library and the compiler.

* Update some more tests to the new expectations.
2017-08-29 12:16:04 -07:00
John McCall
936f8ddddb Use void* as the target pointer type for relative references to
opaque functions.
2017-08-25 20:02:57 -04:00
John McCall
9a228e96e1 Change the structure of emitted protocol and generic-wtable metadata:
- Always include an array of requirement descriptors in the protocol
  descriptor.  For now, this doesn't contain anything except a general
  requirement kind and an optional default implementation, but eventually
  this can be augmented with type / name metadata.  This array is always
  emitted as constant.

- Guarantee the value of the extent fields in a protocol descriptor and
  slightly tweak their meaning.

- Move the private-data field out of line in a generic witness table
  descriptor so that the main descriptor can be emitted as constant.

- Rely on IRGen's notion of the witness-table layout instead of assuming
  that SILWitnessTable and SILDefaultWitnessTable match the actual
  physical layout.

This version of the patch uses a hack in which we assign internal rather
than private linkage to certain symbols in order to work around a Darwin
linker bug.
2017-08-25 01:42:44 -04:00
Slava Pestov
d73712d79b IRGen/Runtime: Initialize generic and resilient class vtables from nominal type descriptor
Previous patches changed the runtime to copy the vtable from the
superclass rather than IRGen emitting it statically for generic
and resilient classes.

However for generic classes we would still copy the vtable entries
for methods defined in the immediate class from the template.

Instead, store them in the nominal type descriptor, where they use
less space since we can use relative pointers, and copy them out of
there.

This will allow us to 'slim down' generic class templates eventually.
2017-08-24 15:42:08 -07:00
Slava Pestov
ed8ced5665 IRGen/Runtime: Use relative pointers in default witness table entries
This to shrink the size of the protocol descriptor, removes a 32-bit
padding field, and reduces the number of relocations.
2017-08-24 04:31:24 -07:00
Greg Parker
f3bd55eb52 [runtime] Implement SwiftObject -methodForSelector: and +instanceMethodForSelector:.
Fixes SR-5577 and rdar://33606034.
2017-08-23 17:11:47 -07:00
Erik Eckstein
f4f1298286 runtime: add a runtime function to initialize the header of a statically allocated object 2017-08-23 09:15:01 -07:00
John McCall
bfd71a80e7 Prefer anonymous functions instead of member pointers here.
This is blocking proper const-correctness for value witness types.
2017-08-22 01:47:47 -04:00
John McCall
9f8093f376 Create a central x-macro database of value witnesses. NFC. 2017-08-21 20:17:02 -04:00
Slava Pestov
6f3160084f IRGen/Runtime: Dynamic vtable initialization for generic and resilient classes
Instead of emitting the vtable statically, copy it from the
superclass, and fill in method overrides, if any.

For now this is only done for classes initialized by
swift_initClassMetadata_UniversalStrategy(); I need to
add a new entry point for classes with static field
layout but a dynamic vtable.
2017-08-16 16:30:11 -04:00
Greg Parker
d5d5d8aa98 [stdlib] Don't call object_isClass(). (#11467)
object_isClass() is unavailable on Swift's oldest deployment targets.

rdar://33872748
2017-08-15 15:34:02 -07:00