https://gcc.gnu.org/g:ff94323051f1cb875232b131fcb6a866fbf20e44
commit r16-3874-gff94323051f1cb875232b131fcb6a866fbf20e44 Author: Viljar Indus <[email protected]> Date: Mon Sep 1 11:00:38 2025 +0300 ada: Fix the condition of ghost level dependencies inside assignments The assignee should depend on the level of all of the ghost entiies with the assignment. gcc/ada/ChangeLog: * ghost.adb (Check_Assignee_Levels): Fix the condition and improve error message handling. Diff: --- gcc/ada/ghost.adb | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/gcc/ada/ghost.adb b/gcc/ada/ghost.adb index bfe6bff0751e..ef6315a7d3d5 100644 --- a/gcc/ada/ghost.adb +++ b/gcc/ada/ghost.adb @@ -561,22 +561,19 @@ package body Ghost is -- within an assignment statement whose target is a ghost -- variable that is assertion-level-dependent on E. - if not Is_Assertion_Level_Dependent (Id_Level, Assignee_Level) + if not Is_Assertion_Level_Dependent (Assignee_Level, Id_Level) then - Error_Msg_Sloc := Sloc (Ghost_Ref); - Error_Msg_N (Assertion_Level_Error_Msg, Ghost_Ref); Error_Msg_Name_1 := Chars (Id_Level); - Error_Msg_NE ("\& has assertion level %", Ghost_Ref, Id); + Error_Msg_N ("\& has assertion level %", Ghost_Ref); Error_Msg_Name_1 := Chars (Assignee_Level); Error_Msg_Node_2 := Assignee; - Error_Msg_NE - ("\& is modifying & with %", Ghost_Ref, Id); - Error_Msg_Name_1 := Chars (Assignee_Level); + Error_Msg_NE ("\& is modifying & with %", Ghost_Ref, Id); + Error_Msg_Name_1 := Chars (Id_Level); Error_Msg_NE ("\assertion level of & should depend on %", Ghost_Ref, - Id); + Assignee); end if; end Check_Assignment_Levels;
