diff --git a/interpreter/llvm-project/clang/include/clang/Serialization/ASTReader.h b/interpreter/llvm-project/clang/include/clang/Serialization/ASTReader.h index 606c849fe7919..b6ccc230c86f1 100644 --- a/interpreter/llvm-project/clang/include/clang/Serialization/ASTReader.h +++ b/interpreter/llvm-project/clang/include/clang/Serialization/ASTReader.h @@ -800,6 +800,9 @@ class ASTReader /// files. llvm::DenseSet LoadedUndefs; + /// \Token literal data loaded and owned by us. + std::vector TokenLiteralDataLoaded; + /// A vector containing submodules that have already been loaded. /// /// This vector is indexed by the Submodule ID (-1). NULL submodule entries diff --git a/interpreter/llvm-project/clang/lib/Serialization/ASTReader.cpp b/interpreter/llvm-project/clang/lib/Serialization/ASTReader.cpp index 0c2b2b2e3a04a..dffb3246743cd 100644 --- a/interpreter/llvm-project/clang/lib/Serialization/ASTReader.cpp +++ b/interpreter/llvm-project/clang/lib/Serialization/ASTReader.cpp @@ -2135,6 +2135,14 @@ Token ASTReader::ReadToken(ModuleFile &M, const RecordDataImpl &Record, if (IdentifierInfo *II = getLocalIdentifier(M, Record[Idx++])) Tok.setIdentifierInfo(II); } + + if (Tok.isLiteral()) { + const RecordData& RD = reinterpret_cast(Record); + std::string* Lit = new std::string(ReadString(RD, Idx)); + TokenLiteralDataLoaded.push_back(Lit); + Tok.setLiteralData(Lit->c_str()); + } + return Tok; } @@ -11268,6 +11276,9 @@ ASTReader::ASTReader(Preprocessor &PP, ModuleCache &ModCache, ASTReader::~ASTReader() { if (OwnsDeserializationListener) delete DeserializationListener; + for (auto PStr: TokenLiteralDataLoaded) { + delete PStr; + } } IdentifierResolver &ASTReader::getIdResolver() { diff --git a/interpreter/llvm-project/clang/lib/Serialization/ASTWriter.cpp b/interpreter/llvm-project/clang/lib/Serialization/ASTWriter.cpp index 39104da10d0b7..59ecb7fe3e5ea 100644 --- a/interpreter/llvm-project/clang/lib/Serialization/ASTWriter.cpp +++ b/interpreter/llvm-project/clang/lib/Serialization/ASTWriter.cpp @@ -5322,6 +5322,9 @@ void ASTWriter::AddToken(const Token &Tok, RecordDataImpl &Record) { // is needed. AddIdentifierRef(Tok.getIdentifierInfo(), Record); } + + if (Tok.isLiteral()) + AddString(StringRef(Tok.getLiteralData(), Tok.getLength()), Record); } void ASTWriter::AddString(StringRef Str, RecordDataImpl &Record) { diff --git a/interpreter/llvm-project/llvm-project.tag b/interpreter/llvm-project/llvm-project.tag index a85ea910b60ce..415102848b569 100644 --- a/interpreter/llvm-project/llvm-project.tag +++ b/interpreter/llvm-project/llvm-project.tag @@ -1 +1 @@ -ROOT-llvm22-20260827-01 +ROOT-llvm22-20260902-01