"J-P. Rosen" wrote in message news:mno5d2$s8e$1@dont-email.me... > Le 10/07/2015 11:46, Anatoly Chernyshev a écrit : ... >> Even though it should abort the compilation with an error message. >> No? >> > No. What happens is that it constructs an initialization aggregate whose > bounds are (n_d, 2), and then raises Constraint_Error because the bounds > of the initial value do not match those of the variable. That's exactly > what the warning is telling you. Right. More generally, "out of range" errors are always reported at runtime; compilers often give a warning but they're not allowed to reject the program. That's because perfectly sensible programs might contain an "out of range" error in code that will never be executed, and one would be very annoyed if the program was rejected. Consider: procedure Something (Mem : in Integer) is Size : constant := 0; begin if Size /= 0 then ... Mem / Size ... else ... end if; end Something; If dividing by zero was a compile-time error, it wouldn't be possible to divide by a constant whose value might be zero, even in code that's protected by a pre-test. (Imagine that Size started out as 1 and then later got changed to 0 during program maintenance.) That would be very annoying. The same is true for aggregates, since they can be sized by constants. Randy.