From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!water!watmath!clyde!rutgers!sdcsvax!ucbvax!IPSA.ARPA!mark From: mark@IPSA.ARPA (Mark Saaltink) Newsgroups: comp.lang.ada Subject: Exceptions and optimization Message-ID: <8801202255.AA10872@ipsa.arpa> Date: 20 Jan 88 22:55:00 GMT Sender: daemon@ucbvax.BERKELEY.EDU Organization: The ARPA Internet List-Id: I am trying to understand section 11.6 of the Ada Reference Manual. The Ada Issue report AI-00315 (Legal Reorderings of Operations) helps a bit, but seems to raise at least as many questions as it answers. Here are two specific questions: 1. Does "propagate" mean "raise again", as suggested by sections 11.4.1(9) and 11.4.2(8) of the RM, or does it mean "raise other than by a raise statement", as suggested by 11(2)? Does the meaning of 11.6(7) depend on which of these interpretations is used? In particular, if "propagate" were changed to "raise" within 11.6(7), would the meaning of the paragraph change? 2. AI-00315 has this example: a := 0; b := 1 / 0; a := 1; along with the claim that the CONSTRAINT_ERROR for division by 0 might be raised AFTER the execution of 'a := 1'. It is claimed that section 11.6 permits this reordering. The only part of 11.6 that could possibly apply to this example seems to be paragraph (4). However, I can't see how that applies in this example, since the proviso of that rule, namely that "an operation must not be invoked in the alternative order if it is not invoked in the canonical order", fails in this example (the assignment operation inherent in 'a := 1' is certainly not invoked in the canonical order). So I don't see what justifies this reordering. Can anyone clarify these points for me? Mark Saaltink (mark@ipsa.arpa)