Patchwork [Ada] Correct various bad choices in Alfa mode

login
register
mail settings
Submitter Arnaud Charlet
Date Aug. 31, 2011, 9:14 a.m.
Message ID <20110831091427.GA11417@adacore.com>
Download mbox | patch
Permalink /patch/112478/
State New
Headers show

Comments

Arnaud Charlet - Aug. 31, 2011, 9:14 a.m.
Tested on x86_64-pc-linux-gnu, committed on trunk

2011-08-31  Yannick Moy  <moy@adacore.com>

	* exp_alfa.adb (Expand_Alfa_N_Package_Declaration,
	Expand_Alfa_N_Subprogram_Body): Remove useless procedures which simply
	call Qualify_Entity_Names.
	(Expand_Alfa): call Qualify_Entity_Names in more cases
	* lib-xref-alfa.adb: Take into account system package.
	* sem_prag.adb Take into account restrictions in Alfa mode, contrary to
	CodePeer mode in which we are interested in finding bugs even if
	compiler cannot compile source.
	* sem_util.adb, sem_util.ads (Unique_Entity): Take into account case of
	deferred constant.

Patch

Index: exp_alfa.adb
===================================================================
--- exp_alfa.adb	(revision 178360)
+++ exp_alfa.adb	(working copy)
@@ -51,15 +51,9 @@ 
    procedure Expand_Alfa_N_Attribute_Reference (N : Node_Id);
    --  Expand attributes 'Old and 'Result only
 
-   procedure Expand_Alfa_N_Package_Declaration (N : Node_Id);
-   --  Fully qualify names of enclosed entities
-
    procedure Expand_Alfa_N_Simple_Return_Statement (N : Node_Id);
    --  Insert conversion on function return if necessary
 
-   procedure Expand_Alfa_N_Subprogram_Body (N : Node_Id);
-   --  Fully qualify names of enclosed entities
-
    procedure Expand_Alfa_Simple_Function_Return (N : Node_Id);
    --  Expand simple return from function
 
@@ -71,15 +65,15 @@ 
    begin
       case Nkind (N) is
 
-         when N_Package_Declaration =>
-            Expand_Alfa_N_Package_Declaration (N);
+         when N_Package_Body        |
+              N_Package_Declaration |
+              N_Subprogram_Body     |
+              N_Block_Statement     =>
+            Qualify_Entity_Names (N);
 
          when N_Simple_Return_Statement =>
             Expand_Alfa_N_Simple_Return_Statement (N);
 
-         when N_Subprogram_Body =>
-            Expand_Alfa_N_Subprogram_Body (N);
-
          when N_Function_Call            |
               N_Procedure_Call_Statement =>
             Expand_Alfa_Call (N);
@@ -173,15 +167,6 @@ 
       end case;
    end Expand_Alfa_N_Attribute_Reference;
 
-   ---------------------------------------
-   -- Expand_Alfa_N_Package_Declaration --
-   ---------------------------------------
-
-   procedure Expand_Alfa_N_Package_Declaration (N : Node_Id) is
-   begin
-      Qualify_Entity_Names (N);
-   end Expand_Alfa_N_Package_Declaration;
-
    -------------------------------------------
    -- Expand_Alfa_N_Simple_Return_Statement --
    -------------------------------------------
@@ -222,15 +207,6 @@ 
          return;
    end Expand_Alfa_N_Simple_Return_Statement;
 
-   -----------------------------------
-   -- Expand_Alfa_N_Subprogram_Body --
-   -----------------------------------
-
-   procedure Expand_Alfa_N_Subprogram_Body (N : Node_Id) is
-   begin
-      Qualify_Entity_Names (N);
-   end Expand_Alfa_N_Subprogram_Body;
-
    ----------------------------------------
    -- Expand_Alfa_Simple_Function_Return --
    ----------------------------------------
Index: sem_prag.adb
===================================================================
--- sem_prag.adb	(revision 178358)
+++ sem_prag.adb	(working copy)
@@ -5090,9 +5090,9 @@ 
       --  Start of processing for Process_Restrictions_Or_Restriction_Warnings
 
       begin
-         --  Ignore all Restrictions pragma in CodePeer and Alfa modes
+         --  Ignore all Restrictions pragma in CodePeer mode
 
-         if CodePeer_Mode or Alfa_Mode then
+         if CodePeer_Mode then
             return;
          end if;
 
Index: sem_util.adb
===================================================================
--- sem_util.adb	(revision 178358)
+++ sem_util.adb	(working copy)
@@ -12656,6 +12656,11 @@ 
 
    begin
       case Ekind (E) is
+         when E_Constant =>
+            if Present (Full_View (E)) then
+               U := Full_View (E);
+            end if;
+
          when Type_Kind =>
             if Present (Full_View (E)) then
                U := Full_View (E);
Index: sem_util.ads
===================================================================
--- sem_util.ads	(revision 178358)
+++ sem_util.ads	(working copy)
@@ -1448,7 +1448,8 @@ 
    --  views of the same entity have the same unique defining entity:
    --  * package spec and body;
    --  * subprogram declaration, subprogram stub and subprogram body;
-   --  * private view and full view of a type.
+   --  * private view and full view of a type;
+   --  * private view and full view of a deferred constant.
    --  In other cases, return the defining entity for N.
 
    function Unique_Entity (E : Entity_Id) return Entity_Id;
Index: lib-xref-alfa.adb
===================================================================
--- lib-xref-alfa.adb	(revision 178363)
+++ lib-xref-alfa.adb	(working copy)
@@ -886,14 +886,7 @@ 
       --  Generate file and scope Alfa information
 
       for D in 1 .. Num_Sdep loop
-
-         --  Ignore file for System
-
-         if Units.Table (Sdep_Table (D)).Source_Index /=
-           System_Source_File_Index
-         then
-            Add_Alfa_File (U => Sdep_Table (D), D => D);
-         end if;
+         Add_Alfa_File (U => Sdep_Table (D), D => D);
       end loop;
 
       --  Fill in the spec information when relevant