Skip to content

Commit ff8a1be

Browse files
committed
[Swift interface] Print declarations produced by declaration macro expansion
Don't print the uses of freestanding declaration macros in Swift interfaces. Instead, print the declarations they produce, as appropriate. Fixes rdar://113730928.
1 parent 8e44846 commit ff8a1be

File tree

2 files changed

+41
-21
lines changed

2 files changed

+41
-21
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,9 +1024,18 @@ class PrintAST : public ASTVisitor<PrintAST> {
10241024
Options.TransformContext->isPrintingSynthesizedExtension() &&
10251025
isa<ExtensionDecl>(D);
10261026

1027+
SWIFT_DEFER {
1028+
D->visitAuxiliaryDecls([&](Decl *auxDecl) {
1029+
visit(auxDecl);
1030+
});
1031+
};
1032+
10271033
if (!shouldPrint(D, true) && !Synthesize)
10281034
return false;
10291035

1036+
if (isa<MacroExpansionDecl>(D))
1037+
return true;
1038+
10301039
Decl *Old = Current;
10311040
Current = D;
10321041
SWIFT_DEFER { Current = Old; };

test/ModuleInterface/macros.swift

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,71 @@
11
// REQUIRES: asserts
22
// REQUIRES: swift_swift_parser
3-
// FIXME: Swift parser is not enabled on Linux CI yet.
4-
// REQUIRES: OS=macosx
53

64
// RUN: %empty-directory(%t)
75

8-
// RUN: %target-swift-emit-module-interface(%t/Macros.swiftinterface) -enable-experimental-feature ExtensionMacros -module-name Macros %s
6+
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroDefinition) -module-name=MacroDefinition %S/../Macros/Inputs/syntax_macro_definitions.swift -no-toolchain-stdlib-rpath -swift-version 5
7+
8+
// RUN: %target-swift-emit-module-interface(%t/Macros.swiftinterface) -enable-experimental-feature ExtensionMacros -module-name Macros %s -load-plugin-library %t/%target-library-name(MacroDefinition)
99
// RUN: %FileCheck %s < %t/Macros.swiftinterface --check-prefix CHECK
1010
// RUN: %target-swift-frontend -compile-module-from-interface %t/Macros.swiftinterface -o %t/Macros.swiftmodule
1111

1212
// CHECK: #if compiler(>=5.3) && $Macros && $FreestandingExpressionMacros
13-
// CHECK-NEXT: @freestanding(expression) public macro publicStringify<T>(_ value: T) -> (T, Swift.String) = #externalMacro(module: "SomeModule", type: "StringifyMacro")
13+
// CHECK-NEXT: @freestanding(expression) public macro publicStringify<T>(_ value: T) -> (T, Swift.String) = #externalMacro(module: "MacroDefinition", type: "StringifyMacro")
1414
// CHECK-NEXT: #endif
15-
@freestanding(expression) public macro publicStringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "SomeModule", type: "StringifyMacro")
15+
@freestanding(expression) public macro publicStringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MacroDefinition", type: "StringifyMacro")
1616

1717
// CHECK: #if compiler(>=5.3) && $Macros && $FreestandingExpressionMacros
18-
// CHECK: @freestanding(expression) public macro labeledStringify<T>(_ value: T, label: Swift.String) -> (T, Swift.String) = #externalMacro(module: "SomeModule", type: "StringifyMacro")
18+
// CHECK: @freestanding(expression) public macro labeledStringify<T>(_ value: T, label: Swift.String) -> (T, Swift.String) = #externalMacro(module: "MacroDefinition", type: "StringifyMacro")
1919
// CHECK-NEXT: #endif
20-
@freestanding(expression) public macro labeledStringify<T>(_ value: T, label: String) -> (T, String) = #externalMacro(module: "SomeModule", type: "StringifyMacro")
20+
@freestanding(expression) public macro labeledStringify<T>(_ value: T, label: String) -> (T, String) = #externalMacro(module: "MacroDefinition", type: "StringifyMacro")
2121

2222
// CHECK: #if compiler(>=5.3) && $Macros && $FreestandingExpressionMacros
2323
// CHECK: @freestanding(expression) public macro unlabeledStringify<T>(_ value: T, label: Swift.String) -> (T, Swift.String) = #labeledStringify(value, label: "default label")
2424
// CHECK-NEXT: #endif
2525
@freestanding(expression) public macro unlabeledStringify<T>(_ value: T, label: String) -> (T, String) = #labeledStringify(value, label: "default label")
2626

2727
// CHECK: #if compiler(>=5.3) && $Macros && $FreestandingExpressionMacros
28-
// CHECK: @freestanding(expression) public macro publicLine<T>() -> T = #externalMacro(module: "SomeModule", type: "Line") where T : Swift.ExpressibleByIntegerLiteral
28+
// CHECK: @freestanding(expression) public macro publicLine<T>() -> T = #externalMacro(module: "MacroDefinition", type: "Line") where T : Swift.ExpressibleByIntegerLiteral
2929
// CHECK-NEXT: #endif
30-
@freestanding(expression) public macro publicLine<T: ExpressibleByIntegerLiteral>() -> T = #externalMacro(module: "SomeModule", type: "Line")
30+
@freestanding(expression) public macro publicLine<T: ExpressibleByIntegerLiteral>() -> T = #externalMacro(module: "MacroDefinition", type: "Line")
3131

3232
// CHECK: #if compiler(>=5.3) && $Macros
33-
// CHECK: @attached(accessor) public macro myWrapper() = #externalMacro(module: "SomeModule", type: "Wrapper")
33+
// CHECK: @attached(accessor) public macro myWrapper() = #externalMacro(module: "MacroDefinition", type: "Wrapper")
3434
// CHECK-NEXT: #endif
35-
@attached(accessor) public macro myWrapper() = #externalMacro(module: "SomeModule", type: "Wrapper")
35+
@attached(accessor) public macro myWrapper() = #externalMacro(module: "MacroDefinition", type: "Wrapper")
3636

3737
// CHECK: #if compiler(>=5.3) && $Macros && $AttachedMacros
38-
// CHECK: @attached(member, names: named(init), prefixed(`$`)) public macro MemberwiseInit() = #externalMacro(module: "SomeModule", type: "MemberwiseInitMacro")
38+
// CHECK: @attached(member, names: named(init), prefixed(`$`)) public macro MemberwiseInit() = #externalMacro(module: "MacroDefinition", type: "MemberwiseInitMacro")
3939
// CHECK-NEXT: #endif
40-
@attached(member, names: named(init), prefixed(`$`)) public macro MemberwiseInit() = #externalMacro(module: "SomeModule", type: "MemberwiseInitMacro")
40+
@attached(member, names: named(init), prefixed(`$`)) public macro MemberwiseInit() = #externalMacro(module: "MacroDefinition", type: "MemberwiseInitMacro")
4141

4242
// CHECK: #if compiler(>=5.3) && $Macros && $AttachedMacros
43-
// CHECK: @attached(member, names: named(`init`), prefixed(`$`)) public macro MemberwiseInitFunc() = #externalMacro(module: "SomeModule", type: "MemberwiseInitFuncMacro")
43+
// CHECK: @attached(member, names: named(`init`), prefixed(`$`)) public macro MemberwiseInitFunc() = #externalMacro(module: "MacroDefinition", type: "MemberwiseInitFuncMacro")
4444
// CHECK-NEXT: #endif
45-
@attached(member, names: named(`init`), prefixed(`$`)) public macro MemberwiseInitFunc() = #externalMacro(module: "SomeModule", type: "MemberwiseInitFuncMacro")
45+
@attached(member, names: named(`init`), prefixed(`$`)) public macro MemberwiseInitFunc() = #externalMacro(module: "MacroDefinition", type: "MemberwiseInitFuncMacro")
4646

4747
// CHECK: #if compiler(>=5.3) && $Macros && $AttachedMacros
48-
// CHECK: @attached(accessor, names: named(init)) public macro AccessorInitFunc() = #externalMacro(module: "SomeModule", type: "AccessorInitFuncMacro")
48+
// CHECK: @attached(accessor, names: named(init)) public macro AccessorInitFunc() = #externalMacro(module: "MacroDefinition", type: "AccessorInitFuncMacro")
4949
// CHECK-NEXT: #endif
50-
@attached(accessor, names: named(init)) public macro AccessorInitFunc() = #externalMacro(module: "SomeModule", type: "AccessorInitFuncMacro")
50+
@attached(accessor, names: named(init)) public macro AccessorInitFunc() = #externalMacro(module: "MacroDefinition", type: "AccessorInitFuncMacro")
5151

5252
// CHECK: #if compiler(>=5.3) && $Macros && $AttachedMacros
53-
// CHECK: @attached(extension, conformances: Swift.Sendable) @attached(member) public macro AddSendable() = #externalMacro(module: "SomeModule", type: "SendableExtensionMacro")
53+
// CHECK: @attached(extension, conformances: Swift.Sendable) @attached(member) public macro AddSendable() = #externalMacro(module: "MacroDefinition", type: "SendableExtensionMacro")
5454
// CHECK-NEXT: #else
55-
// CHECK: @attached(member) public macro AddSendable() = #externalMacro(module: "SomeModule", type: "SendableExtensionMacro")
55+
// CHECK: @attached(member) public macro AddSendable() = #externalMacro(module: "MacroDefinition", type: "SendableExtensionMacro")
5656
// CHECK-NEXT: #endif
57-
@attached(extension, conformances: Sendable) @attached(member) public macro AddSendable() = #externalMacro(module: "SomeModule", type: "SendableExtensionMacro")
57+
@attached(extension, conformances: Sendable) @attached(member) public macro AddSendable() = #externalMacro(module: "MacroDefinition", type: "SendableExtensionMacro")
5858

5959
// CHECK-NOT: internalStringify
60-
@freestanding(expression) macro internalStringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "SomeModule", type: "StringifyMacro")
60+
@freestanding(expression) macro internalStringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MacroDefinition", type: "StringifyMacro")
61+
62+
@freestanding(declaration, names: named(StructWithUnqualifiedLookup))
63+
macro structWithUnqualifiedLookup() = #externalMacro(module: "MacroDefinition", type: "DefineStructWithUnqualifiedLookupMacro")
64+
65+
let world = 17
66+
67+
// CHECK-NOT: structWithUnqualifiedLookup
68+
public
69+
#structWithUnqualifiedLookup
70+
71+
// CHECK: struct StructWithUnqualifiedLookup

0 commit comments

Comments
 (0)