File tree Expand file tree Collapse file tree 4 files changed +52
-8
lines changed Expand file tree Collapse file tree 4 files changed +52
-8
lines changed Original file line number Diff line number Diff line change @@ -1412,14 +1412,14 @@ deleteAndReenqueueForEmissionValuesDependentOnCanonicalPrespecializedMetadataRec
1412
1412
void IRGenerator::emitLazyDefinitions () {
1413
1413
if (SIL.getASTContext ().LangOpts .hasFeature (Feature::Embedded)) {
1414
1414
// In embedded Swift, the compiler cannot emit any metadata, etc.
1415
- assert ( LazyTypeMetadata.empty () &&
1416
- LazySpecializedTypeMetadataRecords.empty () &&
1417
- LazyTypeContextDescriptors.empty () &&
1418
- LazyOpaqueTypeDescriptors.empty () &&
1419
- LazyFunctionDefinitions.empty () &&
1420
- LazyCanonicalSpecializedMetadataAccessors.empty () &&
1421
- LazyMetadataAccessors.empty () &&
1422
- LazyWitnessTables.empty () );
1415
+ LazyTypeMetadata.clear ();
1416
+ LazySpecializedTypeMetadataRecords.clear ();
1417
+ LazyTypeContextDescriptors.clear ();
1418
+ LazyOpaqueTypeDescriptors.clear ();
1419
+ LazyFunctionDefinitions.clear ();
1420
+ LazyCanonicalSpecializedMetadataAccessors.clear ();
1421
+ LazyMetadataAccessors.clear ();
1422
+ LazyWitnessTables.clear ( );
1423
1423
}
1424
1424
1425
1425
while (!LazyTypeMetadata.empty () ||
Original file line number Diff line number Diff line change @@ -601,6 +601,9 @@ class SILSymbolVisitorImpl : public ASTVisitor<SILSymbolVisitorImpl> {
601
601
if (canSkipNominal (NTD))
602
602
return ;
603
603
604
+ if (NTD->getASTContext ().LangOpts .hasFeature (Feature::Embedded))
605
+ return ;
606
+
604
607
auto declaredType = NTD->getDeclaredType ()->getCanonicalType ();
605
608
606
609
if (!NTD->getObjCImplementationDecl ()) {
Original file line number Diff line number Diff line change
1
+ // RUN: not %target-swift-frontend -emit-ir %s -parse-stdlib -enable-experimental-feature Embedded 2>&1 | %FileCheck %s
2
+
3
+ public protocol Player { }
4
+ struct Concrete : Player { }
5
+
6
+ // CHECK: error: existential can cause metadata allocation or locks
7
+ public func test( ) -> any Player {
8
+ Concrete ( )
9
+ }
Original file line number Diff line number Diff line change
1
+ // RUN: %target-swift-emit-ir %s -parse-stdlib -enable-experimental-feature Embedded | %FileCheck %s
2
+
3
+ struct Bool { }
4
+
5
+ protocol Player {
6
+ func play( )
7
+ var canPlay : Bool { get }
8
+ }
9
+
10
+ struct Concrete : Player {
11
+ func play( ) { }
12
+ var canPlay : Bool { Bool ( ) }
13
+ }
14
+
15
+ func start( p: some Player ) {
16
+ p. play ( )
17
+ }
18
+
19
+ public func main( ) {
20
+ start ( p: Concrete ( ) )
21
+ }
22
+
23
+ // CHECK-LABEL: declare hidden swiftcc void @"$s4main8ConcreteVACycfC"()
24
+
25
+ // CHECK-LABEL: declare hidden swiftcc void @"$s4main5start1pyx_tAA6PlayerRzlFAA8ConcreteV_Tg5"()
26
+
27
+ // CHECK-LABEL: define swiftcc void @"$s4mainAAyyF"()
28
+ // CHECK-NEXT: entry:
29
+ // CHECK-NEXT: call swiftcc void @"$s4main8ConcreteVACycfC"()
30
+ // CHECK-NEXT: call swiftcc void @"$s4main5start1pyx_tAA6PlayerRzlFAA8ConcreteV_Tg5"()
31
+ // CHECK-NEXT: ret void
32
+ // CHECK-NEXT: }
You can’t perform that action at this time.
0 commit comments