Skip to content

Commit 3cc2831

Browse files
committed
Don't require a strict revision match in LLDB.
For release-management purposes during development, LLDB's embedded Swift compiler's version number can sometimes be off-by-one in the last digit compared to the Swift compiler. This patch restores the old behavior from before 1718362. rdar://101299168
1 parent 3daa875 commit 3cc2831

File tree

7 files changed

+22
-14
lines changed

7 files changed

+22
-14
lines changed

include/swift/Serialization/Validation.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,16 @@ class ExtendedValidationInfo {
198198
/// compiled with -enable-ossa-modules.
199199
/// \param requiredSDK If not empty, only accept modules built with
200200
/// a compatible SDK. The StringRef represents the canonical SDK name.
201+
/// \param requiresRevisionMatch if true, expects the swift tag to match in
202+
/// addition to the module format version number.
201203
/// \param[out] extendedInfo If present, will be populated with additional
202204
/// compilation options serialized into the AST at build time that may be
203205
/// necessary to load it properly.
204206
/// \param[out] dependencies If present, will be populated with list of
205207
/// input files the module depends on, if present in INPUT_BLOCK.
206208
ValidationInfo validateSerializedAST(
207209
StringRef data, bool requiresOSSAModules, StringRef requiredSDK,
210+
bool requiresRevisionMatch = true,
208211
ExtendedValidationInfo *extendedInfo = nullptr,
209212
SmallVectorImpl<SerializationOptions::FileDependency> *dependencies =
210213
nullptr);

lib/ASTSectionImporter/ASTSectionImporter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ bool swift::parseASTSection(MemoryBufferSerializedModuleLoader &Loader,
3636
// headers. Iterate over all AST modules.
3737
while (!buf.empty()) {
3838
auto info = serialization::validateSerializedAST(
39-
buf, Loader.isRequiredOSSAModules(), /*requiredSDK*/StringRef());
39+
buf, Loader.isRequiredOSSAModules(), /*requiredSDK*/ StringRef(),
40+
/*requiresRevisionMatch*/ false);
4041

4142
assert(info.name.size() < (2 << 10) && "name failed sanity check");
4243

lib/Frontend/CompilerInvocation.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2634,7 +2634,8 @@ serialization::Status
26342634
CompilerInvocation::loadFromSerializedAST(StringRef data) {
26352635
serialization::ExtendedValidationInfo extendedInfo;
26362636
serialization::ValidationInfo info = serialization::validateSerializedAST(
2637-
data, getSILOptions().EnableOSSAModules, LangOpts.SDKName, &extendedInfo);
2637+
data, getSILOptions().EnableOSSAModules, LangOpts.SDKName,
2638+
!LangOpts.DebuggerSupport, &extendedInfo);
26382639

26392640
if (info.status != serialization::Status::Valid)
26402641
return info.status;
@@ -2670,7 +2671,7 @@ CompilerInvocation::setUpInputForSILTool(
26702671

26712672
auto result = serialization::validateSerializedAST(
26722673
fileBufOrErr.get()->getBuffer(), getSILOptions().EnableOSSAModules,
2673-
LangOpts.SDKName, &extendedInfo);
2674+
LangOpts.SDKName, !LangOpts.DebuggerSupport, &extendedInfo);
26742675
bool hasSerializedAST = result.status == serialization::Status::Valid;
26752676

26762677
if (hasSerializedAST) {

lib/Frontend/ModuleInterfaceLoader.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,10 @@ namespace path = llvm::sys::path;
202202

203203
static bool serializedASTLooksValid(const llvm::MemoryBuffer &buf,
204204
bool requiresOSSAModules,
205-
StringRef requiredSDK) {
206-
auto VI = serialization::validateSerializedAST(buf.getBuffer(),
207-
requiresOSSAModules,
208-
requiredSDK);
205+
StringRef requiredSDK,
206+
bool requiresRevisionMatch) {
207+
auto VI = serialization::validateSerializedAST(
208+
buf.getBuffer(), requiresOSSAModules, requiredSDK, requiresRevisionMatch);
209209
return VI.status == serialization::Status::Valid;
210210
}
211211

@@ -406,6 +406,7 @@ class UpToDateModuleCheker {
406406
LLVM_DEBUG(llvm::dbgs() << "Validating deps of " << path << "\n");
407407
auto validationInfo = serialization::validateSerializedAST(
408408
buf.getBuffer(), requiresOSSAModules, ctx.LangOpts.SDKName,
409+
!ctx.LangOpts.DebuggerSupport,
409410
/*ExtendedValidationInfo=*/nullptr, &allDeps);
410411

411412
if (validationInfo.status != serialization::Status::Valid) {
@@ -564,7 +565,8 @@ class ModuleInterfaceLoaderImpl {
564565
// First, make sure the underlying module path exists and is valid.
565566
auto modBuf = fs.getBufferForFile(fwd.underlyingModulePath);
566567
if (!modBuf || !serializedASTLooksValid(*modBuf.get(), requiresOSSAModules,
567-
ctx.LangOpts.SDKName))
568+
ctx.LangOpts.SDKName,
569+
!ctx.LangOpts.DebuggerSupport))
568570
return false;
569571

570572
// Next, check the dependencies in the forwarding file.

lib/Serialization/ModuleFileSharedCore.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ bool serialization::isSerializedAST(StringRef data) {
470470

471471
ValidationInfo serialization::validateSerializedAST(
472472
StringRef data, bool requiresOSSAModules, StringRef requiredSDK,
473-
ExtendedValidationInfo *extendedInfo,
473+
bool requiresRevisionMatch, ExtendedValidationInfo *extendedInfo,
474474
SmallVectorImpl<SerializationOptions::FileDependency> *dependencies) {
475475
ValidationInfo result;
476476

@@ -512,7 +512,7 @@ ValidationInfo serialization::validateSerializedAST(
512512
result = validateControlBlock(
513513
cursor, scratch,
514514
{SWIFTMODULE_VERSION_MAJOR, SWIFTMODULE_VERSION_MINOR},
515-
requiresOSSAModules, /*requiresRevisionMatch=*/true,
515+
requiresOSSAModules, requiresRevisionMatch,
516516
requiredSDK,
517517
extendedInfo, localObfuscator);
518518
if (result.status == Status::Malformed)

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1173,7 +1173,7 @@ bool SerializedModuleLoaderBase::canImportModule(
11731173
if (swiftInterfaceVersion.empty() && *unusedModuleBuffer) {
11741174
auto metaData = serialization::validateSerializedAST(
11751175
(*unusedModuleBuffer)->getBuffer(), Ctx.SILOpts.EnableOSSAModules,
1176-
Ctx.LangOpts.SDKName);
1176+
Ctx.LangOpts.SDKName, !Ctx.LangOpts.DebuggerSupport);
11771177
versionInfo->setVersion(metaData.userModuleVersion,
11781178
ModuleVersionSourceKind::SwiftBinaryModule);
11791179
} else {

tools/lldb-moduleimport-test/lldb-moduleimport-test.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@ static bool
4848
validateModule(llvm::StringRef data, bool Verbose, bool requiresOSSAModules,
4949
swift::serialization::ValidationInfo &info,
5050
swift::serialization::ExtendedValidationInfo &extendedInfo) {
51-
info = swift::serialization::validateSerializedAST(data, requiresOSSAModules,
52-
/*requiredSDK*/StringRef(),
53-
&extendedInfo);
51+
info = swift::serialization::validateSerializedAST(
52+
data, requiresOSSAModules,
53+
/*requiredSDK*/ StringRef(), /*requiresRevisionMatch*/ false,
54+
&extendedInfo);
5455
if (info.status != swift::serialization::Status::Valid) {
5556
llvm::outs() << "error: validateSerializedAST() failed\n";
5657
return false;

0 commit comments

Comments
 (0)