[Serialization] Output precedence higher/lowerThan relations when valid

When allowing errors, do not output higher/lowerThan relations for
invalid precedencegroup declarations.

Resolves rdar://97362356.
This commit is contained in:
Ben Barham
2022-07-28 12:23:12 -07:00
parent d36ab46ceb
commit ee8bc34795
2 changed files with 26 additions and 6 deletions

View File

@@ -3388,20 +3388,27 @@ public:
SmallVector<DeclID, 8> relations;
for (auto &rel : group->getHigherThan()) {
assert(rel.Group && "Undiagnosed invalid precedence group!");
relations.push_back(S.addDeclRef(rel.Group));
if (rel.Group) {
relations.push_back(S.addDeclRef(rel.Group));
} else if (!S.allowCompilerErrors()) {
assert(rel.Group && "Undiagnosed invalid precedence group!");
}
}
size_t numHigher = relations.size();
for (auto &rel : group->getLowerThan()) {
assert(rel.Group && "Undiagnosed invalid precedence group!");
relations.push_back(S.addDeclRef(rel.Group));
if (rel.Group) {
relations.push_back(S.addDeclRef(rel.Group));
} else if (!S.allowCompilerErrors()) {
assert(rel.Group && "Undiagnosed invalid precedence group!");
}
}
unsigned abbrCode = S.DeclTypeAbbrCodes[PrecedenceGroupLayout::Code];
PrecedenceGroupLayout::emitRecord(S.Out, S.ScratchRecord, abbrCode,
nameID, contextID.getOpaqueValue(),
associativity, group->isAssignment(),
group->getHigherThan().size(),
relations);
numHigher, relations);
}
void visitInfixOperatorDecl(const InfixOperatorDecl *op) {