[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Tue, 25 Apr 2017 12:03:43 +0000 (14:03 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 25 Apr 2017 12:03:43 +0000 (14:03 +0200)
2017-04-25  Ed Schonberg  <schonberg@adacore.com>

* sem_util.adb (Same_Value): String literals are compile-time
values, and comparing them must use Expr_Value_S.

2017-04-25  Ed Schonberg  <schonberg@adacore.com>

* sem_ch4.adb (Complete_Object_Interpretation): If an explicit
dereference is introduced for the object, and the object is
overloaded, do not check whether it is aliased, because it may
include an implicit dereference.
* sem_type.adb (Disambiguate): If two interpretations are access
attribute types with the same designated type keep either of
them and do not report an ambiguity.  A true ambiguity will be
reported elsewhere.

2017-04-25  Bob Duff  <duff@adacore.com>

* a-numeri.ads: Change the encoding of Greek letter Pi from
brackets encoding to UTF-8.  Use pragma Wide_Character_Encoding
to indicate the encoding. We considered using a byte order mark
(BOM), but that causes various trouble (misc software eats the
BOM, if you have a patch with a BOM, then it's not at the start
of the patch, so it's not a BOM, the BOM affects with-ing files,
etc.).
* scng.adb, s-wchcnv.adb: Minor.

2017-04-25  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_ch3.adb, sem_ch8.adb, sem_disp.adb: Minor reformatting.

From-SVN: r247197

gcc/ada/ChangeLog
gcc/ada/a-numeri.ads
gcc/ada/s-wchcnv.adb
gcc/ada/scng.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch4.adb
gcc/ada/sem_ch8.adb
gcc/ada/sem_disp.adb
gcc/ada/sem_type.adb
gcc/ada/sem_util.adb

index 842af1f9939d3a8d5df7730e6e8e4becf93eee3f..e5f69a10e852e49bead3cd48e136e61c1c01e60c 100644 (file)
@@ -1,5 +1,35 @@
 2017-04-25  Ed Schonberg  <schonberg@adacore.com>
 
+       * sem_util.adb (Same_Value): String literals are compile-time
+       values, and comparing them must use Expr_Value_S.
+
+2017-04-25  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch4.adb (Complete_Object_Interpretation): If an explicit
+       dereference is introduced for the object, and the object is
+       overloaded, do not check whether it is aliased, because it may
+       include an implicit dereference.
+       * sem_type.adb (Disambiguate): If two interpretations are access
+       attribute types with the same designated type keep either of
+       them and do not report an ambiguity.  A true ambiguity will be
+       reported elsewhere.
+
+2017-04-25  Bob Duff  <duff@adacore.com>
+
+       * a-numeri.ads: Change the encoding of Greek letter Pi from
+       brackets encoding to UTF-8.  Use pragma Wide_Character_Encoding
+       to indicate the encoding. We considered using a byte order mark
+       (BOM), but that causes various trouble (misc software eats the
+       BOM, if you have a patch with a BOM, then it's not at the start
+       of the patch, so it's not a BOM, the BOM affects with-ing files,
+       etc.).
+       * scng.adb, s-wchcnv.adb: Minor.
+
+2017-04-25  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_ch3.adb, sem_ch8.adb, sem_disp.adb: Minor reformatting.
+2017-04-25  Ed Schonberg  <schonberg@adacore.com>
+
        * sem_ch3.adb (Add_Internal_Interface_Entities): Move
        Has_Non_Trivial_Precondition to sem_util. for use elsewhere.
        Improve error message on operations that inherit non-conforming
index 805fa5670ba78d0501e3020d38e8c975f6a3bc23..c4f4f848b55a1b8121be0d703ff9c60c0041e538 100644 (file)
@@ -18,14 +18,20 @@ package Ada.Numerics is
 
    Argument_Error : exception;
 
+   pragma Wide_Character_Encoding (UTF8);
+   --  For the Greek letter Pi below. Note that this pragma cannot immediately
+   --  precede that character, because then the encoding gets set too late.
+
    Pi : constant :=
           3.14159_26535_89793_23846_26433_83279_50288_41971_69399_37511;
 
-   ["03C0"] : constant := Pi;
+   π : constant := Pi;
    --  This is the Greek letter Pi (for Ada 2005 AI-388). Note that it is
    --  conforming to have this constant present even in Ada 95 mode, as there
    --  is no way for a normal mode Ada 95 program to reference this identifier.
 
+   pragma Wide_Character_Encoding (BRACKETS);
+
    e : constant :=
          2.71828_18284_59045_23536_02874_71352_66249_77572_47093_69996;
 
index 07ccc5cb3481733a7d30eb66f04baf0e07b4ddff..ffbb991b2da23b8a450a726f11620fe73691e3a1 100644 (file)
@@ -93,7 +93,7 @@ package body System.WCh_Cnv is
          W := Shift_Left (W, 6) or (U and 2#00111111#);
       end Get_UTF_Byte;
 
-   --  Start of processing for Char_Sequence_To_Wide
+   --  Start of processing for Char_Sequence_To_UTF_32
 
    begin
       case EM is
index 3f1c3a9eb53e9898e5dd74c9d608de790d3db711..2b35c9a0260f4969207cd862babd089a52ef191c 100644 (file)
@@ -2533,10 +2533,12 @@ package body Scng is
 
       --  End loop past format effectors. The exit from this loop is by
       --  executing a return statement following completion of token scan
-      --  (control never falls out of this loop to the code which follows)
+      --  (control never falls out of this loop to the code that follows).
 
       end loop;
 
+      pragma Assert (False);
+
       --  Wide_Character scanning routine. On entry we have encountered the
       --  initial character of a wide character sequence.
 
index 7a0feef8c25f7a33e95132ca17cc9d75a3bd556c..464900f015e77f67462c9b152b05f59f3cdd0b7b 100644 (file)
@@ -1737,19 +1737,21 @@ package body Sem_Ch3 is
                     and then Has_Non_Trivial_Precondition (Iface_Prim)
                   then
                      if Is_Abstract_Subprogram (Prim)
-                       or else (Ekind (Prim) = E_Procedure
-                         and then
-                           Nkind (Parent (Prim)) = N_Procedure_Specification
-                         and then Null_Present (Parent (Prim)))
+                       or else
+                         (Ekind (Prim) = E_Procedure
+                           and then Nkind (Parent (Prim)) =
+                                      N_Procedure_Specification
+                           and then Null_Present (Parent (Prim)))
                      then
                         null;
 
                      --  The inherited operation must be overridden
 
                      elsif not Comes_From_Source (Prim) then
-                        Error_Msg_NE ("&inherits non-conforming preconditions "
-                          & "and must be overridden (RM 6.1.1 (10-16)",
-                            Parent (Tagged_Type), Prim);
+                        Error_Msg_NE
+                          ("&inherits non-conforming preconditions and must "
+                           & "be overridden (RM 6.1.1 (10-16)",
+                           Parent (Tagged_Type), Prim);
                      end if;
                   end if;
                end;
index 7787d11afd09f5b8be7256fb354da885831ba975..d7aba502cf23a41ee438b61f0d76613267a219d8 100644 (file)
@@ -8448,7 +8448,12 @@ package body Sem_Ch4 is
                 Attribute_Name => Name_Access,
                 Prefix => Relocate_Node (Obj)));
 
-            if not Is_Aliased_View (Obj) then
+            --  If the object is not overloaded verify that taking access of
+            --  it is legal. Otherwise check is made during resolution.
+
+            if not Is_Overloaded (Obj)
+              and then not Is_Aliased_View (Obj)
+            then
                Error_Msg_NE
                  ("object in prefixed call to & must be aliased "
                   & "(RM 4.1.3 (13 1/2))", Prefix (First_Actual), Subprog);
index 4c7de392d934486152d56a70c151aad3d87b6461..a5c9d4cb921d3a6a076b0de36b9cd9136d491a9e 100644 (file)
@@ -3197,11 +3197,12 @@ package body Sem_Ch8 is
          begin
             if Present (Prev)
               and then
-                 (Has_Non_Trivial_Precondition (Prev)
-                    or else Has_Non_Trivial_Precondition (Old_S))
+                (Has_Non_Trivial_Precondition (Prev)
+                  or else Has_Non_Trivial_Precondition (Old_S))
             then
-               Error_Msg_NE ("conflicting inherited classwide preconditions "
-                 & "in renaming of& (RM 6.1.1 (17)", N, Old_S);
+               Error_Msg_NE
+                 ("conflicting inherited classwide preconditions in renaming "
+                  & "of& (RM 6.1.1 (17)", N, Old_S);
             end if;
          end;
       end if;
index e322894fd6b0da074728fa7f08609a9477cbd5c8..68e3e1e33562ec9792a63e00b3b4d65eda15a874 100644 (file)
@@ -575,7 +575,7 @@ package body Sem_Disp is
             --  but will be legal in overridings of the operation.
 
             elsif (Is_Subprogram (Scop)
-                  or else Chars (Scop) = Name_Postcondition)
+                    or else Chars (Scop) = Name_Postcondition)
               and then
                 (Is_Abstract_Subprogram (Scop)
                   or else
index 26415ae47dbf23b9a4137029d27f96149f4cde0a..d14535a768a632335e80e5a56fbb56833bf71c32 100644 (file)
@@ -1933,6 +1933,18 @@ package body Sem_Type is
             return No_Interp;
          end if;
 
+      --  Two access attribute types may have been created for an expression
+      --  with an implicit dereference, which is automatically overloaded.
+      --  If both access attribute types designate the same object type,
+      --  disambiguation if any will take place elsewhere, so keep any one of
+      --  the interpretations.
+
+      elsif Ekind (It1.Typ) = E_Access_Attribute_Type
+        and then Ekind (It2.Typ) = E_Access_Attribute_Type
+        and then Designated_Type (It1.Typ) = Designated_Type (It2.Typ)
+      then
+         return It1;
+
       --  If two user defined-subprograms are visible, it is a true ambiguity,
       --  unless one of them is an entry and the context is a conditional or
       --  timed entry call, or unless we are within an instance and this is
index 34ef713319a7c44d8e607f640225b338d2a691df..753098c0c1aa9a7cf52a4965de46b0fc48aae69b 100644 (file)
@@ -20102,9 +20102,17 @@ package body Sem_Util is
    begin
       if Compile_Time_Known_Value (Node1)
         and then Compile_Time_Known_Value (Node2)
-        and then Expr_Value (Node1) = Expr_Value (Node2)
       then
-         return True;
+         --  Handle properly compile-time expressions that are not
+         --  scalar.
+
+         if Is_String_Type (Etype (Node1)) then
+            return Expr_Value_S (Node1) = Expr_Value_S (Node2);
+
+         else
+            return Expr_Value (Node1) = Expr_Value (Node2);
+         end if;
+
       elsif Same_Object (Node1, Node2) then
          return True;
       else