Opened 14 years ago
Last modified 14 years ago
#1637 closed defect (fixed)
Type-checking of if-expression modifiers is incorrect
| Reported by: | Per Östlund | Owned by: | Per Östlund | 
|---|---|---|---|
| Priority: | high | Milestone: | |
| Component: | Version: | ||
| Keywords: | Cc: | Per Östlund, Per Östlund | 
Description
This model:
model M
  parameter Integer n = 2;
  Real r[n] = if n == 1 then {1} else {2, 3};
end M;
causes a type mismatch error because the elaboration of the if-expression returns only the type of the first branch. This is used in Modelica.Fluid.Pipes.DynamicPipe in the modification of the PartialTwoPortFlow extends clause.
Change History (3)
comment:1 by , 14 years ago
comment:2 by , 14 years ago
If I comment out this case:
    /*
    case (cache,env,e1,DAE.PROP(type_ = (DAE.T_BOOL(varLstBool = _),_),constFlag = c1),e2,DAE.PROP(type_ = t2,constFlag = c2),e3,DAE.PROP(type_ = t3,constFlag = c3),impl,st,_, _)
      equation
        true = Types.semiEquivTypes(t2, t3);
        c = constIfexp(e1, c1, c2, c3);
        (cache,exp) = cevalIfexpIfConstant(cache,env, e1, e2, e3, c1, impl, st, inInfo);
      then
        (cache,exp,DAE.PROP(t2,c));
    */
in Static.makeIfexp, all tests go:
adrpo@ida-liu050 ~/dev/OpenModelica/testsuite $ cat testsuite-trace.txt | grep ==== ==== Log /tmp/omc-rtest-adrpo/bootstrapping/log-SimCodeTest.mos ==== Log /tmp/omc-rtest-adrpo/meta/log-PartialFn13.mos ==== Log /tmp/omc-rtest-adrpo/mofiles/log-Discrete2.mo ==== Log /tmp/omc-rtest-adrpo/mofiles/log-SimpleTypeExtend.mo ==== Log /tmp/omc-rtest-adrpo/parser/log-CheckSourcesForTabs.mos
so, we can leave it like this with no issues.
  Note:
 See   TracTickets
 for help on using tickets.
    

Static.makeIfexp - comment out the Types.semiEquivTypes case and almost all models start working. The remaining Media ones seem to have lingering redeclare issues...