Opened 12 years ago

Closed 10 years ago

#2030 closed defect (worksforme)

Array Slice Assignment not simulatable

Reported by: jfrenkel Owned by: sjoelund.se
Priority: critical Milestone: 1.9.1
Component: Code Generation Version: trunk
Keywords: array slice assignment Cc: wbraun

Description

The following models is not simulatable because codegeneration/simulation runtime generates invalid code.

model Test
  Real A[5,2]={{1,2},{3,4},{5,6},{7,8},{9,10}};
  Real X1[5,2];
algorithm
  for i in 1:2 loop
    X1[:,i]:=A[:,i];
  end for;
end Test;

Code generation generates

    modelica_integer $Pi;
    for($Pi = (modelica_integer) 1; in_range_integer($Pi, tmp4, tmp6); $Pi += tmp5)
    {
      tmp3 = get_memory_state();
      array_alloc_scalar_real_array(&tmp0, 5, (modelica_real)(&$PA)[(((modelica_integer) 1)*2)+(((modelica_integer)$Pi))], (modelica_real)(&$PA)[(((modelica_integer) 2)*2)+(((modelica_integer)$Pi))], (modelica_real)(&$PA)[(((modelica_integer) 3)*2)+(((modelica_integer)$Pi))], (modelica_real)(&$PA)[(((modelica_integer) 4)*2)+(((modelica_integer)$Pi))], (modelica_real)(&$PA)[(((modelica_integer) 5)*2)+(((modelica_integer)$Pi))]);
      create_index_spec(&tmp1, 2, (1), (int*)0, 'W', (0), make_index_array(1, (int) (modelica_integer)$Pi), 'S');
      indexed_assign_real_array(&tmp0, &tmp2, &tmp1);
      copy_real_array_data_mem(&tmp2, &$PX1);
      restore_memory_state(tmp3);
    }

The problem is that tmp2.dim_size ist not set and "copy_real_array_data_mem" wrote in other memory than reserved for $PX1. Maybe indexed_assign_real_array should set tmp2.dim_size.

Change History (3)

comment:1 Changed 12 years ago by jfrenkel

comment:2 Changed 11 years ago by sjoelund.se

  • Milestone changed from 1.9.0 to 2.0.0
  • Priority changed from blocker to critical

comment:3 Changed 10 years ago by sjoelund.se

  • Milestone changed from 2.0.0 to 1.9.1
  • Resolution set to worksforme
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.