diff --git a/include/revng/Model/ToolHelpers.h b/include/revng/Model/ToolHelpers.h index d6085fcd8..d3e56a736 100644 --- a/include/revng/Model/ToolHelpers.h +++ b/include/revng/Model/ToolHelpers.h @@ -213,8 +213,15 @@ public: return *Module; } - TupleTree &getModel() { return Model; } - const TupleTree &getModel() const { return Model; } + TupleTree &getWriteableModel() { + Model.evictCachedReferences(); + return Model; + } + + const model::Binary &getReadOnlyModel() { + Model.cacheReferences(); + return *std::as_const(Model); + } public: llvm::Error save(const llvm::Twine &Path, ModelOutputType::Values Type) { diff --git a/tools/model/apply/Main.cpp b/tools/model/apply/Main.cpp index f597d2bd9..075157507 100644 --- a/tools/model/apply/Main.cpp +++ b/tools/model/apply/Main.cpp @@ -51,7 +51,7 @@ int main(int Argc, char *Argv[]) { if (not Diff) ExitOnError(Diff.takeError()); - Diff->apply(Model->getModel()); + Diff->apply(Model->getWriteableModel()); auto DesiredOutput = Options.getDesiredOutput(Model->hasModule()); ExitOnError(Model->save(Options.getPath(), DesiredOutput)); diff --git a/tools/model/export/type-graph/Main.cpp b/tools/model/export/type-graph/Main.cpp index e25d60c8f..0ca0f5a7c 100644 --- a/tools/model/export/type-graph/Main.cpp +++ b/tools/model/export/type-graph/Main.cpp @@ -43,7 +43,7 @@ int main(int Argc, char *Argv[]) { revng_abort(EC.message().c_str()); TypeSystemPrinter TSPrinter(Out); - TSPrinter.print(*MaybeModel->getModel()); + TSPrinter.print(MaybeModel->getReadOnlyModel()); return EXIT_SUCCESS; }