This patch modifies the behavior of pragma Unreferenced to be consistent
in its behavior, by counting all variables specified as "Out" actual
parameters as being referenced instead of only the first "Out"
parameter. Additionally, much related duplicated has been removed.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * comperr.adb (Delete_SCIL_Files): Replace unnecessary
        Unreferenced pragma with specific pragma Warnings.
        * doc/gnat_rm/implementation_defined_pragmas.rst (Unreferenced):
        Add documentation for new behavior.
        * gnat_rm.texi: Regenerate.
        * erroutc.adb (Set_At): Remove useless assignment.
        * exp_ch2.adb (In_Assignment_Context): Deleted.
        (Is_Object_Renaming_Name): Replace calls to Is_LHS with calls to
        Known_To_Be_Assigned.
        (Expand_Current_Value): Replace calls to May_Be_Lvalue with
        calls to Known_To_Be_Assigned.
        (Expand_Entry_Paramter): Replace calls to In_Assignment_Context
        with calls to Known_To_Be_Assigned.
        * exp_ch4.adb (Expand_N_Op_Rem): Remove unnecessary Unreferenced
        pragma.
        * exp_imgv.adb (Build_Enumeration_Image_Tables): Default
        initialize S_N.
        * ghost.adb (Check_Ghost_Policy): Replace call to May_Be_Lvalue
        with call to Known_To_Be_Assigned.
        * lib-xref.adb (Is_On_LHS): Deleted.
        (OK_To_Set_Referenced): Rewrite subprogram to encompass the new
        pragma Unreferenced behavior.
        (Process_Deferred_References): Replace call to Is_LHS with call
        to Known_To_Be_Assigned.
        * libgnarl/s-taasde.adb, libgnarl/s-tasren.adb,
        libgnarl/s-tpobop.adb, libgnat/a-calend.adb,
        libgnat/a-calfor.adb, libgnat/a-cbdlli.adb,
        libgnat/a-cbhama.adb, libgnat/a-cbhase.adb,
        libgnat/a-cbmutr.adb, libgnat/a-cborma.adb,
        libgnat/a-cborse.adb, libgnat/a-cdlili.adb,
        libgnat/a-cfhama.adb, libgnat/a-cforse.adb,
        libgnat/a-cidlli.adb, libgnat/a-cihama.adb,
        libgnat/a-cihase.adb, libgnat/a-cimutr.adb,
        libgnat/a-ciorma.adb, libgnat/a-ciormu.adb,
        libgnat/a-ciorse.adb, libgnat/a-cohama.adb,
        libgnat/a-cohase.adb, libgnat/a-comutr.adb,
        libgnat/a-convec.adb, libgnat/a-coorma.adb,
        libgnat/a-coormu.adb, libgnat/a-coorse.adb,
        libgnat/a-crdlli.adb, libgnat/a-tigeau.adb,
        libgnat/a-wtgeau.adb, libgnat/a-ztgeau.adb,
        libgnat/g-calend.adb, libgnat/g-comlin.adb,
        libgnat/g-expect.adb, libgnat/g-mbflra.adb,
        libgnat/g-spipat.adb, libgnat/s-fatgen.adb,
        libgnat/s-fileio.adb, libgnat/s-os_lib.adb,
        libgnat/s-regpat.adb, libgnat/s-valued.adb,
        libgnat/s-valuer.adb: Remove unnecessary Unreferenced pragmas
        * sem_ch10.adb (Process_Spec_Clauses): Remove useless
        assignments.
        * sem_ch13.adb (Validate_Literal_Aspect): Default initialize I.
        * sem_ch3.adb (Build_Derived_Concurrent_Type): Default
        initialize Corr_Decl.
        * sem_ch8.adb (Undefined): Replace calls to Is_LHS with calls to
        Known_To_Be_Assigned.
        (In_Abstract_View_Pragma): Likewise.
        * sem_eval.adb (Eval_Selected_Component): Replace calls to
        Is_LHS with calls to Known_To_Be_Assigned.
        * sem_res.adb (Init_Component): Replace calls to May_Be_Lvalue
        with calls to Known_To_Be_Assigned.
        * sem_util.adb, sem_util.ads (End_Label_Loc): Default initialize
        Owner.
        (Explain_Limited_Type): Default initialize Expr_Func.
        (Find_Actual): Modified to handle entry families.
        (Is_LHS): Deleted.
        (May_Be_Lvalue): Deleted.
        (Known_To_Be_Assigned): Modified and improved to handle all
        cases.
        * sem_warn.adb (Traverse_Result): Replace calls to May_Be_Lvalue
        with calls to Known_To_Be_Assigned.
        (Check_Ref): Modify error on unreferenced out parameters to take
        into account different warning flags.

Attachment: patch.diff.gz
Description: application/gzip

Reply via email to