Skip to content

Commit 2469735

Browse files
committed
fix #10944: Null sentinel initialized=false
DataRuntimeLang::Null sentinel was ctor'd w/ initialized=true (DataRuntimeLanguage.hh:805 static init, :868 clear_state). Semantically wrong - Null means "no value set" - and it poisoned every actuator Erl var via Value=Null at EMSManager.cc:743, defeating checkForUnusedActuatorsAtEnd's !Value.initialized guard. Flip the last ctor arg to false at both sites. Audit confirms dataRuntimeLang->Null has a single caller - zero blast radius. Update EMSManager_TrendValue_to_Actuator: two pre-SET EXPECT_TRUE->EXPECT_FALSE to match corrected invariant.
1 parent 7c0eee9 commit 2469735

2 files changed

Lines changed: 4 additions & 4 deletions

File tree

src/EnergyPlus/DataRuntimeLanguage.hh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -802,7 +802,7 @@ struct RuntimeLanguageData : BaseGlobalStruct
802802
Array1D<DataRuntimeLanguage::InternalVarsUsedType> EMSInternalVarsUsed; // internal data that are used
803803
Array1D<DataRuntimeLanguage::EMSProgramCallManagementType> EMSProgramCallManager; // program calling managers
804804
DataRuntimeLanguage::ErlValueType Null = DataRuntimeLanguage::ErlValueType(
805-
DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", true); // special "null" Erl variable value instance
805+
DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", false); // special "null" Erl variable value instance; issue #10944
806806
DataRuntimeLanguage::ErlValueType False = DataRuntimeLanguage::ErlValueType(
807807
DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", true); // special "false" Erl variable value instance
808808
DataRuntimeLanguage::ErlValueType True = DataRuntimeLanguage::ErlValueType(
@@ -865,7 +865,7 @@ struct RuntimeLanguageData : BaseGlobalStruct
865865
this->EMSInternalVarsAvailable.deallocate();
866866
this->EMSInternalVarsUsed.deallocate();
867867
this->EMSProgramCallManager.deallocate();
868-
this->Null = DataRuntimeLanguage::ErlValueType(DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", true);
868+
this->Null = DataRuntimeLanguage::ErlValueType(DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", false); // issue #10944
869869
this->False = DataRuntimeLanguage::ErlValueType(DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", true);
870870
this->True = DataRuntimeLanguage::ErlValueType(DataRuntimeLanguage::Value::Null, 0.0, "", 0, 0, false, 0, "", true);
871871

tst/EnergyPlus/unit/EMSManager.unit.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2592,7 +2592,7 @@ TEST_F(EnergyPlusFixture, EMSManager_TrendValue_to_Actuator)
25922592
EXPECT_FALSE(actuatorDirectErlVar.Value.TrendVariable);
25932593
EXPECT_EQ(0, actuatorDirectErlVar.Value.TrendVarPointer);
25942594
EXPECT_TRUE(actuatorDirectErlVar.Value.Error.empty());
2595-
EXPECT_TRUE(actuatorDirectErlVar.Value.initialized);
2595+
EXPECT_FALSE(actuatorDirectErlVar.Value.initialized); // issue #10944: unset until Erl SET runs
25962596

25972597
auto &actuatorIndirectErlVar = state->dataRuntimeLang->ErlVariable(2);
25982598
EXPECT_EQ("ACTUATOR_SCH_INDIRECT", actuatorIndirectErlVar.Name);
@@ -2605,7 +2605,7 @@ TEST_F(EnergyPlusFixture, EMSManager_TrendValue_to_Actuator)
26052605
EXPECT_FALSE(actuatorIndirectErlVar.Value.TrendVariable);
26062606
EXPECT_EQ(0, actuatorIndirectErlVar.Value.TrendVarPointer);
26072607
EXPECT_TRUE(actuatorIndirectErlVar.Value.Error.empty());
2608-
EXPECT_TRUE(actuatorIndirectErlVar.Value.initialized);
2608+
EXPECT_FALSE(actuatorIndirectErlVar.Value.initialized); // issue #10944: unset until Erl SET runs
26092609

26102610
// Then we have the built in ones
26112611
for (int i = 1; i <= numBuiltInErlVars; ++i) {

0 commit comments

Comments
 (0)