Commit Graph

21519 Commits

Author SHA1 Message Date
Rintaro Ishizaki
6018662615 Merge pull request #76889 from rintaro/astgen-regexexpr
[ASTGen] Implement some Expr generation
2024-10-09 22:39:50 -07:00
swift-ci
c49a0e84d3 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-09 10:44:16 -07:00
Meghana Gupta
4df55a12cd Merge pull request #76834 from meg-gupta/lifetimedepmultiple
Replace dependsOn with @lifetime
2024-10-09 10:17:43 -07:00
Gabor Horvath
cf3b333eb6 [cxx-interop] Add flag to assume C++ types are resilient
Currently, C++ types cannot appear in resilient interfaces. There are
some cases where this is overly restrictive. We plan to improve the
logic to detect what types should not appear on resilient moduel
boundaries. In the meantime, this PR introduces a flag to disable these
errors. Users relying on this flag are on their own, this should only be
a temporary workaround until we land further improvements to this
diagnostic.

rdar://137457118
2024-10-09 11:47:10 +01:00
swift-ci
0532e29e70 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-08 21:09:22 -07:00
Allan Shortlidge
cee810a0bc Merge pull request #76912 from tshortli/sorted-type-refinement-contexts
AST: Sort TypeRefinementContexts for better lookup performance
2024-10-08 20:48:53 -07:00
swift-ci
40aee60b24 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-08 19:09:12 -07:00
Allan Shortlidge
bfbb9f85e2 Merge pull request #76922 from tshortli/remove-unused-server-field
AST: Remove unused server field from InProcessPlugins
2024-10-08 18:19:04 -07:00
swift-ci
72676c2c4a Merge remote-tracking branch 'origin/main' into rebranch 2024-10-08 15:43:57 -07:00
Doug Gregor
bba1432732 Merge pull request #76364 from DougGregor/apply-macro-to-imported
Allow attached macros to be applied to imported C declarations
2024-10-08 15:26:54 -07:00
swift-ci
929ebb1290 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-08 15:14:22 -07:00
Meghana Gupta
b443ff76e4 [NFC] Use llvm::TrailingObjects to represent variable list of lifetime sources 2024-10-08 15:11:26 -07:00
Meghana Gupta
f591680c2a Update SIL printing of @lifetime
Lifetime dependencies in SIL tests continue to be represented as a type modifier on the target.

As before, they are represented as a LifetimeDependentTypeRepr in the AST.
2024-10-08 15:10:59 -07:00
Meghana Gupta
4ac90a3e11 Diagnose multiple @lifetime attributes with same target 2024-10-08 15:10:59 -07:00
Meghana Gupta
31c1dc7eb5 Add support for specifying target in @lifetime
@lifetime(target: source1, source2...) where target can be any
parameter or 'self'. We cannot have @lifetime attributes with duplicate targets.

Also, update the internal data structures. Previously LifetimeEntry stored
pairwise (target, source) dependencies. Now, LifetimeEntry will store an optional
target descriptor and an array of source descriptors.
2024-10-08 15:10:48 -07:00
Ravi Kandhadai
cda4dc54b6 Merge pull request #76859 from j-hui/fix-frt-conversion
[cxx-interop] Fix swift::Type to clang::QualType conversion to correctly handle foreign reference types
2024-10-08 15:05:48 -07:00
Allan Shortlidge
c9d1ac07eb AST: Remove unused server field from InProcessPlugins. 2024-10-08 14:32:56 -07:00
swift-ci
c11a29a722 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-08 13:28:36 -07:00
Slava Pestov
fc7068ee40 Merge pull request #76910 from slavapestov/open-type-perf-fix
Fix performance regression in ConstraintSystem::openType()
2024-10-08 16:17:58 -04:00
Doug Gregor
70980b95f8 Add experimental feature MacrosOnImporters for applying macro to imported decl
This is still very much experimental and we don't want to accidentally
enable it everywhere.
2024-10-08 11:12:55 -07:00
Doug Gregor
cdcabd05bd Allow attached macros to be applied to imported C declarations
The Clang importer maps arbitrary attributes spelled with `swift_attr("...")`
over to Swift attributes, using the Swift parser to process those attributes.
Extend this mechanism to allow `swift_attr` to refer to an attached macro,
expanding that macro as needed.

When a macro is applied to an imported declaration, that declaration is
pretty-printed (from the C++ AST) to provide to the macro implementation.
There are a few games we need to place to resolve the macro, and a few more
to lazily perform pretty-printing and adjust source locations to get the
right information to the macro, but this demonstrates that we could
take this path.

As an example, we use this mechanism to add an `async` version of a C
function that delivers its result via completion handler, using the
`@AddAsync` example macro implementation from the swift-syntax
repository.
2024-10-08 11:12:50 -07:00
swift-ci
9fd863f81e Merge remote-tracking branch 'origin/main' into rebranch 2024-10-08 10:50:24 -07:00
Steven Wu
5fa12d31ae Merge pull request #76738 from cachemeifyoucan/eng/PR-136787368
[CAS] Use IncludeTreeFileList instead of full CASFS for caching
2024-10-08 10:42:24 -07:00
Allan Shortlidge
42ebee8dd1 AST: Improve TypeRefinementContext debug descriptions.
When printing the source ranges for nodes that represent an expansion within a
source file, print the range from the original source file and include a
description of the kind of expansion.
2024-10-08 09:55:28 -07:00
Allan Shortlidge
ac38469101 AST: Add verifier support for the TypeRefinementContext tree.
Verify the integrity of the tree formed by `TypeRefinementContext` nodes. In
general, parent nodes should "contain" their children and children always be in
sorted order.
2024-10-08 09:55:28 -07:00
Allan Shortlidge
5cf7141c08 AST: Maintain TypeRefinementContext children in sorted order.
Improve the performance of looking up the most refined `TypeRefinementContext`
for a given source location by storing children in sorted order and using a
binary search to query each layer of the tree. This slightly pessimizes
insertion (primarily when macros are expanded out of source location order) but
lookup is a far more common operation.
2024-10-08 09:55:28 -07:00
Allan Shortlidge
a4487f6674 AST: Use SourceManager::containsTokenLoc() in TypeRefinementContext.cpp.
The existing `rangeContainsTokenLocWithGeneratedSource()` utility pre-dated
`SourceManager::containsTokenLoc()`.
2024-10-08 09:55:28 -07:00
Rintaro Ishizaki
e7a2102203 [ASTGen] Generate UnresolvedSpecializeExpr 2024-10-08 09:47:12 -07:00
Rintaro Ishizaki
834d98dca8 [ASTGen] Genrate InOutExpr 2024-10-08 09:47:11 -07:00
Rintaro Ishizaki
09f49b0c87 [ASTGen] Generate FloatLiteralExpr 2024-10-08 09:46:56 -07:00
Rintaro Ishizaki
7d9ba2d36d [ASTGen] Generate RegexLiteralExpr, SubscriptExpr, and SuperRefExpr 2024-10-08 09:34:17 -07:00
swift-ci
2b3b38bad9 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-07 20:37:26 -07:00
Rintaro Ishizaki
bd8ee9eb1e [ASTGen] Move some code to MiscBridging.cpp
Also this fixes a weird 'undefined symbol' error when linking with gold.

rdar://137326126
2024-10-07 23:34:14 +00:00
Slava Pestov
f3b2a79108 AST: Store the ASTContext inside the TypeTransform 2024-10-07 17:46:06 -04:00
John Hui
ec506f824b [cxx-interop] Fix swift::Type to clang::QualType conversion to correctly handle foreign reference types
For types imported from C++, the original clang::TypeDecl is saved in
the swift::Type and reused for conversions back to clang::QualType.
However, the conversion did not account for foreign reference types,
which should be mapped to a pointer to the C++ record type, rather than
the record type itself.

This bug first appeared as a function template instantiation failure
due to a sanity check performed by SwiftDeclConverter::foreignReferenceTypePassedByRef()
but may also affect other round-tripping type conversions.
The added test case demonstrates the template instantiation scenario,
where templates were being used to overcome Swift/C++ interop's current
lack of support for class inheritance.

rdar://134979343
2024-10-07 14:40:38 -07:00
swift-ci
8d3265a328 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-07 11:34:54 -07:00
Meghana Gupta
011b5bf10c Delete dependsOn support
Lifetime dependencies will now be represented with @lifetime attribute in the language.

dependsOn is a type modifier and was represented as a LifetimeDependentTypeRepr in the AST.

I am deleting dependsOn syntax parsing support and retaining LifetimeDependentTypeRepr support.

We may want to represent lifetime dependencies in a function type with a type attribute in the future.
If we use a decl attribute instead, then support for LifetimeDependentTypeRepr can be deleted.
2024-10-07 00:24:35 -07:00
Erik Eckstein
b0dd1ab4ab SIL: make SubstitutionMap CustomStringConvertible 2024-10-07 09:00:27 +02:00
swift-ci
be07567181 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-04 14:19:57 -07:00
Rintaro Ishizaki
b5859240ab [ASTGen] Split ASTBridging.cpp into multiple files
ASTBridging.cpp was getting too big.
2024-10-04 10:48:56 -07:00
swift-ci
b8a5d2d6d7 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-03 01:35:42 -07:00
Konrad `ktoso` Malawski
dea3b59331 Merge pull request #76250 from ktoso/wip-experimental-isolated-deinit 2024-10-03 17:19:10 +09:00
swift-ci
f245d7d9f0 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-02 16:34:22 -07:00
Meghana Gupta
bf41473da8 Merge pull request #76810 from meg-gupta/lifetimeupdate
Update LAST_DECL_ATTR and add verification to ensure it is always updated
2024-10-02 16:30:35 -07:00
swift-ci
9818bf8783 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-02 14:23:33 -07:00
Meghana Gupta
148155710f Merge pull request #76624 from meg-gupta/lifetimedepscoped
Add support for borrow lifetime dependence
2024-10-02 13:58:14 -07:00
swift-ci
0709ba8a2d Merge remote-tracking branch 'origin/main' into rebranch 2024-10-02 10:54:49 -07:00
Alexis Laferrière
3442fba986 Merge pull request #76794 from xymus/move-avail-macro-cache
Sema: Move the availability macros cache to the ASTContext
2024-10-02 10:53:41 -07:00
swift-ci
7cc6111f96 Merge remote-tracking branch 'origin/main' into rebranch 2024-10-02 01:53:55 -07:00
Erik Eckstein
10782cf42b SwiftCompilerSources: introduce the AST module
As the optimizer uses more and more AST stuff, it's now time to create an "AST" module.
Initially it defines following AST datastructures:
* declarations: `Decl` + derived classes
* `Conformance`
* `SubstitutionMap`
* `Type` and `CanonicalType`

Some of those were already defined in the SIL module and are now moved to the AST module.
This change also cleans up a few things:
* proper definition of `NominalTypeDecl`-related APIs in `SIL.Type`
* rename `ProtocolConformance` to `Conformance`
* use `AST.Type`/`AST.CanonicalType` instead of `BridgedASTType` in SIL and the Optimizer
2024-10-02 07:10:29 +02:00