| -- { dg-compile } |
| -- { dg-options "-O2 -gnato -fdump-tree-optimized" } |
| |
| package body Opt37 is |
| |
| function To_Unchecked (Bits : T_Bit_Array) return Unsigned32 is |
| Value : Unsigned32 := 0; |
| begin |
| for I in Bits'Range loop |
| Value := Value * 2 + Unsigned32 (Bits(I)); |
| end loop; |
| return Value; |
| end; |
| |
| function To_Scalar (Bits : T_Bit_Array) return Positive is |
| Tmp : Unsigned32; |
| Value : Positive; |
| begin |
| Tmp := To_Unchecked (Bits); |
| if Tmp in 0 .. Unsigned32 (Positive'last) then |
| Value := Positive (Tmp); |
| else |
| Value := -Positive (Unsigned32'last - Tmp); |
| if Value > Positive'first then |
| Value := Value - 1; |
| else |
| raise Program_Error; |
| end if; |
| end if; |
| return Value; |
| end; |
| |
| function Func (Bit_Array : T_Bit_Array; |
| Bit_Index : T_Bit_Index) return Positive is |
| begin |
| return To_Scalar (Bit_Array (Bit_Index .. Bit_Index + 1)); |
| end; |
| |
| end Opt37; |
| |
| -- { dg-final { scan-tree-dump-not "alloca" "optimized" } } |