Commit Graph

6423 Commits

Author SHA1 Message Date
Roman Levenstein
2f91ee197d Add a syntax to express the new _Class and _Native class layout constraints
The syntax is "T: _Class" and "T: _NativeClass".
2017-03-24 16:32:23 -07:00
Matthew Carroll
d12daa736a [Driver] SR-2396: Driver should have a -verify-debug-info option
Add a -verify-debug-info option that invokes dwarfdump --verify as the last step after running dsymutil. dwarfdump is invoked with same options clang 802.0.35 uses to invoke it:

dwarfdump --verify --debug-info --eh-frame --quiet

A warning is produced if -verify-debug-info is set and no debug option is also set.

dwarfdump is failing to validate the debug info in the test verify-debug-info.swift. The failure is:
error: .debug_line[0x0000007d].row[0].file = 1 is not a valid index

https://bugs.swift.org/browse/SR-2396
2017-03-24 16:42:39 -04:00
swift-ci
8597774bee Merge pull request #8319 from nkcsgexi/simplify-message-enum 2017-03-24 12:24:57 -07:00
Xi Ge
65a1ebe668 Sema: Under EditorMode, simplify the message for missing switch cases. rdar://31197583 2017-03-24 11:48:32 -07:00
swift-ci
ba9546dc13 Merge pull request #8312 from DougGregor/generic-sig-concrete-type-params 2017-03-24 00:22:19 -07:00
Doug Gregor
8bd863e645 [GSB] Reimplement self-derived checking for conformance constraints.
The general self-derived check doesn't really make sense for
conformance constraints, because we want to distinguish among
different protocol conformances.
2017-03-23 23:45:43 -07:00
Slava Pestov
e912f27944 AST/SILGen: New mangling for vtable thunks
Simply mangling the derived method is no longer sufficient. Now also
mangle the base method, so that eventually we handle this sort of
scenario:

class Base {
  // introduces: Base.method
  func method(_: Int, _: Int) {}
}

class First : Base {
  // overrides: Base.method
  // introduces: First.method
  override func method(_: Int?, _: Int) {}
}

class Second : First {
  // overrides: Base.method, First.method
  // introduces: Second.method
  override func method(_: Int?, _: Int?) {}
}

Here, the override of Base.method by Second.method and the
override of First.method by Second.method require distinct
manglings even though the derived method (Second.method) is
the same in both cases.

Note that while the new mangling is longer, vtable thunks are
always emitted with private linkage, so with the exception of
the standard library which is built with -sil-serialize-all
they will not affect the size of dylibs.

The standard library itself has very few classes so it doesn't
matter there either.

This patch doesn't actually add any support to introduce new
vtable entries for methods that override; this is coming up
next.
2017-03-23 23:40:52 -07:00
Slava Pestov
173947ed14 AST: Improve const-correctness of ASTMangler 2017-03-23 23:32:37 -07:00
Slava Pestov
aff0e35bee AST: Make FuncDecl::setOverriddenDecl() idempotent
The old logic was just wrong; it would allow overwriting
the override with a different function, but only if it
was a behavior record.
2017-03-23 20:36:12 -07:00
Xi Ge
1827fb1436 RangeInfo: Report RValue type if a decl reference is of read-only LValue type. (#8300) 2017-03-23 15:52:54 -07:00
Doug Gregor
607732fb1f Merge pull request #8281 from DougGregor/redundant-explicit-via-inferred
[GSB] Diagnose explicit constraints made redundant by inferred ones.
2017-03-22 20:50:20 -07:00
Roman Levenstein
e3bc23cc09 Merge pull request #8253 from swiftix/wip-gsb-layout-constrains-fixes
[GSB] Improve handling of layout constraints
2017-03-22 17:36:05 -07:00
Doug Gregor
d9fa16bccb [GSB] Diagnose explicit constraints made redundant by inferred ones. 2017-03-22 17:35:11 -07:00
Roman Levenstein
e1403c6dc2 [GSB] Improve handling of layout constraints
This PR addresses TODOs from #8241.

- It supports merging for layout constraints, e.g., if both a _Trivial constraint and a _Trivial(64) constraint appear on a type parameter, we keep only _Trivial(64) as a more specific layout constraint. We do a similar thing for ref-counted/native-ref-counted. The overall idea is to keep the more specific of two compatible layout constraints.
- The presence of a superclass constraint implies a layout constraint, e.g., a superclass constraint implies _Class or _NativeClass
2017-03-22 16:39:02 -07:00
Roman Levenstein
4e2262944d Extend the representation of layout constraints
- Add support for _Class and _NativeClass layout constraints, which are supposed to represent T: Superclass and P: class constraints in the future.
- Use the re-factoring to also reduce the number of dynamic allocations when creating layout constraints. Simple non-parametrized layout constraints are now represented as statically allocated singletons (static members of LayoutConstraintInfo).
2017-03-22 16:37:38 -07:00
Xi Ge
8c497eb02c Sema: Extract the printing part in filling-missing-enum-cases fixit. NFC (#8274) 2017-03-22 13:16:13 -07:00
swift-ci
71e47a39f2 Merge pull request #8277 from gottesmm/add_silparameterinfo_is_direct_guaranteed 2017-03-22 12:59:51 -07:00
Michael Gottesman
74b6a195c6 [silgen] Add SILParameterInfo::isDirectGuaranteed().
This is just a direct counterpart of SILParameterInfo::isIndirect*().

rdar://31145255
2017-03-22 12:16:33 -07:00
swift-ci
ef4328b8f6 Merge pull request #8263 from DougGregor/redundant-same-type-constraints 2017-03-22 07:09:46 -07:00
Doug Gregor
ddc2775530 [GSB] Diagnose redundant same-type constraints.
Diagnose redundant same-type constraints using most of the same
machinery for diagnosing other redundant constraints. However,
same-type constraints are particularly interesting because
redundancies can be spelled in a number of different ways. Address
this using the connected components of the subgraph involving only
derived requirements (which is already used for the minimized generic
signature). Then, separate all of the non-derived requirements into
the intracomponent requirements and intercomponent requirements:

* All of the intracomponent requirements are redundant by definition,
  because the components are defined by derived constraints.

* For the intercomponent requirements, form a spanning tree among the
  various components and diagnose as redundant any edges that do not
  extend the spanning tree.
2017-03-21 23:02:04 -07:00
Doug Gregor
343c99302b [GSB] Compute derived same-type components when checking same-type constraints.
It's better to compute this information once while we're sorting
through all of the same-type constraints, so we can use it later when
performing queries (e.g., enumerating requirements).
2017-03-21 16:32:51 -07:00
swift-ci
fd372cd43e Merge pull request #8251 from DougGregor/resugar-parsing-fix 2017-03-21 15:50:36 -07:00
Xi Ge
383b0abd62 AST: Deep sugar type reconstitution should be optional. (#8244)
Tentatively fixing a test failure in Sil parser.
2017-03-21 11:04:53 -07:00
Doug Gregor
50799dc084 [AST] Track the location of the 'class' keyword for class-bounded protocols. 2017-03-21 07:36:29 -07:00
swift-ci
9ad340e2ef Merge pull request #8241 from DougGregor/all-layout-constraints 2017-03-21 07:30:54 -07:00
Doug Gregor
5aa51e9532 [GSB] Keep track of all layout constraints.
As we've done with all of the other kinds of constraints, keep track
of all of the layout constraints on the equivalence class. Use the
normal mechanism to diagnose conflicts between different layout
constraints, warn about duplicate layout constraints, etc.
2017-03-21 06:59:40 -07:00
swift-ci
7811dc753d Merge pull request #8239 from DougGregor/all-same-type-constraints 2017-03-21 06:39:24 -07:00
Doug Gregor
0f4c14b22e [GSB] checkRedundantSuperclassConstraints() -> checkSuperclassConstraints() 2017-03-21 06:19:22 -07:00
Doug Gregor
094b0f8f54 [GSB] Rename checkRedundantConcreteTypeConstraints() to checkConcreteTypeConstraints() 2017-03-21 06:18:46 -07:00
Doug Gregor
4686801c2f Remove the now-unused GenericSignatureBuilder::updateRequirementSource(). 2017-03-21 06:14:37 -07:00
Doug Gregor
f429712253 [GSB] Track all same-type constraint requirement sources.
As we've been doing with other kinds of constraints, track *all* of
the requirement sources for deriving same-type constraints within the
equivalence class, then remove self-derived constraints at the end.

There is no checking for duplicated same-type constraints yet.
2017-03-21 06:11:05 -07:00
Dave
e3b458dff4 Fixed a typo (#8217)
Changed "Retrieve the expression that direct represents the callee." to "Retrieve the expression that directly represents the callee.", on line 3835
2017-03-20 21:35:32 -04:00
swift-ci
ba4691b87a Merge pull request #8214 from nkcsgexi/reconstitute-sugar-type 2017-03-20 17:23:46 -07:00
Roman Levenstein
ccacae2db1 Merge pull request #8210 from swiftix/master
Verify the construction of SubstitutionMaps
2017-03-20 16:54:39 -07:00
Xi Ge
92975fb9c0 AST: Expose reconstituteSugar as a public member function of TypeBase. NFC 2017-03-20 16:14:51 -07:00
Roman Levenstein
6f54798df8 Verify the construction of SubstitutionMaps
After substitution maps are constructed, check their invariants. It helps to catch very subtle bugs related to substitutions.
2017-03-20 15:30:12 -07:00
Jordan Rose
67f29eb470 Remove default from DeclAttributes::isUnavailableInSwiftVersion. (#8208)
If this had a default, it should be the effective language version,
not the compiler language version. That is, in the Swift 4 compiler's
Swift 3 mode, we want to be acting like Swift 3, not Swift 4.
2017-03-20 12:37:56 -07:00
Erik Eckstein
d70bfc5de2 rename namespace NewMangling -> Mangle 2017-03-20 10:09:30 -07:00
Michael Gottesman
41f425a503 Revert "[silgen] If we have a direct guaranteed convention and have an owned value, perform a borrow."
This reverts commit 4c8595b002.
2017-03-20 05:00:31 -07:00
Michael Gottesman
4c8595b002 [silgen] If we have a direct guaranteed convention and have an owned value, perform a borrow.
Now that all arguments are properly scoped, we do not need to worry about this
extending the lifetimes of COW times inappropriately.

rdar://30955427
2017-03-18 18:59:31 -07:00
swift-ci
3e085fca4b Merge pull request #7946 from DougGregor/all-conformance-constraint-sources 2017-03-18 01:30:27 -07:00
Slava Pestov
f3ab0fe036 Merge pull request #8175 from hartbit/SR-2421
[SR-2421] Remove variable_never_used fixit to work with two-stage let init
2017-03-17 18:05:30 -07:00
David Hart
13edc600f0 [SR-2421] Remove variable_never_used fixit to work with two-stage let initialization
The variable_never_used fixit transforms into invalid code in the case of two-stage let initialization. I introduced a new diagnostic that does not fixit and suggests removing the value.
2017-03-18 00:21:18 +01:00
Erik Eckstein
1625345b90 Remove the old mangler.
NFC
2017-03-17 16:10:36 -07:00
Jordan Rose
5aa02eba56 Merge pull request #8140 from TheOtherDave/SR-4232
A clarification of an error message
2017-03-17 10:06:09 -07:00
Doug Gregor
eaee4add8a [GSB] Track all conformance constraint sources.
Move the storage for the protocols to which a particular potential
archetype conforms into EquivalenceClass, so that it is more easily
shared. More importantly, keep track of *all* of the constraint
sources that produced a particular conformance requirement, so we can
revisit them later, which provides a number of improvements:

* We can drop self-derived requirements at the end, once we've
  established all of the equivalence classes
* We diagnose redundant conformance requirements, e.g., "T: Sequence"
  is redundant if "T: Collection" is already specified.
* We can choose the best path when forming the conformance access
  path.
2017-03-16 23:15:37 -10:00
Erik Eckstein
761d6512fe SourceKit: switch to new mangling in ide::printDeclTypeUSR
This was still missing.
2017-03-16 19:57:16 -07:00
Arnold Schwaighofer
a4c6af1968 Merge pull request #8122 from aschwaighofer/cow_existential_runtime
Runtime changes for the copy-on-write existential implementation
2017-03-16 12:48:35 -07:00
Jordan Rose
6ff948f651 Merge pull request #8147 from d-ronnqvist/SR-2409
[SR-2409] Rephrase diagnostic to consider Objective-C interop
2017-03-16 09:07:27 -07:00
Doug Gregor
372d7bbf60 [GSB] Rework construction of nested types.
Our handling of nested types was scattered in several places, and
(worse) correct computation of archetype anchors required us to
"explode" out all of the potential archetypes for every associated
type with the given name to ensure that we get the right one.

Make nested type construction somewhat more lazy: if asked for a
nested type for a specific associated type, just create the nested
type for that associated type (instead of *all* of them). If asked for
a nested type by name, either return the one we already have or create
the one that's most likely to be the archetype anchor. Overall, this
should result in many fewer potential archetypes being constructed.
2017-03-15 22:33:38 -10:00