[COMMITTED] ada: Improve error message on violation of SPARK_Mode rules

Message ID 20230706113853.1765963-1-poulhies@adacore.com
State Unresolved
Headers
Series [COMMITTED] ada: Improve error message on violation of SPARK_Mode rules |

Checks

Context Check Description
snail/gcc-patch-check warning Git am fail log

Commit Message

Marc Poulhiès July 6, 2023, 11:38 a.m. UTC
  From: Yannick Moy <moy@adacore.com>

SPARK_Mode On can only be used on library-level entities.
Improve the error message here.

gcc/ada/

	* errout.ads: Add explain code.
	* sem_prag.adb (Check_Library_Level_Entity): Refine error message
	and add explain code.

Tested on x86_64-pc-linux-gnu, committed on master.

---
 gcc/ada/errout.ads   | 1 +
 gcc/ada/sem_prag.adb | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)
  

Patch

diff --git a/gcc/ada/errout.ads b/gcc/ada/errout.ads
index 80dd7dfaead..2065d73614a 100644
--- a/gcc/ada/errout.ads
+++ b/gcc/ada/errout.ads
@@ -622,6 +622,7 @@  package Errout is
    GEC_Volatile_Non_Interfering_Context : constant := 0004;
    GEC_Required_Part_Of                 : constant := 0009;
    GEC_Ownership_Moved_Object           : constant := 0010;
+   GEC_SPARK_Mode_On_Not_Library_Level  : constant := 0011;
 
    ------------------------
    -- List Pragmas Table --
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index c5810685dc3..6de87fbaba9 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -24144,7 +24144,8 @@  package body Sem_Prag is
 
                --  Local variables
 
-               Msg_1 : constant String := "incorrect placement of pragma%";
+               Msg_1 : constant String :=
+                 "incorrect placement of pragma% with value ""On"" '[[]']";
                Msg_2 : Name_Id;
 
             --  Start of processing for Check_Library_Level_Entity
@@ -24161,6 +24162,7 @@  package body Sem_Prag is
                  and then Instantiation_Location (Sloc (N)) = No_Location
                then
                   Error_Msg_Name_1 := Pname;
+                  Error_Msg_Code := GEC_SPARK_Mode_On_Not_Library_Level;
                   Error_Msg_N (Fix_Error (Msg_1), N);
 
                   Name_Len := 0;