* Revert "[CSOptimizer] Look through `OptionalEvaluationExpr`s when dealing with unapplied disjunctions"
This reverts commit 72340f39b8.
* Revert "[CSOptimizer] Don't consider disabled overloads when checking whether disjunction is supported"
This reverts commit 6bc23b5057.
* Revert "[CSOptimizer] Disjunctions with IUO overload choices are unsupported"
This reverts commit 471ee21535.
* Revert "[CSOptimizer] MemberImportVisibility: Don't consider overloads that come from implicit imports"
This reverts commit aa4a2b9071.
* Revert "[CSOptimizer] Don't consider CGFloat widening when explicit initializer is used"
This reverts commit 3cc76eacdd.
* Revert "[CSOptimizer] Literal arguments should cause score reset only for operators"
This reverts commit e3987beffb.
* Revert "[CSOptimizer] NFC: check whether a choice is of operator instead of whole disjunction"
This reverts commit 6c82892c3c.
* Revert "[CSOptimizer/Tests] NFC: Add a perf test-case fixed by improved literal array handling"
This reverts commit cfd34e54c4.
* Revert "[CSOptimizer] Extend candidate/parameter matching to support array literals"
This reverts commit 8a304f88c6.
* Revert "[CSOptimizer] Favor choices that don't require application"
This reverts commit 0737542da8.
* Revert "[CSOptimizer] Disable CGFloat -> Double conversion for unary operators"
This reverts commit bc3a15fbe6.
* Revert "[CSOptimizer] Mark bitwise operators as supported"
This reverts commit 860ae08d1b.
* Revert "[CSOptimizer] Simplify handling of non-applied disjunctions"
This reverts commit 43ca7dfff9.
* Revert "[ConstraintSystem] Fix `getEffectiveOverloadType` handling of `mutating` methods"
This reverts commit c767f7aff7.
* Revert "[CSOptimizer] Reduce overload types before ranking"
This reverts commit 95b47aead6.
* Revert "[CSOptimizer] Implement special prioritization rules for result builder contexts"
This reverts commit 56d6635e46.
* Revert "[CSOptimizer] Allow only widening CGFloat->Double conversions while matching candidate arguments"
This reverts commit bf8ae3bc1b.
* Revert "[CSSimplify] CGFloat-Double: Rank narrowing correctly when result is injected into an optional"
This reverts commit cb876cbd9e.
* Revert "[CSBindings] Prevent `BindingSet::isViable` from dropping viable bindings (v2)"
This reverts commit b7e7493076.
* Revert "[CSOptimizer] Add support for chained members without arguments"
This reverts commit 87cd5f8733.
* Revert "[CSOptimizer] Mark compiler synthesized disjunctions as optimized"
This reverts commit 867e64182f.
* Revert "[CSOptimizer] Make a light-weight generic overload check if some requirements are unsatisfiable"
This reverts commit 15c773b9d7.
* Revert "[CSOptimizer] Fix `selectDisjunction` to use favored choices even if disjunction was not optimized"
This reverts commit c2a55886f0.
* Revert "[CSOptimizer] Limit "old" behavior compatibility to unlabeled unary arguments"
This reverts commit 9fb73143f6.
* Revert "[Tests] NFC: Update a couple of type-checker tests"
This reverts commit ff8663ff16.
* Revert "[Tests] NFC: Move simd related test-case from `slow` to `fast`"
This reverts commit 28396a6dce.
* Revert "[CSGen] NFC: Remove obsolete `ConstraintSystem::{get, set}FavoredType`"
This reverts commit 8bd288447f.
* Revert "[CSOptimizer] Allow literal arguments to match parameters that conform to `ExpressibleBy{Integer, Float}Literal`"
This reverts commit 2fdd4b6c35.
* Revert "[CSOptimizer] Adjust `scoreCandidateMatch` to indicate when match cannot be decided"
This reverts commit 9b62c84a4f.
* Revert "[CSOptimizer] Fix Double<->CGFloat implicit conversion support when arguments are literals"
This reverts commit 6caf1ccbb2.
* Revert "[CSOptimizer] A more comprehensive generic overload checking when candidates are fully resolved"
This reverts commit e30587bda4.
* Revert "[CSOptimizer] Restore old hack behavior which used to favor overloads based on arity matches"
This reverts commit a3a3ec4fe0.
* Revert "[CSOptimizer] Desugar types before checking for equality"
This reverts commit 802f5cd105.
* Revert "[ConstraintSystem] Narrowly disable `tryOptimizeGenericDisjunction` when some of the arguments are number literals"
This reverts commit 8d5cb112ef.
* Revert "[CSOptimizer] Infer argument candidates from calls to `Double` and CGFloat constructors"
This reverts commit f2a6677a6d.
* Revert "[CSOptimizer] Score all of the overload choices matching on literals uniformly"
This reverts commit 59109c2d60.
* Revert "[CSOptimizer] Enable ranking of `Int*`, `Float{80}` and `Double` initializers"
This reverts commit 6fb6d1cf90.
* Revert "[CSOptimizer] Rank disjunctions based on score only if both sides are supported"
This reverts commit 8818d399f9.
* Revert "[CSOptimizer] Rank results of operators regardless of whether anything is known about parameters"
This reverts commit 3996b25fbd.
* Revert "[Tests] NFC: Add more test-cases that were previously solved due to old hacks behavior"
This reverts commit d0ff6c81b8.
* Revert "[CSOptimizer] Average score should reflect number of defaulted parameters"
This reverts commit 23589add74.
* Revert "[Tests] NFC: Adjust a couple of improved tests"
This reverts commit 66981364fe.
* Revert "[CSOptimizer] Don't optimize (implicit) calls with code completion arguments"
This reverts commit 8a918e2369.
* Revert "[CSOptimizer] attempt to rank only standard/simd operators and fully concrete overload sets"
This reverts commit deca9b61c5.
* Revert "[CSOptimizer] Record best scores for each disjunction and use them in `selectDisjunction`"
This reverts commit 3819ddfb40.
* Revert "[CSOptimizer] Let `determineBestChoicesInContext` return the best disjunction if one is available"
This reverts commit cf05405eae.
* Revert "[CSOptimizer] Emulate old behavior related to favoring of unary calls to members"
This reverts commit 527de22bec.
* Revert "[Tests] NFC: Add a test-case for rdar://133340307 which is now fast"
This reverts commit 670127abd6.
* Revert "[CSOptimizer] Prefer homogeneous arithmetic operator overloads when argument(s) or result match"
This reverts commit d69b6a0594.
* Revert "[CSOptimizer] Remove an outdated optimization to compare resolved argument types with all else equal"
This reverts commit 1760bd1f1e.
* Revert "[CSOptimizer] NFC: Switch from llvm::Optional to std::optional post-rebase"
This reverts commit c429f5b9ec.
* Revert "[CSOptimizer] Increase score when type matches opaque type"
This reverts commit 2869dff995.
* Revert "[CSOptimizer] NFC: Switch to llvm::Optional"
This reverts commit 0fc6806922.
* Revert "[CSOptimizer] NFC: Adjust conformance check to use `ConstraintSystem::lookupConformance`"
This reverts commit da65333d41.
* Revert "[CSOptimizer] Treat all type parameters equally"
This reverts commit 957a5f4270.
* Revert "[CSStep] Remove disjunction pruning logic from DisjunctionStep"
This reverts commit 2c44e37948.
* Revert "[CSOptimizer] Relax candidate type requirements from equality to set of no-impact conversions"
This reverts commit 11b897b32f.
* Revert "[CSOptimizer] Use `matchCallArguments` to establish argument-to-parameter relationships"
This reverts commit cb1cb2018d.
* Revert "[CSOptimizer] Don't attempt to optimize calls with code completion token(s) in argument position"
This reverts commit 14e2a16fce.
* Revert "[CSOptimizer] Allow generic operator overloads without associated type parameters"
This reverts commit bc5f70a9a3.
* Revert "[CSOptimizer] Make sure that all parameters without arguments are defaulted"
This reverts commit 7c1c46d4e4.
* Revert "[CSStep] Don't favor choices until the disjunction is picked"
This reverts commit e404ed722a.
* Revert "[CSOptimizer] Keep track of mismatches while evaluating candidates"
This reverts commit a094c3ebb0.
* Revert "[CSOptimizer] Favor SIMD related arithmetic operator choices if argument is SIMD<N> type"
This reverts commit c2f7451c7b.
* Revert "[CSOptimizer] Initial implementation of disjunction choice favoring algorithm"
This reverts commit 672ae3d252.
* Revert "[ConstraintSystem] Add skeleton of constraint optimizer"
This reverts commit b5f08a4009.
* Revert "[CSGen] Remove ConstraintOptimizer and all favoring logic"
This reverts commit 4432c51f57.
* Revert "[ConstraintSystem] Remove `shrink`"
This reverts commit 757ca24e8a.
* [TypeChecker] NFC: Remove resurrected use of `SolverShrinkUnsolvedThreshold`
* [TypeChecker] Bring back `SolverDisableShrink`
* [Tests] NFC: Mark tests affected by solver-perf revert as slow
* [Tests] NFC: Adjust async tests that are affected by performance hacks
When a function declaration has a body, its source range ends at the
closing curly brace, so it includes the `throws(E)`. However, a
protocol requirement doesn't have a body, and due to an oversight,
getSourceRange() was never updated to include the extra tokens
that appear after `throws` when the function declares a thrown
error type. As a result, unqualified lookup would fail to find a
generic parameter type, if that happened to be the thrown type.
Fixes rdar://problem/143950572.
When doing completion in a result builder, we avoid
solving unrelated expressions by replacing them with
unbound placeholder variables. Avoid penalizing
assigning holes to these placeholders, since
otherwise we end up unnecessarily exploring the
entire solution space, and bailing due to too
complex.
rdar://144382123
'ParserUnit' is used for analyzing syntax structures _mainly_ in
SourceKit.
Since we removed IfConfigDecl from AST, ParserUnit didn't
inclue any AST in #if ... #endif regions even for active region because
it used to consider all inactive. Instead, consider every region
"active" and include all the AST nodes.
rdar://117387631
When using `-experimental-skip-all-function-bodies` we don’t run the `TypeCheckSourceFileRequest` and thus don’t go through the decl checker, which calls `InheritedTypeRequest` on all inheritance clauses. This means that the inherited entries are not populated by the time we serialize the module. Trigger the computation of inherited entries by calling `InheritedTypeRequest` during serialization.
Unfortunately, we can’t use the type returned by `getResolvedType` for the serialization because `getResolvedType` returns an inverted protocol type for suppressed conformances but during serialization, we want to serialize the suppressed type with a `isSuppressedBit`. We thus need to call `getEntry(i).getType()` again to get the type to serialize.
rdar://141440011
The new `DECL_ATTR_FEATURE_REQUIREMENT` macro in DeclAttr.def can be used to declare that an attribute should only be available when a related language feature is enabled.
Effects:
• `#if hasAttribute(someAttr)` will return `false` unless the required feature is enabled.
• Code completion will not include the attribute unless the required feature is enabled.
• `TypeChecker::checkDeclAttributes()` diagnoses non-implicit uses of the attribute.
Add this mechanism and use it to tie @abi to the ABIAttribute feature. Also design tests for it.
`containsIDEInspectionTarget` doesn't work for implicit argument
lists, but luckily implicit code completion expressions cannot
be injected into arguments, so we can check whether whether they
appear at an argument position and prevent optimization.
Emitting fine-grained module tracing files during full compilation should be sufficient for the use case in design. Other
swift-frontend invocations, such as emitting modules, doesn't need fully type-checked AST to perform the action, therefore
requesting/walking the fully typechecked AST to emit those tracing files may introduce performance overhead.
When lazy type checking is enabled, the generated AST to walk on may contain function bodies that
are not fully type-checked. Walking on these function bodies could expose latent bugs.
Resolves rdar://140818215
To simplify post-processing of these collected ObjC message traces, this PR teaches the compiler to atomically append the content of
ObjC message trace to a file location provided by the build environment, instead of emitting multiple files.
The previous logic for this was unused, replace
it with new logic that consults
InvertibleProtocols.def for the list of protocols
to suggest.
rdar://139212286
Introduce `getKeyPathTypeForDynamicMemberLookup`
which returns the KeyPath type, and can be used
from both `RootAndResultTypeOfKeypathDynamicMemberRequest`
and `isValidKeyPathDynamicMemberLookup`. This ensures
we look to the superclass for e.g protocol compositions
with `Sendable`. This also means we now return an
interface type, which is what the client of
`RootAndResultTypeOfKeypathDynamicMemberRequest`
wanted anyway.
rdar://138418296
Local functions can capture variables from parent
closures, so we need to make sure we type-check
parent closures when doing completion in a local
function. Ideally we ought to be able to be more
selective about the elements of the parent closure
that we type-check, but that's a more complex change
I'm leaving as future work for now.
The logic here for completion wasn't actually
helping things since it would result in adding the
var overload to the system, which would result
in an ErrorType binding. We could turn the ErrorType
into a placeholder when resolving the overload,
but the simpler solution is to just allow CSGen
to turn the reference into a PlaceholderType. This
matches what we do for regular solving, and fixes
a crash with an IUO completion.
rdar://89369091
Find all the usages of `--enable-experimental-feature` or
`--enable-upcoming-feature` in the tests and replace some of the
`REQUIRES: asserts` to use `REQUIRES: swift-feature-Foo` instead, which
should correctly apply to depending on the asserts/noasserts mode of the
toolchain for each feature.
Remove some comments that talked about enabling asserts since they don't
apply anymore (but I might had miss some).
All this was done with an automated script, so some formatting weirdness
might happen, but I hope I fixed most of those.
There might be some tests that were `REQUIRES: asserts` that might run
in `noasserts` toolchains now. This will normally be because their
feature went from experimental to upcoming/base and the tests were not
updated.
Today ParenType is used:
1. As the type of ParenExpr
2. As the payload type of an unlabeled single
associated value enum case (and the type of
ParenPattern).
3. As the type for an `(X)` TypeRepr
For 1, this leads to some odd behavior, e.g the
type of `(5.0 * 5).squareRoot()` is `(Double)`. For
2, we should be checking the arity of the enum case
constructor parameters and the presence of
ParenPattern respectively. Eventually we ought to
consider replacing Paren/TuplePattern with a
PatternList node, similar to ArgumentList.
3 is one case where it could be argued that there's
some utility in preserving the sugar of the type
that the user wrote. However it's really not clear
to me that this is particularly desirable since a
bunch of diagnostic logic is already stripping
ParenTypes. In cases where we care about how the
type was written in source, we really ought to be
consulting the TypeRepr.
Ensure the implicit `do` statement has a source
range that covers the `for` loop by changing the
source location for the initial binding. This ensures
we correctly detect the code completion child and
avoid skipping it.