Opened 14 years ago
Last modified 14 years ago
#1522 closed defect (fixed)
Optimization of default function argument values causes incorrect results when a value is given
| Reported by: | Pavol Privitzer | Owned by: | Pavol Privitzer |
|---|---|---|---|
| Priority: | high | Milestone: | |
| Component: | Version: | ||
| Keywords: | Cc: | Pavol Privitzer, Per Östlund |
Description
For model:
model bugFun
function myFun
input Real[1, :] x = [0,1];
output Real y;
protected
Real[1, size(x,2)] locX;
Integer index;
algorithm
index :=1;
while (index <= size(x,2)) loop
locX[1,index] := x[1,index];
index := index + 1;
end while;
y := locX[1,size(x,2)];
end myFun;
Real res1;
Real res2;
equation
res1 = myFun( {{1,2,3}});
res2 = myFun( {{1,2,3,4,5}});
end bugFun;
are expected values
res1 = 3 res2 = 5
but both are 2
The problem is an agressive optimization where the
y := locX[1,size(x,2)];
is replaced (in generated code) by
y := locX[1,2];
because of the default value of x[] ...
When one removes the default value of x, everything works fine ...
Change History (2)
comment:1 by , 14 years ago
comment:2 by , 14 years ago
Fixed in revision 9005, see test case mofiles/FunctionEval12. size of any array in a function is now considered to be a variable expression, which is not always correct. This might lead to less efficient code, but since this problem would require a lot of work to fix correctly we'll go with correct over efficient for now.

Added code tags.