]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2009-04-29 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 15:36:48 +0000 (15:36 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Apr 2009 15:36:48 +0000 (15:36 +0000)
* sem_ch8.adb (Analyze_Subprogram_Renaming): Improve error message on
box-defaulted operator in an instantiation, when the type of the
operands is not directly visible.

2009-04-29  Gary Dismukes  <dismukes@adacore.com>

* sem_aggr.adb (Valid_Limited_Ancestor): Undo previous change.
(Resolve_Extension_Aggregate): Call Check_Parameterless_Call after the
analysis of the ancestor part. Remove prohibition against limited
interpretations of the ancestor expression in the case of Ada 2005.
Revise error message in overloaded case, adding a message to cover
the Ada 2005 case.

2009-04-29  Thomas Quinot  <quinot@adacore.com>

* xoscons.adb: Minor reformatting

2009-04-29  Bob Duff  <duff@adacore.com>

* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Do not ignore
attribute_definition_clauses for the following attributes when the
-gnatI switch is used: External_Tag, Input, Output, Read, Storage_Pool,
Storage_Size, Write. Otherwise, we get spurious errors (for example,
missing Read attribute on remote types).

* gnat_ugn.texi: Document the change, and add a stern warning.

2009-04-29  Ed Schonberg  <schonberg@adacore.com>

* sem_attr.adb (Check_Local_Access): Indicate that value tracing is
disabled not just for the current scope, but for the innermost dynamic
scope as well.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146979 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gnat_ugn.texi
gcc/ada/sem_aggr.adb
gcc/ada/sem_attr.adb
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch8.adb
gcc/ada/xoscons.adb

index 0a53128c463677b8f6d4e5210c5aaaf521664e2f..c11325e1197f0d4d318256dc602e751f44397cbe 100644 (file)
@@ -1,3 +1,38 @@
+2009-04-29  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_ch8.adb (Analyze_Subprogram_Renaming): Improve error message on
+       box-defaulted operator in an instantiation, when the type of the
+       operands is not directly visible.
+
+2009-04-29  Gary Dismukes  <dismukes@adacore.com>
+
+       * sem_aggr.adb (Valid_Limited_Ancestor): Undo previous change.
+       (Resolve_Extension_Aggregate): Call Check_Parameterless_Call after the
+       analysis of the ancestor part. Remove prohibition against limited
+       interpretations of the ancestor expression in the case of Ada 2005.
+       Revise error message in overloaded case, adding a message to cover
+       the Ada 2005 case.
+
+2009-04-29  Thomas Quinot  <quinot@adacore.com>
+
+       * xoscons.adb: Minor reformatting
+
+2009-04-29  Bob Duff  <duff@adacore.com>
+
+       * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Do not ignore
+       attribute_definition_clauses for the following attributes when the
+       -gnatI switch is used: External_Tag, Input, Output, Read, Storage_Pool,
+       Storage_Size, Write. Otherwise, we get spurious errors (for example,
+       missing Read attribute on remote types).
+
+       * gnat_ugn.texi: Document the change, and add a stern warning.
+
+2009-04-29  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_attr.adb (Check_Local_Access): Indicate that value tracing is
+       disabled not just for the current scope, but for the innermost dynamic
+       scope as well.
+
 2009-04-29  Arnaud Charlet  <charlet@adacore.com>
 
        * gcc-interface/Make-lang.in: Update dependencies
index ec10ef1021c889b1386b52cd45a51b11c6380b54..4ab16ee75a97dc48e05a0d261a88d07efff95385 100644 (file)
@@ -4175,11 +4175,17 @@ see @ref{Character Set Control}.
 
 @item ^-gnatI^/IGNORE_REP_CLAUSES^
 @cindex @option{^-gnatI^IGNORE_REP_CLAUSES^} (@command{gcc})
-Ignore representation clauses. When this switch is used, all
+Ignore representation clauses. When this switch is used,
 representation clauses are treated as comments. This is useful
 when initially porting code where you want to ignore rep clause
 problems, and also for compiling foreign code (particularly
-for use with ASIS).
+for use with ASIS). The representation clauses that are ignored
+are: enumeration_representation_clause, record_representation_clause,
+and attribute_definition_clause for the following attributes:
+Address, Alignment, Bit_Order, Component_Size, Machine_Radix,
+Object_Size, Size, Small, Stream_Size, and Value_Size.
+Note that this option should be used only for compiling -- the
+code is likely to malfunction at run time.
 
 @item -gnatjnn
 @cindex @option{-gnatjnn} (@command{gcc})
index 3760e79e9af3c1be1508e3c044449c4393ac465e..9b5efbccd42fe27905ad224b45c8c518106accd9 100644 (file)
@@ -2147,14 +2147,6 @@ package body Sem_Aggr is
          elsif Nkind_In (Anc, N_Aggregate, N_Function_Call) then
             return True;
 
-         --  Check for a function name, to cover the case of a parameterless
-         --  function call which hasn't been resolved yet.
-
-         elsif Is_Entity_Name (Anc)
-           and then Ekind (Entity (Anc)) = E_Function
-         then
-            return True;
-
          elsif Nkind (Anc) = N_Attribute_Reference
            and then Attribute_Name (Anc) = Name_Input
          then
@@ -2208,7 +2200,11 @@ package body Sem_Aggr is
    --  Start of processing for Resolve_Extension_Aggregate
 
    begin
+      --  Analyze the ancestor part and account for the case where it's
+      --  a parameterless function call.
+
       Analyze (A);
+      Check_Parameterless_Call (A);
 
       if not Is_Tagged_Type (Typ) then
          Error_Msg_N ("type of extension aggregate must be tagged", N);
@@ -2255,8 +2251,11 @@ package body Sem_Aggr is
 
             Get_First_Interp (A, I, It);
             while Present (It.Typ) loop
+               --  Only consider limited interpretations in the Ada 2005 case
+
                if Is_Tagged_Type (It.Typ)
-                  and then not Is_Limited_Type (It.Typ)
+                 and then (Ada_Version >= Ada_05
+                            or else not Is_Limited_Type (It.Typ))
                then
                   if A_Type /= Any_Type then
                      Error_Msg_N ("cannot resolve expression", A);
@@ -2270,8 +2269,13 @@ package body Sem_Aggr is
             end loop;
 
             if A_Type = Any_Type then
-               Error_Msg_N
-                 ("ancestor part must be non-limited tagged type", A);
+               if Ada_Version >= Ada_05 then
+                  Error_Msg_N ("ancestor part must be of a tagged type", A);
+               else
+                  Error_Msg_N
+                    ("ancestor part must be of a nonlimited tagged type", A);
+               end if;
+
                return;
             end if;
 
index d4545c0a1e55f6425b0a04b080ae4dc4177e0fcc..449b0556c85dacd1910b41dd00f510db1fdb4aa8 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 1992-2008, Free Software Foundation, Inc.         --
+--          Copyright (C) 1992-2009, 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- --
@@ -420,7 +420,8 @@ package body Sem_Attr is
             --  an access, we set a flag to kill all tracked values on any call
             --  because this access value may be passed around, and any called
             --  code might use it to access a local procedure which clobbers a
-            --  tracked value.
+            --  tracked value. If the scope is a loop or block, indicate that
+            --  value tracking is disabled for the enclosing subprogram.
 
             function Get_Kind (E : Entity_Id) return Entity_Kind;
             --  Distinguish between access to regular/protected subprograms
@@ -433,6 +434,8 @@ package body Sem_Attr is
             begin
                if not Is_Library_Level_Entity (E) then
                   Set_Suppress_Value_Tracking_On_Call (Current_Scope);
+                  Set_Suppress_Value_Tracking_On_Call
+                    (Nearest_Dynamic_Scope (Current_Scope));
                end if;
             end Check_Local_Access;
 
index b5a3c6bdbfa69cc650fb981f2638a6be2a5c31ad..61ca642e27bcf9d8e5353f6e04d028606742b56a 100644 (file)
@@ -692,8 +692,40 @@ package body Sem_Ch13 is
 
    begin
       if Ignore_Rep_Clauses then
-         Rewrite (N, Make_Null_Statement (Sloc (N)));
-         return;
+         case Id is
+
+            --  The following should be ignored
+
+            when Attribute_Address        |
+                 Attribute_Alignment      |
+                 Attribute_Bit_Order      |
+                 Attribute_Component_Size |
+                 Attribute_Machine_Radix  |
+                 Attribute_Object_Size    |
+                 Attribute_Size           |
+                 Attribute_Small          |
+                 Attribute_Stream_Size    |
+                 Attribute_Value_Size     =>
+
+               Rewrite (N, Make_Null_Statement (Sloc (N)));
+               return;
+
+            --  The following should not be ignored
+
+            when Attribute_External_Tag   |
+                 Attribute_Input          |
+                 Attribute_Output         |
+                 Attribute_Read           |
+                 Attribute_Storage_Pool   |
+                 Attribute_Storage_Size   |
+                 Attribute_Write          =>
+               null;
+
+            --  Other cases are errors, which will be caught below
+
+            when others =>
+               null;
+         end case;
       end if;
 
       Analyze (Nam);
index 3f2ff18aaed9dceee775837d48f11c3f99847dff..7b41282288aea47aeb0cf5214f112c14c201dd53 100644 (file)
@@ -2370,10 +2370,12 @@ package body Sem_Ch8 is
             declare
                F1 : Entity_Id;
                F2 : Entity_Id;
+               T1 : Entity_Id;
 
             begin
                F1 := First_Formal (Candidate_Renaming);
                F2 := First_Formal (New_S);
+               T1 := First_Subtype (Etype (F1));
 
                while Present (F1) and then Present (F2) loop
                   Next_Formal (F1);
@@ -2390,6 +2392,15 @@ package body Sem_Ch8 is
                     ("\missing specification for &", Spec, F1);
                   end if;
                end if;
+
+               if Nkind (Nam) = N_Operator_Symbol
+                 and then From_Default (N)
+               then
+                  Error_Msg_Node_2 := T1;
+                  Error_Msg_NE
+                    ("default & on & is not directly visible",
+                      Nam, Nam);
+               end if;
             end;
          end if;
       end if;
@@ -5040,10 +5051,12 @@ package body Sem_Ch8 is
       Candidate_Renaming := Empty;
 
       if not Is_Overloaded (Nam) then
-         if Entity_Matches_Spec (Entity (Nam), New_S)
-           and then Is_Visible_Operation (Entity (Nam))
-         then
-            Old_S := Entity (Nam);
+         if Entity_Matches_Spec (Entity (Nam), New_S) then
+            Candidate_Renaming := New_S;
+
+            if Is_Visible_Operation (Entity (Nam)) then
+               Old_S := Entity (Nam);
+            end if;
 
          elsif
            Present (First_Formal (Entity (Nam)))
index 64a9e799a3f9484b38d92847b93593557aece089..08aac903c33ddbf2202883816b2d0c40309ac4d7 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---            Copyright (C) 2008, Free Software Foundation, Inc.            --
+--          Copyright (C) 2008-2009, 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- --
@@ -30,7 +30,7 @@
 --    - the preprocessed C file: s-oscons-tmplt.i
 --    - the generated assembly file: s-oscons-tmplt.s
 
---  The contents of s-oscons.ads is written on standard output
+--  The contents of s-oscons.ads is written on standard output.
 
 with Ada.Characters.Handling; use Ada.Characters.Handling;
 with Ada.Exceptions;          use Ada.Exceptions;
@@ -59,13 +59,13 @@ procedure XOSCons is
    -- Information retrieved from assembly listing --
    -------------------------------------------------
 
-   --  We need to deal with integer values that can be signed or unsigned,
-   --  so we need to cater for the maximum range of both cases.
-
    type String_Access is access all String;
    --  Note: we can't use GNAT.Strings for this definition, since that unit
    --  is not available in older base compilers.
 
+   --  We need to deal with integer values that can be signed or unsigned, so
+   --  we need to accomodate the maximum range of both cases.
+
    type Int_Value_Type is record
       Positive  : Boolean;
       Abs_Value : Long_Unsigned := 0;
@@ -75,8 +75,8 @@ procedure XOSCons is
      (CND,     --  Constant (decimal)
       CNS,     --  Constant (freeform string)
       TXT);    --  Literal text
-   --  Recognized markers found in assembly file. These markers are produced
-   --  by the same-named macros from the C template.
+   --  Recognized markers found in assembly file. These markers are produced by
+   --  the same-named macros from the C template.
 
    type Asm_Info (Kind : Asm_Info_Kind := TXT) is record
       Line_Number   : Integer;
@@ -98,16 +98,16 @@ procedure XOSCons is
       --  Additional descriptive comment for constant, or free-form text (TXT)
    end record;
 
-   package Asm_Infos is new GNAT.Table (
-      Table_Component_Type => Asm_Info,
+   package Asm_Infos is new GNAT.Table
+     (Table_Component_Type => Asm_Info,
       Table_Index_Type     => Integer,
       Table_Low_Bound      => 1,
       Table_Initial        => 100,
       Table_Increment      => 10);
 
-   Max_Const_Name_Len  : Natural := 0;
+   Max_Const_Name_Len     : Natural := 0;
    Max_Constant_Value_Len : Natural := 0;
-   --  Longest name and longest value lengths
+   --  Lengths of longest name and longest value
 
    type Language is (Lang_Ada, Lang_C);
 
@@ -152,6 +152,7 @@ procedure XOSCons is
       Info : Asm_Info renames Asm_Infos.Table (Info_Index);
 
       procedure Put (S : String);
+      --  Write S to OFile
 
       ---------
       -- Put --
@@ -253,9 +254,7 @@ procedure XOSCons is
          --  On some platforms, immediate integer values are prefixed with
          --  a $ or # character in assembly output.
 
-         if S (First) = '$'
-           or else S (First) = '#'
-         then
+         if S (First) = '$' or else S (First) = '#' then
             First := First + 1;
          end if;
 
@@ -306,6 +305,7 @@ procedure XOSCons is
                if Info.Kind = CND then
                   Info.Int_Value := Parse_Int (Line (Index1 .. Index2 - 1));
                   Info.Value_Len := Index2 - Index1 - 1;
+
                else
                   Info.Text_Value := Field_Alloc;
                   Info.Value_Len  := Info.Text_Value'Length;
@@ -322,8 +322,8 @@ procedure XOSCons is
          if Info.Kind = TXT then
             Info.Text_Value := Info.Comment;
 
-         --  Update Max_Constant_Value_Len, but only if this constant has
-         --  comment (else the value is allowed to be longer).
+         --  Update Max_Constant_Value_Len, but only if this constant has a
+         --  comment (else the value is allowed to be longer).
 
          elsif Info.Comment'Length > 0 then
             if Info.Value_Len > Max_Constant_Value_Len then
@@ -398,7 +398,7 @@ begin
 
    --  Load C template and output definitions
 
-   Open (Tmpl_File, In_File, Tmpl_File_Name);
+   Open   (Tmpl_File, In_File,  Tmpl_File_Name);
    Create (Ada_OFile, Out_File, Ada_File_Name);
    Create (C_OFile,   Out_File, C_File_Name);
 
@@ -446,6 +446,7 @@ begin
             Output_Info (Lang_C,   C_OFile,   Current_Info);
             Current_Info := Current_Info + 1;
          end if;
+
          Current_Line := Current_Line + 1;
       end if;
    end loop;