Commit Graph

701 Commits

Author SHA1 Message Date
Mike Ash
31200ddcf0 Merge pull request #24864 from mikeash/backtrace-target-run-fix
[Test] Fix backtrace tests to use %target-run.
2019-05-22 13:08:58 -04:00
Mike Ash
7f4f5734d2 [Test] Upgrade the all backtrace tests to use not.py and %target-run.
rdar://problem/50863395
2019-05-20 13:10:26 -04:00
Michael Gottesman
1e032ad0e0 Merge pull request #24809 from gottesmm/pr-da73ada7a54b312b7e1fc21910cd9593ad94348b
[silgenpattern] When binding values, use a ManagedValue instead of an…
2019-05-18 14:11:54 -07:00
Michael Gottesman
adcfda6f6d [silgenpattern] When binding values, use a ManagedValue instead of an RValue to avoid implicitly exploding tuples.
In SILGenPattern, we need to be able to unforward cleanups when we explode
tuples. Thus we can't use RValue in SILGenPattern since it may implicitly
explode tuples (which without modifying RValue itself we can not
unforward). This patch removes a specific RValue usage that we can replace with
the use of a ManagedValue instead.

rdar://49903264
2019-05-16 12:41:08 -07:00
Brent Royal-Gordon
affcefc1ae [ASTMangler] Mangle nested imported error structs correctly
Error structs synthesized by ClangImporter can be renamed using SWIFT_NAME() to syntactically appear anywhere in the type hierarchy with any name, but they should always be mangled as `__C_Synthesized.related decl ‘e’ of <Objective-C enum name>`. Unforunately, when SWIFT_NAME() was used to nest the error struct inside another type, an ASTMangler bug would cause it to be mangled as `<parent type>.related decl ‘e’ of <Objective-C enum name>`, and an ASTDemangler bug would also require a valid parent type. This created a mismatch between the compiler’s and runtime’s manglings which caused crashes when you tried to match the imported error struct in a `catch`.

This PR corrects the compiler bugs so that it generates the mangling the runtime expects. This is theoretically ABI-breaking, but as far as I can determine nobody has shipped the incorrectly mangled names, presumably because they crash when you try to use them.

Fixes <rdar://problem/48040880>.
2019-05-15 11:28:24 -07:00
Slava Pestov
16d5716e71 SIL: Use the best resilience expansion when lowering types
This is a large patch; I couldn't split it up further while still
keeping things working. There are four things being changed at
once here:

- Places that call SILType::isAddressOnly()/isLoadable() now call
  the SILFunction overload and not the SILModule one.

- SILFunction's overloads of getTypeLowering() and getLoweredType()
  now pass the function's resilience expansion down, instead of
  hardcoding ResilienceExpansion::Minimal.

- Various other places with '// FIXME: Expansion' now use a better
  resilience expansion.

- A few tests were updated to reflect SILGen's improved code
  generation, and some new tests are added to cover more code paths
  that previously were uncovered and only manifested themselves as
  standard library build failures while I was working on this change.
2019-04-26 22:47:59 -04:00
Saleem Abdulrasool
83b290438c Windows: bridge BOOL to Bool
This allows the conversion of the Windows `BOOL` type to be converted to
`Bool` implicitly.  The implicit bridging allows for a more ergonomic
use of the native Windows APIs in Swift.

Due to the ambiguity between the Objective C `BOOL` and the Windows
`BOOL`, we must manually map the `BOOL` type to the appropriate type.
This required lifting the mapping entry for `ObjCBool` from the mapped
types XMACRO definition into the inline definition in the importer.

Take the opportunity to simplify the mapping code.

Adjust the standard library usage of the `BOOL` type which is now
eclipsed by the new `WindowsBool` type, preferring to use `Bool`
whenever possible.

Thanks to Jordan Rose for the suggestion to do this and a couple of
hints along the way.
2019-04-25 17:52:08 -07:00
Saleem Abdulrasool
09bc471e87 test: add a test for ll suffixed types being promoted to ULL
This addresses the follow up test case discussed in PR23651.  Windows
will not promote a macro literal suffixed with `ll` or `i64` to an
unsigned long long even upon an overflow.  This tests that the corner
case behaviour for importing a long long literal matches the platform
expectations.
2019-04-01 10:55:57 -07:00
Saleem Abdulrasool
8a1457c431 test: explicitly make a value unsigned on Windows
Windows will keep the imported type as `signed long long` rather than
`unsigned long long` as per the Microsoft compiler behaviour.  This
breaks the tests for this case.  Unfortunately, this is one of those
areas which must differ.
2019-03-29 16:18:09 -07:00
Saleem Abdulrasool
27801ce0d2 Merge pull request #23653 from compnerd/anonymous-is-unwritten
test: be more flexible about anonymous enumeration imports
2019-03-29 12:18:40 -07:00
Saleem Abdulrasool
13a7ca0f5a test: be more flexible about anonymous enumeration imports
This test ensures that we correctly translate the anonymous enumeration
value. However, this is an odd case within the specification.

C11 6.7.2.2p2:
"The expression that defines the value of an enumeration constant shall
be an integer constant expression that has a value representable as an
`int`."

C11 6.7.2.2p4:
"Each enumerated type shall be compatible with `char`, a signed integer
type, or an unsigned integer type.  The choice of type is
implementation-defined, but shall be capable of representing the values
of all the members of the enumeration."

C11 6.7.2.2p3:
"The identifiers in an enumerator list are declared as constants that
have type `int` and may appear wherever such are permitted."

Because the enumeration is anonymous, the value could never be written
as spelled.  This type is imported as an `int` on Windows as per the ABI
and as an `unsigned long` on LP64 targets.
2019-03-29 08:55:51 -07:00
Saleem Abdulrasool
106aa5d26b test: augment the SDK sysroot for Windows
Windows does not have `intptr_t` and `uintptr_t` defined properly.
Define the types using the clang builtin types in the SDK.
2019-03-28 21:49:15 -07:00
Saleem Abdulrasool
d090497ff9 test: improve ClangImporter.ctypes_parse on Windows
Windows uses signed enumeration types, which means that the value si
imported as `Int` rather than `CInt`.
2019-03-28 17:39:28 -07:00
Slava Pestov
68c07620cd IRGen: Emit Objective-C resilient class stubs if experimental flag is on
Non-generic classes with resilient ancestry do not have statically-emitted
metadata, so we can now emit an Objective-C resilient class stub instead.

Also, when emitting an Objective-C category, reference the class stub if
the class has resilient ancestry; previously this case would hit an assert.

Note that class stubs always start with a zero word, with the address point
pointing immediately after. This works around a linker issue, where the
linker tries to coalesce categories and gets confused upon encountering a
class stub.
2019-03-26 18:53:09 -04:00
Stephen Canon
1a9ae47d06 Teach the importer to import any clang vector type as SIMDn<Scalar>. (#23454)
* Teach the importer to import any vector type as SIMDN<Scalar>.

Instead of having a known set of vector types, check to see if the
element type conforms to SIMDScalar; if it does, see if we have a
SIMDN defined with the right number of elements. If both are satisfied,
import the vector type as that Swift type.

By making this change, we gain the ability to import vector types
that aren't defined in terms of the Darwin simd module, which lets
us use C API with vector types on other platforms. It also lets us
import *every* vector type that Swift can represent, rather than the
small subset that are currently hardcoded.

* Increased test coverage for increased SIMD types that we can import.

Includes some minor cleanup from review. Also eliminates the old
simd_sans_simd test, since we can now import all of these types even when the simd module isn't imported.
2019-03-22 22:11:22 -04:00
Harlan Haskins
09bdaa35c5 [test] Test looking up resilient NSObject subclasses
Add tests to make sure we can look up resilient NSObject subclasses in the ObjC runtime.
2019-03-17 17:29:36 -07:00
Slava Pestov
71ab1bbe77 IRGen: Fix isResilientConformance() check
If the conforming type is generic, we have to treat the conformance as
resilient if it is defined outside of the current module.

This is because it can resiliently change from being non-dependent
to dependent.
2019-02-20 20:00:46 -05:00
Saleem Abdulrasool
fd75ed7a29 tests: adjustments for Windows
Alter the path separators for Windows paths.  This makes 66% of the
remaining tests pass on Windows.
2019-02-17 13:55:52 -08:00
Doug Gregor
95035e1c9a Tighten up IRGen tests 2019-02-06 05:55:46 -08:00
Doug Gregor
229ddf570f [IRGen] Metadata for the conforming type in a witness table access need not be complete.
When calling a witness table accessor, IRGen was forcing the
conforming type to have complete metadata, even though only abstract
metadata is required for that query. This could cause cyclic metadata
dependencies when checking conditional conformances.

Fixes SR-5958.
2019-02-05 22:02:49 -08:00
Slava Pestov
8df0d8ea63 ASTDemangler: Fix import-as-member types
When an enum is imported as an error, the imported type itself becomes
a nested type 'Code' of its wrapper type, so you get a type like
'MyError.Code'. However in the mangling grammar the type is a
child of a module and not another type.

This was tripping up TypeDecoder, which would check parent types for
validity and throw out the demangling since it looked invalid.

However since this case really is valid, just skip the whole parent
type mess when the type is imported and non-generic.
2019-01-25 21:44:02 -05:00
Lei Zhang
7426e506f8 [test] Add s390x support for test/IRGen/objc_properties_jit.swift 2019-01-25 17:46:33 -05:00
sarveshtamba
56318f3e1f Changes for #SR-9413:Swift 5.0 test failures on PowerPC 2018-12-24 11:37:38 +00:00
Jordan Rose
99e0c1d8a4 Merge pull request #20912 from dnadoba/master
Refuse to import C arrays that are longer than 4096
2018-12-04 14:19:33 -08:00
Doug Gregor
2c5ecb477a Merge pull request #20858 from DougGregor/mangled-base-protocol-witnesses
[ABI] Use mangled names for base protocol witnesses.
2018-12-04 11:28:27 -08:00
Jordan Rose
0ba51b0eff [test] Remove overlays with extra NS stripping from the mock SDK (#20954)
There were only two tests still using them, and they weren't hard to
migrate over to the normal mock SDK overlays.
2018-12-03 10:48:08 -08:00
David Nadoba
9e19dc918f add test with a struct that contains a large array 2018-12-03 02:45:56 +01:00
David Nadoba
e24b16651d Add test for just a too large array as a function parameter 2018-12-03 02:45:06 +01:00
Karoy Lorentey
1ef6cf4813 Merge pull request #20866 from lorentey/deprecate-hashValue-1
[test] Modernize hashing throughout the test suite
2018-11-30 14:21:04 +00:00
David Nadoba
fcb13f7c53 refuse to import C arrays that are longer than 4096 2018-11-30 14:34:07 +01:00
Slava Pestov
f8d28811bc IRGen: Relax an assertion
The result type mismatch comes up when we're calling a covariant
override of a class method resiliently as well.
2018-11-29 23:20:42 -05:00
Slava Pestov
ff09603f30 IRGen: @_fixed_layout classes still have resilient metadata 2018-11-29 23:20:02 -05:00
Doug Gregor
e52a8838bb [IRGen] Enabled mangled inherited conformances for conditional conformances.
Now that the runtime fills in the private slots with conditional requirement
information, we can always use mangled names for inherited conformances.

Fixes rdar://problem/46282080.
2018-11-29 17:05:05 -08:00
Doug Gregor
19941d3494 [Runtime] Have the runtime copy instantiation arguments into private data.
Rather than having the witness table instantiation function copy the 
instantiation arguments that corresponding to conditional requirements
into the private area, have the runtime do it. We’re going to depend on
these lining up anyway (and the witness table can of course have *more*
private slots that it manages some other way), so centralize the code.

More of rdar://problem/46282080.
2018-11-29 17:05:05 -08:00
Karoy Lorentey
666a22feff [test] Modernize hashing throughout the test suite 2018-11-29 17:38:29 +00:00
Thomas Roughton
89d6cdfc4b Define mappings for CF types on LLP64
As per https://forums.swift.org/t/llp64-targets-and-integral-types/18253/15, define mappings for `CFTypeID`, `CFOptionFlags`, `CFHashCode`  to `UInt` for LLP64 support.
2018-11-27 12:11:43 +13:00
Arnold Schwaighofer
561682bfc1 Add test case 2018-11-14 06:28:54 -08:00
Slava Pestov
a1ae75b2ba Merge pull request #20455 from slavapestov/fix-misc-regressions
Fix a handful of regressions
2018-11-09 13:20:44 -05:00
Slava Pestov
9dd63a4918 AST: Use resilient access pattern for stored properties of resilient types visible via -enable-testing
Fixes <rdar://problem/45919829>.
2018-11-08 19:43:31 -05:00
Doug Gregor
f7b2522bdc [ABI] Retrieve all associated conformances via a runtime function.
Introduce a new runtime entry point, swift_getAssociatedConformanceWitness(),
which extracts an associated conformance witness from a witness table.
Teach IRGen to use this entry point rather than loading the witness
from the witness table and calling it directly.

There’s no advantage to doing this now, but it is staging for changing the
representation of associated conformances in witness tables.
2018-11-08 16:42:08 -08:00
John McCall
1d764fd6b4 Synthesize modify accessors for resilient global variables.
rdar://32936947
2018-11-01 19:28:50 -04:00
Doug Gregor
81909f24ff [IRGen] Update IRGen test cases for swift_getWitnessTable(). 2018-10-25 20:35:27 -07:00
Doug Gregor
a0e3258ba6 [ABI] Collapse generic witness table into protocol conformance record.
Collapse the generic witness table, which was used only as a uniquing
data structure during witness table instantiation, into the protocol
conformance record. This colocates all of the constant protocol conformance
metadata and makes it possible for us to recover the generic witness table
from the conformance descriptor (including looking at the pattern itself).

Rename swift_getGenericWitnessTable() to swift_instantiateWitnessTable()
to make it clearer what its purpose is, and take the conformance descriptor
directly.
2018-10-22 23:36:31 -07:00
Doug Gregor
d627d5b6de Update test cases for mangled associated type witnesses. 2018-09-26 23:19:33 -07:00
Mike Ash
49c3547449 Merge remote-tracking branch 'origin/master' into rename-conflicting-classes-and-methods 2018-09-21 15:52:38 -04:00
Erik Eckstein
39bb14b094 change mangling prefix from $S to $s
This is the final ABI mangling prefix

rdar://problem/38471478
2018-09-19 13:55:11 -07:00
Doug Gregor
fb62977c2b [IRGen] Emit default associated conformance witnesses.
For a resilient protocol that has defaulted associated types, emit
default associated conformance witnesses that compute associated
conformances based on that default witness.

This completes the implementation of resilience protocols that
add new, defaulted associated types, rdar://problem/44167982.
2018-09-19 10:56:20 -07:00
Doug Gregor
4549fcd673 [ABI] Add associated conformance descriptors.
Associated conformance descriptors are aliases that refer to associated
conformance requirements within a protocol descriptor’s list of
requirements. They will be used to provide protocol resilience against
the addition of new associated conformance requirements (which only makes 
sense for newly-introduced, defaulted associated types).
2018-09-17 16:32:29 -07:00
Doug Gregor
2ef9363bd1 [ABI] Add default associated type witnesses to resilient protocols.
When an associated type witness has a default, record that as part of
the protocol and emit a default associated type metadata accessor into the
default witness table. This allows a defaulted associated type to be
added to a protocol resiliently.

This is another part of rdar://problem/44167982, but it’s still very
limiting because the new associated type cannot have any conformances.
2018-09-15 22:04:46 -07:00
Doug Gregor
6948073499 [IRGen] Simplify nondependent associated type witness metadata accessors.
When we’re creating an associated type witness metadata accessor for
resilience reasons, but the associated type witness doesn’t involve any
type parameters, directly form the type metadata reference (and don’t
cache it).

While here… update all of the IRGen/SILGen test cases perturbed by the
introduction of resilient associated type access patterns.
2018-09-14 20:59:03 -07:00