We now give a better message for a redundant ELSE part
in an IF expression.

     1. package Elseelse is
     2.    function F return Boolean is
     3.      (if 1 + 1 = 2 then True
     4.       else False
     5.       else True);
              |
        >>> only one "else" part is allowed

     6.    function F2 return Boolean is
     7.      (if 1 + 1 = 2 then True
     8.       else False
     9.       else True
              |
        >>> only one "else" part is allowed

    10.       else False);
              |
        >>> only one "else" part is allowed

    11. end Elseelse;

Tested on x86_64-pc-linux-gnu, committed on trunk

2013-10-15  Robert Dewar  <de...@adacore.com>

        * par-ch4.adb (P_If_expression): Handle redundant ELSE cleanly.

Index: par-ch4.adb
===================================================================
--- par-ch4.adb (revision 203568)
+++ par-ch4.adb (working copy)
@@ -3120,6 +3120,14 @@
          Scan; -- Past ELSE
          Append_To (Exprs, P_Expression);
 
+         --  Skip redundant ELSE parts
+
+         while Token = Tok_Else loop
+            Error_Msg_SC ("only one ELSE part is allowed");
+            Scan; -- past ELSE
+            Discard_Junk_Node (P_Expression);
+         end loop;
+
       --  Two expression case (implied True, filled in during semantics)
 
       else

Reply via email to