-- { dg-do compile } -- { dg-options "-O -gnatws" } package body Opt1 is function De_Linear_Index (Index : Natural; D : Natural; Ind_Lengths : Dimention_Length) return Dimension_Indexes is Len : Natural := 1; Tmp_Ind : Natural := Index; Tmp_Res : Natural; Result : Dimension_Indexes (1 .. D); begin for J in 1 .. D loop Len := Len * Ind_Lengths (J); end loop; for J in Result'Range loop Result (J) := Tmp_Res; Tmp_Ind := Tmp_Ind - Len * (Result (J) - 1); end loop; return Result; end; end Opt1;