]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Thu, 20 Feb 2014 14:04:38 +0000 (15:04 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 20 Feb 2014 14:04:38 +0000 (15:04 +0100)
2014-02-20  Robert Dewar  <dewar@adacore.com>

* a-cborma.adb, a-cbhama.adb, a-cbdlli.adb, a-cbmutr.adb: Use pragma
Unmodified rather than Warnings (Off). Make comments
uniform in the four affected units.

2014-02-20  Robert Dewar  <dewar@adacore.com>

* sem_ch13.adb (Analyze_Attribute_Definition_Clause, case
Object_Size): For non-scalar types allow any value that is a
multiple of 8.
* gnat_rm.texi: Document Object_Size for composites more clearly.

2014-02-20  Yannick Moy  <moy@adacore.com>

* sem_util.ads, sem_util.adb (Default_Initialization): Remove function.

2014-02-20  Ed Schonberg  <schonberg@adacore.com>

* stand.ads: Raise_Type: new predefined entity, used as the type
of a Raise_Expression prior to resolution.
* cstand.adb: Build entity for Raise_Type.
* sem_ch11.adb (Analyze_Raise_Expression): use Raise_Type as the
initial type of the node.
* sem_type.adb (Covers): Raise_Type is compatible with all
other types.
* sem_res.adb (Resolve): Remove special handling of Any_Type on
Raise_Expression nodes.
(Resolve_Raise_Expression): Signal ambiguity if the type of the
context is still Raise_Type.

From-SVN: r207950

14 files changed:
gcc/ada/ChangeLog
gcc/ada/a-cbdlli.adb
gcc/ada/a-cbhama.adb
gcc/ada/a-cbmutr.adb
gcc/ada/a-cborma.adb
gcc/ada/cstand.adb
gcc/ada/gnat_rm.texi
gcc/ada/sem_ch11.adb
gcc/ada/sem_ch13.adb
gcc/ada/sem_res.adb
gcc/ada/sem_type.adb
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads
gcc/ada/stand.ads

index 8452f3df9c54a06455a550d3ec8c3e03031c1038..20067e58e821a59fb6c451b8654d223020d196ca 100644 (file)
@@ -1,3 +1,34 @@
+2014-02-20  Robert Dewar  <dewar@adacore.com>
+
+       * a-cborma.adb, a-cbhama.adb, a-cbdlli.adb, a-cbmutr.adb: Use pragma
+       Unmodified rather than Warnings (Off). Make comments
+       uniform in the four affected units.
+
+2014-02-20  Robert Dewar  <dewar@adacore.com>
+
+       * sem_ch13.adb (Analyze_Attribute_Definition_Clause, case
+       Object_Size): For non-scalar types allow any value that is a
+       multiple of 8.
+       * gnat_rm.texi: Document Object_Size for composites more clearly.
+
+2014-02-20  Yannick Moy  <moy@adacore.com>
+
+       * sem_util.ads, sem_util.adb (Default_Initialization): Remove function.
+
+2014-02-20  Ed Schonberg  <schonberg@adacore.com>
+
+       * stand.ads: Raise_Type: new predefined entity, used as the type
+       of a Raise_Expression prior to resolution.
+       * cstand.adb: Build entity for Raise_Type.
+       * sem_ch11.adb (Analyze_Raise_Expression): use Raise_Type as the
+       initial type of the node.
+       * sem_type.adb (Covers): Raise_Type is compatible with all
+       other types.
+       * sem_res.adb (Resolve): Remove special handling of Any_Type on
+       Raise_Expression nodes.
+       (Resolve_Raise_Expression): Signal ambiguity if the type of the
+       context is still Raise_Type.
+
 2014-02-20  Robert Dewar  <dewar@adacore.com>
 
        * sem_ch12.adb (Validate_Access_Type_Instance): Add message if
index 51e98bc40ed40334c589a1e651e53051ef540292..993522a88beb75cd3b7b6048abeab9747e902424 100644 (file)
@@ -1121,15 +1121,16 @@ package body Ada.Containers.Bounded_Doubly_Linked_Lists is
       Position  : out Cursor;
       Count     : Count_Type := 1)
    is
-      New_Item : Element_Type;  --  Default initialized.
-      pragma Warnings (Off, New_Item);
+      New_Item : Element_Type;
+      pragma Unmodified (New_Item);
+      --  OK to reference, see below
 
    begin
-      --  There is no explicit element provided, but in an instance the
-      --  element type may be a scalar with a Default_Value aspect, or a
-      --  composite type with such a scalar component, so  we insert the
-      --  specified number of possibly initialized elements at the given
-      --  position.
+      --  There is no explicit element provided, but in an instance the element
+      --  type may be a scalar with a Default_Value aspect, or a composite
+      --  type with such a scalar component, or components with default
+      --  initialization, so insert the specified number of possibly
+      --  initialized elements at the given position.
 
       Insert (Container, Before, New_Item, Position, Count);
    end Insert;
index 88f9fa19058d6c6bf2ee234ba501a0bb50fca7c4..e7e739366ba863988f12a78b52f2eb1944888eff 100644 (file)
@@ -557,16 +557,17 @@ package body Ada.Containers.Bounded_Hashed_Maps is
 
       procedure Assign_Key (Node : in out Node_Type) is
          New_Item : Element_Type;
-         pragma Warnings (Off, New_Item);
+         pragma Unmodified (New_Item);
          --  Default-initialized element (ok to reference, see below)
 
       begin
          Node.Key := Key;
 
          --  There is no explicit element provided, but in an instance the
-         --  element type may be a scalar with a Default_Value aspect, or
-         --  a composite type with such a scalar component, so we insert
-         --  a possibly initialized element under the given key.
+         --  element type may be a scalar with a Default_Value aspect, or a
+         --  composite type with such a scalar component, or components with
+         --  default initialization, so insert a possibly initialized element
+         --  under the given key.
 
          Node.Element := New_Item;
       end Assign_Key;
index e0bcd3acafe4dd0f718ae0d2ed086135b010b833..e36bca72608f67d889a809330be5b51fce086cf3 100644 (file)
@@ -1585,14 +1585,9 @@ package body Ada.Containers.Bounded_Multiway_Trees is
       Nodes : Tree_Node_Array renames Container.Nodes;
       Last  : Count_Type;
 
-      Elem : Element_Type;
-      pragma Unmodified (Elem);
-      --  There is no explicit element provided, but in an instance the
-      --  element type may be a scalar with a Default_Value aspect, or a
-      --  composite type with such a scalar component, so we insert the
-      --  specified number of possibly initialized elements at the given
-      --  position. So we are declaring Elem just for this possible default
-      --  initialization, which is why we need the pragma Unmodified.
+      New_Item : Element_Type;
+      pragma Unmodified (New_Item);
+      --  OK to reference, see below
 
    begin
       if Parent = No_Element then
@@ -1632,7 +1627,13 @@ package body Ada.Containers.Bounded_Multiway_Trees is
          Initialize_Root (Container);
       end if;
 
-      Allocate_Node (Container, Elem, Position.Node);
+      --  There is no explicit element provided, but in an instance the element
+      --  type may be a scalar with a Default_Value aspect, or a composite
+      --  type with such a scalar component, or components with default
+      --  initialization, so insert the specified number of possibly
+      --  initialized elements at the given position.
+
+      Allocate_Node (Container, New_Item, Position.Node);
       Nodes (Position.Node).Parent := Parent.Node;
 
       Last := Position.Node;
index 1639998e8459721684eb7f5178d3eedc31fc6f63..4b05726a9de7e0e23835ce818342c14355559765 100644 (file)
@@ -827,16 +827,16 @@ package body Ada.Containers.Bounded_Ordered_Maps is
 
       procedure Assign (Node : in out Node_Type) is
          New_Item : Element_Type;
-         pragma Warnings (Off, New_Item);
+         pragma Unmodified (New_Item);
          --  Default-initialized element (ok to reference, see below)
 
       begin
          Node.Key := Key;
 
-         --  There is no explicit element provided, but in an instance the
-         --  element type may be a scalar with a Default_Value aspect, or
-         --  a composite type with such a scalar component, so we insert
-         --  a possibly initialized element under the given key.
+      --  There is no explicit element provided, but in an instance the element
+      --  type may be a scalar with a Default_Value aspect, or a composite type
+      --  with such a scalar component or with defaulted components, so insert
+      --  possibly initialized elements at the given position.
 
          Node.Element := New_Item;
       end Assign;
index 28844c72b6e7609ebd2d738ea259d1afec6d2cd7..322473e0f96ae9b25354e6980aefdf98d9003d48 100644 (file)
@@ -1321,6 +1321,13 @@ package body CStand is
          Set_First_Index (Any_String, Index);
       end;
 
+      Raise_Type := New_Standard_Entity;
+      Decl := New_Node (N_Full_Type_Declaration, Stloc);
+      Set_Defining_Identifier (Decl, Raise_Type);
+      Set_Scope (Raise_Type, Standard_Standard);
+      Build_Signed_Integer_Type (Raise_Type, Standard_Integer_Size);
+      Make_Name (Raise_Type, "any type");
+
       Standard_Integer_8 := New_Standard_Entity;
       Decl := New_Node (N_Full_Type_Declaration, Stloc);
       Set_Defining_Identifier (Decl, Standard_Integer_8);
index c02169f74c135f263b431a58065aae0c0b0adca1..cdd2f4e215e1cf50454b8ac7e6523ced6f3a5ec3 100644 (file)
@@ -8740,6 +8740,10 @@ alignment will be 4, because of the
 integer field, and so the default size of record objects for this type
 will be 64 (8 bytes).
 
+If the alignment of the above record is specified to be 1, then the
+object size will be 40 (5 bytes). This is true by default, and also
+an object size of 40 can be explicitly specified in this case.
+
 A consequence of this capability is that different object sizes can be
 given to subtypes that would otherwise be considered in Ada to be
 statically matching.  But it makes no sense to consider such subtypes
index 353bbbcb367ec64feb87a78c5277dac1a8c75050..f96a91b38b51d87a01636e409940fc272e954562 100644 (file)
@@ -475,9 +475,11 @@ package body Sem_Ch11 is
 
       Kill_Current_Values (Last_Assignment_Only => True);
 
-      --  Set type as Any_Type since we have no information at all on the type
+      --  Raise_Type is compatible with all other types so that the raise
+      --  expression is legal in any expression context. It will be eventually
+      --  replaced by the concrete type imposed by the context.
 
-      Set_Etype (N, Any_Type);
+      Set_Etype (N, Raise_Type);
    end Analyze_Raise_Expression;
 
    -----------------------------
index 4c85bfaee9a95e72b96b59da8b66d45999bd8a62..c8f9579d3d028af6f187aeaf50906b9b2fabaac5 100644 (file)
@@ -4413,17 +4413,17 @@ package body Sem_Ch13 is
             else
                Check_Size (Expr, U_Ent, Size, Biased);
 
-               if Size /= 8
-                    and then
-                  Size /= 16
-                    and then
-                  Size /= 32
-                    and then
-                  UI_Mod (Size, 64) /= 0
-               then
-                  Error_Msg_N
-                    ("Object_Size must be 8, 16, 32, or multiple of 64",
-                     Expr);
+               if Is_Scalar_Type (U_Ent) then
+                  if Size /= 8 and then Size /= 16 and then Size /= 32
+                    and then UI_Mod (Size, 64) /= 0
+                  then
+                     Error_Msg_N
+                       ("Object_Size must be 8, 16, 32, or multiple of 64",
+                        Expr);
+                  end if;
+
+               elsif Size mod 8 /= 0 then
+                  Error_Msg_N ("Object_Size must be a multiple of 8", Expr);
                end if;
 
                Set_Esize (U_Ent, Size);
index db1eacf14f5b8e24cefac71763f05746f507dbd1..99801627711b49b6d1a34634879e38af89349e91 100644 (file)
@@ -2060,17 +2060,8 @@ package body Sem_Res is
          Analyze_Dimension (N);
          return;
 
-      --  A Raise_Expression takes its type from context. The Etype was set
-      --  to Any_Type, reflecting the fact that the expression itself does
-      --  not specify any possible interpretation. So we set the type to the
-      --  resolution type here and now. We need to do this before Resolve sees
-      --  the Any_Type value.
-
-      elsif Nkind (N) = N_Raise_Expression then
-         Set_Etype (N, Typ);
-
-      --  Any other case of Any_Type as the Etype value means that we had
-      --  a previous error.
+      --  Any case of Any_Type as the Etype value means that we had a
+      --  previous error.
 
       elsif Etype (N) = Any_Type then
          Debug_A_Exit ("resolving  ", N, "  (done, Etype = Any_Type)");
@@ -7405,6 +7396,16 @@ package body Sem_Res is
       Check_Fully_Declared_Prefix (Typ, P);
       P_Typ := Empty;
 
+      --  A useful optimization:  check whether the dereference denotes an
+      --  element of a container, and if so rewrite it as a call to the
+      --  corresponding Element function.
+      --  Disabled for now, on advice of ARG. A more restricted form of the
+      --  predicate might be acceptable ???
+
+      --  if Is_Container_Element (N) then
+      --     return;
+      --  end if;
+
       if Is_Overloaded (P) then
 
          --  Use the context type to select the prefix that has the correct
@@ -8816,7 +8817,12 @@ package body Sem_Res is
 
    procedure Resolve_Raise_Expression (N : Node_Id; Typ : Entity_Id) is
    begin
-      Set_Etype (N, Typ);
+      if Typ = Raise_Type then
+         Error_Msg_N ("cannot find unique type for raise expression", N);
+         Set_Etype (N, Any_Type);
+      else
+         Set_Etype (N, Typ);
+      end if;
    end Resolve_Raise_Expression;
 
    -------------------
index 86789ce20f4e4d8217bc88accbe333d03ef6eada..446c9f4203e475c8e6755968ca0f264b3d2d148b 100644 (file)
@@ -1128,6 +1128,11 @@ package body Sem_Type is
       elsif BT2 = Any_Type then
          return True;
 
+      --  A Raise_Expressions is legal in any expression context.
+
+      elsif BT2 = Raise_Type then
+         return True;
+
       --  A packed array type covers its corresponding non-packed type. This is
       --  not legitimate Ada, but allows the omission of a number of otherwise
       --  useless unchecked conversions, and since this can only arise in
index 435db38f42ba25773501f9194f2ca64a85605dc5..6b94f5a514e65482dc992d25cac549cfeb44ceab 100644 (file)
@@ -4036,138 +4036,6 @@ package body Sem_Util is
       end if;
    end Deepest_Type_Access_Level;
 
-   ----------------------------
-   -- Default_Initialization --
-   ----------------------------
-
-   function Default_Initialization
-     (Typ : Entity_Id) return Default_Initialization_Kind
-   is
-      Comp : Entity_Id;
-      Init : Default_Initialization_Kind;
-
-      FDI : Boolean := False;
-      NDI : Boolean := False;
-      --  Two flags used to designate whether a record type has at least one
-      --  fully default initialized component and/or one not fully default
-      --  initialized component.
-
-   begin
-      --  Access types are always fully default initialized
-
-      if Is_Access_Type (Typ) then
-         return Full_Default_Initialization;
-
-      --  An array type subject to aspect/pragma Default_Component_Value is
-      --  fully default initialized. Otherwise its initialization status is
-      --  that of its component type.
-
-      elsif Is_Array_Type (Typ) then
-         if Present (Default_Aspect_Component_Value (Base_Type (Typ))) then
-            return Full_Default_Initialization;
-         else
-            return Default_Initialization (Component_Type (Typ));
-         end if;
-
-      --  The initialization status of a private type depends on its full view
-
-      elsif Is_Private_Type (Typ) and then Present (Full_View (Typ)) then
-         return Default_Initialization (Full_View (Typ));
-
-      --  Record and protected types offer several initialization options
-      --  depending on their components (if any).
-
-      elsif Is_Record_Type (Typ) or else Is_Protected_Type (Typ) then
-         Comp := First_Component (Typ);
-
-         --  Inspect all components
-
-         if Present (Comp) then
-            while Present (Comp) loop
-
-               --  Do not process internally generated components except for
-               --  _parent which represents the ancestor portion of a derived
-               --  type.
-
-               if Comes_From_Source (Comp)
-                 or else Chars (Comp) = Name_uParent
-               then
-                  Init := Default_Initialization (Base_Type (Etype (Comp)));
-
-                  --  A component with mixed initialization renders the whole
-                  --  record/protected type mixed.
-
-                  if Init = Mixed_Initialization then
-                     return Mixed_Initialization;
-
-                  --  The component is fully default initialized when its type
-                  --  is fully default initialized or when the component has an
-                  --  initialization expression. Note that this has precedence
-                  --  given that the component type may lack initialization.
-
-                  elsif Init = Full_Default_Initialization
-                    or else Present (Expression (Parent (Comp)))
-                  then
-                     FDI := True;
-
-                  --  Components with no possible initialization are ignored
-
-                  elsif Init = No_Possible_Initialization then
-                     null;
-
-                  --  The component has no full default initialization
-
-                  else
-                     NDI := True;
-                  end if;
-               end if;
-
-               Next_Component (Comp);
-            end loop;
-
-            --  Detect a mixed case of initialization
-
-            if FDI and NDI then
-               return Mixed_Initialization;
-
-            elsif FDI then
-               return Full_Default_Initialization;
-
-            elsif NDI then
-               return No_Default_Initialization;
-
-            --  The type either has no components or they are all internally
-            --  generated.
-
-            else
-               return No_Possible_Initialization;
-            end if;
-
-         --  The record type is null, there is nothing to initialize
-
-         else
-            return No_Possible_Initialization;
-         end if;
-
-      --  A scalar type subject to aspect/pragma Default_Value is fully default
-      --  initialized.
-
-      elsif Is_Scalar_Type (Typ)
-        and then Present (Default_Aspect_Value (Base_Type (Typ)))
-      then
-         return Full_Default_Initialization;
-
-      --  Task types are always fully default initialized
-
-      elsif Is_Task_Type (Typ) then
-         return Full_Default_Initialization;
-      end if;
-
-      --  The type has no full default initialization
-
-      return No_Default_Initialization;
-   end Default_Initialization;
-
    ---------------------
    -- Defining_Entity --
    ---------------------
index 94e446523b4f07d8252d25aa6da62b00ff877983..b6e7632062ddb70a07981d9ec096f7d170da08dc 100644 (file)
@@ -419,39 +419,6 @@ package Sem_Util is
    --  Current_Scope is returned. The returned value is Empty if this is called
    --  from a library package which is not within any subprogram.
 
-   --  The following type lists all possible forms of default initialization
-   --  that may apply to a type.
-
-   type Default_Initialization_Kind is
-     (No_Possible_Initialization,
-      --  This value signifies that a type cannot possibly be initialized
-      --  because it has no content, for example - a null record.
-
-      Full_Default_Initialization,
-      --  This value covers the following combinations of types and content:
-      --    * Access type
-      --    * Array-of-scalars with specified Default_Component_Value
-      --    * Array type with fully default initialized component type
-      --    * Record or protected type with components that either have a
-      --      default expression or their related types are fully default
-      --      initialized.
-      --    * Scalar type with specified Default_Value
-      --    * Task type
-      --    * Type extension of a type with full default initialization where
-      --      the extension components are also fully default initialized.
-
-      Mixed_Initialization,
-      --  This value applies to a type where some of its internals are fully
-      --  default initialized and some are not.
-
-      No_Default_Initialization);
-      --  This value reflects a type where none of its content is fully
-      --  default initialized.
-
-   function Default_Initialization
-     (Typ : Entity_Id) return Default_Initialization_Kind;
-   --  Determine default initialization kind that applies to a particular type
-
    function Deepest_Type_Access_Level (Typ : Entity_Id) return Uint;
    --  Same as Type_Access_Level, except that if the type is the type of an Ada
    --  2012 stand-alone object of an anonymous access type, then return the
index 555c2fc5c4bf0d87ee58f225e50d9aa514d99393..1d9c33dff68446a10cd3f0a1a73143c605fa6274 100644 (file)
@@ -371,14 +371,6 @@ package Stand is
    --  candidate interpretations has been examined. If after examining all of
    --  them the type is still Any_Type, the node has no possible interpretation
    --  and an error can be emitted (and Any_Type will be propagated upwards).
-   --
-   --  There is one situation in which Any_Type is used to legitimately
-   --  represent a case where the type is not known pre-resolution, and that
-   --  is for the N_Raise_Expression node. In this case, the Etype being set to
-   --  Any_Type is normal and does not represent an error. In particular, it is
-   --  compatible with the type of any constituent of the enclosing expression,
-   --  if any. The type is eventually replaced with the type of the context,
-   --  which plays no role in the resolution of the Raise_Expression.
 
    Any_Access : Entity_Id;
    --  Used to resolve the overloaded literal NULL
@@ -427,6 +419,11 @@ package Stand is
    --  component type is compatible with any character type, not just
    --  Standard_Character.
 
+   Raise_Type : Entity_Id;
+   --  The type Raise_Type denotes the type of a Raise_Expression. It is
+   --  compatible with all other types, and must eventually resolve to a
+   --  concrete type that is imposed by the context.
+
    Universal_Integer : Entity_Id;
    --  Entity for universal integer type. The bounds of this type correspond
    --  to the largest supported integer type (i.e. Long_Long_Integer). It is