summaryrefslogtreecommitdiff
path: root/gcc/ada/lib-xref.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-11 12:22:57 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-11 12:22:57 +0000
commitd8b02cb47055f7d18048d8507b32f051cf94bfd5 (patch)
tree645544f68c75c182b632092acdfbe2feee66f73d /gcc/ada/lib-xref.adb
parent8b4123567ec4b1f923dcc6453c0750f33ae37b71 (diff)
downloadgcc-d8b02cb47055f7d18048d8507b32f051cf94bfd5.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211454 138bc75d-0d04-0410-961f-82ee72b054a4
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 d99c054c7eb..cc9ac4ce0f3 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;