From 13a6dacb827ac9d52bc9bfd344f6f79b288a334c Mon Sep 17 00:00:00 2001 From: Hugh Sorby Date: Mon, 15 Jun 2026 16:47:23 +1200 Subject: [PATCH 1/3] Create test showing generator holding onto analyserModel. --- tests/generator/generator.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/generator/generator.cpp b/tests/generator/generator.cpp index 411080c523..4677dd5edb 100644 --- a/tests/generator/generator.cpp +++ b/tests/generator/generator.cpp @@ -1754,3 +1754,30 @@ TEST(Generator, generateCodeUsingProfileEnum) EXPECT_EQ_FILE_CONTENTS("generator/algebraic_eqn_computed_var_on_rhs/model.py", generator->implementationCode(analyserModel, libcellml::GeneratorProfile::Profile::PYTHON)); } + +TEST(Generator, checkGeneratorReleasesAnalyserModel) +{ + + auto parser = libcellml::Parser::create(); + auto algebraicModel = parser->parseModel(fileContents("generator/algebraic_eqn_computed_var_on_rhs/model.cellml")); + + auto analyser = libcellml::Analyser::create(); + + analyser->analyseModel(algebraicModel); + + auto analyserModel = analyser->analyserModel(); + + EXPECT_EQ(2, analyserModel.use_count()); + + EXPECT_EQ("x = a", libcellml::Generator::equationCode(analyserModel->analyserEquation(0)->ast())); + + EXPECT_EQ(2, analyserModel.use_count()); + + auto generator = libcellml::Generator::create(); + + EXPECT_EQ_FILE_CONTENTS("generator/algebraic_eqn_computed_var_on_rhs/model.c", generator->implementationCode(analyserModel)); + EXPECT_EQ(2, analyserModel.use_count()); + + EXPECT_EQ_FILE_CONTENTS("generator/algebraic_eqn_computed_var_on_rhs/model.h", generator->interfaceCode(analyserModel)); + EXPECT_EQ(2, analyserModel.use_count()); +} From 432049bf41f347299ec430039647d3ddedfa9eb3 Mon Sep 17 00:00:00 2001 From: Hugh Sorby Date: Mon, 15 Jun 2026 17:01:59 +1200 Subject: [PATCH 2/3] Fix Generator holding onto AnalyserModel handles. --- src/generator.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/generator.cpp b/src/generator.cpp index be3bd6096e..694427ae28 100644 --- a/src/generator.cpp +++ b/src/generator.cpp @@ -2282,6 +2282,7 @@ std::string Generator::interfaceCode(const AnalyserModelPtr &analyserModel, cons pFunc()->addInterfaceComputeModelMethodsCode(); + pFunc()->mAnalyserModel = nullptr; return pFunc()->mCode; } @@ -2414,6 +2415,7 @@ std::string Generator::implementationCode(const AnalyserModelPtr &analyserModel, pFunc()->addImplementationComputeVariablesMethodCode(remainingAnalyserEquations); + pFunc()->mAnalyserModel = nullptr; return pFunc()->mCode; } From f436327214ab83d9d08fcf7dcfe722c117e144e1 Mon Sep 17 00:00:00 2001 From: Hugh Sorby Date: Mon, 15 Jun 2026 17:15:23 +1200 Subject: [PATCH 3/3] Fix code formatting error in tests/generator/generator.cpp. --- tests/generator/generator.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/generator/generator.cpp b/tests/generator/generator.cpp index 4677dd5edb..aabf9c79b2 100644 --- a/tests/generator/generator.cpp +++ b/tests/generator/generator.cpp @@ -1757,7 +1757,6 @@ TEST(Generator, generateCodeUsingProfileEnum) TEST(Generator, checkGeneratorReleasesAnalyserModel) { - auto parser = libcellml::Parser::create(); auto algebraicModel = parser->parseModel(fileContents("generator/algebraic_eqn_computed_var_on_rhs/model.cellml"));