Commit Graph

46165 Commits

Author SHA1 Message Date
Slava Pestov
c4e466dae7 Sema: Remove needless indirection 2024-12-18 17:30:22 -05:00
Nate Chandler
990f0eeb83 [NFC] BasicBlockWorklist: add ::empty.
Enable clients to check whether the worklist has anything in it without
popping a block to find out.
2024-12-18 11:25:42 -08:00
Nate Chandler
bace1a60ce [NFC] ReachableBlocks: Add ::hasUnreachableBlocks.
The method walks over the blocks of the function testing each for
reachability and returns false on the first that is not.
2024-12-18 11:25:42 -08:00
Nate Chandler
631fc4c39e [NFC] ReachableBlocks: Rename isReachable method.
It was previously `isVisited`.  And mark `visit` private, it needn't be
part of the interface for any current clients.
2024-12-18 11:25:42 -08:00
Nate Chandler
f8d782ed42 [NFC] ReachableBlocks: Extract compute method.
In preparation for adding more users.
2024-12-18 11:25:42 -08:00
Nate Chandler
40a34d8699 [NFC] SIL: Find unreachable-terminated blocks.
Add a helper similar to findExitingBlocks.
2024-12-18 11:25:42 -08:00
Pavel Yaskevich
19350d9737 Merge pull request #63585 from xedin/solver-perf
[CSSolver] Implementation of disjunction choice favoring algorithm
2024-12-18 09:47:59 -08:00
Jakub Florek
5dbe202087 Merge pull request #77140 from MAJKFL/swift-lexical-lookup-validation
[SwiftLexicalLookup] New unqualified lookup implementation validation
2024-12-18 17:29:47 +01:00
Pavel Yaskevich
636525ebd9 Merge pull request #78171 from xedin/rdar-140300022
[TypeChecker/SILGen] Allow `any Sendable` to match `Any` while matching generic arguments
2024-12-17 20:24:34 -08:00
John Hui
796075ab88 [cxx-interop] Fix spurious ambiguous member lookup (#78132)
Nested calls to importBaseMemberDecl() subvert its cache and compromise its idempotence, causing the semantic checker to spuriously report ambiguous member lookups when multiple ClangRecordMemberLookup requests are made (e.g., because of an unrelated missing member lookup).

One such scenario is documented as a test case: test/Interop/Cxx/class/inheritance/inherited-lookup-typechecker.swift fails without this patch because of the expected error from the missing member. Meanwhile, test/Interop/Cxx/class/inheritance/inherited-lookup-executable.swift works because it does not attempt to access a missing member.

This patch fixes the issue by only calling importBaseMemberDecl() in the most derived class (where the ClangRecordMemberLookup originated, i.e., not in recursive requests).

As a consequence of my patch, synthesized member accessors in the derived class directly invoke the member from the base class where the member is inherited from, rather than incurring an indirection at each level of inheritance. As such, the synthesized symbol names are different (and shorter). I've taken this opportunity to update the relevant tests to // CHECK for more of the mangled symbol, rather than only the synthesized symbol prefix, for more precise testing and slightly better readability.

rdar://141069984
2024-12-17 11:40:18 -08:00
Pavel Yaskevich
8bd288447f [CSGen] NFC: Remove obsolete ConstraintSystem::{get, set}FavoredType 2024-12-17 11:36:41 -08:00
Pavel Yaskevich
8d5cb112ef [ConstraintSystem] Narrowly disable tryOptimizeGenericDisjunction when some of the arguments are number literals
Don't attempt this optimization if call has number literals.
This is intended to narrowly fix situations like:

```swift
func test<T: FloatingPoint>(_: T) { ... }
func test<T: Numeric>(_: T) { ... }

test(42)
```

The call should use `<T: Numeric>` overload even though the
`<T: FloatingPoint>` is a more specialized version because
selecting `<T: Numeric>` doesn't introduce non-default literal
types.
2024-12-17 11:36:40 -08:00
Pavel Yaskevich
f2a6677a6d [CSOptimizer] Infer argument candidates from calls to Double and CGFloat constructors
Helps situations like `1 + {Double, CGFloat}(...)` by inferring
a type for the second operand of `+` based on a type being constructed.

Currently limited to Double and CGFloat only since we need to
support implicit `Double<->CGFloat` conversion.

Helps situations like `1 + CGFloat(...)` by inferring a type for
the second operand of `+` based on a type being constructed.
Currently limited to known integer, floating-point and CGFloat types
since we know how they are structured.
2024-12-17 11:36:40 -08:00
Pavel Yaskevich
1760bd1f1e [CSOptimizer] Remove an outdated optimization to compare resolved argument types with all else equal
This is already accounted for by `determineBestChoicesInContext`
and reflected in the overall score, which means that we no longer
need to use this in vacuum.
2024-12-17 11:36:39 -08:00
Pavel Yaskevich
c429f5b9ec [CSOptimizer] NFC: Switch from llvm::Optional to std::optional post-rebase 2024-12-17 11:36:39 -08:00
Pavel Yaskevich
0fc6806922 [CSOptimizer] NFC: Switch to llvm::Optional 2024-12-17 11:36:39 -08:00
Pavel Yaskevich
e404ed722a [CSStep] Don't favor choices until the disjunction is picked 2024-12-17 11:36:38 -08:00
Pavel Yaskevich
4432c51f57 [CSGen] Remove ConstraintOptimizer and all favoring logic 2024-12-17 11:36:37 -08:00
Pavel Yaskevich
757ca24e8a [ConstraintSystem] Remove shrink 2024-12-17 11:36:37 -08:00
Hiroshi Yamauchi
283ce7fa35 Merge pull request #78222 from hjyamauchi/fingerprint
Avoid build error with Visual Studio 17.8.7 MSVC 19.38.33135.0 compiler
2024-12-17 09:34:57 -08:00
Slava Pestov
8eb9e745a6 Merge pull request #78225 from slavapestov/optimized-shifts
Sema: Filter out protocol extension default implementations of operators
2024-12-17 07:44:10 -05:00
Anthony Latsis
f43166a5d0 Merge pull request #77851 from AnthonyLatsis/day-2 2024-12-17 12:03:09 +00:00
Andrew Trick
643cbd15e6 Merge pull request #78228 from atrick/lifedep-scopes-trivial
LifetimeDependence: redesign dependence scope handling
2024-12-16 22:56:22 -08:00
eeckstein
22b31dcaa8 Merge pull request #78221 from eeckstein/pointers_in_c_unions
TypeLowering: assume that C unions can contain a pointer
2024-12-17 06:59:24 +01:00
Hiroshi Yamauchi
bb197e098d Avoid build error with Visual Studio 17.8.7 MSVC 19.38.33135.0 compiler 2024-12-16 17:25:05 -08:00
Doug Gregor
df3f45a113 Merge pull request #78198 from DougGregor/unsafe-fixes
Collected fixes for `@unsafe` and the Fix-Its it emits
2024-12-16 16:20:36 -08:00
Andrew Trick
c71e53d363 Add LifetimeDependenceDiagnoseTrivial feature.
A feature flag is needed so that newer compilers can build older standard
library interfaces.
2024-12-16 16:09:37 -08:00
Slava Pestov
d1f34dcfbe AST: Add isBitwiseOperator() and isShiftOperator() methods to Identifier 2024-12-16 17:35:09 -05:00
Kavon Farvardin
b633c8156e Merge pull request #78078 from kavon/samplepgo-driver-support
swift-frontend: Driver support for SamplePGO
2024-12-16 13:40:40 -08:00
Erik Eckstein
0441359b37 TypeLowering: assume that C unions can contain a pointer
C unions are imported as opaque types. Therefore we have to assume that a union contains a pointer.
This is important for alias analysis to catch escaping pointers via C unions.

Fixes a miscompile.
rdar://141555290
2024-12-16 19:37:54 +01:00
Andrew Trick
1d1b260c8f Merge pull request #78199 from atrick/lifedep-cleanup
LifetimeDependence: minor diagnostic quality fixes and related utilities
2024-12-15 04:45:08 -08:00
Andrew Trick
98da813f02 [NFC] SwiftCompilerSources: add isConvertPointerToPointerArgument 2024-12-14 22:46:54 -08:00
Doug Gregor
1c4442f523 Allow @unsafe on enum case declarations 2024-12-14 21:47:42 -08:00
Doug Gregor
268de018f4 When determining the start of a declaration, ignore attributes that aren't at the start
Otherwise, we get bad attribute/modifier insertion locations for 'rethrows' functions
2024-12-14 21:47:40 -08:00
Doug Gregor
ab43437146 Merge pull request #78187 from DougGregor/suggest-safe-unchecked
Suggest `@safe(unchecked)` when only the body of a declaration uses unsafe constructs
2024-12-14 12:42:42 -08:00
nate-chandler
120cf432f1 Merge pull request #78180 from nate-chandler/rdar141246601
[OSSACompleteLifetime] Recurse into scoped addresses.
2024-12-14 08:44:00 -08:00
Doug Gregor
bd4a477cbd Suggest @safe(unchecked) when only the body of a declaration uses unsafe constructs
Also clean up some diagnostic text for the @unsafe/@safe(unchecked) suggestions.
2024-12-14 08:40:28 -08:00
Saleem Abdulrasool
d16522aeac Merge pull request #78169 from compnerd/results
runtime: adjust template expression for C++17 changes
2024-12-14 08:39:59 -08:00
Doug Gregor
b2ae07d089 Merge pull request #78177 from DougGregor/safe-unchecked-attr 2024-12-13 20:32:41 -08:00
Doug Gregor
c3a9e7ca8a Merge pull request #78181 from DougGregor/diag-change-less-rebuilding
Stop rebuilding the world whenever a diagnostic changes
2024-12-13 20:22:21 -08:00
Xi Ge
64e8f66e4e Merge pull request #78178 from nkcsgexi/fine-trace-opt-out
FineModuleTrace: add a blocklist action for skipping fine module tracing
2024-12-13 19:52:26 -08:00
Konrad `ktoso` Malawski
3ea940e304 Merge pull request #77730 from nickolas-pohilets/mpokhylets/isolated-deinit-version 2024-12-14 11:00:31 +09:00
Pavel Yaskevich
0de9e9cd1d [CSSimplify] Extend any Sendable -> Any conversion support to function argument/result positions in generic argument context 2024-12-13 17:27:06 -08:00
Doug Gregor
d169187d75 Stop rebuilding the world whenever a diagnostic changes
The inclusion of the full diagnostic list (via DiagnosticList.h) in
DiagnosticGroups.h meant that touching any diagnostic caused most of
the world to rebuild, making me sad. Use forward declarations to limit
how much needs to be rebuilt when changing diagnostics.
2024-12-13 16:08:13 -08:00
Xi Ge
c965343f54 Frontend: add a flag to disable fine-grained module tracing 2024-12-13 16:07:15 -08:00
Saleem Abdulrasool
1dad536745 runtime: adjust template expression for C++17 changes
`std::result_of_t` has been deprecated and replaced with
`std::invoke_result_t`. Update to the newer spelling to avoid the C++17
deprecation warnings when building with a new STL.
2024-12-13 14:51:11 -08:00
eeckstein
55009bf718 Merge pull request #78163 from eeckstein/improve-dead-object-elimination
Two optimization improvements to fix dead-object-elimination with OSSA
2024-12-13 22:56:24 +01:00
Xi Ge
7f3c9cbeb1 FineModuleTrace: add a blocklist action for skipping fine module tracing 2024-12-13 13:49:38 -08:00
Doug Gregor
f33077a363 Ensure that @safe(unchecked) only applies to bodies (not declarations) 2024-12-13 13:31:21 -08:00
Nate Chandler
618b99c3e9 [NFC] OSSACompleteLifetime: Extracted method.
In preparation to expand it.
2024-12-13 12:22:31 -08:00