Skip to content

Commit 8235954

Browse files
Don't consider ref-type VarData in setIsRequired, findReq, getVarDataFromExpr as references are now removed in getIDSequence
1 parent 258c0a3 commit 8235954

1 file changed

Lines changed: 6 additions & 11 deletions

File tree

lib/Differentiator/TBRAnalyzer.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,14 @@ namespace clad {
2020

2121
// NOLINTBEGIN(cppcoreguidelines-pro-type-union-access)
2222
void TBRAnalyzer::setIsRequired(VarData& varData, bool isReq) {
23+
assert(varData.m_Type != VarData::REF_TYPE &&
24+
"references should be removed on the getIDSequence stage");
2325
if (varData.m_Type == VarData::FUND_TYPE)
2426
varData.m_Val.m_FundData = isReq;
2527
else if (varData.m_Type == VarData::OBJ_TYPE ||
2628
varData.m_Type == VarData::ARR_TYPE)
2729
for (auto& pair : *varData.m_Val.m_ArrData)
2830
setIsRequired(pair.second, isReq);
29-
else if (varData.m_Type == VarData::REF_TYPE && varData.m_Val.m_RefData)
30-
if (auto* data = getVarDataFromExpr(varData.m_Val.m_RefData))
31-
setIsRequired(*data, isReq);
3231
}
3332

3433
void TBRAnalyzer::merge(VarData& targetData, VarData& mergeData) {
@@ -73,18 +72,15 @@ TBRAnalyzer::VarData TBRAnalyzer::copy(VarData& copyData) {
7372
}
7473

7574
bool TBRAnalyzer::findReq(const VarData& varData) {
75+
assert(varData.m_Type != VarData::REF_TYPE &&
76+
"references should be removed on the getIDSequence stage");
7677
if (varData.m_Type == VarData::FUND_TYPE)
7778
return varData.m_Val.m_FundData;
7879
if (varData.m_Type == VarData::OBJ_TYPE ||
7980
varData.m_Type == VarData::ARR_TYPE) {
8081
for (auto& pair : *varData.m_Val.m_ArrData)
8182
if (findReq(pair.second))
8283
return true;
83-
} else if (varData.m_Type == VarData::REF_TYPE && varData.m_Val.m_RefData) {
84-
if (auto* data = getVarDataFromExpr(varData.m_Val.m_RefData)) {
85-
if (findReq(*data))
86-
return true;
87-
}
8884
}
8985
return false;
9086
}
@@ -114,6 +110,8 @@ TBRAnalyzer::VarData* TBRAnalyzer::getVarDataFromExpr(const clang::Expr* E) {
114110
assert(data && "expression not found");
115111

116112
for (auto it = IDSequence.rbegin(), e = IDSequence.rend(); it != e; ++it) {
113+
assert(data->m_Type != VarData::REF_TYPE &&
114+
"references should be removed on the getIDSequence stage");
117115
if (data->m_Type == VarData::OBJ_TYPE) {
118116
data = &(*data->m_Val.m_ArrData)[*it];
119117
} else if (data->m_Type == VarData::ARR_TYPE) {
@@ -137,9 +135,6 @@ TBRAnalyzer::VarData* TBRAnalyzer::getVarDataFromExpr(const clang::Expr* E) {
137135
} else
138136
data = &foundElem->second;
139137
}
140-
} else if (data->m_Type == VarData::REF_TYPE) {
141-
assert(data->m_Val.m_RefData && "undefined m_RefData");
142-
data = getVarDataFromExpr(data->m_Val.m_RefData);
143138
}
144139
}
145140

0 commit comments

Comments
 (0)