From cf32d4632ac26e93cad30ee86d1949c5d6b735d5 Mon Sep 17 00:00:00 2001 From: kabdelhak <38032125+kabdelhak@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:30:58 +0200 Subject: [PATCH] [BE] fix? resolve loops (#12186) - take any equation if no order is enforced when sorting loop equations - (can occur because previous steps removed actual loop dependencies) Co-authored-by: phannebohm --- OMCompiler/Compiler/BackEnd/ResolveLoops.mo | 31 +++++++++++++-------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/OMCompiler/Compiler/BackEnd/ResolveLoops.mo b/OMCompiler/Compiler/BackEnd/ResolveLoops.mo index 8992783832..5e0daec540 100644 --- a/OMCompiler/Compiler/BackEnd/ResolveLoops.mo +++ b/OMCompiler/Compiler/BackEnd/ResolveLoops.mo @@ -1330,18 +1330,20 @@ algorithm equation then listReverse(sortLoopIn); - case(_,_,_,start::rest) - equation - vars = arrayGet(m,start); - varEqs = List.map1(vars,Array.getIndexFirst,mT); - eqs = List.flatten(varEqs); - eqs = List.unique(eqs); - eqs = List.intersectionOnTrue(eqs,loopIn,intEq); - next = listHead(eqs); - rest = List.deleteMember(loopIn,next); - rest = sortLoop(rest,m,mT,next::sortLoopIn); - then - rest; + case(_,_,_,start::_) + algorithm + vars := arrayGet(m,start); + varEqs := List.map1(vars,Array.getIndexFirst,mT); + eqs := List.flatten(varEqs); + eqs := List.unique(eqs); + eqs := List.intersectionOnTrue(eqs,loopIn,intEq); + if listEmpty(eqs) then + next := List.first(loopIn); + else + next := List.first(eqs); + end if; + rest := List.deleteMember(loopIn,next); + then sortLoop(rest,m,mT,next::sortLoopIn); end matchcontinue; end sortLoop; @@ -1814,6 +1816,11 @@ algorithm // constant then (false,false); + case(DAE.ICONST(),_) + equation + // constant + then + (false,false); else equation print("add a case to expIsCref:"+ExpressionDump.printExpStr(expIn)+"\n");