]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 2 Jan 2013 11:53:18 +0000 (12:53 +0100)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 2 Jan 2013 11:53:18 +0000 (12:53 +0100)
2013-01-02  Robert Dewar  <dewar@adacore.com>

* einfo.ads, einfo.adb (Has_Independent_Components): New flag.
* freeze.adb (Size_Known): We do not know the size of a packed
record if it has atomic components, by reference type components,
or independent components.
* sem_prag.adb (Analyze_Pragma, case Independent_Components): Set new
flag Has_Independent_Components.

2013-01-02  Yannick Moy  <moy@adacore.com>

* opt.ads (Warn_On_Suspicious_Contract): Set to True by default.
* usage.adb (Usage): Update usage message.

2013-01-02  Pascal Obry  <obry@adacore.com>

* adaint.c (__gnat_is_module_name_supported): New constant.

2013-01-02  Ed Schonberg  <schonberg@adacore.com>

* sem_attr.adb (Check_Array_Type): Reject an attribute reference on an
array whose component type does not have a completion.

From-SVN: r194802

gcc/ada/ChangeLog
gcc/ada/adaint.c
gcc/ada/einfo.adb
gcc/ada/einfo.ads
gcc/ada/freeze.adb
gcc/ada/opt.ads
gcc/ada/sem_attr.adb
gcc/ada/sem_prag.adb
gcc/ada/usage.adb

index 969fa7d3e2bbf16acf04c9064c3714df64d52a7a..eaa7d6a95c07a38fb92a4e11c574061cccd58fca 100644 (file)
@@ -1,3 +1,26 @@
+2013-01-02  Robert Dewar  <dewar@adacore.com>
+
+       * einfo.ads, einfo.adb (Has_Independent_Components): New flag.
+       * freeze.adb (Size_Known): We do not know the size of a packed
+       record if it has atomic components, by reference type components,
+       or independent components.
+       * sem_prag.adb (Analyze_Pragma, case Independent_Components): Set new
+       flag Has_Independent_Components.
+
+2013-01-02  Yannick Moy  <moy@adacore.com>
+
+       * opt.ads (Warn_On_Suspicious_Contract): Set to True by default.
+       * usage.adb (Usage): Update usage message.
+
+2013-01-02  Pascal Obry  <obry@adacore.com>
+
+       * adaint.c (__gnat_is_module_name_supported): New constant.
+
+2013-01-02  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_attr.adb (Check_Array_Type): Reject an attribute reference on an
+       array whose component type does not have a completion.
+
 2013-01-02  Geert Bosch  <bosch@adacore.com>
 
        * a-nllcef.ads, a-nlcefu.ads, a-nscefu.ads: Make Pure.
index e67c4df2ecd7d8b855115fbab9cd19140bbb0e6b..d95b6615b772e6e73900e5c0529ec5a67fe06019 100644 (file)
@@ -2963,7 +2963,10 @@ __gnat_locate_exec_on_path (char *exec_name)
 /* __gnat_get_module_name returns the module name (executable or shared
    library) in which the code at addr is. This is used to properly
    report the symbolic tracebacks.  If the module cannot be located
-   it returns the empty string. The returned value must not be freed.  */
+   it returns the empty string. The returned value must not be freed.
+
+   If this routine is fully implemented the value for
+   __gnat_is_module_name_supported should be set to 1.  */
 
 char *__gnat_get_module_name (void *addr ATTRIBUTE_UNUSED)
 {
@@ -2999,6 +3002,12 @@ char *__gnat_get_module_name (void *addr ATTRIBUTE_UNUSED)
 #endif
 }
 
+#ifdef _WIN32
+int __gnat_is_module_name_supported = 1;
+#else
+int __gnat_is_module_name_supported = 0;
+#endif
+
 #ifdef VMS
 
 /* These functions are used to translate to and from VMS and Unix syntax
index 212849791fb836abc5aa4e7d78a3720d8cdefa52..34f61b9f25ee82f56e4513460c8ba1ffa4ddc38d 100644 (file)
@@ -285,6 +285,7 @@ package body Einfo is
    --    Checks_May_Be_Suppressed        Flag31
    --    Kill_Elaboration_Checks         Flag32
    --    Kill_Range_Checks               Flag33
+   --    Has_Independent_Components      Flag34
    --    Is_Class_Wide_Equivalent_Type   Flag35
    --    Referenced_As_LHS               Flag36
    --    Is_Known_Non_Null               Flag37
@@ -527,7 +528,6 @@ package body Einfo is
    --    Has_Anonymous_Master            Flag253
    --    Is_Implementation_Defined       Flag254
 
-   --    (unused)                        Flag34
    --    (unused)                        Flag201
 
    -----------------------
@@ -1338,6 +1338,12 @@ package body Einfo is
       return Flag251 (Id);
    end Has_Implicit_Dereference;
 
+   function Has_Independent_Components (Id : E) return B is
+   begin
+      pragma Assert (Is_Object (Id) or else Is_Type (Id));
+      return Flag34 (Id);
+   end Has_Independent_Components;
+
    function Has_Inheritable_Invariants (Id : E) return B is
    begin
       pragma Assert (Is_Type (Id));
@@ -3853,6 +3859,12 @@ package body Einfo is
       Set_Flag251 (Id, V);
    end Set_Has_Implicit_Dereference;
 
+   procedure Set_Has_Independent_Components (Id : E; V : B := True) is
+   begin
+      pragma Assert (Is_Object (Id) or else Is_Type (Id));
+      Set_Flag34 (Id, V);
+   end Set_Has_Independent_Components;
+
    procedure Set_Has_Inheritable_Invariants (Id : E; V : B := True) is
    begin
       pragma Assert (Is_Type (Id));
index e4af8cf23fb96fd67b3e66c16a4780b40b02d0e7..1da43d8cfb7f8df5acb355e7df8530ca947aecdb 100644 (file)
@@ -528,7 +528,7 @@ package Einfo is
 --
 --       Setting this False in all cases corresponds to the traditional back
 --       end strategy, where all access-to-subprogram types are represented the
---       same way, independent of the Convention. See also
+--       same way, independent of the Convention. For further details, see also
 --       Always_Compatible_Rep in Targparm.
 --
 --       Efficiency note: On targets that use dynamically generated
@@ -536,11 +536,11 @@ package Einfo is
 --       subprograms, whereas True generally favors efficiency of nested
 --       ones. On other targets, this flag has little or no effect on
 --       efficiency. The front end should take this into account. In
---       particular, pragma Favor_Top_Level gives a hint that the flag should
---       be False.
+--       particular, pragma Favor_Top_Level gives a hint that the flag
+--       should be False.
 --
 --       Note: We considered using Convention-C for this purpose, but we need
---       this separate flag, because Convention-C implies that for
+--       this separate flag, because Convention-C implies that in the case of
 --       P'[Unrestricted_]Access, P also have convention C. Sometimes we want
 --       to have Can_Use_Internal_Rep False for an access type, but allow P to
 --       have convention Ada.
@@ -1547,6 +1547,19 @@ package Einfo is
 --       Implicit_Dereference. Set also on the discriminant named in the aspect
 --       clause, to simplify type resolution.
 
+--    Has_Independent_Components (Flag34)
+--       Defined in objects and types. Set if the aspect Independent_Components
+--       applies (as set by coresponding pragma or aspect specification).
+
+--    Has_Inheritable_Invariants (Flag248)
+--       Defined in all type entities. Set True in private types from which one
+--       or more Invariant'Class aspects will be inherited if a another type is
+--       derived from the type (i.e. those types which have an Invariant'Class
+--       aspect, or which inherit one or more Invariant'Class aspects). Also
+--       set in the corresponding full types. Note that it might be the full
+--       type which has inheritable invariants, and in this case the flag will
+--       also be set in the private type.
+
 --    Has_Initial_Value (Flag219)
 --       Defined in entities for variables and out parameters. Set if there
 --       is an explicit initial value expression in the declaration of the
@@ -1573,15 +1586,6 @@ package Einfo is
 --       the invariant procedure entity, to distinguish it among entries in the
 --       Subprograms_For_Type.
 
---    Has_Inheritable_Invariants (Flag248)
---       Defined in all type entities. Set True in private types from which one
---       or more Invariant'Class aspects will be inherited if a another type is
---       derived from the type (i.e. those types which have an Invariant'Class
---       aspect, or which inherit one or more Invariant'Class aspects). Also
---       set in the corresponding full types. Note that it might be the full
---       type which has inheritable invariants, and in this case the flag will
---       also be set in the private type.
-
 --    Has_Machine_Radix_Clause (Flag83)
 --       Defined in decimal types and subtypes, set if a Machine_Radix
 --       representation clause is present. This flag is used to detect
@@ -4902,6 +4906,7 @@ package Einfo is
    --    Has_Controlled_Component            (Flag43)   (base type only)
    --    Has_Default_Aspect                  (Flag39)   (base type only)
    --    Has_Discriminants                   (Flag5)
+   --    Has_Independent_Components          (Flag34)   (base type only)
    --    Has_Inheritable_Invariants          (Flag248)
    --    Has_Invariants                      (Flag232)
    --    Has_Non_Standard_Rep                (Flag75)   (base type only)
@@ -5102,6 +5107,7 @@ package Einfo is
    --    Has_Atomic_Components               (Flag86)
    --    Has_Biased_Representation           (Flag139)
    --    Has_Completion                      (Flag26)   (constants only)
+   --    Has_Independent_Components          (Flag34)   (base type only)
    --    Has_Thunks                          (Flag228)  (constants only)
    --    Has_Size_Clause                     (Flag29)
    --    Has_Up_Level_Access                 (Flag215)
@@ -5769,6 +5775,7 @@ package Einfo is
    --    Has_Alignment_Clause                (Flag46)
    --    Has_Atomic_Components               (Flag86)
    --    Has_Biased_Representation           (Flag139)
+   --    Has_Independent_Components          (Flag34)   (base type only)
    --    Has_Initial_Value                   (Flag219)
    --    Has_Size_Clause                     (Flag29)
    --    Has_Up_Level_Access                 (Flag215)
@@ -6154,6 +6161,7 @@ package Einfo is
    function Has_Gigi_Rep_Item                   (Id : E) return B;
    function Has_Homonym                         (Id : E) return B;
    function Has_Implicit_Dereference            (Id : E) return B;
+   function Has_Independent_Components          (Id : E) return B;
    function Has_Inheritable_Invariants          (Id : E) return B;
    function Has_Initial_Value                   (Id : E) return B;
    function Has_Interrupt_Handler               (Id : E) return B;
@@ -6745,6 +6753,7 @@ package Einfo is
    procedure Set_Has_Gigi_Rep_Item               (Id : E; V : B := True);
    procedure Set_Has_Homonym                     (Id : E; V : B := True);
    procedure Set_Has_Implicit_Dereference        (Id : E; V : B := True);
+   procedure Set_Has_Independent_Components      (Id : E; V : B := True);
    procedure Set_Has_Inheritable_Invariants      (Id : E; V : B := True);
    procedure Set_Has_Initial_Value               (Id : E; V : B := True);
    procedure Set_Has_Invariants                  (Id : E; V : B := True);
@@ -7424,6 +7433,7 @@ package Einfo is
    pragma Inline (Has_Gigi_Rep_Item);
    pragma Inline (Has_Homonym);
    pragma Inline (Has_Implicit_Dereference);
+   pragma Inline (Has_Independent_Components);
    pragma Inline (Has_Inheritable_Invariants);
    pragma Inline (Has_Initial_Value);
    pragma Inline (Has_Invariants);
@@ -7870,6 +7880,7 @@ package Einfo is
    pragma Inline (Set_Has_Gigi_Rep_Item);
    pragma Inline (Set_Has_Homonym);
    pragma Inline (Set_Has_Implicit_Dereference);
+   pragma Inline (Set_Has_Independent_Components);
    pragma Inline (Set_Has_Inheritable_Invariants);
    pragma Inline (Set_Has_Initial_Value);
    pragma Inline (Set_Has_Invariants);
index 2b8b53782ae776ef49b757d5151226b504c352f1..5df4c7271949665d942d0651874d8825c648d52d 100644 (file)
@@ -802,17 +802,22 @@ package body Freeze is
                --  size of packed records if we can tell the size of the packed
                --  record in the front end. Packed_Size_Known is True if so far
                --  we can figure out the size. It is initialized to True for a
-               --  packed record, unless the record has discriminants. The
-               --  reason we eliminate the discriminated case is that we don't
-               --  know the way the back end lays out discriminated packed
-               --  records. If Packed_Size_Known is True, then Packed_Size is
-               --  the size in bits so far.
+               --  packed record, unless the record has discriminants or atomic
+               --  components or independent components.
+
+               --  The reason we eliminate the discriminated case is that
+               --  we don't know the way the back end lays out discriminated
+               --  packed records. If Packed_Size_Known is True, then
+               --  Packed_Size is the size in bits so far.
 
                Packed_Size_Known : Boolean :=
-                                     Is_Packed (T)
-                                       and then not Has_Discriminants (T);
+                 Is_Packed (T)
+                   and then not Has_Discriminants (T)
+                   and then not Has_Atomic_Components (T)
+                   and then not Has_Independent_Components (T);
 
                Packed_Size : Uint := Uint_0;
+               --  SIze in bis so far
 
             begin
                --  Test for variant part present
@@ -856,6 +861,16 @@ package body Freeze is
                      Packed_Size_Known := False;
                   end if;
 
+                  --  We do not know the packed size if we have a by reference
+                  --  type, or an atomic type or an atomic component.
+
+                  if Is_Atomic (Ctyp)
+                    or else Is_Atomic (Comp)
+                    or else Is_By_Reference_Type (Ctyp)
+                  then
+                     Packed_Size_Known := False;
+                  end if;
+
                   --  We need to identify a component that is an array where
                   --  the index type is an enumeration type with non-standard
                   --  representation, and some bound of the type depends on a
@@ -934,10 +949,19 @@ package body Freeze is
                                  and then Is_Modular_Integer_Type
                                             (Packed_Array_Type (Ctyp)))
                      then
+                        --  Packed size unknown if we have an atomic type
+                        --  or a by reference type, since the back end
+                        --  knows how these are layed out.
+
+                        if Is_Atomic (Ctyp)
+                          or else Is_By_Reference_Type (Ctyp)
+                        then
+                           Packed_Size_Known := False;
+
                         --  If RM_Size is known and static, then we can keep
-                        --  accumulating the packed size.
+                        --  accumulating the packed size
 
-                        if Known_Static_RM_Size (Ctyp) then
+                        elsif Known_Static_RM_Size (Ctyp) then
 
                            --  A little glitch, to be removed sometime ???
                            --  gigi does not understand zero sizes yet.
@@ -1050,7 +1074,7 @@ package body Freeze is
             Comp_Byte_Aligned :=
               Present (Component_Clause (Comp))
                 and then
-              Normalized_First_Bit (Comp) mod System_Storage_Unit = 0;
+                  Normalized_First_Bit (Comp) mod System_Storage_Unit = 0;
          end if;
 
       --  Array case
index 944438b2071d547a46b7baf7b79ece359f32ecba..2b68d79699375f69a0c3316cdf0ac297e9e1b425 100644 (file)
@@ -1618,11 +1618,11 @@ package Opt is
    --  clauses that are affected by non-standard bit-order. The default is
    --  that this warning is enabled. Modified by -gnatw.v/.V.
 
-   Warn_On_Suspicious_Contract : Boolean := False;
+   Warn_On_Suspicious_Contract : Boolean := True;
    --  GNAT
    --  Set to True to generate warnings for suspicious contracts expressed as
    --  pragmas or aspects precondition and postcondition. The default is that
-   --  this warning is disabled. Modified by use of -gnatw.t/.T.
+   --  this warning is enabled. Modified by use of -gnatw.t/.T.
 
    Warn_On_Suspicious_Modulus_Value : Boolean := True;
    --  GNAT
index ff008786bfe576c7cea9d85fee94648412604d53..6247952843e8f865c7551f14367645eb36917c0b 100644 (file)
@@ -1015,6 +1015,16 @@ package body Sem_Attr is
                  ("prefix for % attribute must be constrained array", P);
             end if;
 
+            --  The attribute reference freezes the type, and thus the
+            --  component type, even if the attribute may not depend on the
+            --  component. Diagnose arrays with incomplete components now.
+            --  If the prefix is an access to array, this does not freeze
+            --  the designated type.
+
+            if Nkind (P) /= N_Explicit_Dereference then
+               Check_Fully_Declared (Component_Type (P_Type), P);
+            end if;
+
             D := Number_Dimensions (P_Type);
 
          else
index c83d1f61fb86200bac8a5906f89e5906982d5000..0610128fd7b9bc96f471ab008b5f3a43db57158d 100644 (file)
@@ -10330,15 +10330,19 @@ package body Sem_Prag is
             D := Declaration_Node (E);
             K := Nkind (D);
 
-            if (K = N_Full_Type_Declaration
-                 and then (Is_Array_Type (E) or else Is_Record_Type (E)))
-              or else
-                ((Ekind (E) = E_Constant or else Ekind (E) = E_Variable)
-                   and then Nkind (D) = N_Object_Declaration
-                   and then Nkind (Object_Definition (D)) =
-                                       N_Constrained_Array_Definition)
+            if K = N_Full_Type_Declaration
+              and then (Is_Array_Type (E) or else Is_Record_Type (E))
+            then
+               Independence_Checks.Append ((N, E));
+               Set_Has_Independent_Components (Base_Type (E));
+
+            elsif (Ekind (E) = E_Constant or else Ekind (E) = E_Variable)
+              and then Nkind (D) = N_Object_Declaration
+              and then Nkind (Object_Definition (D)) =
+                                           N_Constrained_Array_Definition
             then
                Independence_Checks.Append ((N, E));
+               Set_Has_Independent_Components (E);
 
             else
                Error_Pragma_Arg ("inappropriate entity for pragma%", Arg1);
index 180e44ebf3e05bf90a46cf6fe8c343eddd3f6cf7..769afdeba1ac4cd6cf114b152bce94a4df4b735a 100644 (file)
@@ -541,8 +541,8 @@ begin
    Write_Line ("        .S*  turn off warnings for overridden size clause");
    Write_Line ("        t    turn on warnings for tracking deleted code");
    Write_Line ("        T*   turn off warnings for tracking deleted code");
-   Write_Line ("        .t turn on warnings for suspicious contract");
-   Write_Line ("        .T*  turn off warnings for suspicious contract");
+   Write_Line ("        .t*+ turn on warnings for suspicious contract");
+   Write_Line ("        .T   turn off warnings for suspicious contract");
    Write_Line ("        u+   turn on warnings for unused entity");
    Write_Line ("        U*   turn off warnings for unused entity");
    Write_Line ("        .u   turn on warnings for unordered enumeration");