This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[Ada] Improve error message when named number passed as global item
- From: Pierre-Marie de Rodat <derodat at adacore dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Yannick Moy <moy at adacore dot com>
- Date: Tue, 11 Dec 2018 06:36:33 -0500
- Subject: [Ada] Improve error message when named number passed as global item
When a named number is used in Global/Depends contracts as global item,
the error message could be confusing to users new to Ada. Now the
message explains that named numbers are not objects.
For instance on the following illegal code snippet:
$ gcc -c bad_global.ads
1. package Bad_Global is
2.
3. X : constant := 1;
4. Y : constant := 1.0;
5.
6. procedure P with
7. Global => (Input => X,
|
>>> global item must denote object, state or current instance
of concurrent type
>>> named number "X" is not an object
8. In_Out => Y);
|
>>> global item must denote object, state or current instance
of concurrent type
>>> named number "Y" is not an object
9.
10. end Bad_Global;
Tested on x86_64-pc-linux-gnu, committed on trunk
2018-12-11 Yannick Moy <moy@adacore.com>
gcc/ada/
* sem_prag.adb (Analyze_Global_Item): Refine error message.
--- gcc/ada/sem_prag.adb
+++ gcc/ada/sem_prag.adb
@@ -2282,6 +2282,12 @@ package body Sem_Prag is
SPARK_Msg_N
("global item must denote object, state or current "
& "instance of concurrent type", Item);
+
+ if Ekind (Item_Id) in Named_Kind then
+ SPARK_Msg_NE
+ ("\named number & is not an object", Item, Item);
+ end if;
+
return;
end if;