Skip to content

Commit 0caa9b5

Browse files
authored
Merge pull request #80668 from xedin/se-0461-renamings
[SE-0461] Replace `@execution(...)` with `@concurrent` and `nonisolated(nonsending)`
2 parents 6dc2f04 + 734b1f1 commit 0caa9b5

File tree

78 files changed

+1222
-1202
lines changed

Some content is hidden

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

78 files changed

+1222
-1202
lines changed

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

@@ -4037,28 +4012,6 @@ class IsolatedTypeAttr : public SimpleTypeAttrWithArgs<TypeAttrKind::Isolated> {
40374012
void printImpl(ASTPrinter &printer, const PrintOptions &options) const;
40384013
};
40394014

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

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
@@ -8146,8 +8146,6 @@ class AbstractFunctionDecl : public GenericContext, public ValueDecl {
81468146
return cast_or_null<AbstractFunctionDecl>(ValueDecl::getOverriddenDecl());
81478147
}
81488148

8149-
std::optional<ExecutionKind> getExecutionBehavior() const;
8150-
81518149
/// Whether the declaration is later overridden in the module
81528150
///
81538151
/// 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,
@@ -884,7 +880,12 @@ SIMPLE_DECL_ATTR(extensible, Extensible,
884880
ABIStableToAdd | ABIStableToRemove | APIBreakingToAdd | APIStableToRemove | ForbiddenInABIAttr,
885881
169)
886882

887-
LAST_DECL_ATTR(Extensible)
883+
SIMPLE_DECL_ATTR(concurrent, Concurrent,
884+
OnFunc | OnConstructor | OnSubscript | OnVar,
885+
ABIBreakingToAdd | ABIBreakingToRemove | APIBreakingToAdd | APIBreakingToRemove | UnconstrainedInABIAttr,
886+
170)
887+
888+
LAST_DECL_ATTR(Concurrent)
888889

889890
#undef DECL_ATTR_ALIAS
890891
#undef CONTEXTUAL_DECL_ATTR_ALIAS

include/swift/AST/DiagnosticsParse.def

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

1703-
ERROR(attr_execution_expected_lparen,none,
1704-
"expected '(' after '@execution'",
1705-
())
1706-
ERROR(attr_execution_expected_rparen,none,
1707-
"expected ')' after execution behavior", ())
1708-
ERROR(attr_execution_expected_kind,none,
1709-
"expected 'concurrent' or 'caller' as the execution behavior", ())
1710-
17111703
ERROR(attr_private_import_expected_rparen,none,
17121704
"expected ')' after function name for @_private", ())
17131705
ERROR(attr_private_import_expected_sourcefile, none,
@@ -2172,5 +2164,18 @@ ERROR(sil_thunkinst_failed_to_parse_kind,none,
21722164
ERROR(sil_failed_to_parse_sil_optional,none,
21732165
"Expected SIL optional value of the form '[' NAME ']'", ())
21742166

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

0 commit comments

Comments
 (0)