Skip to content

Commit dfe4491

Browse files
author
Harlan Haskins
committed
[ModuleInterface] Emit remarks when rebuilding from an interface
Keep track of information that led the module interface loader to reject loading a compiled module, if it needed to fall back to compiling an interface. rdar://47792754
1 parent 6f0d137 commit dfe4491

File tree

8 files changed

+271
-31
lines changed

8 files changed

+271
-31
lines changed

include/swift/AST/DiagnosticsFrontend.def

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
//
1919
//===----------------------------------------------------------------------===//
2020

21-
#if !(defined(DIAG) || (defined(ERROR) && defined(WARNING) && defined(NOTE)))
22-
# error Must define either DIAG or the set {ERROR,WARNING,NOTE}
21+
#if !(defined(DIAG) || (defined(ERROR) && defined(WARNING) && defined(NOTE) && \
22+
defined(REMARK)))
23+
# error Must define either DIAG or the set {ERROR,WARNING,NOTE,REMARK}
2324
#endif
2425

2526
#ifndef ERROR
@@ -37,6 +38,11 @@
3738
DIAG(NOTE,ID,Options,Text,Signature)
3839
#endif
3940

41+
#ifndef REMARK
42+
# define REMARK(ID,Options,Text,Signature) \
43+
DIAG(REMARK,ID,Options,Text,Signature)
44+
#endif
45+
4046
WARNING(warning_no_such_sdk,none,
4147
"no such SDK: '%0'", (StringRef))
4248

@@ -271,6 +277,20 @@ ERROR(error_extracting_flags_from_module_interface,none,
271277
ERROR(missing_dependency_of_module_interface,none,
272278
"missing dependency '%0' of module interface '%1': %2",
273279
(StringRef, StringRef, StringRef))
280+
REMARK(rebuilding_module_from_interface,none,
281+
"rebuilding module '%0' from interface '%1'", (StringRef, StringRef))
282+
NOTE(out_of_date_module_here,none,
283+
"%select{compiled|cached|forwarding|prebuilt}0 module is out of date: '%1'",
284+
(unsigned, StringRef))
285+
NOTE(module_interface_dependency_out_of_date,none,
286+
"dependency is out of date: '%0'",
287+
(StringRef))
288+
NOTE(compiled_module_invalid,none,
289+
"unable to load compiled module '%0'",
290+
(StringRef))
291+
NOTE(compiled_module_invalid_reason,none,
292+
"unable to load compiled module '%0': %1",
293+
(StringRef, StringRef))
274294
ERROR(error_extracting_dependencies_from_cached_module,none,
275295
"error extracting dependencies from cached module '%0'",
276296
(StringRef))
@@ -282,6 +302,7 @@ ERROR(unknown_forced_module_loading_mode,none,
282302
# if defined(DIAG)
283303
# undef DIAG
284304
# endif
305+
# undef REMARK
285306
# undef NOTE
286307
# undef WARNING
287308
# undef ERROR

include/swift/Frontend/ParseableInterfaceModuleLoader.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,18 @@ namespace swift {
122122
/// directory, and loading the serialized .swiftmodules from there.
123123
class ParseableInterfaceModuleLoader : public SerializedModuleLoaderBase {
124124
friend class unittest::ParseableInterfaceModuleLoaderTest;
125-
explicit ParseableInterfaceModuleLoader(ASTContext &ctx, StringRef cacheDir,
126-
StringRef prebuiltCacheDir,
127-
DependencyTracker *tracker,
128-
ModuleLoadingMode loadMode)
125+
explicit ParseableInterfaceModuleLoader(
126+
ASTContext &ctx, StringRef cacheDir, StringRef prebuiltCacheDir,
127+
DependencyTracker *tracker, ModuleLoadingMode loadMode,
128+
bool RemarkOnRebuildFromInterface)
129129
: SerializedModuleLoaderBase(ctx, tracker, loadMode),
130-
CacheDir(cacheDir), PrebuiltCacheDir(prebuiltCacheDir)
130+
CacheDir(cacheDir), PrebuiltCacheDir(prebuiltCacheDir),
131+
RemarkOnRebuildFromInterface(RemarkOnRebuildFromInterface)
131132
{}
132133

133134
std::string CacheDir;
134135
std::string PrebuiltCacheDir;
136+
bool RemarkOnRebuildFromInterface;
135137

136138
std::error_code findModuleFilesInDirectory(
137139
AccessPathElem ModuleID, StringRef DirPath, StringRef ModuleFilename,
@@ -144,10 +146,12 @@ class ParseableInterfaceModuleLoader : public SerializedModuleLoaderBase {
144146
public:
145147
static std::unique_ptr<ParseableInterfaceModuleLoader>
146148
create(ASTContext &ctx, StringRef cacheDir, StringRef prebuiltCacheDir,
147-
DependencyTracker *tracker, ModuleLoadingMode loadMode) {
149+
DependencyTracker *tracker, ModuleLoadingMode loadMode,
150+
bool RemarkOnRebuildFromInterface = false) {
148151
return std::unique_ptr<ParseableInterfaceModuleLoader>(
149152
new ParseableInterfaceModuleLoader(ctx, cacheDir, prebuiltCacheDir,
150-
tracker, loadMode));
153+
tracker, loadMode,
154+
RemarkOnRebuildFromInterface));
151155
}
152156

153157
/// Unconditionally build \p InPath (a swiftinterface file) to \p OutPath (as

lib/Frontend/Frontend.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -339,13 +339,11 @@ bool CompilerInstance::setUpModuleLoaders() {
339339
if (MLM != ModuleLoadingMode::OnlySerialized) {
340340
auto const &Clang = clangImporter->getClangInstance();
341341
std::string ModuleCachePath = getModuleCachePathFromClang(Clang);
342-
StringRef PrebuiltModuleCachePath =
343-
Invocation.getFrontendOptions().PrebuiltModuleCachePath;
344-
auto PIML = ParseableInterfaceModuleLoader::create(*Context,
345-
ModuleCachePath,
346-
PrebuiltModuleCachePath,
347-
getDependencyTracker(),
348-
MLM);
342+
auto &FEOpts = Invocation.getFrontendOptions();
343+
StringRef PrebuiltModuleCachePath = FEOpts.PrebuiltModuleCachePath;
344+
auto PIML = ParseableInterfaceModuleLoader::create(
345+
*Context, ModuleCachePath, PrebuiltModuleCachePath,
346+
getDependencyTracker(), MLM, FEOpts.RemarkOnRebuildFromModuleInterface);
349347
Context->addModuleLoader(std::move(PIML));
350348
}
351349
Context->addModuleLoader(std::move(SML));

0 commit comments

Comments
 (0)