| -- { dg-do compile { target { lp64 || llp64 } } } |
| -- { dg-options "-O2 -gnatws" } |
| |
| procedure Main is |
| |
| subtype Int64 is Long_Long_Integer; |
| |
| type Arr is array (Int64 range <>) of Boolean; |
| |
| Pow : constant := 10; |
| |
| procedure Compute (B : in out Arr) is |
| Factor : Int64 := 3; |
| Num : Int64; |
| begin |
| while Factor <= 10 ** (Pow / 2) loop |
| Num := Factor; |
| while Num < 10 ** Pow loop |
| if B (Num) then |
| Factor := Num; |
| exit; |
| end if; |
| Num := Num + 2; |
| end loop; |
| Num := Factor * Factor; |
| while Num < 10 ** Pow loop |
| B (Num) := False; |
| Num := Num + Factor * 2; |
| end loop; |
| Factor := Factor + 2; |
| end loop; |
| end; |
| |
| B : Arr (1 .. 10 ** Pow) := (others => True); |
| |
| begin |
| Compute (B); |
| end; |