Skip to content

Commit cc5b557

Browse files
committed
[interop][SwiftToCxx] Attach SWIFT_SYMBOL to C++ enum case declarations
1 parent 3b3d6c8 commit cc5b557

File tree

5 files changed

+22
-19
lines changed

5 files changed

+22
-19
lines changed

lib/PrintAsClang/DeclAndTypePrinter.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,8 @@ class DeclAndTypePrinter::Implementation
731731
}
732732
os << " } ";
733733
syntaxPrinter.printIdentifier(caseName);
734+
if (elementDecl)
735+
syntaxPrinter.printSymbolUSRAttribute(elementDecl);
734736
os << ";\n";
735737
};
736738

@@ -742,6 +744,7 @@ class DeclAndTypePrinter::Implementation
742744
[&](const auto &pair) {
743745
os << "\n ";
744746
syntaxPrinter.printIdentifier(pair.first->getNameStr());
747+
syntaxPrinter.printSymbolUSRAttribute(pair.first);
745748
},
746749
",");
747750
// TODO: allow custom name for this special case

test/Interop/SwiftToCxx/enums/resilient-enum-in-cxx.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ public enum Empty {
6666
// CHECK-NEXT: class SWIFT_SYMBOL("s:5Enums3FooO") Foo final {
6767
// CHECK-NEXT: public:
6868
// CHECK: enum class cases {
69-
// CHECK-NEXT: a,
70-
// NEW_CASE-NEXT: b,
69+
// CHECK-NEXT: a SWIFT_SYMBOL("s:5Enums3FooO1ayACSdcACmF"),
70+
// NEW_CASE-NEXT: b SWIFT_SYMBOL("s:5Enums3FooO1byACSicACmF"),
7171
// CHECK-NEXT: unknownDefault
7272
// CHECK-NEXT: }
7373
// CHECK: inline const static struct _impl_unknownDefault { // impl struct for case unknownDefault

test/Interop/SwiftToCxx/enums/swift-enum-implementation.swift

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ public struct S {
3636

3737
// CHECK: class SWIFT_SYMBOL("s:5Enums1EO") E final {
3838
// CHECK: enum class cases {
39-
// CHECK-NEXT: x,
40-
// CHECK-NEXT: y,
41-
// CHECK-NEXT: z,
42-
// CHECK-NEXT: w,
43-
// CHECK-NEXT: auto_,
44-
// CHECK-NEXT: foobar
39+
// CHECK-NEXT: x SWIFT_SYMBOL("s:5Enums1EO1xyACSdcACmF"),
40+
// CHECK-NEXT: y SWIFT_SYMBOL("s:5Enums1EO1yyACSVSgcACmF"),
41+
// CHECK-NEXT: z SWIFT_SYMBOL("s:5Enums1EO1zyAcA1SVcACmF"),
42+
// CHECK-NEXT: w SWIFT_SYMBOL("s:5Enums1EO1wyACSi_tcACmF"),
43+
// CHECK-NEXT: auto_ SWIFT_SYMBOL("s:5Enums1EO4autoyACSvcACmF"),
44+
// CHECK-NEXT: foobar SWIFT_SYMBOL("s:5Enums1EO6foobaryA2CmF")
4545
// CHECK-NEXT: };
4646
// CHECK-EMPTY:
4747
// CHECK-NEXT: #pragma clang diagnostic push
@@ -51,7 +51,7 @@ public struct S {
5151
// CHECK-NEXT: return cases::x;
5252
// CHECK-NEXT: }
5353
// CHECK-NEXT: inline E operator()(double val) const;
54-
// CHECK-NEXT: } x;
54+
// CHECK-NEXT: } x SWIFT_SYMBOL("s:5Enums1EO1xyACSdcACmF");
5555
// CHECK-NEXT: inline bool isX() const;
5656
// CHECK-NEXT: inline double getX() const;
5757
// CHECK-EMPTY:
@@ -60,7 +60,7 @@ public struct S {
6060
// CHECK-NEXT: return cases::y;
6161
// CHECK-NEXT: }
6262
// CHECK-NEXT: inline E operator()(void const * _Nullable val) const;
63-
// CHECK-NEXT: } y;
63+
// CHECK-NEXT: } y SWIFT_SYMBOL("s:5Enums1EO1yyACSVSgcACmF");
6464
// CHECK-NEXT: inline bool isY() const;
6565
// CHECK-NEXT: inline void const * _Nullable getY() const;
6666
// CHECK-EMPTY:
@@ -69,7 +69,7 @@ public struct S {
6969
// CHECK-NEXT: return cases::z;
7070
// CHECK-NEXT: }
7171
// CHECK-NEXT: inline E operator()(const S& val) const;
72-
// CHECK-NEXT: } z;
72+
// CHECK-NEXT: } z SWIFT_SYMBOL("s:5Enums1EO1zyAcA1SVcACmF");
7373
// CHECK-NEXT: inline bool isZ() const;
7474
// CHECK-NEXT: inline S getZ() const;
7575
// CHECK-EMPTY:
@@ -78,7 +78,7 @@ public struct S {
7878
// CHECK-NEXT: return cases::w;
7979
// CHECK-NEXT: }
8080
// CHECK-NEXT: inline E operator()(swift::Int val) const;
81-
// CHECK-NEXT: } w;
81+
// CHECK-NEXT: } w SWIFT_SYMBOL("s:5Enums1EO1wyACSi_tcACmF");
8282
// CHECK-NEXT: inline bool isW() const;
8383
// CHECK-NEXT: inline swift::Int getW() const;
8484
// CHECK-EMPTY:
@@ -87,7 +87,7 @@ public struct S {
8787
// CHECK-NEXT: return cases::auto_;
8888
// CHECK-NEXT: }
8989
// CHECK-NEXT: inline E operator()(void * _Nonnull val) const;
90-
// CHECK-NEXT: } auto_;
90+
// CHECK-NEXT: } auto_ SWIFT_SYMBOL("s:5Enums1EO4autoyACSvcACmF");
9191
// CHECK-NEXT: inline bool isAuto_() const;
9292
// CHECK-NEXT: inline void * _Nonnull getAuto_() const;
9393
// CHECK-EMPTY:
@@ -96,7 +96,7 @@ public struct S {
9696
// CHECK-NEXT: return cases::foobar;
9797
// CHECK-NEXT: }
9898
// CHECK-NEXT: inline E operator()() const;
99-
// CHECK-NEXT: } foobar;
99+
// CHECK-NEXT: } foobar SWIFT_SYMBOL("s:5Enums1EO6foobaryA2CmF");
100100
// CHECK-NEXT: inline bool isFoobar() const;
101101
// CHECK-EMPTY:
102102
// CHECK-NEXT: #pragma clang diagnostic pop

test/Interop/SwiftToCxx/generics/generic-enum-in-cxx.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,14 @@ public func inoutConcreteOpt(_ x: inout GenericOpt<UInt16>) {
124124
// CHECK-NEXT: }
125125

126126
// CHECK: enum class cases {
127-
// CHECK-NEXT: some,
128-
// CHECK-NEXT: none
127+
// CHECK-NEXT: some SWIFT_SYMBOL("s:8Generics10GenericOptO4someyACyxGxcAEmlF"),
128+
// CHECK-NEXT: none SWIFT_SYMBOL("s:8Generics10GenericOptO4noneyACyxGAEmlF")
129129
// CHECK-NEXT: };
130130

131131
// CHECK: inline GenericOpt<T_0_0> operator()(const T_0_0& val) const;
132-
// CHECK-NEXT: } some;
132+
// CHECK-NEXT: } some SWIFT_SYMBOL("s:8Generics10GenericOptO4someyACyxGxcAEmlF");
133133
// CHECK: inline GenericOpt<T_0_0> operator()() const;
134-
// CHECK-NEXT: } none;
134+
// CHECK-NEXT: } none SWIFT_SYMBOL("s:8Generics10GenericOptO4noneyACyxGAEmlF");
135135

136136
// CHECK: inline operator cases() const {
137137
// CHECK-NEXT: switch (_getEnumTag()) {

test/Interop/SwiftToCxx/stdlib/swift-stdlib-in-cxx.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
// CHECK-NEXT: inline Optional(const Optional &other) {
6161
// CHECK: }
6262
// CHECK: enum class cases {
63-
// CHECK-NEXT: some,
63+
// CHECK-NEXT: some SWIFT_SYMBOL({{.*}}),
6464
// CHECK-NEXT: none
6565
// CHECK-NEXT: };
6666
// CHECK: inline bool isSome() const;

0 commit comments

Comments
 (0)