Skip to content

Commit 39c80ee

Browse files
authored
Merge pull request #37164 from DougGregor/actor-class-descriptor-metadata
2 parents e152c14 + 7a80c33 commit 39c80ee

File tree

4 files changed

+18
-3
lines changed

4 files changed

+18
-3
lines changed

include/swift/ABI/Metadata.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4290,6 +4290,10 @@ class TargetClassDescriptor final
42904290
return FieldOffsetVectorOffset;
42914291
}
42924292

4293+
bool isActor() const {
4294+
return this->getTypeContextDescriptorFlags().class_isActor();
4295+
}
4296+
42934297
bool isDefaultActor() const {
42944298
return this->getTypeContextDescriptorFlags().class_isDefaultActor();
42954299
}

include/swift/ABI/MetadataValues.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,11 @@ class TypeContextDescriptorFlags : public FlagSet<uint16_t> {
13951395

13961396
// Type-specific flags:
13971397

1398+
/// Set if the class is an actor.
1399+
///
1400+
/// Only meaningful for class descriptors.
1401+
Class_IsActor = 7,
1402+
13981403
/// Set if the class is a default actor class. Note that this is
13991404
/// based on the best knowledge available to the class; actor
14001405
/// classes with resilient superclassess might be default actors
@@ -1485,6 +1490,9 @@ class TypeContextDescriptorFlags : public FlagSet<uint16_t> {
14851490
FLAGSET_DEFINE_FLAG_ACCESSORS(Class_IsDefaultActor,
14861491
class_isDefaultActor,
14871492
class_setIsDefaultActor)
1493+
FLAGSET_DEFINE_FLAG_ACCESSORS(Class_IsActor,
1494+
class_isActor,
1495+
class_setIsActor)
14881496

14891497
FLAGSET_DEFINE_FIELD_ACCESSORS(Class_ResilientSuperclassReferenceKind,
14901498
Class_ResilientSuperclassReferenceKind_width,

lib/IRGen/GenMeta.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1620,6 +1620,9 @@ namespace {
16201620
if (MetadataLayout->hasResilientSuperclass())
16211621
flags.class_setHasResilientSuperclass(true);
16221622

1623+
if (getType()->isActor())
1624+
flags.class_setIsActor(true);
1625+
16231626
if (getType()->isDefaultActor(IGM.getSwiftModule(),
16241627
ResilienceExpansion::Maximal))
16251628
flags.class_setIsDefaultActor(true);

test/IRGen/async/default_actor.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
// REQUIRES: concurrency
55

66
// CHECK: @"$s13default_actor1ACMn" = hidden constant
7-
// 0x81000050: 0x01000000 IsDefaultActor
8-
// 0x81010050: the same, but using a singleton metadata initialization
9-
// CHECK-SAME: i32 {{-2130706352|-2130640816}},
7+
// 0x81800050: 0x01800000 IsActor + IsDefaultActor
8+
// 0x81810050: the same, but using a singleton metadata initialization
9+
// CHECK-SAME: i32 {{-2122317744|-2122252208}},
1010

1111
import resilient_actor
1212

0 commit comments

Comments
 (0)