From 258f800454055abbdc8a2daf6797f46dfd656377 Mon Sep 17 00:00:00 2001 From: Raphael Isemann Date: Tue, 31 Oct 2017 15:29:41 +0100 Subject: [PATCH] [cxxmodules] Backport D39416 See https://reviews.llvm.org/D39416 for more details. Original commit message: The MultiplexExternalSemaSource doesn't correctly overload the getModule function, causing the multiplexer to not forward this call as intended. --- .../clang/include/clang/Sema/MultiplexExternalSemaSource.h | 6 ++++-- .../tools/clang/lib/Sema/MultiplexExternalSemaSource.cpp | 7 +++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/interpreter/llvm/src/tools/clang/include/clang/Sema/MultiplexExternalSemaSource.h b/interpreter/llvm/src/tools/clang/include/clang/Sema/MultiplexExternalSemaSource.h index 1d681a00552fc..4de36afbcb974 100644 --- a/interpreter/llvm/src/tools/clang/include/clang/Sema/MultiplexExternalSemaSource.h +++ b/interpreter/llvm/src/tools/clang/include/clang/Sema/MultiplexExternalSemaSource.h @@ -148,8 +148,10 @@ class MultiplexExternalSemaSource : public ExternalSemaSource { /// \brief Print any statistics that have been gathered regarding /// the external AST source. void PrintStats() override; - - + + /// \brief Retrieve the module that corresponds to the given module ID. + Module *getModule(unsigned ID) override; + /// \brief Perform layout on the given record. /// /// This routine allows the external AST source to provide an specific diff --git a/interpreter/llvm/src/tools/clang/lib/Sema/MultiplexExternalSemaSource.cpp b/interpreter/llvm/src/tools/clang/lib/Sema/MultiplexExternalSemaSource.cpp index b7e343c647183..a3d08dab4cb8c 100644 --- a/interpreter/llvm/src/tools/clang/lib/Sema/MultiplexExternalSemaSource.cpp +++ b/interpreter/llvm/src/tools/clang/lib/Sema/MultiplexExternalSemaSource.cpp @@ -166,6 +166,13 @@ void MultiplexExternalSemaSource::PrintStats() { Sources[i]->PrintStats(); } +Module *MultiplexExternalSemaSource::getModule(unsigned ID) { + for (size_t i = 0; i < Sources.size(); ++i) + if (auto M = Sources[i]->getModule(ID)) + return M; + return nullptr; +} + bool MultiplexExternalSemaSource::layoutRecordType(const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,