sem_ch4.adb (analyze_If_Expression): Reject IF-expression where THEN-expression is...
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 12 Nov 2015 11:42:00 +0000 (12:42 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 12 Nov 2015 11:42:00 +0000 (12:42 +0100)
2015-11-12  Thomas Quinot  <quinot@adacore.com>

* sem_ch4.adb (analyze_If_Expression): Reject IF-expression where
THEN-expression is overloaded and none of its interpretation is
compatible with the ELSE-expression.

From-SVN: r230241

gcc/ada/ChangeLog
gcc/ada/sem_ch4.adb

index 13c2be14cb926dfc50f18e2fd3304d9bd6a740f1..cd0764a4a86a400d8b482789e5d954b2d22f2103 100644 (file)
@@ -1,3 +1,21 @@
+2015-11-12  Thomas Quinot  <quinot@adacore.com>
+
+       * sem_ch4.adb (analyze_If_Expression): Reject IF-expression where
+       THEN-expression is overloaded and none of its interpretation is
+       compatible with the ELSE-expression.
+
+2015-11-12  Jerome Lambourg  <lambourg@adacore.com>
+
+       * init.c: Do not try to mess with the MSR values in RTP mode:
+       not needed and forbidden.
+
+2015-11-12  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_attr.adb (Compile_Stream_Body_In_Scope): Do not install
+       full view of a type that has pragma Stream_Convert, because
+       this indicates special processing for the stream operations of
+       the type.
+
 2015-11-12  Jerome Lambourg  <lambourg@adacore.com>
 
        * init.c: Do not try to mess with the MSR values in RTP mode:
index 55a41f1c156d8b806d3e9a5b57455ae2d446d73e..bf134ba8640f400285f1bd08baa65a9f204700bd 100644 (file)
@@ -2191,6 +2191,17 @@ package body Sem_Ch4 is
 
                Get_Next_Interp (I, It);
             end loop;
+
+            --  If no valid interpretation has been found, then the type of
+            --  the ELSE expression does not match any interpretation of
+            --  the THEN expression.
+
+            if Etype (N) = Any_Type then
+               Error_Msg_N
+                 ("type incompatible with that of `THEN` expression",
+                  Else_Expr);
+               return;
+            end if;
          end;
       end if;
    end Analyze_If_Expression;