Skip to content

Commit 5b171ce

Browse files
authored
Merge pull request #60284 from bnbarham/invalid-precedence
[Serialization] Output precedence higher/lowerThan relations when valid
2 parents 0a8b22f + ee8bc34 commit 5b171ce

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

lib/Serialization/Serialization.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3388,20 +3388,27 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
33883388

33893389
SmallVector<DeclID, 8> relations;
33903390
for (auto &rel : group->getHigherThan()) {
3391-
assert(rel.Group && "Undiagnosed invalid precedence group!");
3392-
relations.push_back(S.addDeclRef(rel.Group));
3391+
if (rel.Group) {
3392+
relations.push_back(S.addDeclRef(rel.Group));
3393+
} else if (!S.allowCompilerErrors()) {
3394+
assert(rel.Group && "Undiagnosed invalid precedence group!");
3395+
}
33933396
}
3397+
3398+
size_t numHigher = relations.size();
33943399
for (auto &rel : group->getLowerThan()) {
3395-
assert(rel.Group && "Undiagnosed invalid precedence group!");
3396-
relations.push_back(S.addDeclRef(rel.Group));
3400+
if (rel.Group) {
3401+
relations.push_back(S.addDeclRef(rel.Group));
3402+
} else if (!S.allowCompilerErrors()) {
3403+
assert(rel.Group && "Undiagnosed invalid precedence group!");
3404+
}
33973405
}
33983406

33993407
unsigned abbrCode = S.DeclTypeAbbrCodes[PrecedenceGroupLayout::Code];
34003408
PrecedenceGroupLayout::emitRecord(S.Out, S.ScratchRecord, abbrCode,
34013409
nameID, contextID.getOpaqueValue(),
34023410
associativity, group->isAssignment(),
3403-
group->getHigherThan().size(),
3404-
relations);
3411+
numHigher, relations);
34053412
}
34063413

34073414
void visitInfixOperatorDecl(const InfixOperatorDecl *op) {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-swift-frontend -verify -emit-module -experimental-allow-module-with-compiler-errors %s -o %t/error.swiftmodule
4+
// RUN: %target-swift-frontend -module-name error -emit-module -experimental-allow-module-with-compiler-errors %t/error.swiftmodule -o %t/error2.swiftmodule 2>&1 | %FileCheck %s
5+
6+
// CHECK: allowing deserialization of invalid declaration
7+
8+
precedencegroup SomePrecedence {
9+
associativity: right
10+
higherThan: MissingType // expected-error {{unknown precedence group 'MissingType'}}
11+
}
12+
13+
infix operator <>: SomePrecedence

0 commit comments

Comments
 (0)