[Ada] ACATS 4.1R - BD10001 - Error missed
authorArnaud Charlet <charlet@adacore.com>
Mon, 18 May 2020 10:00:31 +0000 (06:00 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 8 Jul 2020 14:55:52 +0000 (10:55 -0400)
gcc/ada/

* sem_prag.adb (Process_Inline): Check for duplicate
pragma+aspect Inline. Minor code cleanup.
(Check_Duplicate_Pragma): Add warning for duplicate
pragma [No_]Inline under -gnatwr.
* sinfo.ads, sinfo.adb (Next_Rep_Item): Allow N_Null_Statement
which can appear when a pragma is rewritten.
* sem_util.ads, sem_util.adb, bindo-writers.adb: Fix bad
copy/paste now flagged.
* libgnat/s-mmap.ads: Remove redundant pragma Inline.

gcc/ada/bindo-writers.adb
gcc/ada/libgnat/s-mmap.ads
gcc/ada/sem_prag.adb
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads
gcc/ada/sinfo.adb
gcc/ada/sinfo.ads

index 298118e834c9c526ec10a275403c8c25a6ec6be6..88c8b25d31297ea0dd19612f59cd2bc9b6cd889b 100644 (file)
@@ -1037,7 +1037,7 @@ package body Bindo.Writers is
       --  output.
 
       procedure Write_Components (G : Library_Graph);
-      pragma Inline (Write_Component);
+      pragma Inline (Write_Components);
       --  Write all components of library graph G to standard output
 
       procedure Write_Edges_To_Successors
index a9e776f592de9365890154dd651f1a5e155fde24..305d1f877df5cc29cd4f9602646764a9fee7c585 100644 (file)
@@ -223,13 +223,11 @@ package System.Mmap is
    --  (File); such accesses may cause Storage_Error to be raised.
 
    function Data (Region : Mapped_Region) return Str_Access;
-   pragma Inline (Data);
    --  The data mapped in Region as requested. The result is an unconstrained
    --  string, so you cannot use the usual 'First and 'Last attributes.
    --  Instead, these are respectively 1 and Size.
 
    function Data (File : Mapped_File) return Str_Access;
-   pragma Inline (Data);
    --  Likewise for the region contained in File
 
    function Is_Mutable (Region : Mapped_Region) return Boolean;
index 95a117373ad4616c50b1f504023bb0d52696cbfb..db9c611915581bf36b26dc93d37a75d51662e316 100644 (file)
@@ -5905,7 +5905,18 @@ package body Sem_Prag is
             then
                Error_Msg_NE ("aspect% for & previously given#", N, Id);
             else
-               Error_Msg_NE ("pragma% for & duplicates pragma#", N, Id);
+               --  If -gnatwr is set, warn in case of a duplicate pragma
+               --  [No_]Inline which is suspicious but not an error, generate
+               --  an error for other pragmas.
+
+               if Nam_In (Pragma_Name (N), Name_Inline, Name_No_Inline) then
+                  if Warn_On_Redundant_Constructs then
+                     Error_Msg_NE
+                       ("?r?pragma% for & duplicates pragma#", N, Id);
+                  end if;
+               else
+                  Error_Msg_NE ("pragma% for & duplicates pragma#", N, Id);
+               end if;
             end if;
 
             raise Pragma_Exit;
@@ -10127,6 +10138,18 @@ package body Sem_Prag is
                   Applies := True;
 
                else
+                  --  Check for RM 13.1(9.2/4): If a [...] aspect_specification
+                  --  is given that directly specifies an aspect of an entity,
+                  --  then it is illegal to give another [...]
+                  --  aspect_specification that directly specifies the same
+                  --  aspect of the entity.
+                  --  We only check Subp directly as per "directly specifies"
+                  --  above and because the case of pragma Inline is really
+                  --  special given its pre aspect usage.
+
+                  Check_Duplicate_Pragma (Subp);
+                  Record_Rep_Item (Subp, N);
+
                   Make_Inline (Subp);
 
                   --  For the pragma case, climb homonym chain. This is
@@ -10138,8 +10161,8 @@ package body Sem_Prag is
                      while Present (Homonym (Subp))
                        and then Scope (Homonym (Subp)) = Current_Scope
                      loop
-                        Make_Inline (Homonym (Subp));
                         Subp := Homonym (Subp);
+                        Make_Inline (Subp);
                      end loop;
                   end if;
                end if;
index 89b6452856f28880ca1fb34b84df529532dca200..7ec52b30c792b039b20d2e981da3e34266417a74 100644 (file)
@@ -21407,7 +21407,7 @@ package body Sem_Util is
       --  New_Id is the corresponding new entity generated during Phase 1.
 
       procedure Add_Pending_Itype (Assoc_Nod : Node_Id; Itype : Entity_Id);
-      pragma Inline (Add_New_Entity);
+      pragma Inline (Add_Pending_Itype);
       --  Add an entry in the NCT_Pending_Itypes which maps key Assoc_Nod to
       --  value Itype. Assoc_Nod is the associated node of an itype. Itype is
       --  an itype.
index b467e26a21274d5ff52262428eebc3ddab92f326..99ceec00e9a0e6dfc7ec82f2c5d10ed9774b9f89 100644 (file)
@@ -2512,7 +2512,7 @@ package Sem_Util is
    --  with the same mode.
 
    procedure Next_Global (Node : in out Node_Id);
-   pragma Inline (Next_Actual);
+   pragma Inline (Next_Global);
    --  Next_Global (N) is equivalent to N := Next_Global (N). Note that we
    --  inline this procedural form, but not the functional form above.
 
index 7284a06b1daef46e0b8a636c34db84ea37b3802e..9199af4e6adebfb847368b4032817a277a6be259 100644 (file)
@@ -2547,6 +2547,7 @@ package body Sinfo is
         or else NT (N).Nkind = N_Aspect_Specification
         or else NT (N).Nkind = N_Attribute_Definition_Clause
         or else NT (N).Nkind = N_Enumeration_Representation_Clause
+        or else NT (N).Nkind = N_Null_Statement
         or else NT (N).Nkind = N_Pragma
         or else NT (N).Nkind = N_Record_Representation_Clause);
       return Node5 (N);
@@ -6034,6 +6035,7 @@ package body Sinfo is
         or else NT (N).Nkind = N_Aspect_Specification
         or else NT (N).Nkind = N_Attribute_Definition_Clause
         or else NT (N).Nkind = N_Enumeration_Representation_Clause
+        or else NT (N).Nkind = N_Null_Statement
         or else NT (N).Nkind = N_Pragma
         or else NT (N).Nkind = N_Record_Representation_Clause);
       Set_Node5 (N, Val); -- semantic field, no parent set
index 1dd31b06c7d86e427f67348cc4c554c2564d2385..9ae8ce790bc1f1da820fbd4276de8f81ec050eb3 100644 (file)
@@ -2081,9 +2081,9 @@ package Sinfo is
 
    --  Next_Rep_Item (Node5-Sem)
    --    Present in pragma nodes, attribute definition nodes, enumeration rep
-   --    clauses, record rep clauses, aspect specification nodes. Used to link
-   --    representation items that apply to an entity. See full description of
-   --    First_Rep_Item field in Einfo for further details.
+   --    clauses, record rep clauses, aspect specification and null statement
+   --    nodes. Used to link representation items that apply to an entity. See
+   --    full description of First_Rep_Item field in Einfo for further details.
 
    --  Next_Use_Clause (Node3-Sem)
    --    While use clauses are active during semantic processing, they are
@@ -4848,6 +4848,7 @@ package Sinfo is
 
       --  N_Null_Statement
       --  Sloc points to NULL
+      --  Next_Rep_Item (Node5-Sem)
 
       ----------------
       -- 5.1  Label --