[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;

2018-12-11  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_prag.adb (Analyze_Global_Item): Refine error message.

From-SVN: r267011
This commit is contained in:
Yannick Moy 2018-12-11 11:12:03 +00:00 committed by Pierre-Marie de Rodat
parent e60c10b3b9
commit 4a60c9a20c
2 changed files with 10 additions and 0 deletions

View File

@ -1,3 +1,7 @@
2018-12-11 Yannick Moy <moy@adacore.com>
* sem_prag.adb (Analyze_Global_Item): Refine error message.
2018-12-11 Ed Schonberg <schonberg@adacore.com>
* exp_ch7.adb (Check_Unnesting_In_Declarations): Extend

View File

@ -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;