From 03a47ff8bdc5c550294a3037a9b4296de145c8c2 Mon Sep 17 00:00:00 2001 From: charlet Date: Thu, 9 Sep 2010 13:04:22 +0000 Subject: [PATCH] 2010-09-09 Doug Rupp * sem_prag.adb (pragma Ident): Pass --identification= vice IDENTIFICATION= * gnatlink.adb (Linker_Options): Look for --identification= vice IDENTIFICATION= 2010-09-09 Gary Dismukes * exp_attr.adb (Expand_N_Attribute_Reference, case Attribute_Old): When inserting and analyzing the object declaration for the temporary object created to hold a 'Old value, push the scope for the subprogram where the object is inserted, so that its Scope (and that of related objects) will be set properly. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164088 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 15 +++++++++++++++ gcc/ada/exp_attr.adb | 15 ++++++++++++++- gcc/ada/gnatlink.adb | 6 +++--- gcc/ada/sem_prag.adb | 6 +++--- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 4d5f66d..ef94a4e 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2010-09-09 Doug Rupp + + * sem_prag.adb (pragma Ident): Pass --identification= vice + IDENTIFICATION= + * gnatlink.adb (Linker_Options): Look for --identification= vice + IDENTIFICATION= + +2010-09-09 Gary Dismukes + + * exp_attr.adb (Expand_N_Attribute_Reference, case Attribute_Old): When + inserting and analyzing the object declaration for the temporary object + created to hold a 'Old value, push the scope for the subprogram where + the object is inserted, so that its Scope (and that of related objects) + will be set properly. + 2010-09-09 Vincent Celier * prj.adb (Get_Object_Directory): Return object directory display name diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb index 7bb6285..1f6f754 100644 --- a/gcc/ada/exp_attr.adb +++ b/gcc/ada/exp_attr.adb @@ -3011,7 +3011,8 @@ package body Exp_Attr is and then Chars (Defining_Entity (Subp)) /= Name_uPostconditions; end loop; - -- Insert the assignment at the start of the declarations + -- Insert the initialized object declaration at the start of the + -- subprogram's declarations. Asn_Stm := Make_Object_Declaration (Loc, @@ -3020,6 +3021,16 @@ package body Exp_Attr is Object_Definition => New_Occurrence_Of (Etype (N), Loc), Expression => Pref); + -- Push the subprogram's scope, so that the object will be analyzed + -- in that context (rather than the context of the Precondition + -- subprogram) and will have its Scope set properly. + + if Present (Corresponding_Spec (Subp)) then + Push_Scope (Corresponding_Spec (Subp)); + else + Push_Scope (Defining_Entity (Subp)); + end if; + if Is_Empty_List (Declarations (Subp)) then Set_Declarations (Subp, New_List (Asn_Stm)); Analyze (Asn_Stm); @@ -3027,6 +3038,8 @@ package body Exp_Attr is Insert_Action (First (Declarations (Subp)), Asn_Stm); end if; + Pop_Scope; + Rewrite (N, New_Occurrence_Of (Tnn, Loc)); end Old; diff --git a/gcc/ada/gnatlink.adb b/gcc/ada/gnatlink.adb index ad57a9d..62bc176 100644 --- a/gcc/ada/gnatlink.adb +++ b/gcc/ada/gnatlink.adb @@ -2144,9 +2144,9 @@ begin -- Remove duplicate IDENTIFICATION directives (VMS) - if Linker_Options.Table (J)'Length > 27 - and then Linker_Options.Table (J) (1 .. 28) - = "--for-linker=IDENTIFICATION=" + if Linker_Options.Table (J)'Length > 29 + and then Linker_Options.Table (J) (1 .. 30) + = "--for-linker=--identification=" then if IDENT_Op then Linker_Options.Table (J .. Linker_Options.Last - 1) := diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 44720f0..a3b400e 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -7845,12 +7845,12 @@ package body Sem_Prag is else -- In VMS, the effect of IDENT is achieved by passing - -- IDENTIFICATION=name as a --for-linker switch. + -- --identification=name as a --for-linker switch. if OpenVMS_On_Target then Start_String; Store_String_Chars - ("--for-linker=IDENTIFICATION="); + ("--for-linker=--identification="); String_To_Name_Buffer (Strval (Str)); Store_String_Chars (Name_Buffer (1 .. Name_Len)); @@ -7860,7 +7860,7 @@ package body Sem_Prag is -- associated with a with'd package. Replace_Linker_Option_String - (End_String, "--for-linker=IDENTIFICATION="); + (End_String, "--for-linker=--identification="); end if; Set_Ident_String (Current_Sem_Unit, Str); -- 2.7.4