[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 16 Oct 2015 10:44:09 +0000 (12:44 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 16 Oct 2015 10:44:09 +0000 (12:44 +0200)
2015-10-16  Javier Miranda  <miranda@adacore.com>

* inline.adb (Add_Inlined_Body): Ensure that
Analyze_Inlined_Bodies will be invoked after completing the
analysis of the current unit.

2015-10-16  Arnaud Charlet  <charlet@adacore.com>

* sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Fix error
message for bad last bit position.
* sem_ch3.adb, sem_util.adb, sem_util.ads: Minor reformatting.

2015-10-16  Ed Schonberg  <schonberg@adacore.com>

* exp_ch5.adb (Expand_N_Case_Statement): If expression is
compile-time known but does not obey a static predicate on
its type, replace the case statement with a raise statement,
as with other statically detected constraint violations.

2015-10-16  Bob Duff  <duff@adacore.com>

* s-traceb.adb, s-traceb.ads, s-traceb-hpux.adb, s-traceb-mastop.adb:
Reinstate code.
* opt.ads: Minor typo.

From-SVN: r228866

12 files changed:
gcc/ada/ChangeLog
gcc/ada/exp_ch5.adb
gcc/ada/inline.adb
gcc/ada/opt.ads
gcc/ada/s-traceb-hpux.adb
gcc/ada/s-traceb-mastop.adb
gcc/ada/s-traceb.adb
gcc/ada/s-traceb.ads
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads

index e31645e00ad1d39aa88c36060c47db398c5ae62a..746c8396661af04cffbe61e675cc41701912b7ce 100644 (file)
@@ -1,3 +1,28 @@
+2015-10-16  Javier Miranda  <miranda@adacore.com>
+
+       * inline.adb (Add_Inlined_Body): Ensure that
+       Analyze_Inlined_Bodies will be invoked after completing the
+       analysis of the current unit.
+
+2015-10-16  Arnaud Charlet  <charlet@adacore.com>
+
+       * sem_ch13.adb (Adjust_Record_For_Reverse_Bit_Order): Fix error
+       message for bad last bit position.
+       * sem_ch3.adb, sem_util.adb, sem_util.ads: Minor reformatting.
+
+2015-10-16  Ed Schonberg  <schonberg@adacore.com>
+
+       * exp_ch5.adb (Expand_N_Case_Statement): If expression is
+       compile-time known but does not obey a static predicate on
+       its type, replace the case statement with a raise statement,
+       as with other statically detected constraint violations.
+
+2015-10-16  Bob Duff  <duff@adacore.com>
+
+       * s-traceb.adb, s-traceb.ads, s-traceb-hpux.adb, s-traceb-mastop.adb:
+       Reinstate code.
+       * opt.ads: Minor typo.
+
 2015-10-16  Ed Schonberg  <schonberg@adacore.com>
 
        * sem_util.adb (Gather_Components): When gathering components
index 7156c76a8ef2eea63d8917d0aa1050f853abc019..8cb77332636b5bfb5249790b59fd65f860d98842 100644 (file)
@@ -2590,9 +2590,20 @@ package body Exp_Ch5 is
 
       --  If the value is static but its subtype is predicated and the value
       --  does not obey the predicate, the value is marked non-static, and
-      --  there can be no corresponding static alternative.
+      --  there can be no corresponding static alternative. In that case we
+      --  replace the case statement with an exception, regardless of whether
+      --  assertions are enabled or not.
 
       if Compile_Time_Known_Value (Expr)
+        and then Has_Predicates (Etype (Expr))
+        and then not Is_OK_Static_Expression (Expr)
+      then
+         Rewrite (N,
+           Make_Raise_Constraint_Error (Loc, Reason => CE_Invalid_Data));
+         Analyze (N);
+         return;
+
+      elsif Compile_Time_Known_Value (Expr)
         and then (not Has_Predicates (Etype (Expr))
                    or else Is_Static_Expression (Expr))
       then
index b36ec52908e66dea73e80bb48fca841670cb0289..398a466f1c2c787371f8e7a5628df83247b73136 100644 (file)
@@ -405,6 +405,11 @@ package body Inline is
             Pack : constant Entity_Id := Get_Code_Unit_Entity (E);
 
          begin
+            --  Ensure that Analyze_Inlined_Bodies will be invoked after
+            --  completing the analysis of the current unit.
+
+            Inline_Processing_Required := True;
+
             if Pack = E then
 
                --  Library-level inlined function. Add function itself to
index 301b5510d593018338aa6bdd956ecd9e1d11e343..b768be4075dcbf6f2f834bd183868623f1d4cddd 100644 (file)
@@ -819,7 +819,7 @@ package Opt is
    --  be inlined in GNATprove mode.
 
    Init_Or_Norm_Scalars : Boolean := False;
-   --  GNAT, GANTBIND
+   --  GNAT, GNATBIND
    --  Set True if a pragma Initialize_Scalars applies to the current unit.
    --  Also set True if a pragma Restriction (Normalize_Scalars) applies.
 
index 9987cb3fe6466a8588850297a69e26cabef5d6c2..dcd6ad0b64f86d7266a4a95f3fb48636d79909fb 100644 (file)
@@ -7,7 +7,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---           Copyright (C) 2009-2014, Free Software Foundation, Inc.        --
+--           Copyright (C) 2009-2015, Free Software Foundation, Inc.        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -262,15 +262,14 @@ package body System.Traceback is
    --  but it is not usable when frames with dynamically allocated space are
    --  on the way.
 
---   procedure Call_Chain
---     (Traceback   : System.Address;
---      Max_Len     : Natural;
---      Len         : out Natural;
---      Exclude_Min : System.Address := System.Null_Address;
---      Exclude_Max : System.Address := System.Null_Address;
---      Skip_Frames : Natural := 1);
---   --  Same as the exported version, but takes Traceback as an Address
---  ???See declaration in the spec for why this is temporarily commented out.
+   procedure Call_Chain
+     (Traceback   : System.Address;
+      Max_Len     : Natural;
+      Len         : out Natural;
+      Exclude_Min : System.Address := System.Null_Address;
+      Exclude_Max : System.Address := System.Null_Address;
+      Skip_Frames : Natural := 1);
+   --  Same as the exported version, but takes Traceback as an Address
 
    ------------------
    -- C_Call_Chain --
index 0ce7c50f933a0f02383c76e45e98878a8e2302a3..1a00d97f1e68288dd9e7c8bad035c65a05c8bb41 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 1999-2014, AdaCore                     --
+--                     Copyright (C) 1999-2015, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -37,15 +37,14 @@ package body System.Traceback is
 
    use System.Machine_State_Operations;
 
---   procedure Call_Chain
---     (Traceback   : System.Address;
---      Max_Len     : Natural;
---      Len         : out Natural;
---      Exclude_Min : System.Address := System.Null_Address;
---      Exclude_Max : System.Address := System.Null_Address;
---      Skip_Frames : Natural := 1);
---   --  Same as the exported version, but takes Traceback as an Address
---  ???See declaration in the spec for why this is temporarily commented out.
+   procedure Call_Chain
+     (Traceback   : System.Address;
+      Max_Len     : Natural;
+      Len         : out Natural;
+      Exclude_Min : System.Address := System.Null_Address;
+      Exclude_Max : System.Address := System.Null_Address;
+      Skip_Frames : Natural := 1);
+   --  Same as the exported version, but takes Traceback as an Address
 
    ----------------
    -- Call_Chain --
index 4855644434e5f943d7b5c9819733de5487160c3a..e4671135ade27556eb138a2f4f280833d5c3d6f5 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1999-2014, Free Software Foundation, Inc.         --
+--          Copyright (C) 1999-2015, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -38,6 +38,15 @@ pragma Compiler_Unit_Warning;
 
 package body System.Traceback is
 
+   procedure Call_Chain
+     (Traceback   : System.Address;
+      Max_Len     : Natural;
+      Len         : out Natural;
+      Exclude_Min : System.Address := System.Null_Address;
+      Exclude_Max : System.Address := System.Null_Address;
+      Skip_Frames : Natural := 1);
+   --  Same as the exported version, but takes Traceback as an Address
+
    ------------------
    -- C_Call_Chain --
    ------------------
index dbfea6a6f6f32b24dee72cfccafe3f60d53b1b8f..283bd5cd072ea1a79aa762e5c2574e270695965f 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1999-2014, Free Software Foundation, Inc.         --
+--          Copyright (C) 1999-2015, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -78,19 +78,6 @@ package System.Traceback is
    --  number of stored entries. The first entry is the most recent call,
    --  and the last entry is the highest level call.
 
-   procedure Call_Chain
-     (Traceback   : System.Address;
-      Max_Len     : Natural;
-      Len         : out Natural;
-      Exclude_Min : System.Address := System.Null_Address;
-      Exclude_Max : System.Address := System.Null_Address;
-      Skip_Frames : Natural := 1);
-   --  Same as the previous version, but takes Traceback as an Address. The
-   --  previous version is preferred. ???This version should be removed from
-   --  this spec, and calls replaced with calls to the previous version. This
-   --  declaration can be moved to the bodies (s-traceb.adb, s-traceb-hpux.adb,
-   --  and s-traceb-mastop.adb), but it should not be visible to clients.
-
    function C_Call_Chain
      (Traceback : System.Address;
       Max_Len   : Natural) return Natural;
index 5494d3321841c4f03d7d18ef7dc2c6a84c45d6df..f532595075bda2d52a32a0a042f5773897ee785b 100644 (file)
@@ -471,10 +471,10 @@ package body Sem_Ch13 is
                              ("machine scalar rules not followed for&",
                               First_Bit (CC), Comp);
 
-                           Error_Msg_Uint_1 := Lbit;
+                           Error_Msg_Uint_1 := Lbit + 1;
                            Error_Msg_Uint_2 := Max_Machine_Scalar_Size;
                            Error_Msg_F
-                             ("\last bit (^) exceeds maximum machine "
+                             ("\last bit + 1 (^) exceeds maximum machine "
                               & "scalar size (^)",
                               First_Bit (CC));
 
@@ -482,7 +482,7 @@ package body Sem_Ch13 is
                               Error_Msg_Uint_1 := SSU;
                               Error_Msg_F
                                 ("\and is not a multiple of Storage_Unit (^) "
-                                 & "(RM 13.4.1(10))",
+                                 & "(RM 13.5.1(10))",
                                  First_Bit (CC));
 
                            else
index f163b1581b24b8f622bbb13c9c0e555e01e9d6bd..62cc79105a148f546ab37a3e8f97ff00a4dbcbc3 100644 (file)
@@ -17945,9 +17945,9 @@ package body Sem_Ch3 is
      (C : Entity_Id;
       N : Node_Id := Empty) return Boolean
    is
-      Original_Comp  : Entity_Id := Empty;
+      Original_Comp : Entity_Id := Empty;
       Original_Type : Entity_Id;
-      Type_Scope     : Entity_Id;
+      Type_Scope    : Entity_Id;
 
       function Is_Local_Type (Typ : Entity_Id) return Boolean;
       --  Check whether parent type of inherited component is declared locally,
@@ -18088,9 +18088,9 @@ package body Sem_Ch3 is
                if Ancestor = Original_Type then
                   return True;
 
-               --  The ancestor may have a partial view of the original
-               --  type, but if the full view is in scope, as in a child
-               --  body, the component is visible.
+               --  The ancestor may have a partial view of the original type,
+               --  but if the full view is in scope, as in a child body, the
+               --  component is visible.
 
                elsif In_Private_Part (Scope (Original_Type))
                  and then Full_View (Ancestor) = Original_Type
@@ -18099,7 +18099,7 @@ package body Sem_Ch3 is
 
                elsif Ancestor = Etype (Ancestor) then
 
-                  --  No further ancestors to examine.
+                  --  No further ancestors to examine
 
                   return False;
                end if;
index 56f4d9378ca80953f77eb521678234b64fc8658b..4903d3f4dae3806f05b28f9c2bd086e321d21530 100644 (file)
@@ -17109,6 +17109,10 @@ package body Sem_Util is
       --  This shouldn't be necessary, but without this check, we crash in
       --  gimplify. ???
 
+      ------------------------------
+      -- Caller_Known_Size_Record --
+      ------------------------------
+
       function Caller_Known_Size_Record (Typ : Entity_Id) return Boolean is
          pragma Assert (Typ = Underlying_Type (Typ));
 
@@ -17118,9 +17122,10 @@ package body Sem_Util is
          end if;
 
          declare
-            Comp : Entity_Id := First_Entity (Typ);
+            Comp : Entity_Id;
 
          begin
+            Comp := First_Entity (Typ);
             while Present (Comp) loop
 
                --  Only look at E_Component entities. No need to look at
@@ -17156,6 +17161,10 @@ package body Sem_Util is
          return True;
       end Caller_Known_Size_Record;
 
+      ---------------------------
+      -- Has_Discrim_Dep_Array --
+      ---------------------------
+
       function Has_Discrim_Dep_Array (Typ : Entity_Id) return Boolean is
          pragma Assert (Typ = Underlying_Type (Typ));
 
@@ -17165,13 +17174,14 @@ package body Sem_Util is
          end if;
 
          if Is_Record_Type (Typ)
-           or else
-           Is_Protected_Type (Typ)
+              or else
+            Is_Protected_Type (Typ)
          then
             declare
-               Comp : Entity_Id := First_Entity (Typ);
+               Comp : Entity_Id;
 
             begin
+               Comp := First_Entity (Typ);
                while Present (Comp) loop
 
                   --  Only look at E_Component entities. No need to look at
@@ -17182,7 +17192,6 @@ package body Sem_Util is
                      declare
                         Comp_Type : constant Entity_Id :=
                                       Underlying_Type (Etype (Comp));
-
                      begin
                         if Has_Discrim_Dep_Array (Comp_Type) then
                            return True;
index 650731746bfe47d48a8776ba486e26ce25830d2e..28f0b34f2f6a76abbe52ce304593cd295f82383b 100644 (file)
@@ -823,7 +823,7 @@ package Sem_Util is
    --  returned. Otherwise the Etype of the node is returned.
 
    function Get_Body_From_Stub (N : Node_Id) return Node_Id;
-   --  Return the body node for a stub.
+   --  Return the body node for a stub
 
    function Get_Cursor_Type
      (Aspect : Node_Id;