aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Serialization/ASTWriterStmt.cpp
diff options
context:
space:
mode:
authorMatheus Izvekov <mizvekov@gmail.com>2025-04-11 18:04:18 -0300
committerGitHub <noreply@github.com>2025-04-11 18:04:18 -0300
commit4530922cfdacc5be25dbe499fc106cc3b009bf79 (patch)
tree4dcdf3eba5a90e531fe1d660a82b2ef679ffbb81 /clang/lib/Serialization/ASTWriterStmt.cpp
parent2837fd7e5ad521d977fbca85a639ce7afbacdc56 (diff)
downloadllvm-4530922cfdacc5be25dbe499fc106cc3b009bf79.zip
llvm-4530922cfdacc5be25dbe499fc106cc3b009bf79.tar.gz
llvm-4530922cfdacc5be25dbe499fc106cc3b009bf79.tar.bz2
[clang] fix serialization for SubstNonTypeTemplateParmPackExpr (#135428)
This fixes a PCM non-determinism regression reported here: https://github.com/llvm/llvm-project/pull/134560#issuecomment-2797744370 There was a bit in `SubstNonTypeTemplateParmPackExpr` which we missed to serialize, and that bit eventually propagates to `SubstNonTypeTemplateParmExpr`. As a drive by, improve serialization for PackIndex on SubstNonTypeTemplateParmExpr by using the newly introduced UnsignedOrNone helpers. There are no release notes since this regression was never released.
Diffstat (limited to 'clang/lib/Serialization/ASTWriterStmt.cpp')
-rw-r--r--clang/lib/Serialization/ASTWriterStmt.cpp5
1 files changed, 2 insertions, 3 deletions
diff --git a/clang/lib/Serialization/ASTWriterStmt.cpp b/clang/lib/Serialization/ASTWriterStmt.cpp
index 939b37c..b9eabd5 100644
--- a/clang/lib/Serialization/ASTWriterStmt.cpp
+++ b/clang/lib/Serialization/ASTWriterStmt.cpp
@@ -2228,9 +2228,7 @@ void ASTStmtWriter::VisitSubstNonTypeTemplateParmExpr(
Record.AddDeclRef(E->getAssociatedDecl());
CurrentPackingBits.addBit(E->isReferenceParameter());
CurrentPackingBits.addBits(E->getIndex(), /*Width=*/12);
- CurrentPackingBits.addBit((bool)E->getPackIndex());
- if (auto PackIndex = E->getPackIndex())
- Record.push_back(*PackIndex + 1);
+ Record.writeUnsignedOrNone(E->getPackIndex());
CurrentPackingBits.addBit(E->getFinal());
Record.AddSourceLocation(E->getNameLoc());
@@ -2242,6 +2240,7 @@ void ASTStmtWriter::VisitSubstNonTypeTemplateParmPackExpr(
SubstNonTypeTemplateParmPackExpr *E) {
VisitExpr(E);
Record.AddDeclRef(E->getAssociatedDecl());
+ CurrentPackingBits.addBit(E->getFinal());
Record.push_back(E->getIndex());
Record.AddTemplateArgument(E->getArgumentPack());
Record.AddSourceLocation(E->getParameterPackLocation());