Commit Graph

15033 Commits

Author SHA1 Message Date
Joe Groff
d885098b58 Merge pull request #14169 from jckarter/optional-abi-check
SILGen: Accept optionals as ABI-compatible in either direction as block arguments.
2018-01-26 15:45:55 -08:00
Joe Groff
f9c267c9ef SILGen: Accept optionals as ABI-compatible in either direction as block arguments.
The thunking code we have for introducing runtime nil checks in thunks when an optional-to-non conversion appears in contravariant position doesn't handle blocks. This somehow-worked in previous versions of Swift (maybe due to assertions being off). Spot fix for rdar://problem/36843476.
2018-01-26 14:37:40 -08:00
Graydon Hoare
9ab1c017f5 [BatchMode] Change option to -enable-batch-mode, add a -disable variant. 2018-01-26 10:33:16 -08:00
swift-ci
b96e8a95db Merge pull request #14168 from gottesmm/pr-b2ba88579e44bdddd48a5607159d501649a59694 2018-01-25 19:21:39 -08:00
Doug Gregor
153b192f96 Merge pull request #14174 from DougGregor/check-class-constraint
[Type checker] Validate class constraints for generic arguments of types
2018-01-25 19:07:20 -08:00
Doug Gregor
ee99c8af99 [Type checker] Validate class constraints for generic arguments of types.
Class constraints (spelled T: AnyObject) on generic types were not
getting checked on generic arguments. This appears to be a regression
introduced in Swift 4.0 with the removal of AnyObject, leading to a
fairly significant soundness hole that could produce crashers later
on.

Fixes SR-6841 / rdar://problem/36884025.
2018-01-25 16:34:08 -08:00
Michael Gottesman
950e55d899 [sil][typelowering] Inline (i.e. eliminate) the confusing method TypeLowering::getLoweringStyle() and change it to properly use TypeExpansionKind::None instead of TypeExpansionKind::DirectChildren for the non-expansion case.
Now we will consistently expand destroy_addr/copy_addr into either
{retain,release}_value or into ARC operations on its most derived descendents.
This will improve code-size (by not expanding when we didn't intend to), but
more importantly preserve invariants that the ARC optimizer depends upon.

rdar://36509461
2018-01-25 14:09:57 -08:00
swift-ci
594760beeb Merge pull request #14143 from gottesmm/pr-e157f770a9c37f5e04723d39871a9898c4632a3c 2018-01-24 17:53:03 -08:00
Graydon Hoare
ff104e4f11 Merge pull request #14059 from graydon/count-stats-stacks
[Stats] Expand FrontendStatsTracer to trace multiple entity-types.
2018-01-24 17:30:26 -08:00
Jordan Rose
4b727e5813 Merge pull request #13841 from jrose-apple/ns-error-domangling
Mangle synthesized error structs as a variant of the imported enum
2018-01-24 17:23:00 -08:00
Mark Lacey
1585b837ac Merge pull request #14094 from rudkx/iuo-code-completion-change
Update code completion printing for removal of IUOs from the type sys…
2018-01-24 16:53:11 -08:00
Michael Gottesman
d14024acd3 [sil][typelowering] Rename the enum LoweringStyle => TypeExpansionKind and add a None case to make its usage clearer.
This enum controls how certain routines in TypeLowering potentially expand types
when performing copy_value/destroy_value operations. Its previous form was
problematic because:

1. The name LoweringStyle does't suggest anything related to expansion really.
The new has the word expansion in it explicitly.
2. The cases of LoweringStyle used to be Shallow, Deep. This caused confusion
since Shallow (the base case) was not a no-op. It just caused us to expand into
children. Now TypeExpansionKind has 3 cases to make this clear: None,
DirectChildren, and MostDerivedDescendents.

Confusion around this API caused us to canonicalize ARC operations differently
for different operations (e.g. copy_value/destroy_value vs
copy_addr/destroy_addr). This caused us to misout on some code-size wins (since
we were splitting some operations onto DirectChildren of aggregates), but more
importantly also caused the optimizer to break an invariant that the ARC
optimizer relied upon: local semantic pairings being at the same level of
abstraction. In a subsequent commit, I am going to fix that bug.

rdar://36509461
2018-01-24 16:28:03 -08:00
Pavel Yaskevich
b1251b349f Merge pull request #14125 from xedin/metaprogam-bultin-meta
[Mangled name -> metadata] Add built-in types support
2018-01-24 14:53:32 -08:00
Jordan Rose
3f4cba25d4 Use a semantic ClangImporterSynthesizedTypeAttr for error structs
...rather than the ad hoc CustomTypeNameManglingAttr I was using
before. As John pointed out, the AST should be semantic wherever
possible.

We may someday want to get out of this being an attribute altogether,
or duplicating information that's available in the original Clang
node, by actually storing a reference to that node somewhere. This is
tricky and mixed up with deciding what hasClangNode() or
getClangDecl() would mean, though, so for now the attribute just
carries the information we need.
2018-01-24 10:57:52 -08:00
Jordan Rose
e63879dc48 [Mangling] Define "related entity" operators 'LA'...'LJ'
(and 'La'...'Lj')

Use this for the synthesized structs for error enums, as described in
the previous commit, instead of reusing the "private discriminator"
feature. I left some space in the APIs for "related entity kinds" that
are longer than a single character, but I don't actually expect to use
it any time soon. It's mostly just easier to deal with StringRef than
with a bare char.

Note that this doesn't perfectly round-trip to the old mangling; I had
it treat these nodes as private discriminators with a prefixed "$"
instead. We don't depend on that for anything, though.
2018-01-24 10:52:46 -08:00
Graydon Hoare
d139ab2968 [BatchMode] Expand lifetime of ToolChain, pass reference to it to Compilation. 2018-01-24 10:31:19 -08:00
Graydon Hoare
10c0abea5d [BatchMode] Add BatchJob subclass of Job, for use with BatchModeCompile. 2018-01-24 10:31:19 -08:00
Graydon Hoare
18023832e9 [BatchMode] Fix mis-chosen name in previous PR, NFC. 2018-01-24 10:31:19 -08:00
Graydon Hoare
c4e58af039 [BatchMode] Add BatchModeCompile, multi-input form of StandardCompile. 2018-01-24 10:31:19 -08:00
Graydon Hoare
70e39883a9 [BatchMode] Add -batch-mode driver option. 2018-01-24 10:31:19 -08:00
Pavel Yaskevich
07534a6464 [Runtime] NFC: Create a .def file with all supported built-in types 2018-01-23 23:40:13 -08:00
David Ungar
bf439cd2c6 Merge pull request #14090 from davidungar/PR-18-3b
[BatchMode] Rename FrontendInputs::AllFiles to AllInputs, etc
2018-01-23 20:14:46 -08:00
Jordan Rose
9c1a22ad0f Mangle synthesized error structs as a variant of the imported enum
When importing a C enum with the ns_error_domain attribute, we
synthesize a struct containing an NSError object to represent errors
in that domain. That synthesized struct should have a mangled name
that ties it to the original C enum, if we want it to be stable, and
now it does.

Before: $SSC7MyErrorV (a normal struct, which is a lie)
After: $SSC11MyErrorCode13ns_error_enumLLV
  kind=Global
    kind=Structure
      kind=Module, text="__C_Synthesized"
      kind=PrivateDeclName
        kind=Identifier, text="ns_error_enum"
        kind=Identifier, text="MyErrorCode"

Using the "private discriminator" feature allows us to pack in extra
information about the declaration without changing the mangling
grammar, and without stepping on anything the importer is using.

More rdar://problem/24688918
2018-01-23 17:05:43 -08:00
swift-ci
501a176a26 Merge pull request #14091 from DougGregor/sr-6797 2018-01-23 15:18:40 -08:00
David Ungar
ec2a9573cc Rename FrontendInputs::AllFiles to AllInputs, getAllFiles to getAllInputs, etc. 2018-01-23 14:01:15 -08:00
Doug Gregor
d18ecda796 [GSB] Ensure that we don't build an invalid potential archetype.
Queries against the generic signature might use types that are
ill-formed for that generic signature, e.g., because they refer to
associated types of unrelated protocols. Detect such conditions to
maintain GSB invariants that all potential archetypes in a well-formed
generic signature are well-formed.

Fixes the crash in SR-6797 / rdar://problem/36673825.
2018-01-23 13:52:06 -08:00
Mark Lacey
5518bae548 Update code completion printing for removal of IUOs from the type system.
This doesn't address any issues in loss of functionality when trying
to complete IUO-typed things, just the various printing issues.
2018-01-23 13:36:04 -08:00
Greg Parker
7b9224794e [runtime] Reinstate TwoWordPair hack for swiftcall returns. (#14079)
clang is miscompiling some swiftcall functions on armv7s.
Stop using swiftcall in some places until it is fixed.

Reverts c5bf2ec (#13299).

rdar://35973477
2018-01-23 01:04:01 -08:00
Greg Titus
0520216b02 Merge pull request #14041 from gregomni/fallthrough
[Sema/SILGen] Support for fallthrough into cases with pattern variables.
2018-01-22 19:50:59 -08:00
Rintaro Ishizaki
98fc073e2e [Syntax] Don't rebuild Syntax with RawSyntax in SyntaxVisitor (#14057)
We don't guarantee RawSyntax nodes as unique object in the tree, while
we do that for SyntaxData. We shouldn't recreate SyntaxData once it was
built.
2018-01-22 14:24:20 -08:00
swift-ci
7f8c59eb31 Merge pull request #13898 from atrick/verify-inoutalias 2018-01-22 13:46:04 -08:00
Mark Lacey
99229582ee Merge pull request #14053 from rudkx/refactor-type-match
Remove unused argument to type matcher.
2018-01-22 01:09:30 -08:00
Mark Lacey
cad0722305 Remove unused argument to type matcher. 2018-01-21 23:43:09 -08:00
Graydon Hoare
5f130a8d35 [Stats] Expand FrontendStatsTracer to trace multiple entity-types. 2018-01-21 23:37:54 -08:00
Slava Pestov
1831b5471e SIL: Clean up 'early serialization' a bit
- Clear the 'serialized' flag on witness tables and vtables
  after serialization, not just functions. This fixes SIL
  verifier failures if post-serialization SIL is printed
  out and parsed back in.

- Clear the 'serialized' flag when deserializing functions,
  witness tables and vtables in a module that has already
  been serialized. This fixes SIL verifier failures if
  we deserialize more declarations after serializing SIL.

We were seeing SIL verifier failures on bots that run the
tests with the stdlib built with non-standard flags.

Unfortunately I don't have a reduced test case that would
fail in PR testing without these fixes.

Fixes <rdar://problem/36682929>.
2018-01-21 01:35:13 -08:00
Slava Pestov
8f9f7afc55 AST: Static properties of fixed-layout types are resilient
We don't want @_fixed_layout to apply to static properties, or you
get fun consequences like not being able to change static stored
properties defined in extensions of imported types to computed.
2018-01-21 01:31:44 -08:00
Slava Pestov
834a121b10 AST: @objc_non_lazy_realization should be underscored and UserInaccessible 2018-01-21 01:31:44 -08:00
gregomni
0c3c0fd59b Support for fallthrough into cases with pattern variables. 2018-01-20 11:10:00 -08:00
Graydon Hoare
6f25962f50 Merge pull request #14034 from graydon/batch-mode-driver-work
NFC: Batch mode driver work
2018-01-19 23:01:14 -08:00
Mike Ash
406ebaddfc [Runtime] Implement overflow check for weak refcounts (#14023)
* Check for overflow in incrementWeak().

This mirrors what is currently done for unowned reference counts, where overflowing the side table field produces a fatal error. Without this, the count silently wrapped from 2^31-1 to 0, which then caused breakage when the balancing releases happened (possibly including use-after-free bugs).

* Fix the implementation of RefCounts::getWeakCount().

The previous implementation was only appropriate for heap objects, but not side tables. This resulted in the weak count always returning 0 or 1. This change specializes the implementation for the two different cases and returns the correct count for side tables.

* Test large weak retain counts.

This tests the largest allowed weak retain count, as well as the overflow check when that count is exceeded.
2018-01-19 19:13:47 -08:00
swift-ci
af3edc16ed Merge pull request #14030 from dcci/ubsan 2018-01-19 16:21:26 -08:00
Graydon Hoare
d74c1a512a [BatchMode] Make InvocationInfo and Job support multiple FilelistInfos, NFC. 2018-01-19 15:15:08 -08:00
swift-ci
8da52f8fd1 Merge pull request #14031 from DougGregor/abi-protocol-descriptor-superclass 2018-01-19 15:10:42 -08:00
Davide Italiano
316d0b56a3 [Type] The context in getSinglyDesugaredType() can be null.
Don't dereference it for NameAlias(es). Also add an assertion in
the constructor to catch violations in future.

<rdar://36641907>
2018-01-19 14:17:59 -08:00
Graydon Hoare
22775c87a9 [BatchMode] Add FilelistInfo::WhichFiles::PrimaryInputs, NFC. 2018-01-19 14:16:20 -08:00
Graydon Hoare
0f09a95679 [BatchMode] Change FiellistInfo::WhichFiles to an enum class, NFC. 2018-01-19 14:05:42 -08:00
Doug Gregor
eb4f9a3d4c [ABI] Reserve space in the protocol descriptor for the superclass.
Extend protocol descriptors with a field for the superclass bound of the
protocol itself. This carves out space in the ABI for

    class C { }
    protocol P : C { ... }

although the feature is not yet implemented.
2018-01-19 14:03:24 -08:00
Graydon Hoare
ba4335b17d [BatchMode] Split up Driver::buildJobsForAction, NFC. 2018-01-19 12:36:03 -08:00
Erik Eckstein
bf87035a36 GlobalOpt: Move the object outlining from GlobalOpt into a separate pass "ObjectOutliner"
We run GlobalOpt multiple times in the pass pipeline but in some cases object outlining shouldn't be done too early.
Having it done in a separate pass enables to run it independently from GlobalOpt.
2018-01-19 11:32:36 -08:00
Erik Eckstein
db69b8d433 SideEffectAnalysis: don't assume the worst side-effects for a release instruction
Instead let the client decide what to do with this.
Sometimes the client knows what side effect a release instruction really has.
2018-01-19 11:32:35 -08:00