aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/lib-xref.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2014-06-11 14:22:57 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2014-06-11 14:22:57 +0200
commit2c8d828a5fc1c18ef630ea45ce1ff13638d97918 (patch)
tree645544f68c75c182b632092acdfbe2feee66f73d /gcc/ada/lib-xref.adb
parent4622301b0dd6b595d51be6a6b9e39b177d0abb6a (diff)
downloadgcc-2c8d828a5fc1c18ef630ea45ce1ff13638d97918.zip
gcc-2c8d828a5fc1c18ef630ea45ce1ff13638d97918.tar.gz
gcc-2c8d828a5fc1c18ef630ea45ce1ff13638d97918.tar.bz2
[multiple changes]
2014-06-11 Yannick Moy <moy@adacore.com> * einfo.ads: Minor typo in comment 2014-06-11 Ed Schonberg <schonberg@adacore.com> * sinfo.ads, sinfo.adb: New attribute Uninitialized_Variable, for formal private types and private type extensions, to indicate variable in a generic unit whose uninitialized use suggest that actual type should be fully initialized. Needs_Initialized_Actual: removed, functionaity replaced by the above. * lib-xref.adb (Generate_Reference): Generate a reference for variables of a formal type when the unit is not the main unit, to enable appropriate warnings in an instance. * sem_ch12.adb (Check_Ininialized_Type): Improve warning on use of variable in a generic unit that suggests that actual type should be full initialized. * sem_warn.adb; (May_Need_Initialized_Actual): Make into procedure and do not emot warning, which now only appears in an instance. 2014-06-11 Eric Botcazou <ebotcazou@adacore.com> * gnat_ugn.texi: Fix minor typo. 2014-06-11 Hristian Kirtchev <kirtchev@adacore.com> * sem_ch3.adb Add with and use clause for Sem_Ch10. (Analyze_Declarations): Code reformatting. Analyze the contract of a subprogram body stub at the end of the declarative region. * sem_ch6.adb (Analyze_Subprogram_Body_Contract): Spec_Id is now a variable. Do not process the body if its contract is not available. Account for subprogram body stubs when extracting the corresponding spec. * sem_ch6.ads (Analyze_Subprogram_Contract): Update the comment on usage. * sem_ch10.ads, sem_ch10.adb (Analyze_Subprogram_Body_Stub_Contract): New routine. * sem_prag.adb (Analyze_Depends_In_Decl_Part): Account for subprogram body stubs when extracting the corresponding spec. (Analyze_Global_In_Decl_List): Account for subprogram body stubs when extracting the corresponding spec. (Analyze_Refined_Depends_In_Decl_Part): Use Find_Related_Subprogram_Or_Body to retrieve the declaration of the related body. Spec_Is now a variable. Account for subprogram body stubs when extracting the corresponding spec. (Analyze_Refined_Global_In_Decl_Part): Use Find_Related_Subprogram_Or_Body to retrieve the declaration of the related body. Spec_Is now a variable. Account for subprogram body stubs when extracting the corresponding spec. (Collect_Subprogram_Inputs_Output): Account for subprogram body stubs when extracting the corresponding spec. 2014-06-11 Vincent Celier <celier@adacore.com> * gnatcmd.adb (Process_Link): Do not invoke gnatlink with -lgnarl or -lgnat. From-SVN: r211454
Diffstat (limited to 'gcc/ada/lib-xref.adb')
-rw-r--r--gcc/ada/lib-xref.adb20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb
index d99c054..cc9ac4c 100644
--- a/gcc/ada/lib-xref.adb
+++ b/gcc/ada/lib-xref.adb
@@ -640,6 +640,11 @@ package body Lib.Xref is
-- For the same reason we accept an implicit reference generated for
-- a default in an instance.
+ -- We also set the referenced flag in a generic package that is not in
+ -- then main source unit, when the variable is of a formal private type,
+ -- to warn in the instance if the corresponding type is not a fully
+ -- initialized type.
+
if not In_Extended_Main_Source_Unit (N) then
if Typ = 'e'
or else Typ = 'I'
@@ -655,8 +660,23 @@ package body Lib.Xref is
(GNATprove_Mode
and then In_Extended_Main_Code_Unit (N)
and then (Typ = 'm' or else Typ = 'r' or else Typ = 's'))
+
then
null;
+
+ elsif In_Instance_Body
+ and then In_Extended_Main_Code_Unit (N)
+ and then Is_Generic_Type (Etype (E))
+ then
+ Set_Referenced (E);
+ return;
+
+ elsif Inside_A_Generic
+ and then Is_Generic_Type (Etype (E))
+ then
+ Set_Referenced (E);
+ return;
+
else
return;
end if;