[Ada] Don't fail a front-end assertion if errors have already been detected
authorSteve Baird <baird@adacore.com>
Wed, 18 Sep 2019 08:32:37 +0000 (08:32 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 18 Sep 2019 08:32:37 +0000 (08:32 +0000)
In sem_eval.adb, we have an assertion that the type of a "null" literal
is an access type. It turns out that this assertion can fail when
processing an illegal program, e.g. one that contains something like
"Integer'(null)".  This leads to differences in the compiler's generated
output for such tests depending on whether assertions are/aren't
enabled; in particular, the "compilation abandoned due to previous
error" message generated in Comperr.Compiler_Abort. In order to avoid
these differences, we change the assertion so that it does not fail if
errors have already been posted on the given node.

2019-09-18  Steve Baird  <baird@adacore.com>

gcc/ada/

* sem_eval.adb (Expr_Value): Do not fail "the type of a null
literal must be an access type" assertion if errors have already
been posted on the given node.

From-SVN: r275852

gcc/ada/ChangeLog
gcc/ada/sem_eval.adb

index 8b044d1744b085193e20f5b8d0c085d8744b9bad..88957a24b1beffcab09c94db5f4c6eafc1dfaf1d 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-18  Steve Baird  <baird@adacore.com>
+
+       * sem_eval.adb (Expr_Value): Do not fail "the type of a null
+       literal must be an access type" assertion if errors have already
+       been posted on the given node.
+
 2019-09-18  Piotr Trojanek  <trojanek@adacore.com>
 
        * exp_dbug.ads, exp_dbug.adb (Get_Homonym_Number): Refine type
index 5c41642cea296e341977c98557baa76e08549bf4..5f26ecd834dc662db0e87db4a6e1806788969628 100644 (file)
@@ -4278,7 +4278,8 @@ package body Sem_Eval is
       --  The NULL access value
 
       elsif Kind = N_Null then
-         pragma Assert (Is_Access_Type (Underlying_Type (Etype (N))));
+         pragma Assert (Is_Access_Type (Underlying_Type (Etype (N)))
+           or else Error_Posted (N));
          Val := Uint_0;
 
       --  Character literal