[net.lang.ada] CONSTRAINT ERROR raised at runtime

cook@katie.DEC (Neil on 225-7155) (01/23/86)

>    LNTH : NATURAL range 1..8 := 0;

In the index of ANSI/MIL-STD-1815A-1983 (The Programming Language
Ada Reference Manual), under the entry CONSTRAINT_ERROR, is a reference
to "raised by the initialization of an object 3.2.1".

In that section, paragraph 16, it says "The initialization of an object
... checks that the initial value belongs to the subtype of the
object ... The exception CONSTRAINT_ERROR is raised if this check fails."

I take "The initialization..." to be a reference to the run-time
behaviour. Since the run-time environment raises CONSTRAINT_ERROR, I think
the compiler behaves correctly.

Of course, if your question was "Why is Ada not defined differently?",
rather than why does the compiler not complain, I would not pretend to know
the answer. My experience is that these questions always have good, but
not obvious, answers.

				Neil Cook

Of course, these are my opinions, and nothing to do with anyone else.
DEC Ada is nothing to do with me. DEC and Ada are trademarks of DEC and
The United States Government, Department of Defense, Under Secretary for
Research and Engineering, respectively.

markb@sdcrdcf.UUCP (Mark Biggar) (01/24/86)

In article <640@decwrl.DEC.COM> cook@katie.DEC (Neil on 225-7155) writes:
>>    LNTH : NATURAL range 1..8 := 0;
>
>In the index of ANSI/MIL-STD-1815A-1983 (The Programming Language
>Ada Reference Manual), under the entry CONSTRAINT_ERROR, is a reference
>to "raised by the initialization of an object 3.2.1".
>
>In that section, paragraph 16, it says "The initialization of an object
>... checks that the initial value belongs to the subtype of the
>object ... The exception CONSTRAINT_ERROR is raised if this check fails."
>
>I take "The initialization..." to be a reference to the run-time
>behaviour. Since the run-time environment raises CONSTRAINT_ERROR, I think
>the compiler behaves correctly.

A very close reading of the LRM shows that there is no reason why the
compiler shouldn't complain, it just doesn't have to.  Section 1.6 para 5
says:

"If an exception is certain to be raised in every execution of a program,
 then compilers are allowed (although not required) to report this fact
 at compilation time."

So the compiler DOES behave correctly, it just could have behaved in a more
user friendly way then it did.

Mark Biggar
{allegra,burdvax,cbosgd,hplabs,ihnp4,akgua,sdcsvax}!sdcrdcf!markb