Commit Graph

7436 Commits

Author SHA1 Message Date
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 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
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
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
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
Slava Pestov
f5f715f8ff SILGen: Support multiple-entry case blocks with address-only bindings
Fixes <rdar://problem/30870493>, <https://bugs.swift.org/browse/SR-4163>.
2018-01-17 21:02:08 -08:00
Doug Gregor
663d6af063 [ABI] Factor out the protocol conformance flags (again).
Protocol conformance records are becoming richer and more interesting;
separate out the "flags" word and add the various other fields that we
want there (is-retroactive, is-synthesized-nonunique, # of conditional
requirements).
2018-01-17 10:06:07 -08:00
swift-ci
1381d084c9 Merge pull request #13987 from apple/revert-12818-cover-model 2018-01-16 21:05:09 -08:00
Xi Ge
71af76a87e libSyntax: optionally emit diagnostics for unknown expressions and declarations. (#13973)
With more syntax nodes being specialized, we'd like this
straight-forward way to pinpoint unknown entities. This diagnostics
is only issued in -emit-syntax frontend action and swift-syntax-test
invocation.
2018-01-16 16:14:57 -08:00
Pavel Yaskevich
7034ef92b6 Revert "Stricter enforcement of the "large space" heuristic" 2018-01-14 19:37:44 -08:00
David Zarzycki
6d670c89c3 [AST] NFC: Find Optional enum elements semantically, not nominally 2018-01-14 19:01:28 -05:00
David Zarzycki
f0c08a3010 [AST] NFC: Add Decl::getAsGenericContext()
Adding getAsGenericContext() cleans up some code, and improves the
Swift.swiftmodule build time by almost half a percent on LLVM
top-of-tree and with a simulated fix for LLVM PR35909.
2018-01-14 09:34:27 -05:00
David Zarzycki
11666de1cd [AST] NFC: Reorder Decl nodes to make isa/dyn_cast faster
Please note that %target-swift-ide-test implicitly leaks the
DeclNode.def order in its output. See SR-6755.
2018-01-14 09:34:27 -05:00
John McCall
52bb547a7e Merge pull request #13866 from rjmccall/accessor-decl
Split AccessorDecl out from FuncDecl.  NFC.
2018-01-12 17:02:35 -05:00
Pavel Yaskevich
988067e1e4 Merge pull request #13902 from xedin/dedup-param-list-getters
[AST] NFC: Add ParameterList::getType accessor which supports callback for param types
2018-01-12 12:42:51 -08:00
John McCall
7f0f8830cd Split AccessorDecl out from FuncDecl. NFC.
This has three principal advantages:

- It gives some additional type-safety when working
  with known accessors.

- It makes it significantly easier to test whether a declaration
  is an accessor and encourages the use of a common idiom.

- It saves a small amount of memory in both FuncDecl and its
  serialized form.
2018-01-12 14:20:27 -05:00
Pavel Yaskevich
5c33809660 [AST] NFC: Add ParameterList::getType accessor which supports callback for param types 2018-01-12 11:02:25 -08:00
Slava Pestov
6ac2dde97e Sema: Enforce inlinable restrictions for stored property initializers in fixed layout types
We want stored property initializers of fixed layout structs to be
inlinable, so that inlinable initializers can be fully eliminated
by the optimizer.

This is the first step in fixing <rdar://problem/36454839>.
2018-01-12 00:06:03 -08:00
Slava Pestov
99bc440c50 AST: Add NominalTypeDecl::isFormallyResilient()
We don't want -enable-resilience to change type checker behavior,
so in a few places we will need to check if a declaration is
"formally fixed-layout", which will be false if the declaration
was not explicitly marked as @_fixed_layout, even when the module
was not built with resilience.
2018-01-12 00:06:02 -08:00
Slava Pestov
9ff97367df AST: Rename hasFixedLayout() to isResilient() and flip polarity
In IRGen we call this isResilient() already in IRGen, and it's
more consistent to call it the same thing everywhere.
2018-01-11 21:57:42 -08:00
Slava Pestov
730b3d2cf6 AST: Remove unused diagnostics 2018-01-11 21:37:28 -08:00
Mark Lacey
41c37c1b46 IUO: Update AST printer to print '!' for Optionals that are implicitly unwrapped.
Once we generate Optional<T> for T! we'll need this to ensure that we
continue to print '!' in places where the user specified it.
2018-01-11 14:42:05 -08:00
Greg Parker
9637b4a6e1 [runtime] Rename class SwiftObject to Swift._SwiftObject. (#13748)
SwiftObject needs to be renamed to avoid ObjC class name collisions between
the Swift stable ABI and older Swift apps.

rdar://35554345
2018-01-09 16:16:55 -08:00
Michael Ilseman
e45fba760c Merge pull request #12793 from johnfairh/nested-param-attrs
[ASTPrinter] Print parameter type attributes more often
2018-01-09 11:16:12 -08:00
David Zarzycki
dc43a4a51f [AST] NFC: Feedback from Jordan 2018-01-08 21:01:01 -05:00
David Zarzycki
887471d613 [AST] NFC: Feedback from Jordan; plus micro-optimizations 2018-01-08 17:01:52 -05:00
David Zarzycki
49ce2c3f35 [AST] NFC: Feedback from John; plus micro-optimization 2018-01-08 13:41:55 -05:00
David Zarzycki
0e1251648c [AST] NFC: DeclContext micro-optimizations 2018-01-08 13:33:49 -05:00
David Zarzycki
e9b643026b [AST] NFC: Stop over aligning DeclContexts
DeclContexts as they exist today are "over aligned" when compared to
their natural alignment boundary and therefore they can easily cause
adjacent padding when dropped into the middle of objects via C++
inheritance, or when the clang importer prefaces Swift AST allocations
with a pointer to the corresponding clang AST node.

With this change, we move DeclContexts to the front of the memory layout
of AST nodes. This allows us to restore natural alignment, save memory,
and as a side effect: more easily avoid "over alignment" in the future
because DeclContexts now only need to directly track which AST node
hierarchy they're associated with, not specific AST nodes within each
hierarchy.

Finally, as a word of caution, after this change one can no longer
assume that AST nodes safely convert back and forth with "void*". For
example, WitnessTableEntry needed fixing with this change.
2018-01-08 12:21:14 -05:00
Vedant Kumar
6debe84674 [Coverage] Record PGO function name in SILCoverageMap
This simplifies the lowering of instrprof_increment by getting rid of a
call to llvm::getPGOFuncName().
2018-01-05 17:20:20 -08:00
Slava Pestov
d1f1c682bc AST: Remove AbstractStorageDecl::{has,requires}ForeignGetterAndSetter() 2018-01-04 21:53:34 -08:00
Mark Lacey
b6430d0644 IUO: Add ImplicitlyUnwrappedFunctionConversionExpr.
This expression node is only used when applying the results of
expression type checking. It initially appears above the function
reference that returns an optional that needs to be unwrapped, and
then when dealing with function application we remove this and insert
a node to force-unwrap the result of the function application.
2018-01-04 11:40:45 -08:00
Mark Lacey
13859647f7 Merge pull request #13680 from rudkx/map-signature-looking-through-inout
Sema: Look through inout when mapping IUOs to Optionals.
2018-01-03 14:38:11 -08:00
David Zarzycki
1ebc8e95f7 Merge pull request #13691 from davezarzycki/nfc_perf_getDesugaredType2
[AST] Perf: Improve getDesugaredType() efficiency
2018-01-03 17:20:01 -05:00
Mark Lacey
e5a0c968ab Fix inout optional overload warning for methods.
Also add a note saying that allowing these overloads is deprecated and
will be removed in a future release.
2018-01-03 09:38:47 -08:00
David Zarzycki
77a29c9551 [AST] Perf: Improve getDesugaredType() efficiency
Make getDesugaredType() as fast as possible for now. With the old way:

1) Switching over the sugared types turned into a frequently
   mispredicted branch because the sugar in the type system is random
   as far as the processor is concerned.
2) Storing the underlying/singlely-desugared type at different offsets
   in memory adds more code bloat and misprediction.

Short of a major redesign to avoid pointer chasing, this is probably as
fast as the method will get.
2018-01-03 09:45:48 -05:00
Mark Lacey
6347112a04 Downgrade from error to warning for overloading by kind of optional.
Rather than error for overloading by the kind of optional (T? vs. T!)
for inout parameters, just emit a warning for now and continue
compiling.

We'll need to turn this back into an error when we remove IUOs from
the type system.
2018-01-03 00:48:53 -08:00
Chris Lattner
415cd50ba2 Reduce array abstraction on apple platforms dealing with literals (#13665)
* Reduce array abstraction on apple platforms dealing with literals

Part of the ongoing quest to reduce swift array literal abstraction
penalties: make the SIL optimizer able to eliminate bridging overhead
 when dealing with array literals.

Introduce a new classify_bridge_object SIL instruction to handle the
logic of extracting platform specific bits from a Builtin.BridgeObject
value that indicate whether it contains a ObjC tagged pointer object,
or a normal ObjC object. This allows the SIL optimizer to eliminate
these, which allows constant folding a ton of code. On the example
added to test/SILOptimizer/static_arrays.swift, this results in 4x
less SIL code, and also leads to a lot more commonality between linux
and apple platform codegen when passing an array literal.

This also introduces a couple of SIL combines for patterns that occur
in the array literal passing case.
2018-01-02 15:23:48 -08:00
David Zarzycki
9b48b5074a [AST] Perf: Unite DictionaryType with SyntaxSugarType
1) Move existing SyntaxSugarTypes under a new subclass called UnarySyntaxSugarType.
2) Make DictionaryType subclass SyntaxSugarType.

This helps improve getDesugaredType() performance by ensuring that
ImplOrContext is stored at the same field offset in memory.

This also de-boilerplates some AST walking.
2018-01-02 15:14:07 -05:00
David Zarzycki
07f5029df6 Merge pull request #13663 from davezarzycki/nfc_refactor_typenode_hierarchy
[AST] Perf: Make generic decl types share field offsets and fast casting logic
2018-01-02 12:27:36 -05:00
David Zarzycki
2c840a9a22 [AST] Perf: targeted use of __builtin_assume() in dyn_cast wrappers
Workaround:
https://bugs.llvm.org/show_bug.cgi?id=35790
See also:
https://bugs.llvm.org/show_bug.cgi?id=28430
2018-01-02 07:22:55 -05:00
David Zarzycki
2882e16c3f [AST] Perf: Make generic decl types share field offsets and fast casting logic 2018-01-01 13:52:15 -05:00
David Zarzycki
47328a5054 [AST] Perf: Avoid reg spills on the fast path of getCanonicalType() 2018-01-01 11:38:04 -05:00
Doug Gregor
b11d5447c6 Merge pull request #13643 from DougGregor/redecl-fewer-validations
[Type checker] Make redeclaration checking validate fewer declarations.
2017-12-31 20:20:53 -08:00
Doug Gregor
8b58b0dbb4 [Type checker] Make redeclaration checking validate fewer declarations.
Redeclaration checking was validating all declarations with the same
base name as the given declaration (and in the same general nominal
type), even when it was trivial to determine that the declarations
could not be conflicting. Separate out the easy structural checks
(based on kind, full name, instance vs. non-instance member, etc.) and
perform those first, before validation.

Fixes SR-6558, a case where redeclaration checking caused some
unnecessary recursion in the type checker.
2017-12-30 23:27:04 -08:00
David Zarzycki
55904846b1 [AST] NFC: Migrate CompositionTypeRepr to llvm::TrailingObjects 2017-12-30 11:23:22 -05:00
David Zarzycki
00d35aba43 [AST] NFC: Fix TypeReprNodes.def indentation error 2017-12-30 11:02:38 -05:00