Commit Graph

3949 Commits

Author SHA1 Message Date
John McCall
b51a69f29f Count tail-padding in the size of imported C types.
This allows us to freely pass the address of a variable of such
types to a C function without worrying about it overwriting other
things if e.g. it memcpy's sizeof(T) bytes and thus clobbers the
otherwise-non-existent tail padding.

There are ways to get this optimization back, but they require
things like materializing to a temporary instead of passing the
address directly.  We haven't done that work yet, so we don't
get to take advantage of it.

rdar://26828018
2016-08-02 13:26:11 -07:00
John McCall
afdda3d107 Implement SE-0117.
One minor revision: this lifts the proposed restriction against
overriding a non-open method with an open one.  On reflection,
that was inconsistent with the existing rule permitting non-public
methods to be overridden with public ones.  The restriction on
subclassing a non-open class with an open class remains, and is
in fact consistent with the existing access rule.
2016-08-02 07:46:38 -07:00
swift-ci
1f5301f0ec Merge pull request #3869 from adrian-prantl/25427596 2016-08-01 14:32:25 -07:00
Adrian Prantl
4136f07072 Debug Info: Use artificial locations for emitting aggregate shadow copies.
<rdar://problem/25427596>
2016-07-29 15:10:27 -07:00
Adrian Prantl
6e61b33584 Debug Info: Propagate dbg.value intrinsics into basic blocks that
contain a variable live range extension intrinsic.

This is working around a shortcoming of LLVM.
LiveDebugValues should be doing this but can't in general because it
currently only tracks register locations.

rdar://problem/27348117
2016-07-29 14:12:57 -07:00
Mark Lacey
cbb617ed15 Merge pull request #3743 from rudkx/inline-asm-when-optimizing
Only emit empty inline asm instructions for cond_fail when optimizing.
2016-07-26 23:38:26 -07:00
Jordan Rose
4560bac57c Fix misuses of llvm::StringSwitch.
StringSwitch forms references to temporaries, so it cannot be stored
into a local. (Really 'auto' is to blame here; see LLVM r276671.)
2016-07-26 15:48:01 -07:00
Mark Lacey
122827ea00 Only emit empty inline asm instructions for cond_fail when optimizing.
These inline asm instructions are used to block branch folding when
optimizing, to ensure that we have unique trap locations (and associated
debug info) for each cond_fail.

We only need these when we're optimizing, and emitting them can block
fast isel, so only emit them when optimizing.
2016-07-26 15:38:47 -07:00
John McCall
c8c41b385c Implement SE-0077: precedence group declarations.
What I've implemented here deviates from the current proposal text
in the following ways:

- I had to introduce a FunctionArrowPrecedence to capture the parsing
  of -> in expression contexts.

- I found it convenient to continue to model the assignment property
  explicitly.

- The comparison and casting operators have historically been
  non-associative; I have chosen to preserve that, since I don't
  think this proposal intended to change it.

- This uses the precedence group names and higherThan/lowerThan
  as agreed in discussion.
2016-07-26 14:04:57 -07:00
Slava Pestov
57c58176bc AST: Remove noreturn bit from function types 2016-07-24 00:15:34 -07:00
Andrew Trick
ecc6bd51ad Type system support for raw pointer conversion. (#3685)
* [Type System] Handle raw pointer conversion.

As proposed in SE-0107: UnsafeRawPointer.
https://github.com/apple/swift-evolution/blob/master/proposals/0107-unsaferawpointer.md#implicit-argument-conversion

UnsafeMutablePointer<T> -> UnsafeMutableRawPointer
UnsafeMutablePointer<T> -> UnsafeRawPointer
UnsafePointer<T> -> UnsafeRawPointer
UnsafeMutableRawPointer -> UnsafeRawPointer

inout:
&anyVar -> UnsafeMutableRawPointer
&anyVar -> UnsafeRawPointer

array -> UnsafeRawPointer
string -> UnsafeRawPointer

varArray -> UnsafeMutableRawPointer

* Rename expectEqual(_, _, sameValue:) to expectEqualTest to workaround a type system bug.

<rdar://26058520> Generic type constraints incorrectly applied to functions with the same name

This is exposed by additions to the type system for UnsafeRawPointer.

Warning: unit tests fail very confusingly without this fix.
2016-07-23 11:30:49 -07:00
Slava Pestov
6ff02a9fe2 AST/SIL: Add a new Never type, and a TypeBase::isNever() check
Mostly NFC, this is just plumbing for the next patch.
Note that isNever() returns true for any uninhabited
enum.

It should be generalized so that stuff like (Never, Int)
is also known to be uninhabited, or even to support
generic substitutions that yield uninhabited types,
but for now I really see no reason to go that far, and
the current check for an enum with no cases seems
perfectly adequate.
2016-07-22 14:55:45 -07:00
Arnold Schwaighofer
46c1f1e29d Merge pull request #3679 from aschwaighofer/partial_apply_forwarder_fix
Partial apply forwarder fix for going from single ref counted context to a generic argument
2016-07-22 12:08:26 -07:00
Adrian Prantl
73ac8296c4 Cleanup: Don't store VarDecls in DebugTypeInfo. 2016-07-22 09:42:15 -07:00
Arnold Schwaighofer
5f4a8ec8b7 Partial apply forwarder fix for going from single ref counted context to a generic argument
In the case we are forwarding from partial apply that captures a concrete ref
counted value to a generic function we need to use the swift retainable type
from the captured value rather than the type of the generic function we are
calling. The type of the generic argument is opaque and we can't allocate
storage for an opaque type.

rdar://24306823
2016-07-22 09:25:02 -07:00
Adrian Prantl
3b3e308ed3 IRGenDebugInfo: Pass in the VarDecl separatly when emitting variables. (NFC) 2016-07-21 16:03:49 -07:00
Luke Larson
74e0498015 Revert "Update master to build with Xcode 8 beta 3, OS X 10.12, iOS 10, tvOS 10, and watchOS 3 SDKs."
This reverts commit 62d1fa760c.
2016-07-19 15:18:17 -07:00
Mishal Shah
62d1fa760c Update master to build with Xcode 8 beta 3, OS X 10.12, iOS 10, tvOS 10, and watchOS 3 SDKs. 2016-07-19 22:31:34 +02:00
Joe
67dccb283e [SE-0095] Code feedback changes; Any is parsed as a keyword
- Any is made into a keyword which is always resolved into a TypeExpr,
allowing the removal of the type system code to find TheAnyType before
an unconstrained lookup.
- Types called `Any` can be declared, they are looked up as any other
identifier is
- Renaming/redefining behaviour of source loc methods on
ProtocolCompositionTypeRepr. Added a createEmptyComposition static
method too.
- Code highlighting treats Any as a type
- simplifyTypeExpr also does not rely on source to get operator name.
- Any is now handled properly in canParseType() which was causing
generic param lists containing ‘Any’ to fail
- The import objc id as Any work has been relying on getting a decl for
the Any type. I fix up the clang importer to use Context.TheAnyType
(instead of getAnyDecl()->getDeclaredType()). When importing the id
typedef, we create a typealias to Any and declare it unavaliable.
2016-07-19 12:01:37 -07:00
Joe
3938d5682a [SE-0095] [Runtime], [Demangler], & AST printer updated to new composition syntax
- All parts of the compiler now use ‘P1 & P2’ syntax
- The demangler and AST printer wrap the composition in parens if it is
in a metatype lookup
- IRGen mangles compositions differently
    - “protocol<>” is now “swift.Any”
    - “protocol<_TP1P,_TP1Q>” is now “_TP1P&_TP1Q”
- Tests cases are updated and added to test the new syntax and mangling
2016-07-19 12:01:37 -07:00
David Farler
f95ffdef7d Merge pull request #3526 from bitjammer/remote-mirror-version-hidden
[IRGen] Use hidden visibility for __swift_reflection_version constant
2016-07-19 11:46:16 -07:00
Andrew Trick
2b732d0af5 Introduce Builtin.bindMemory and SIL bind_memory. (#3573)
Required for SE-0107: UnsafeRawPointer.
2016-07-18 13:18:03 -07:00
Michael Gottesman
a047bb7564 Revert "Fix the build."
This reverts commit dc24c2bd34.

Turns out Chris fixed the build but when I was looking at the bots, his fix had
not been tested yet, so I thought the tree was still red and was trying to
revert to green.
2016-07-17 16:29:18 -07:00
Michael Gottesman
dc24c2bd34 Fix the build.
This reverts commit b4cba58330.
This reverts commit a602927c75.
This reverts commit 55fbe5a763.
2016-07-17 16:17:15 -07:00
Chris Lattner
55fbe5a763 Remove Boolean as a special, privileged type used by Sema, and instead
use the concrete Bool type.  This eliminates a bunch of complexity and
makes diagnostics more concrete.
2016-07-17 15:14:24 -07:00
Andrew Trick
c47687da2c Add an isStrict flag to SIL pointer_to_address. (#3529)
Strict aliasing only applies to memory operations that use strict
addresses. The optimizer needs to be aware of this flag. Uses of raw
addresses should not have their address substituted with a strict
address.

Also add Builtin.LoadRaw which will be used by raw pointer loads.
2016-07-15 15:04:02 -05:00
David Farler
14192bfa99 [IRGen] Use hidden visibility for __swift_reflection_version constant
This prevents it from having weak external linkage.

rdar://problem/27367632
2016-07-15 00:30:12 -07:00
Brian Gesiak
4c438939d0 Merge pull request #3513 from compnerd/export-force-load
IRGen: give the force load symbol export DLL storage
2016-07-14 16:37:25 -07:00
Saleem Abdulrasool
eeebf0cbe3 IRGen: give the force load symbol export DLL storage
The force load symbol was not marked as DLL export.  This would result in the
symbol not being emitted into the import library and consequently not being
available to the consumer.  This ensures that the symbol is visible outside of
the module.
2016-07-14 09:35:30 -07:00
David Farler
787b0dcc3f Merge pull request #3419 from bitjammer/remote-mirror-metadata-version
SwiftRemoteMirror: Add reflection metadata version query API
2016-07-14 08:30:18 -07:00
swift-ci
bd20e82273 Merge pull request #3468 from swiftix/master 2016-07-13 03:36:02 -07:00
Roman Levenstein
8cc0f1161a Fix an IRGen bug related to re-use of type metadata.
The self metadata in the changed method corresponds to the conforming type. For an inheritable conformance, that may be a subclass of the static type, and so the self metadata will be inexact. Currently, all conformances are inheritable.

rdar://27301453
2016-07-12 20:43:34 -07:00
Robert Widmann
f97e5dcb0e [SE-0115][1/2] Rename *LiteralConvertible protocols to ExpressibleBy*Literal. This
change includes both the necessary protocol updates and the deprecation
warnings
suitable for migration.  A future patch will remove the renamings and
make this
a hard error.
2016-07-12 15:25:24 -07:00
Doug Gregor
823c24b355 [SE-0112] Rename ErrorProtocol to Error.
This is bullet (5) of the proposed solution in SE-0112, and the last
major piece to be implemented.
2016-07-12 10:53:52 -07:00
Doug Gregor
b86b8126a7 [SE-0112] Import an Objective-C error enum as a struct wrapping NSError.
A given Objective-C error enum, which is effectively an NS_ENUM that
specifies its corresponding error domain, will now be mapped to an
ErrorProtocol-conforming struct that wraps an NSError, much like
NSCocoaError does. The actual enum is mapped to a nested "Code"
enum. For example, CoreLocation's CLError becomes:

  struct CLError : ErrorProtocol {
    let _nsError: NSError
    // ...
   @objc enum Code : Int {
     case ...
   }
  }

This implements bullet (2) in the proposed solution of SE-0112, so
that Cocoa error types are mapped into structures that maintain the
underlying NSError to allow more information to be extracted from it.
2016-07-12 10:53:52 -07:00
David Farler
fd46a60785 IRGen: Emit reflection metadata version into Swift binaries
Emit a 16-bit constant that tracks the version of the reflection
metadata emitted into binaries. This can be used to cross-check
what is supported by the SwiftRemoteMirror library with the new
version API.

rdar://problem/27251582
2016-07-08 17:21:25 -07:00
swift-ci
c41d06443b Merge pull request #3416 from aschwaighofer/fix_multismallpayloadwithemptycases 2016-07-08 13:02:36 -07:00
adrian-prantl
2aa80e2df3 Merge pull request #3409 from adrian-prantl/26221951
Don't emit line table entries for SIL functions marked as thunks.
2016-07-08 12:14:53 -07:00
Adrian Prantl
0e370359b9 Refactor and clean up IRGenSIL::emitShadowCopy. (NFC) 2016-07-08 12:09:10 -07:00
Arnold Schwaighofer
f538dd7075 Fix Enums with multiple payloads of < 32bit and empty payloads.
This used to crash because the code storing empty payload enum tag values would
use the bit width of the tag (32 bit) as the minimum unit to store to the
payload even if the actual bits required to store the biggest tag value in the
payload was much smaller.

With payload bit-widths < 32bit we would run out of space crashing looking for
new payload to store the value to ...

Instead pass the maximum size of the bits that need storing down.

rdar://26926035
2016-07-08 11:21:30 -07:00
Adrian Prantl
3ffaa762bc Don't emit line table entries for SIL functions marked as thunks.
rdar://problem/26221951
2016-07-07 19:03:28 -07:00
swift-ci
3691b48c67 Merge pull request #2080 from compnerd/dllstorage 2016-07-07 18:02:08 -07:00
adrian-prantl
b1e0afc039 Merge pull request #3350 from adrian-prantl/25498103
Debug info diet!
2016-07-07 11:34:21 -07:00
Adrian Prantl
ebc47e40be Shadow copies: Use the function's debug scope for the artificial location
instead of the variable's potentially incorrectly not inlined scope.

rdar://problem/27206870
2016-07-06 18:50:30 -07:00
Saleem Abdulrasool
7352392830 IRGen: add support for DLL Storage semantics
Add initial support for modelling DLL Storage semantics for global values.  This
is needed to support the indirect addressing mechanism used on Windows.
2016-07-06 18:03:57 -07:00
Adrian Prantl
d3f8c1ea96 Fix a logic error that would cause shadow copies to be emitted at -O.
<rdar://problem/27206870>
2016-07-06 15:46:27 -07:00
Adrian Prantl
361beff9c0 Emit pointer-sized structs only when -gdwarf-types is specified.
rdar://problem/25498103
2016-07-05 17:03:10 -07:00
Adrian Prantl
0847225962 Only emit DWARF types for enums when -gdwarf-types is specified. 2016-07-05 16:00:09 -07:00
Adrian Prantl
33ac7eb351 Only emit DWARF types for tuple types under -gdwarf-types. 2016-07-05 15:18:05 -07:00
Adrian Prantl
5504a188a3 Only emit DWARF types for structs when -gdwarf-types is specified. 2016-07-05 15:17:37 -07:00