Skip to content

Commit 8eb31a8

Browse files
authored
Merge pull request #84112 from rmaz/noserializepluginpaths
Debug prefix macro search paths
2 parents 986afef + 7296b28 commit 8eb31a8

File tree

2 files changed

+74
-9
lines changed

2 files changed

+74
-9
lines changed

lib/Serialization/Serialization.cpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,10 +1199,12 @@ void Serializer::writeHeader() {
11991199

12001200
const auto &PathRemapper = Options.DebuggingOptionsPrefixMap;
12011201
const auto &PathObfuscator = Options.PathObfuscator;
1202+
auto remapPath = [&PathRemapper, &PathObfuscator](StringRef Path) {
1203+
return PathObfuscator.obfuscate(PathRemapper.remapPath(Path));
1204+
};
1205+
12021206
auto sdkPath = M->getASTContext().SearchPathOpts.getSDKPath();
1203-
SDKPath.emit(
1204-
ScratchRecord,
1205-
PathObfuscator.obfuscate(PathRemapper.remapPath(sdkPath)));
1207+
SDKPath.emit(ScratchRecord, remapPath(sdkPath));
12061208
auto &Opts = Options.ExtraClangOptions;
12071209
for (auto Arg = Opts.begin(), E = Opts.end(); Arg != E; ++Arg) {
12081210
StringRef arg(*Arg);
@@ -1246,28 +1248,28 @@ void Serializer::writeHeader() {
12461248
auto &opt = elem.get<PluginSearchOption::PluginPath>();
12471249
PluginSearchOpt.emit(ScratchRecord,
12481250
uint8_t(PluginSearchOptionKind::PluginPath),
1249-
opt.SearchPath);
1251+
remapPath(opt.SearchPath));
12501252
continue;
12511253
}
12521254
case PluginSearchOption::Kind::ExternalPluginPath: {
12531255
auto &opt = elem.get<PluginSearchOption::ExternalPluginPath>();
12541256
PluginSearchOpt.emit(
12551257
ScratchRecord,
12561258
uint8_t(PluginSearchOptionKind::ExternalPluginPath),
1257-
opt.SearchPath + "#" + opt.ServerPath);
1259+
remapPath(opt.SearchPath) + "#" + remapPath(opt.ServerPath));
12581260
continue;
12591261
}
12601262
case PluginSearchOption::Kind::LoadPluginLibrary: {
12611263
auto &opt = elem.get<PluginSearchOption::LoadPluginLibrary>();
12621264
PluginSearchOpt.emit(
12631265
ScratchRecord,
12641266
uint8_t(PluginSearchOptionKind::LoadPluginLibrary),
1265-
opt.LibraryPath);
1267+
remapPath(opt.LibraryPath));
12661268
continue;
12671269
}
12681270
case PluginSearchOption::Kind::LoadPluginExecutable: {
12691271
auto &opt = elem.get<PluginSearchOption::LoadPluginExecutable>();
1270-
std::string optStr = opt.ExecutablePath + "#";
1272+
std::string optStr = remapPath(opt.ExecutablePath) + "#";
12711273
llvm::interleave(
12721274
opt.ModuleNames, [&](auto &name) { optStr += name; },
12731275
[&]() { optStr += ","; });
@@ -1278,8 +1280,8 @@ void Serializer::writeHeader() {
12781280
}
12791281
case PluginSearchOption::Kind::ResolvedPluginConfig: {
12801282
auto &opt = elem.get<PluginSearchOption::ResolvedPluginConfig>();
1281-
std::string optStr =
1282-
opt.LibraryPath + "#" + opt.ExecutablePath + "#";
1283+
std::string optStr = remapPath(opt.LibraryPath) + "#" +
1284+
remapPath(opt.ExecutablePath) + "#";
12831285
llvm::interleave(
12841286
opt.ModuleNames, [&](auto &name) { optStr += name; },
12851287
[&]() { optStr += ","; });
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// REQUIRES: swift_swift_parser
2+
3+
/// Test loading dependencies that has macros.
4+
// RUN: %empty-directory(%t)
5+
// RUN: split-file %s %t
6+
7+
/// Build macros.
8+
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroOne) -module-name=MacroOne %t/macro-1.swift
9+
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroTwo) -module-name=MacroTwo %t/macro-2.swift
10+
11+
// RUN: %target-swift-frontend -emit-module %t/test.swift -module-name Test -o %t/Test.swiftmodule \
12+
// RUN: -swift-version 5 -external-plugin-path %t#%swift-plugin-server -package-name Test \
13+
// RUN: -plugin-path %swift-plugin-dir -prefix-serialized-debugging-options \
14+
// RUN: -load-plugin-library %t/%target-library-name(MacroOne) \
15+
// RUN: -debug-prefix-map %t=/externalsearchpath \
16+
// RUN: -debug-prefix-map %swift-plugin-server=/externalserverpath \
17+
// RUN: -debug-prefix-map %swift-plugin-dir=/plugindir
18+
// RUN: llvm-bcanalyzer -dump %t/Test.swiftmodule | %FileCheck %s
19+
20+
// CHECK: <PLUGIN_SEARCH_OPTION abbrevid=8 op0=1/> blob data = '/externalsearchpath#/externalserverpath'
21+
// CHECK: <PLUGIN_SEARCH_OPTION abbrevid=8 op0=0/> blob data = '/plugindir'
22+
// CHECK: <PLUGIN_SEARCH_OPTION abbrevid=8 op0=2/> blob data = '/externalsearchpath/{{(lib)?}}MacroOne
23+
24+
//--- macro-1.swift
25+
import SwiftSyntax
26+
@_spi(ExperimentalLanguageFeature) import SwiftSyntaxMacros
27+
28+
public struct AssertMacro: ExpressionMacro {
29+
public static func expansion(
30+
of macro: some FreestandingMacroExpansionSyntax,
31+
in context: some MacroExpansionContext
32+
) -> ExprSyntax {
33+
guard let argument = macro.arguments.first?.expression else {
34+
fatalError("boom")
35+
}
36+
37+
return "assert(\(argument))"
38+
}
39+
}
40+
41+
//--- macro-2.swift
42+
import SwiftSyntax
43+
@_spi(ExperimentalLanguageFeature) import SwiftSyntaxMacros
44+
45+
public struct StringifyMacro: ExpressionMacro {
46+
public static func expansion(
47+
of macro: some FreestandingMacroExpansionSyntax,
48+
in context: some MacroExpansionContext
49+
) -> ExprSyntax {
50+
guard let argument = macro.arguments.first?.expression else {
51+
fatalError("boom")
52+
}
53+
54+
return "(\(argument), \(StringLiteralExprSyntax(content: argument.description)))"
55+
}
56+
}
57+
58+
//--- test.swift
59+
import Swift
60+
@freestanding(expression) public macro assert(_: Bool) = #externalMacro(module: "MacroOne", type: "AssertMacro")
61+
@freestanding(expression) public macro assert_2(_: Bool) = #externalMacro(module: "MacroOne", type: "AssertMacro")
62+
@freestanding(expression) public macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MacroTwo", type: "StringifyMacro")
63+
@freestanding(expression) public macro stringify_2<T>(_ value: T) -> (T, String) = #externalMacro(module: "MacroTwo", type: "StringifyMacro")

0 commit comments

Comments
 (0)