Skip to content

Commit 65f78f3

Browse files
authored
Merge pull request #80807 from xedin/se-0461-renamings-6.2
[6.2][SE-0461] Replace `@execution(...)` with `@concurrent` and `nonisolated(nonsending)`
2 parents 0a26b44 + c8c7eef commit 65f78f3

File tree

80 files changed

+1230
-1207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+1230
-1207
lines changed

docs/ABI/Mangling.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ Types
761761
sending-result ::= 'YT' // -> sending T
762762
#endif
763763
#if SWIFT_RUNTIME_VERSION >= 6.2
764-
function-isolation :== 'YC' // @execution(caller) on function type
764+
function-isolation :== 'YC' // nonisolated(nonsending) on function type
765765
#endif
766766
differentiable ::= 'Yjf' // @differentiable(_forward) on function type
767767
differentiable ::= 'Yjr' // @differentiable(reverse) on function type

include/swift/AST/ASTBridging.h

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -910,16 +910,6 @@ void BridgedAvailableAttr_setIsGroupedWithWildcard(BridgedAvailableAttr cAttr);
910910
SWIFT_NAME("BridgedAvailableAttr.setIsGroupTerminator(self:)")
911911
void BridgedAvailableAttr_setIsGroupTerminator(BridgedAvailableAttr cAttr);
912912

913-
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedExecutionKind {
914-
BridgedExecutionKindConcurrent,
915-
BridgedExecutionKindCaller,
916-
};
917-
918-
SWIFT_NAME("BridgedExecutionAttr.createParsed(_:atLoc:range:behavior:)")
919-
BridgedExecutionAttr BridgedExecutionAttr_createParsed(
920-
BridgedASTContext cContext, BridgedSourceLoc atLoc,
921-
BridgedSourceRange range, BridgedExecutionKind behavior);
922-
923913
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedAccessLevel {
924914
BridgedAccessLevelPrivate,
925915
BridgedAccessLevelFilePrivate,
@@ -1235,11 +1225,18 @@ BridgedNonSendableAttr BridgedNonSendableAttr_createParsed(
12351225
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
12361226
BridgedSourceRange cRange, BridgedNonSendableKind cKind);
12371227

1238-
SWIFT_NAME("BridgedNonisolatedAttr.createParsed(_:atLoc:range:isUnsafe:)")
1228+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedNonIsolatedModifier {
1229+
BridgedNonIsolatedModifierNone,
1230+
BridgedNonIsolatedModifierUnsafe,
1231+
BridgedNonIsolatedModifierNonSending
1232+
};
1233+
1234+
SWIFT_NAME("BridgedNonisolatedAttr.createParsed(_:atLoc:range:modifier:)")
12391235
BridgedNonisolatedAttr
12401236
BridgedNonisolatedAttr_createParsed(BridgedASTContext cContext,
12411237
BridgedSourceLoc cAtLoc,
1242-
BridgedSourceRange cRange, bool isUnsafe);
1238+
BridgedSourceRange cRange,
1239+
BridgedNonIsolatedModifier modifier);
12431240

12441241
SWIFT_NAME("BridgedObjCAttr.createParsedUnnamed(_:atLoc:attrNameLoc:)")
12451242
BridgedObjCAttr
@@ -2590,26 +2587,13 @@ BridgedConventionTypeAttr BridgedConventionTypeAttr_createParsed(
25902587
BridgedSourceLoc cNameLoc, BridgedDeclNameRef cWitnessMethodProtocol,
25912588
BridgedStringRef cClangType, BridgedSourceLoc cClangTypeLoc);
25922589

2593-
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedExecutionTypeAttrExecutionKind {
2594-
BridgedExecutionTypeAttrExecutionKind_Concurrent,
2595-
BridgedExecutionTypeAttrExecutionKind_Caller
2596-
};
2597-
25982590
SWIFT_NAME("BridgedDifferentiableTypeAttr.createParsed(_:atLoc:nameLoc:"
25992591
"parensRange:kind:kindLoc:)")
26002592
BridgedDifferentiableTypeAttr BridgedDifferentiableTypeAttr_createParsed(
26012593
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
26022594
BridgedSourceLoc cNameLoc, BridgedSourceRange cParensRange,
26032595
BridgedDifferentiabilityKind cKind, BridgedSourceLoc cKindLoc);
26042596

2605-
SWIFT_NAME("BridgedExecutionTypeAttr.createParsed(_:atLoc:nameLoc:parensRange:"
2606-
"behavior:behaviorLoc:)")
2607-
BridgedExecutionTypeAttr BridgedExecutionTypeAttr_createParsed(
2608-
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
2609-
BridgedSourceLoc cNameLoc, BridgedSourceRange cParensRange,
2610-
BridgedExecutionTypeAttrExecutionKind behavior,
2611-
BridgedSourceLoc cBehaviorLoc);
2612-
26132597
SWIFT_NAME("BridgedIsolatedTypeAttr.createParsed(_:atLoc:nameLoc:parensRange:"
26142598
"isolationKind:isolationKindLoc:)")
26152599
BridgedIsolatedTypeAttr BridgedIsolatedTypeAttr_createParsed(
@@ -2777,6 +2761,12 @@ BridgedSendingTypeRepr_createParsed(BridgedASTContext cContext,
27772761
BridgedTypeRepr base,
27782762
BridgedSourceLoc cSpecifierLoc);
27792763

2764+
SWIFT_NAME("BridgedCallerIsolatedTypeRepr.createParsed(_:base:specifierLoc:)")
2765+
BridgedCallerIsolatedTypeRepr
2766+
BridgedCallerIsolatedTypeRepr_createParsed(BridgedASTContext cContext,
2767+
BridgedTypeRepr base,
2768+
BridgedSourceLoc cSpecifierLoc);
2769+
27802770
SWIFT_NAME(
27812771
"BridgedTupleTypeRepr.createParsed(_:elements:leftParenLoc:rightParenLoc:)")
27822772
BridgedTupleTypeRepr BridgedTupleTypeRepr_createParsed(

include/swift/AST/Attr.h

Lines changed: 22 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,8 @@ class DeclAttribute : public AttributeBase {
226226
isEarlyAdopter : 1
227227
);
228228

229-
SWIFT_INLINE_BITFIELD(NonisolatedAttr, DeclAttribute, 1,
230-
isUnsafe : 1
229+
SWIFT_INLINE_BITFIELD(NonisolatedAttr, DeclAttribute, NumNonIsolatedModifierBits,
230+
Modifier : NumNonIsolatedModifierBits
231231
);
232232

233233
SWIFT_INLINE_BITFIELD_FULL(AllowFeatureSuppressionAttr, DeclAttribute, 1+31,
@@ -236,10 +236,6 @@ class DeclAttribute : public AttributeBase {
236236

237237
NumFeatures : 31
238238
);
239-
240-
SWIFT_INLINE_BITFIELD(ExecutionAttr, DeclAttribute, NumExecutionKindBits,
241-
Behavior : NumExecutionKindBits
242-
);
243239
} Bits;
244240
// clang-format on
245241

@@ -2978,29 +2974,40 @@ class ObjCImplementationAttr final : public DeclAttribute {
29782974
/// Represents nonisolated modifier.
29792975
class NonisolatedAttr final : public DeclAttribute {
29802976
public:
2981-
NonisolatedAttr(SourceLoc atLoc, SourceRange range, bool unsafe,
2982-
bool implicit)
2977+
NonisolatedAttr(SourceLoc atLoc, SourceRange range,
2978+
NonIsolatedModifier modifier, bool implicit)
29832979
: DeclAttribute(DeclAttrKind::Nonisolated, atLoc, range, implicit) {
2984-
Bits.NonisolatedAttr.isUnsafe = unsafe;
2985-
assert((isUnsafe() == unsafe) && "not enough bits for unsafe state");
2980+
Bits.NonisolatedAttr.Modifier = static_cast<unsigned>(modifier);
2981+
assert((getModifier() == modifier) && "not enough bits for modifier");
29862982
}
29872983

2988-
NonisolatedAttr(bool unsafe, bool implicit)
2989-
: NonisolatedAttr({}, {}, unsafe, implicit) {}
2984+
NonIsolatedModifier getModifier() const {
2985+
return static_cast<NonIsolatedModifier>(Bits.NonisolatedAttr.Modifier);
2986+
}
29902987

2991-
bool isUnsafe() const { return Bits.NonisolatedAttr.isUnsafe; }
2988+
bool isUnsafe() const { return getModifier() == NonIsolatedModifier::Unsafe; }
2989+
bool isNonSending() const {
2990+
return getModifier() == NonIsolatedModifier::NonSending;
2991+
}
2992+
2993+
static NonisolatedAttr *
2994+
createImplicit(ASTContext &ctx,
2995+
NonIsolatedModifier modifier = NonIsolatedModifier::None) {
2996+
return new (ctx) NonisolatedAttr(/*atLoc*/ {}, /*range*/ {}, modifier,
2997+
/*implicit=*/true);
2998+
}
29922999

29933000
static bool classof(const DeclAttribute *DA) {
29943001
return DA->getKind() == DeclAttrKind::Nonisolated;
29953002
}
29963003

29973004
/// Create a copy of this attribute.
29983005
NonisolatedAttr *clone(ASTContext &ctx) const {
2999-
return new (ctx) NonisolatedAttr(AtLoc, Range, isUnsafe(), isImplicit());
3006+
return new (ctx) NonisolatedAttr(AtLoc, Range, getModifier(), isImplicit());
30003007
}
30013008

30023009
bool isEquivalent(const NonisolatedAttr *other, Decl *attachedTo) const {
3003-
return isUnsafe() == other->isUnsafe();
3010+
return getModifier() == other->getModifier();
30043011
}
30053012
};
30063013

@@ -3275,34 +3282,6 @@ class ABIAttr : public DeclAttribute {
32753282
}
32763283
};
32773284

3278-
class ExecutionAttr : public DeclAttribute {
3279-
public:
3280-
ExecutionAttr(SourceLoc AtLoc, SourceRange Range,
3281-
ExecutionKind behavior,
3282-
bool Implicit)
3283-
: DeclAttribute(DeclAttrKind::Execution, AtLoc, Range, Implicit) {
3284-
Bits.ExecutionAttr.Behavior = static_cast<uint8_t>(behavior);
3285-
}
3286-
3287-
ExecutionAttr(ExecutionKind behavior, bool Implicit)
3288-
: ExecutionAttr(/*AtLoc=*/SourceLoc(), /*Range=*/SourceRange(), behavior,
3289-
Implicit) {}
3290-
3291-
ExecutionKind getBehavior() const {
3292-
return static_cast<ExecutionKind>(Bits.ExecutionAttr.Behavior);
3293-
}
3294-
3295-
static bool classof(const DeclAttribute *DA) {
3296-
return DA->getKind() == DeclAttrKind::Execution;
3297-
}
3298-
3299-
UNIMPLEMENTED_CLONE(ExecutionAttr)
3300-
3301-
bool isEquivalent(const ExecutionAttr *other, Decl *attachedTo) const {
3302-
return getBehavior() == other->getBehavior();
3303-
}
3304-
};
3305-
33063285
/// Attributes that may be applied to declarations.
33073286
class DeclAttributes {
33083287
/// Linked list of declaration attributes.
@@ -3762,10 +3741,6 @@ class alignas(1 << AttrAlignInBits) TypeAttribute
37623741
SWIFT_INLINE_BITFIELD_FULL(IsolatedTypeAttr, TypeAttribute, 8,
37633742
Kind : 8
37643743
);
3765-
3766-
SWIFT_INLINE_BITFIELD_FULL(ExecutionTypeAttr, TypeAttribute, 8,
3767-
Behavior : 8
3768-
);
37693744
} Bits;
37703745
// clang-format on
37713746

@@ -4033,28 +4008,6 @@ class IsolatedTypeAttr : public SimpleTypeAttrWithArgs<TypeAttrKind::Isolated> {
40334008
void printImpl(ASTPrinter &printer, const PrintOptions &options) const;
40344009
};
40354010

4036-
/// The @execution function type attribute.
4037-
class ExecutionTypeAttr : public SimpleTypeAttrWithArgs<TypeAttrKind::Execution> {
4038-
SourceLoc BehaviorLoc;
4039-
4040-
public:
4041-
ExecutionTypeAttr(SourceLoc atLoc, SourceLoc kwLoc, SourceRange parensRange,
4042-
Located<ExecutionKind> behavior)
4043-
: SimpleTypeAttr(atLoc, kwLoc, parensRange), BehaviorLoc(behavior.Loc) {
4044-
Bits.ExecutionTypeAttr.Behavior = uint8_t(behavior.Item);
4045-
}
4046-
4047-
ExecutionKind getBehavior() const {
4048-
return ExecutionKind(Bits.ExecutionTypeAttr.Behavior);
4049-
}
4050-
4051-
SourceLoc getBehaviorLoc() const {
4052-
return BehaviorLoc;
4053-
}
4054-
4055-
void printImpl(ASTPrinter &printer, const PrintOptions &options) const;
4056-
};
4057-
40584011
using TypeOrCustomAttr =
40594012
llvm::PointerUnion<CustomAttr*, TypeAttribute*>;
40604013

include/swift/AST/AttrKind.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,17 @@ enum class ExternKind: uint8_t {
130130
enum : unsigned { NumExternKindBits =
131131
countBitsUsed(static_cast<unsigned>(ExternKind::Last_ExternKind)) };
132132

133-
enum class ExecutionKind : uint8_t {
134-
Concurrent = 0,
135-
Caller,
136-
Last_ExecutionKind = Caller
133+
enum class NonIsolatedModifier : uint8_t {
134+
None = 0,
135+
Unsafe,
136+
NonSending,
137+
Last_NonIsolatedModifier = NonSending
137138
};
138139

139-
enum : unsigned { NumExecutionKindBits =
140-
countBitsUsed(static_cast<unsigned>(ExecutionKind::Last_ExecutionKind)) };
140+
enum : unsigned {
141+
NumNonIsolatedModifierBits = countBitsUsed(
142+
static_cast<unsigned>(NonIsolatedModifier::Last_NonIsolatedModifier))
143+
};
141144

142145
enum class DeclAttrKind : unsigned {
143146
#define DECL_ATTR(_, CLASS, ...) CLASS,

include/swift/AST/Decl.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8155,8 +8155,6 @@ class AbstractFunctionDecl : public GenericContext, public ValueDecl {
81558155
return cast_or_null<AbstractFunctionDecl>(ValueDecl::getOverriddenDecl());
81568156
}
81578157

8158-
std::optional<ExecutionKind> getExecutionBehavior() const;
8159-
81608158
/// Whether the declaration is later overridden in the module
81618159
///
81628160
/// Overrides are resolved during type checking; only query this field after

include/swift/AST/DeclAttr.def

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -862,11 +862,7 @@ DECL_ATTR(abi, ABI,
862862
165)
863863
DECL_ATTR_FEATURE_REQUIREMENT(ABI, ABIAttribute)
864864

865-
DECL_ATTR(execution, Execution,
866-
OnFunc | OnConstructor | OnSubscript | OnVar,
867-
ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
868-
166)
869-
DECL_ATTR_FEATURE_REQUIREMENT(Execution, ExecutionAttribute)
865+
// Unused '166': Used to be `@execution(caller | concurrent)` replaced with `@concurrent` and `nonisolated(nonsending)`
870866

871867
SIMPLE_DECL_ATTR(const, ConstVal,
872868
OnParam | OnVar | OnFunc,
@@ -879,7 +875,12 @@ SIMPLE_DECL_ATTR(constInitialized, ConstInitialized,
879875
168)
880876
DECL_ATTR_FEATURE_REQUIREMENT(ConstInitialized, CompileTimeValues)
881877

882-
LAST_DECL_ATTR(ConstInitialized)
878+
SIMPLE_DECL_ATTR(concurrent, Concurrent,
879+
OnFunc | OnConstructor | OnSubscript | OnVar,
880+
ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
881+
170)
882+
883+
LAST_DECL_ATTR(Concurrent)
883884

884885
#undef DECL_ATTR_ALIAS
885886
#undef CONTEXTUAL_DECL_ATTR_ALIAS

include/swift/AST/DiagnosticsParse.def

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1697,14 +1697,6 @@ ERROR(attr_isolated_expected_rparen,none,
16971697
ERROR(attr_isolated_expected_kind,none,
16981698
"expected 'any' as the isolation kind", ())
16991699

1700-
ERROR(attr_execution_expected_lparen,none,
1701-
"expected '(' after '@execution'",
1702-
())
1703-
ERROR(attr_execution_expected_rparen,none,
1704-
"expected ')' after execution behavior", ())
1705-
ERROR(attr_execution_expected_kind,none,
1706-
"expected 'concurrent' or 'caller' as the execution behavior", ())
1707-
17081700
ERROR(attr_private_import_expected_rparen,none,
17091701
"expected ')' after function name for @_private", ())
17101702
ERROR(attr_private_import_expected_sourcefile, none,
@@ -2169,5 +2161,18 @@ ERROR(sil_thunkinst_failed_to_parse_kind,none,
21692161
ERROR(sil_failed_to_parse_sil_optional,none,
21702162
"Expected SIL optional value of the form '[' NAME ']'", ())
21712163

2164+
//------------------------------------------------------------------------------
2165+
// MARK: nonisolated(nonsending)
2166+
//------------------------------------------------------------------------------
2167+
2168+
ERROR(nonisolated_nonsending_expected_lparen,PointsToFirstBadToken,
2169+
"expected '(' following 'nonisolated'", ())
2170+
ERROR(nonisolated_nonsending_incorrect_modifier,PointsToFirstBadToken,
2171+
"expected 'nonsending' in modifier", ())
2172+
ERROR(nonisolated_nonsending_expected_rparen,PointsToFirstBadToken,
2173+
"expected ')' after 'nonisolated' modifier", ())
2174+
ERROR(nonisolated_nonsending_repeated,none,
2175+
"parameter may have at most one 'nonisolated(nonsending)' specifier", ())
2176+
21722177
#define UNDEFINE_DIAGNOSTIC_MACROS
21732178
#include "DefineDiagnosticMacros.h"

0 commit comments

Comments
 (0)