summaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-31 06:16:50 +0000
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-31 06:16:50 +0000
commit80840a5fd2b47202cc9d2266cf9a6b1f5c2e6ce2 (patch)
tree8e564e5ac627ae476fa0e8d322261e6313f70b07 /gcc/ada
parent6c3f1ba6c0116a23ada0a56e7ef8b55e4eeaffa0 (diff)
downloadgcc-80840a5fd2b47202cc9d2266cf9a6b1f5c2e6ce2.tar.gz
2009-07-31 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 150307 added manually libstdc++-v3/include/std/chrono from trunk. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@150308 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog399
-rw-r--r--gcc/ada/a-except-2005.ads43
-rw-r--r--gcc/ada/a-except.adb126
-rw-r--r--gcc/ada/a-exexpr.adb6
-rw-r--r--gcc/ada/a-teioed.adb10
-rw-r--r--gcc/ada/adaint.c2
-rw-r--r--gcc/ada/adaint.h7
-rw-r--r--gcc/ada/checks.adb3
-rw-r--r--gcc/ada/debug.adb2
-rw-r--r--gcc/ada/einfo.ads4
-rw-r--r--gcc/ada/exp_atag.adb54
-rw-r--r--gcc/ada/exp_atag.ads19
-rw-r--r--gcc/ada/exp_attr.adb42
-rw-r--r--gcc/ada/exp_ch2.adb34
-rw-r--r--gcc/ada/exp_ch3.adb141
-rw-r--r--gcc/ada/exp_ch4.adb11
-rw-r--r--gcc/ada/exp_ch6.adb13
-rw-r--r--gcc/ada/exp_ch7.adb10
-rw-r--r--gcc/ada/exp_ch9.adb23
-rw-r--r--gcc/ada/exp_disp.adb260
-rw-r--r--gcc/ada/exp_disp.ads40
-rw-r--r--gcc/ada/exp_util.adb39
-rw-r--r--gcc/ada/frontend.adb19
-rw-r--r--gcc/ada/g-expect.adb31
-rw-r--r--gcc/ada/g-socket.adb9
-rw-r--r--gcc/ada/g-sse.ads86
-rw-r--r--gcc/ada/g-ssinty.ads77
-rw-r--r--gcc/ada/g-ssvety.ads4
-rw-r--r--gcc/ada/gcc-interface/Make-lang.in973
-rw-r--r--gcc/ada/gcc-interface/Makefile.in6
-rw-r--r--gcc/ada/gcc-interface/trans.c15
-rw-r--r--gcc/ada/gnat1drv.adb45
-rw-r--r--gcc/ada/gnat_rm.texi11
-rw-r--r--gcc/ada/gnat_ugn.texi198
-rw-r--r--gcc/ada/gnatfind.adb105
-rw-r--r--gcc/ada/lib-xref.ads5
-rw-r--r--gcc/ada/make.adb174
-rw-r--r--gcc/ada/makeutl.adb183
-rw-r--r--gcc/ada/makeutl.ads71
-rw-r--r--gcc/ada/osint.ads7
-rw-r--r--gcc/ada/prj-nmsc.adb32
-rw-r--r--gcc/ada/prj-tree.adb10
-rw-r--r--gcc/ada/prj-tree.ads2
-rw-r--r--gcc/ada/prj.adb12
-rw-r--r--gcc/ada/prj.ads20
-rw-r--r--gcc/ada/raise.c15
-rw-r--r--gcc/ada/s-linux-hppa.ads2
-rw-r--r--gcc/ada/s-linux.ads2
-rw-r--r--gcc/ada/s-oscons-tmplt.c5
-rw-r--r--gcc/ada/s-soflin.ads2
-rw-r--r--gcc/ada/s-tasini.adb11
-rw-r--r--gcc/ada/sem.adb184
-rw-r--r--gcc/ada/sem_aggr.adb2
-rwxr-xr-xgcc/ada/sem_aux.adb4
-rwxr-xr-xgcc/ada/sem_aux.ads4
-rw-r--r--gcc/ada/sem_cat.adb10
-rw-r--r--gcc/ada/sem_ch13.adb33
-rw-r--r--gcc/ada/sem_ch13.ads3
-rw-r--r--gcc/ada/sem_ch3.adb311
-rw-r--r--gcc/ada/sem_ch3.ads58
-rw-r--r--gcc/ada/sem_ch4.adb10
-rw-r--r--gcc/ada/sem_ch5.adb10
-rw-r--r--gcc/ada/sem_ch6.adb122
-rw-r--r--gcc/ada/sem_ch7.adb5
-rw-r--r--gcc/ada/sem_eval.adb56
-rw-r--r--gcc/ada/sem_scil.adb649
-rw-r--r--gcc/ada/sem_scil.ads58
-rw-r--r--gcc/ada/sem_util.adb72
-rw-r--r--gcc/ada/sem_util.ads40
-rw-r--r--gcc/ada/sem_warn.adb1
-rw-r--r--gcc/ada/sinfo.adb76
-rw-r--r--gcc/ada/sinfo.ads147
-rw-r--r--gcc/ada/sprint.adb17
-rw-r--r--gcc/ada/usage.adb4
-rw-r--r--gcc/ada/xr_tabls.adb17
-rw-r--r--gcc/ada/xref_lib.adb6
76 files changed, 3620 insertions, 1699 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index fba1a74a6c1..35aa5423619 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,4 +1,399 @@
-2009-07-16 Dave Korn <dave.korn.cygwin@gmail.com>
+2009-07-30 Ben Brosgol <brosgol@adacore.com>
+
+ * gnat_ugn.texi: Correct minor texi glitch.
+
+2009-07-30 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_util.adb (Expand_Subtype_From_Expr): If the type of the
+ expression has an underlying representation that is an unchecked union,
+ there is no subtype to build.
+
+2009-07-30 Robert Dewar <dewar@adacore.com>
+
+ * a-teioed.adb, exp_disp.adb, s-linux-hppa.ads, s-linux.ads,
+ s-tasini.adb, sem_ch13.adb, sem_ch3.adb, sem_ch3.ads, sem_ch6.adb,
+ sem_ch7.adb, adaint.c: Minor reformatting
+
+2009-07-29 Javier Miranda <miranda@adacore.com>
+
+ * sem_ch3.ads, sem_ch3.adb (Add_Internal_Interface_Entities): Routine
+ moved from the expander to the semantic analyzer to allow the
+ generation of these internal entities when compiling with no code
+ generation. Required by ASIS.
+ * sem.adb (Analyze): Add processing for N_Freeze_Entity nodes.
+ * sem_ch13.ads, sem_ch13.adb (Analyze_Freeze_Entity): New subprogram.
+ * exp_ch3.adb (Add_Internal_Interface_Entities): Moved to sem_ch3
+ (Expand_Freeze_Record_Type): Remove call to
+ Add_Internal_Interface_Entities because this routine is now called at
+ early stage --when the freezing node is analyzed.
+
+2009-07-29 Robert Dewar <dewar@adacore.com>
+
+ * exp_atag.ads, exp_atag.adb, s-tasini.adb, s-soflin.ads,
+ exp_disp.adb, g-socket.adb: Minor reformatting
+
+2009-07-29 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch7.adb (New_Private_Type): Create class-wide type after other
+ attributes have been established, so that they are all inherited by the
+ class-wide type.
+ * sem_cat.adb (Validate_Remote_Access_Object_Type_Declaration): Handle
+ properly named subtypes of class-wide types.
+
+2009-07-29 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch6.adb (Check_Overriding_Indicator): Handle properly overriding
+ indicators on user-defined operators.
+
+2009-07-29 Vadim Godunko <godunko@adacore.com>
+
+ * g-socket.adb (Receive_Vector): Add comment.
+
+2009-07-29 Javier Miranda <miranda@adacore.com>
+
+ * frontend.adb (Frontend): Code cleanup.
+ * exp_atag.ads, exp_atag.adb (Build_Get_Predefined_Prim_Op_Address):
+ Rewriten as a procedure because it a new out-mode parameters to
+ keep up-to-date the controlling tag node in the caller.
+ (Build_Get_Prim_Op_Address): Rewriten as a procedure because it has a
+ new out-mode parameter to keep up-to-date the controlling tag node in
+ the caller.
+ * exp_ch7.adb, sem_ch5.adb, exp_util.adb, sem_util.adb, exp_ch4.adb,
+ exp_ch6.adb, sem_ch4.adb, exp_ch3.adb: Add new dependency on new
+ package Sem_SCIL.
+ * sem_aux.ads, sem_aux.adb (First_Non_SCIL_Node): Removed. Routine
+ available in new package Sem_SCIL.
+ (Next_Non_SCIL_Node): Ditto.
+ * exp_disp.adb (Adjust_SCIL_Node): Removed. Routine available in new
+ package Sem_SCIL.
+ (Expand_Dispatching_Call): Update call to modified Exp_Atags routines
+ plus complete decoration of SCIL dispatching node.
+ (Find_SCIL_Node): Removed. Routine available in new package Sem_SCIL.
+ * exp_disp.ads (Adjust_SCIL_Node): Removed. Routine available in new
+ package Sem_SCIL.
+ (Find_SCIL_Node): Removed. Routine available in new package Sem_SCIL.
+ * exp_ch3.adb (Build_Init_Procedure): Fix comment.
+ * sem_scil.ads, sem_scil.adb: New files.
+ * gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Addition of sem_scil.o.
+ Update dependencies.
+
+2009-07-28 Robert Dewar <dewar@adacore.com>
+
+ * adaint.h, einfo.ads, prj.adb, sem_util.adb, makeutl.ads,
+ makeutl.adb: Minor reformatting & code reorganization
+ * sem_ch3.adb: Minor reformatting.
+ Fix spelling error (constraint for constrain) in error msg.
+
+2009-07-28 Emmanuel Briot <briot@adacore.com>
+
+ * make.adb, makeutl.adb, makeutl.ads (Project_Tree): Duplicates the
+ global variable that also exists in makeutl.ads, and that some routines
+ in that package use already.
+ (Check): Moved part of the code to makeutl.adb for better sharing with
+ gprbuild.
+
+2009-07-28 Arnaud Charlet <charlet@adacore.com>
+
+ * gcc-interface/Make-lang.in: Update dependencies.
+
+2009-07-28 Emmanuel Briot <briot@adacore.com>
+
+ * prj.adb, prj.ads (Compute_All_Imported_Projects): Make sure the
+ importing project does not end up in the list, in the case of extending
+ projects.
+ * make.adb, makeutl.adb, makeutl.ads (File_Not_A_Source_Of): Moved to
+ makeutl.ads, for better sharing with gprbuild.
+
+2009-07-28 Arnaud Charlet <charlet@adacore.com>
+
+ * gnat_ugn.texi: Fix typo.
+
+2009-07-28 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Build_Derived_Concurrent_Type): Handle properly a
+ derivation that renames some discriminants and constrain others.
+ * exp_ch9.adb (Build_Protected_Subprogram_Call): If the type of the
+ prefix is a derived untagged type, convert to the root type to conform
+ to the signature of the protected operations.
+
+2009-07-28 Robert Dewar <dewar@adacore.com>
+
+ * sinfo.ads: Update comments.
+ * exp_attr.adb: Minor reformatting
+
+2009-07-28 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_aggr.adb (Get_Value): A named association in a record aggregate
+ should be treated as a modification of the named component, not as a
+ reference.
+
+2009-07-28 Quentin Ochem <ochem@adacore.com>
+
+ * prj-tree.ads, prj-tree.adb (Free): Minor editing.
+ * prj.ads, prj.adb (Image): Ditto.
+
+2009-07-28 Arnaud Charlet <charlet@adacore.com>
+
+ * frontend.adb: Minor reformatting.
+ (Frontend): Only call Check_SCIL_Nodes if assertions are enabled,
+ for efficiency.
+
+2009-07-28 Bob Duff <duff@adacore.com>
+
+ * exp_attr.adb (Expand_Access_To_Protected_Op): Use 'Access instead of
+ 'Address to get a pointer to the protected body wrapper.
+
+2009-07-28 Javier Miranda <miranda@adacore.com>
+
+ * gnat1drv.adb (Adjust_Global_Switches): Disable generation of SCIL
+ nodes if we are not generating code.
+ * frontend.adb (Check_SCIL_Node): New subprogram. Used to check
+ attribute SCIL_Related_Node of SCIL dispatching nodes.
+ (Check_SCIL_Nodes): New instantiation of Traverse_Proc.
+ * sinfo.ads (Is_SCIL_Node,Set_Is_SCIL_Node): Removed
+ (SCIL_Nkind,Set_SCIL_Nkind): Removed.
+ (SCIL_Entity): Update documentation.
+ (SCIL_Related_Node): Update documentation.
+ (SCIL_Controlling_Tag): New attribute.
+ (SCIL_Target_Prim): Update documentation.
+ (N_Null_Statement): Remove attributes associated with SCIL nodes.
+ (N_SCIL_Dispatch_Table_Object_Init): New node.
+ (N_SCIL_Dispatch_Table_Tag_Init): New node.
+ (N_SCIL_Dispatching_Call): New node.
+ (N_SCIL_Tag_Init): New node.
+ * sinfo.adb (Is_SCIL_Node,Set_Is_SCIL_Node): Removed
+ (SCIL_Nkind,Set_SCIL_Nkind): Removed.
+ (SCIL_Controlling_Tag/Set_SCIL_Controlling_Tag): New subprogram.
+ (SCIL_Entity,Set_SCIL_Entity): Applicable only to SCIL nodes.
+ (SCIL_Related_Node,Set_SCIL_Related_Node): Applicable only to SCIL nodes
+ (SCIL_Target_Prim,Set_SCIL_Target_Prim): Applicable only to
+ N_SCIL_Dispatching_Call nodes.
+ * sem.adb (Analyze): No need to analyze SCIL nodes.
+ * sem_aux.ads, sem_aux.adb (First_Non_SCIL_Node): New subprogram
+ (Next_Non_SCIL_Node): New subprogram
+ * sem_ch4.adb (Analyze_Type_Conversion): Adjust relocated SCIL
+ dispatching nodes.
+ * sem_ch5.adb (Analyze_Iteration_Scheme): Adjust relocated SCIL
+ dispatching node.
+ * sem_util.adb (Insert_Explicit_Dereference): Adjust relocated SCIL
+ dispatching node.
+ * exp_ch3.adb (Build_Array_Init_Proc): Skip SCIL nodes when processing
+ null statement nodes.
+ (Build_Init_Procedure): Generate new SCIL node.
+ * exp_ch4.adb (Expand_N_And_Then): Adjust relocated SCIL dispatching
+ node.
+ * exp_ch6.adb (Is_Null_Procedure): Skip SCIL nodes. Required because
+ they are currently implemented as special N_Null_Statement nodes.
+ * exp_ch7.adb (Wrap_Transient_Statement): If the relocated node is a
+ procedure call then check if some SCIL node references it and needs
+ readjustment.
+ * exp_disp.ads (SCIL_Node_Kind): Removed.
+ (Adjust_SCIL_Node): New subprogram.
+ (Find_SCIL_Node): New subprogram.
+ (Get_SCIL_Node_Kind): Removed.
+ (New_SCIL_Node): Removed.
+ * exp_disp.adb (Adjust_SCIL_Node): New subprogram
+ (Expand_Dispatching_Call): Generate new SCIL dispatching node including
+ decoration of its new controlling_tag attribute.
+ (Get_SCIL_Node_Kind): Removed.
+ (Find_SCIL_Node): New subprogram.
+ (Make_Secondary_DT): Generate new SCIL nodes.
+ (Make_Tags): Generate new SCIL nodes.
+ (New_SCIL_Node): Removed.
+ * exp_util.adb (Insert_Actions): Handle SCIL nodes.
+ (Remove_Side_Effects): Check if relocated nodes require readjustment
+ of some SCIL dispatching node.
+ * gcc-interface/trans.c (gnat_to_gnu): Do nothing with new SCIL nodes.
+
+2009-07-28 Robert Dewar <dewar@adacore.com>
+
+ * prj-nmsc.adb, g-expect.adb, prj.ads: Minor reformatting
+
+2009-07-28 Sergey Rybin <rybin@adacore.com>
+
+ * gnat_ugn.texi: Add section about gnatcheck rule exemption.
+
+2009-07-28 Vadim Godunko <godunko@adacore.com>
+
+ * s-oscons-tmplt.c: Define _XOPEN_SOURCE on Linux, otherwise IOV_MAX is
+ not defined by limits.h.
+
+ * g-socket.adb (Receive_Vector): Use minimum length from user's vector
+ length and maximum supported length of data vector.
+
+2009-07-28 Gary Dismukes <dismukes@adacore.com>
+
+ * usage.adb: Inhibit printing gcc-specific switches for AAMP target.
+ * make.adb: Call Get_Target_Parameters before calling Usage so that
+ VM_Target and AAMP_On_Target will be set.
+
+2009-07-28 Olivier Hainque <hainque@adacore.com>
+
+ * g-ssinty.ads: Remove, pointless and just confusing at this stage.
+ * gnat_rm.texi: Remove documentation.
+ * g-sse.ads: Minor reorg along the way.
+ * gcc-interface/Makefile.in: Remove processing for g-ssinty.
+ * g-ssvety.ads: Minor comment updates.
+
+2009-07-28 Sergey Rybin <rybin@adacore.com>
+
+ * gnat_ugn.texi: gnatcheck 'Format of the Report File' section - update
+ for the new format of the report file.
+
+2009-07-28 Sergey Rybin <rybin@adacore.com>
+
+ * gnat_ugn.texi: gnatcheck Deeply_Nested_Inlining rule: Update doc.
+
+2009-07-28 Pascal Obry <obry@adacore.com>
+
+ * g-expect.adb: Record standard handles only on Windows.
+
+2009-07-27 Emmanuel Briot <briot@adacore.com>
+
+ * prj.ads, prj-nmsc.adb (Override_Kind): add debug trace
+ Add comments.
+
+2009-07-27 Sergey Rybin <rybin@adacore.com>
+
+ * gnat_ugn.texi: gnatcheck Unconstrained_Array_Returns rule: Add to the
+ rule definition the paragraph that explains that generic functions and
+ functions from generic packages are not checked.
+
+2009-07-27 Gary Dismukes <dismukes@adacore.com>
+
+ * sem_ch6.adb (New_Overloaded_Entity): Add test for an expanded null
+ procedure when determining whether to set the Overridden_Operation
+ field of a subprogram overriding an inherited subprogram.
+
+2009-07-27 Robert Dewar <dewar@adacore.com>
+
+ * a-except.adb, a-except-2005.ads: Minor reformatting
+
+2009-07-27 Robert Dewar <dewar@adacore.com>
+
+ * sem_util.adb, sem_util.ads (Kill_Current_Values): Reset Is_Known_Valid
+
+2009-07-27 Javier Miranda <miranda@adacore.com>
+
+ * exp_disp.adb (Expand_Dispatching_Call): Reverse previous patch and
+ add some documentation explaining why the SCIL nodes must be generated
+ at that point.
+
+2009-07-27 Olivier Hainque <hainque@adacore.com>
+
+ * a-except.adb: Bind to __builtin_longjmp directly.
+ * a-except-2005.ads: Provide direct binding to __builtin_longjmp
+ for sjlj variants.
+ * a-exexpr.adb: Use it.
+ * a-except-xi.adb: Likewise.
+ * raise.c (_gnat_builtin_longjmp): Remove and update comments.
+ * raise.h (_gnat_builtin_longjmp): Remove declaration.
+
+2009-07-27 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_eval.adb (Compile_Time_Compare): More precise handling of
+ Known_Valid flag, to prevent spurious range deductions when scalar
+ variables may be uninitialized. New predicate Is_Known_Valid_Operand.
+
+2009-07-27 Robert Dewar <dewar@adacore.com>
+
+ * gnatfind.adb, osint.ads, sem.adb, xr_tabls.adb: Minor reformatting
+ and code clean up.
+
+2009-07-27 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_ch9.adb (Expand_N_Timed_Entry_Call): Do not attempt expansion in
+ Ravenscar mode. Error has already been posted on specification.
+
+ * sem.adb: Further code clean ups.
+
+2009-07-27 Robert Dewar <dewar@adacore.com>
+
+ * g-sse.ads: Minor reformatting
+
+2009-07-27 Arnaud Charlet <charlet@adacore.com>
+
+ * xref_lib.adb (Add_Xref_File_Internal, Find_ALI_Files): Add support for
+ alternate ali extension.
+ * xr_tabls.adb (ALI_File_Name, Get_File, Set_Unvisited): Take into
+ account Osint.ALI_Suffix.
+ * osint.ads (ALI_Suffix): Make visible.
+ * gnatfind.adb (Gnatfind): Add support for --ext= switch.
+ * gnat_ugn.texi: Document new gnatfind --ext= switch.
+
+2009-07-27 Ed Schonberg <schonberg@adacore.com>
+
+ * sem.adb (Walk_Library_Items): If main unit is an instance body, do
+ its spec first.
+
+2009-07-27 Javier Miranda <miranda@adacore.com>
+
+ * exp_disp.adb (Expand_Dispatching_Call): Generate the SCIL node after
+ the dispatching call has is expanded.
+
+2009-07-27 Ed Schonberg <schonberg@adacore.com>
+
+ * exp_attr.adb (Expand_Attribute_Reference, case 'Valid): Reset the
+ Is_Known_Valid flag on the temporary created for the value whose
+ validity is being checked.
+
+ * sem.adb (Do_Unit_And_Dependents): Further code reorganization to
+ handle properly main units that are package specifications.
+
+2009-07-27 Geert Bosch <bosch@adacore.com>
+
+ * einfo.ads (Checks_May_Be_Suppressed): Fix typo in comment
+ * sem_aux.ads: Fix typo in comment
+ * sem_util.ads (Is_LHS): Adjust comment to match body
+
+2009-07-27 Sergey Rybin <rybin@adacore.com>
+
+ * gnat_ugn.texi (gnatcheck Complex_Inlined_Subprograms rule): Update
+ rule definition.
+
+2009-07-27 Olivier Hainque <hainque@adacore.com>
+
+ * g-sse.ads, g-ssvety.ads: Update comments.
+
+2009-07-27 Sergey Rybin <rybin@adacore.com>
+
+ * gnat_ugn.texi: Update gnatcheck doc.
+
+2009-07-27 Arnaud Charlet <charlet@adacore.com>
+
+ * lib-xref.ads: Allocate/document 'o' char for use by references to
+ spark 'own' variables.
+
+2009-07-27 Gary Dismukes <dismukes@adacore.com>
+
+ * sem_ch6.adb (Analyze_Function_Return): Set Referenced on return
+ objects, since these are implicitly referenced by the return statement.
+ * sem_warn.adb (Warn_On_Unreferenced_Entity): No longer a need to test
+ Is_Return_Object in this procedure, as return objects will never make
+ it here since they're now marked as Referenced.
+
+2009-07-27 Robert Dewar <dewar@adacore.com>
+
+ * exp_ch2.adb, sem_util.adb, sem_util.ads: Minor reformnatting
+
+2009-07-27 Robert Dewar <dewar@adacore.com>
+
+ * exp_ch6.adb (Expand_Call): Reset Is_Known_Valid after call
+
+ * sem_ch3.adb, sem_eval.adb, sem_aux.adb: Minor comment reformatting
+
+2009-07-27 Geert Bosch <bosch@adacore.com>
+
+ * checks.adb (Find_Check): Minor streamlining of logic.
+ * gnat1drv.adb(Gnat1drv): Put Check_Rep_Info in its alphabetical order.
+ * debug.adb: Document -gnatdX debug flag
+ * exp_ch2.adb(Expand_Entity_Reference): Implement new -gnatdX flag to
+ list information about reads from scalar entities.
+ Also slightly simplify condition for Expand_Current_Value.
+ * sem_util.ads, sem_util.adb (Is_LHS, Is_Actual_Out_Parameter): New
+ functions.
+
+2009-07-26 Dave Korn <dave.korn.cygwin@gmail.com>
PR bootstrap/40578
* adaint.h (FOPEN, STAT, FSTAT, LSTAT, STRUCT_STAT): Rename from these
@@ -360,7 +755,7 @@
* vms_data.ads: Add entry for SCO_OUTPUT (-gnateS)
* gnat_ugn.texi: Add documentation for -gnateS switch
* ug_words: Add entry for -gnateS /SCO_OUTPUT
- * gcc-interface/Make-lang.in: Update dependenciest.3
+ * gcc-interface/Make-lang.in: Update dependencies.
* get_scos.adb, get_scos.ads, gnat1drv.adb, par_sco.adb,
par_sco.ads, put_scos.adb, put_scos.ads, scos.adb, scos.ads: Initial
diff --git a/gcc/ada/a-except-2005.ads b/gcc/ada/a-except-2005.ads
index 0b248ff9879..033244dcd92 100644
--- a/gcc/ada/a-except-2005.ads
+++ b/gcc/ada/a-except-2005.ads
@@ -50,6 +50,8 @@ with System.Parameters;
with System.Standard_Library;
with System.Traceback_Entries;
+with Ada.Unchecked_Conversion;
+
package Ada.Exceptions is
pragma Warnings (Off);
pragma Preelaborate_05;
@@ -113,7 +115,9 @@ package Ada.Exceptions is
-- 0xyyyyyyyy 0xyyyyyyyy ...
--
-- The lines are separated by a ASCII.LF character
- -- The nnnn is the partition Id given as decimal digits.
+ --
+ -- The nnnn is the partition Id given as decimal digits
+ --
-- The 0x... line represents traceback program counter locations,
-- in order with the first one being the exception location.
@@ -182,13 +186,13 @@ private
pragma Export
(Ada, Current_Target_Exception,
"__gnat_current_target_exception");
- -- This routine should return the current raised exception on targets
- -- which have built-in exception handling such as the Java Virtual
- -- Machine. For other targets this routine is simply ignored. Currently,
- -- only JGNAT uses this. See 4jexcept.ads for details. The pragma Export
- -- allows this routine to be accessed elsewhere in the run-time, even
- -- though it is in the private part of this package (it is not allowed
- -- to be in the visible part, since this is set by the reference manual).
+ -- This routine should return the current raised exception on targets which
+ -- have built-in exception handling such as the Java Virtual Machine. For
+ -- other targets this routine is simply ignored. Currently, only JGNAT
+ -- uses this. See 4jexcept.ads for details. The pragma Export allows this
+ -- routine to be accessed elsewhere in the run-time, even though it is in
+ -- the private part of this package (it is not allowed to be in the visible
+ -- part, since this is set by the reference manual).
function Exception_Name_Simple (X : Exception_Occurrence) return String;
-- Like Exception_Name, but returns the simple non-qualified name of the
@@ -228,8 +232,8 @@ private
procedure Raise_From_Controlled_Operation
(X : Ada.Exceptions.Exception_Occurrence);
pragma No_Return (Raise_From_Controlled_Operation);
- -- Raise Program_Error, providing information about X (an exception
- -- raised during a controlled operation) in the exception message.
+ -- Raise Program_Error, providing information about X (an exception raised
+ -- during a controlled operation) in the exception message.
procedure Reraise_Occurrence_Always (X : Exception_Occurrence);
pragma No_Return (Reraise_Occurrence_Always);
@@ -242,8 +246,8 @@ private
pragma No_Return (Reraise_Occurrence_No_Defer);
-- Exactly like Reraise_Occurrence, except that abort is not deferred
-- before the call and the parameter X is known not to be the null
- -- occurrence. This is used in generated code when it is known that
- -- abort is already deferred.
+ -- occurrence. This is used in generated code when it is known that abort
+ -- is already deferred.
-----------------------
-- Polling Interface --
@@ -285,6 +289,7 @@ private
type Exception_Occurrence is record
Id : Exception_Id;
-- Exception_Identity for this exception occurrence
+ --
-- WARNING System.System.Finalization_Implementation.Finalize_List
-- relies on the fact that this field is always first in the exception
-- occurrence
@@ -348,4 +353,18 @@ private
Tracebacks => (others => TBE.Null_TB_Entry),
Private_Data => System.Null_Address);
+ -- Common binding to __builtin_longjmp for sjlj variants.
+
+ -- The builtin expects a pointer type for the jmpbuf address argument, and
+ -- System.Address doesn't work because this is really an integer type.
+
+ type Jmpbuf_Address is access Character;
+
+ function To_Jmpbuf_Address is new
+ Ada.Unchecked_Conversion (System.Address, Jmpbuf_Address);
+
+ procedure builtin_longjmp (buffer : Jmpbuf_Address; Flag : Integer);
+ pragma No_Return (builtin_longjmp);
+ pragma Import (Intrinsic, builtin_longjmp, "__builtin_longjmp");
+
end Ada.Exceptions;
diff --git a/gcc/ada/a-except.adb b/gcc/ada/a-except.adb
index cf04fd46f3e..c9fe38b466e 100644
--- a/gcc/ada/a-except.adb
+++ b/gcc/ada/a-except.adb
@@ -57,9 +57,9 @@ with System.Soft_Links; use System.Soft_Links;
package body Ada.Exceptions is
pragma Suppress (All_Checks);
- -- We definitely do not want exceptions occurring within this unit, or
- -- we are in big trouble. If an exceptional situation does occur, better
- -- that it not be raised, since raising it can cause confusing chaos.
+ -- We definitely do not want exceptions occurring within this unit, or we
+ -- are in big trouble. If an exceptional situation does occur, better that
+ -- it not be raised, since raising it can cause confusing chaos.
-----------------------
-- Local Subprograms --
@@ -77,14 +77,14 @@ package body Ada.Exceptions is
procedure To_Stderr (S : String);
pragma Export (Ada, To_Stderr, "__gnat_to_stderr");
- -- Little routine to output string to stderr that is also used
- -- in the tasking run time.
+ -- Little routine to output string to stderr that is also used in the
+ -- tasking run time.
procedure To_Stderr (C : Character);
pragma Inline (To_Stderr);
pragma Export (Ada, To_Stderr, "__gnat_to_stderr_char");
- -- Little routine to output a character to stderr, used by some of
- -- the separate units below.
+ -- Little routine to output a character to stderr, used by some of the
+ -- separate units below.
package Exception_Data is
@@ -109,9 +109,9 @@ package body Ada.Exceptions is
(Id : Exception_Id;
Message : String);
-- This routine is called to setup the exception referenced by the
- -- Current_Excep field in the TSD to contain the indicated Id value
- -- and message. Message is a string which is generated as the
- -- exception message.
+ -- Current_Excep field in the TSD to contain the indicated Id value and
+ -- message. Message is a string which is generated as the exception
+ -- message.
--------------------------------------
-- Exception information subprogram --
@@ -126,18 +126,20 @@ package body Ada.Exceptions is
-- Call stack traceback locations: (only if at least one location)
-- <0xyyyyyyyy 0xyyyyyyyy ...> (is recorded)
--
- -- The lines are separated by a ASCII.LF character.
- -- The nnnn is the partition Id given as decimal digits.
+ -- The lines are separated by a ASCII.LF character
+ --
+ -- The nnnn is the partition Id given as decimal digits
+ --
-- The 0x... line represents traceback program counter locations, in
-- execution order with the first one being the exception location. It
-- is present only
--
- -- The Exception_Name and Message lines are omitted in the abort
- -- signal case, since this is not really an exception.
+ -- The Exception_Name and Message lines are omitted in the abort signal
+ -- case, since this is not really an exception.
- -- !! If the format of the generated string is changed, please note
- -- !! that an equivalent modification to the routine String_To_EO must
- -- !! be made to preserve proper functioning of the stream attributes.
+ -- Note: If the format of the generated string is changed, please note
+ -- that an equivalent modification to the routine String_To_EO must be
+ -- made to preserve proper functioning of the stream attributes.
---------------------------------------
-- Exception backtracing subprograms --
@@ -198,11 +200,11 @@ package body Ada.Exceptions is
procedure Unhandled_Exception_Terminate;
pragma No_Return (Unhandled_Exception_Terminate);
- -- This procedure is called to terminate execution following an
- -- unhandled exception. The exception information, including
- -- traceback if available is output, and execution is then
- -- terminated. Note that at the point where this routine is
- -- called, the stack has typically been destroyed.
+ -- This procedure is called to terminate program execution following an
+ -- unhandled exception. The exception information, including traceback
+ -- if available is output, and execution is then terminated. Note that
+ -- at the point where this routine is called, the stack has typically
+ -- been destroyed.
end Exception_Traces;
@@ -253,10 +255,10 @@ package body Ada.Exceptions is
procedure Raise_With_Msg (E : Exception_Id);
pragma No_Return (Raise_With_Msg);
pragma Export (C, Raise_With_Msg, "__gnat_raise_with_msg");
- -- Raises an exception with given exception id value. A message
- -- is associated with the raise, and has already been stored in the
- -- exception occurrence referenced by the Current_Excep in the TSD.
- -- Abort is deferred before the raise call.
+ -- Raises an exception with given exception id value. A message is
+ -- associated with the raise, and has already been stored in the exception
+ -- occurrence referenced by the Current_Excep in the TSD. Abort is deferred
+ -- before the raise call.
procedure Raise_With_Location_And_Msg
(E : Exception_Id;
@@ -266,8 +268,8 @@ package body Ada.Exceptions is
pragma No_Return (Raise_With_Location_And_Msg);
-- Raise an exception with given exception id value. A filename and line
-- number is associated with the raise and is stored in the exception
- -- occurrence and in addition a string message M is appended to
- -- this (if M is not null).
+ -- occurrence and in addition a string message M is appended to this
+ -- if M is not null.
procedure Raise_Constraint_Error
(File : System.Address;
@@ -344,9 +346,9 @@ package body Ada.Exceptions is
procedure Reraise;
pragma No_Return (Reraise);
pragma Export (C, Reraise, "__gnat_reraise");
- -- Reraises the exception referenced by the Current_Excep field of
- -- the TSD (all fields of this exception occurrence are set). Abort
- -- is deferred before the reraise operation.
+ -- Reraises the exception referenced by the Current_Excep field of the TSD
+ -- (all fields of this exception occurrence are set). Abort is deferred
+ -- before the reraise operation.
-- Save_Occurrence variations: As the management of the private data
-- attached to occurrences is delicate, whether or not pointers to such
@@ -373,11 +375,10 @@ package body Ada.Exceptions is
-- Run-Time Check Routines --
-----------------------------
- -- These routines raise a specific exception with a reason message
- -- attached. The parameters are the file name and line number in each
- -- case. The names are keyed to the codes defined in types.ads and
- -- a-types.h (for example, the name Rcheck_05 refers to the Reason
- -- RT_Exception_Code'Val (5)).
+ -- Routines to a specific exception with a reason message attached. The
+ -- parameters are the file name and line number in each case. The names are
+ -- keyed to the codes defined in types.ads and a-types.h (for example, the
+ -- name Rcheck_05 refers to the Reason RT_Exception_Code'Val (5)).
procedure Rcheck_00 (File : System.Address; Line : Integer);
procedure Rcheck_01 (File : System.Address; Line : Integer);
@@ -546,8 +547,8 @@ package body Ada.Exceptions is
-- perform periodic but not systematic operations.
procedure Poll is separate;
- -- The actual polling routine is separate, so that it can easily
- -- be replaced with a target dependent version.
+ -- The actual polling routine is separate, so that it can easily be
+ -- replaced with a target dependent version.
------------------------------
-- Current_Target_Exception --
@@ -569,8 +570,8 @@ package body Ada.Exceptions is
-- EO_To_String --
------------------
- -- We use the null string to represent the null occurrence, otherwise
- -- we output the Exception_Information string for the occurrence.
+ -- We use the null string to represent the null occurrence, otherwise we
+ -- output the Exception_Information string for the occurrence.
function EO_To_String (X : Exception_Occurrence) return String
renames Stream_Attributes.EO_To_String;
@@ -583,9 +584,9 @@ package body Ada.Exceptions is
(X : Exception_Occurrence) return Exception_Id
is
begin
- -- Note that the following test used to be here for the original
- -- Ada 95 semantics, but these were modified by AI-241 to require
- -- returning Null_Id instead of raising Constraint_Error.
+ -- Note that the following test used to be here for the original Ada 95
+ -- semantics, but these were modified by AI-241 to require returning
+ -- Null_Id instead of raising Constraint_Error.
-- if X.Id = Null_Id then
-- raise Constraint_Error;
@@ -667,8 +668,8 @@ package body Ada.Exceptions is
--------------------
package body Exception_Data is separate;
- -- This package can be easily dummied out if we do not want the
- -- basic support for exception messages (such as in Ada 83).
+ -- This package can be easily dummied out if we do not want the basic
+ -- support for exception messages (such as in Ada 83).
package body Exception_Propagation is
@@ -691,10 +692,10 @@ package body Ada.Exceptions is
----------------------
package body Exception_Traces is separate;
- -- Depending on the underlying support for IO the implementation
- -- will differ. Moreover we would like to dummy out this package
- -- in case we do not want any exception tracing support. This is
- -- why this package is separated.
+ -- Depending on the underlying support for IO the implementation will
+ -- differ. Moreover we would like to dummy out this package in case we do
+ -- not want any exception tracing support. This is why this package is
+ -- separated.
-----------------------
-- Stream Attributes --
@@ -720,17 +721,17 @@ package body Ada.Exceptions is
pragma Import (C, builtin_longjmp, "_gnat_builtin_longjmp");
begin
- -- WARNING: There should be no exception handler for this body
- -- because this would cause gigi to prepend a setup for a new
- -- jmpbuf to the sequence of statements in case of built-in sjljl.
- -- We would then always get this new buf in Jumpbuf_Ptr instead of the
- -- one for the exception we are handling, which would completely break
- -- the whole design of this procedure.
+ -- WARNING: There should be no exception handler for this body because
+ -- this would cause gigi to prepend a setup for a new jmpbuf to the
+ -- sequence of statements in case of built-in sjljl. We would then
+ -- always get this new buf in Jumpbuf_Ptr instead of the one for the
+ -- exception we are handling, which would completely break the whole
+ -- design of this procedure.
- -- If the jump buffer pointer is non-null, transfer control using
- -- it. Otherwise announce an unhandled exception (note that this
- -- means that we have no finalizations to do other than at the outer
- -- level). Perform the necessary notification tasks in both cases.
+ -- If the jump buffer pointer is non-null, transfer control using it.
+ -- Otherwise announce an unhandled exception (note that this means that
+ -- we have no finalizations to do other than at the outer level).
+ -- Perform the necessary notification tasks in both cases.
if Jumpbuf_Ptr /= Null_Address then
if not Excep.Exception_Raised then
@@ -1251,9 +1252,9 @@ package body Ada.Exceptions is
begin
-- Setup Target as an exception to be propagated in the calling task
-- (rendezvous-wise), taking care not to clobber the associated private
- -- data. Target is expected to be a pointer to the calling task's
- -- fixed TSD occurrence, which is very different from Get_Current_Excep
- -- here because this subprogram is called from the called task.
+ -- data. Target is expected to be a pointer to the calling task's fixed
+ -- TSD occurrence, which is very different from Get_Current_Excep here
+ -- because this subprogram is called from the called task.
Save_Occurrence_No_Private (Target.all, Source);
end Transfer_Occurrence;
@@ -1293,7 +1294,6 @@ package body Ada.Exceptions is
---------------
procedure To_Stderr (C : Character) is
-
type int is new Integer;
procedure put_char_stderr (C : int);
diff --git a/gcc/ada/a-exexpr.adb b/gcc/ada/a-exexpr.adb
index 13b7d798328..e3ae5b01cff 100644
--- a/gcc/ada/a-exexpr.adb
+++ b/gcc/ada/a-exexpr.adb
@@ -41,10 +41,6 @@ pragma Warnings (Off);
separate (Ada.Exceptions)
package body Exception_Propagation is
- procedure builtin_longjmp (buffer : Address; Flag : Integer);
- pragma No_Return (builtin_longjmp);
- pragma Import (C, builtin_longjmp, "_gnat_builtin_longjmp");
-
---------------------
-- Setup_Exception --
---------------------
@@ -114,7 +110,7 @@ package body Exception_Propagation is
Exception_Traces.Notify_Handled_Exception;
end if;
- builtin_longjmp (Jumpbuf_Ptr, 1);
+ builtin_longjmp (To_Jmpbuf_Address (Jumpbuf_Ptr), 1);
else
Exception_Traces.Notify_Unhandled_Exception;
diff --git a/gcc/ada/a-teioed.adb b/gcc/ada/a-teioed.adb
index e2408a45194..cfe64c3b64e 100644
--- a/gcc/ada/a-teioed.adb
+++ b/gcc/ada/a-teioed.adb
@@ -71,16 +71,16 @@ package body Ada.Text_IO.Editing is
case Picture (Picture_Index) is
when '(' =>
- Int_IO.Get (Picture (Picture_Index + 1 .. Picture'Last),
- Count, Last);
+ Int_IO.Get
+ (Picture (Picture_Index + 1 .. Picture'Last), Count, Last);
if Picture (Last + 1) /= ')' then
raise Picture_Error;
end if;
- -- In what follows note that one copy of the repeated
- -- character has already been made, so a count of one is a
- -- no-op, and a count of zero erases a character.
+ -- In what follows note that one copy of the repeated character
+ -- has already been made, so a count of one is a no-op, and a
+ -- count of zero erases a character.
if Result_Index + Count - 2 > Result'Last then
raise Picture_Error;
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 19bbf7075ee..c3405daaf44 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -3502,7 +3502,7 @@ __gnat_set_close_on_exec (int fd ATTRIBUTE_UNUSED,
return -1;
if (close_on_exec_p)
return ! SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0);
- return ! SetHandleInformation (h, HANDLE_FLAG_INHERIT,
+ return ! SetHandleInformation (h, HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT);
#else
/* TODO: Unimplemented. */
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index 471b5ab6b03..79a1e4eb4bd 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -43,10 +43,9 @@
#define Encoding_8bits 1 /* Standard 8bits, CP_ACP on Windows. */
#define Encoding_Unspecified 2 /* Based on GNAT_CODE_PAGE env variable. */
-/* Large file support. It is unclear what portable mechanism we can
- use to determine at compile time what support the system offers for
- large files. For now we just list the platforms we have manually
- tested. */
+/* Large file support. It is unclear what portable mechanism we can use to
+ determine at compile time what support the system offers for large files.
+ For now we just list the platforms we have manually tested. */
#if defined (__GLIBC__) || defined (sun) || defined (__sgi)
#define GNAT_FOPEN fopen64
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index e39e3e079a6..d1a2b460c90 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -4254,7 +4254,7 @@ package body Checks is
-- Start of processing for Find_Check
begin
- -- Establish default, to avoid warnings from GCC
+ -- Establish default, in case no entry is found
Check_Num := 0;
@@ -4325,7 +4325,6 @@ package body Checks is
-- If we fall through entry was not found
- Check_Num := 0;
return;
end Find_Check;
diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb
index baa04293cd1..f60a67b5b40 100644
--- a/gcc/ada/debug.adb
+++ b/gcc/ada/debug.adb
@@ -87,7 +87,7 @@ package body Debug is
-- dU Enable garbage collection of unreachable entities
-- dV Enable viewing of all symbols in debugger
-- dW Disable warnings on calls for IN OUT parameters
- -- dX
+ -- dX Display messages on reads of potentially uninitialized scalars
-- dY Enable configurable run-time mode
-- dZ Generate listing showing the contents of the dispatch tables
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index 7a17efd9f7a..6330dec57f2 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -491,7 +491,7 @@ package Einfo is
-- Present in all entities. Set if a pragma Suppress or Unsuppress
-- mentions the entity specifically in the second argument. If this
-- flag is set the Global_Entity_Suppress and Local_Entity_Suppress
--- tables must be consulted to determine if the is actually an active
+-- tables must be consulted to determine if there actually is an active
-- Suppress or Unsuppress pragma that applies to the entity.
-- Class_Wide_Type (Node9)
@@ -3192,7 +3192,7 @@ package Einfo is
-- the case of an appearance of a simple variable that is not a renaming
-- as the left side of an assignment in which case Referenced_As_LHS is
-- set instead, or a similar appearance as an out parameter actual, in
--- which case As_Out_Parameter_Parameter is set.
+-- which case Referenced_As_Out_Parameter is set.
-- Referenced_As_LHS (Flag36):
-- Present in all entities. This flag is set instead of Referenced if a
diff --git a/gcc/ada/exp_atag.adb b/gcc/ada/exp_atag.adb
index c94b319ecc0..314258c3070 100644
--- a/gcc/ada/exp_atag.adb
+++ b/gcc/ada/exp_atag.adb
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2006-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 2006-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -227,12 +227,22 @@ package body Exp_Atag is
-- Build_Get_Predefined_Prim_Op_Address --
------------------------------------------
- function Build_Get_Predefined_Prim_Op_Address
+ procedure Build_Get_Predefined_Prim_Op_Address
(Loc : Source_Ptr;
- Tag_Node : Node_Id;
- Position : Uint) return Node_Id
+ Position : Uint;
+ Tag_Node : in out Node_Id;
+ New_Node : out Node_Id)
is
+ Ctrl_Tag : Node_Id;
+
begin
+ Ctrl_Tag := Unchecked_Convert_To (RTE (RE_Address), Tag_Node);
+
+ -- Unchecked_Convert_To relocates the controlling tag node and therefore
+ -- we must update it.
+
+ Tag_Node := Expression (Ctrl_Tag);
+
-- Build code that retrieves the address of the dispatch table
-- containing the predefined Ada primitives:
--
@@ -240,7 +250,7 @@ package body Exp_Atag is
-- To_Predef_Prims_Table_Ptr
-- (To_Addr_Ptr (To_Address (Tag) - Predef_Prims_Offset).all);
- return
+ New_Node :=
Make_Indexed_Component (Loc,
Prefix =>
Unchecked_Convert_To (RTE (RE_Predef_Prims_Table_Ptr),
@@ -257,7 +267,7 @@ package body Exp_Atag is
Make_Identifier (Loc,
Chars => Name_Op_Subtract)),
Parameter_Associations => New_List (
- Unchecked_Convert_To (RTE (RE_Address), Tag_Node),
+ Ctrl_Tag,
New_Reference_To (RTE (RE_DT_Predef_Prims_Offset),
Loc)))))),
Expressions =>
@@ -337,12 +347,15 @@ package body Exp_Atag is
-- Build_Get_Prim_Op_Address --
-------------------------------
- function Build_Get_Prim_Op_Address
+ procedure Build_Get_Prim_Op_Address
(Loc : Source_Ptr;
Typ : Entity_Id;
- Tag_Node : Node_Id;
- Position : Uint) return Node_Id
+ Position : Uint;
+ Tag_Node : in out Node_Id;
+ New_Node : out Node_Id)
is
+ New_Prefix : Node_Id;
+
begin
pragma Assert
(Position <= DT_Entry_Count (First_Tag_Component (Typ)));
@@ -351,11 +364,18 @@ package body Exp_Atag is
-- declaration required to convert the tag into a pointer to
-- the prims_ptr table (see Freeze_Record_Type).
- return
+ New_Prefix :=
+ Unchecked_Convert_To
+ (Node (Last_Elmt (Access_Disp_Table (Typ))), Tag_Node);
+
+ -- Unchecked_Convert_To relocates the controlling tag node and therefore
+ -- we must update it.
+
+ Tag_Node := Expression (New_Prefix);
+
+ New_Node :=
Make_Indexed_Component (Loc,
- Prefix =>
- Unchecked_Convert_To
- (Node (Last_Elmt (Access_Disp_Table (Typ))), Tag_Node),
+ Prefix => New_Prefix,
Expressions => New_List (Make_Integer_Literal (Loc, Position)));
end Build_Get_Prim_Op_Address;
@@ -482,11 +502,15 @@ package body Exp_Atag is
Position : Uint;
Address_Node : Node_Id) return Node_Id
is
+ Ctrl_Tag : Node_Id := Tag_Node;
+ New_Node : Node_Id;
+
begin
+ Build_Get_Prim_Op_Address (Loc, Typ, Position, Ctrl_Tag, New_Node);
+
return
Make_Assignment_Statement (Loc,
- Name => Build_Get_Prim_Op_Address
- (Loc, Typ, Tag_Node, Position),
+ Name => New_Node,
Expression => Address_Node);
end Build_Set_Prim_Op_Address;
diff --git a/gcc/ada/exp_atag.ads b/gcc/ada/exp_atag.ads
index 2ac42a9d254..42ec4769c38 100644
--- a/gcc/ada/exp_atag.ads
+++ b/gcc/ada/exp_atag.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2006-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 2006-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -61,23 +61,26 @@ package Exp_Atag is
--
-- Generates: TSD (Tag).Access_Level
- function Build_Get_Predefined_Prim_Op_Address
+ procedure Build_Get_Predefined_Prim_Op_Address
(Loc : Source_Ptr;
- Tag_Node : Node_Id;
- Position : Uint) return Node_Id;
+ Position : Uint;
+ Tag_Node : in out Node_Id;
+ New_Node : out Node_Id);
-- Given a pointer to a dispatch table (T) and a position in the DT, build
-- code that gets the address of the predefined virtual function stored in
- -- it (used for dispatching calls).
+ -- it (used for dispatching calls). Tag_Node is relocated.
--
-- Generates: Predefined_DT (Tag).D (Position);
- function Build_Get_Prim_Op_Address
+ procedure Build_Get_Prim_Op_Address
(Loc : Source_Ptr;
Typ : Entity_Id;
- Tag_Node : Node_Id;
- Position : Uint) return Node_Id;
+ Position : Uint;
+ Tag_Node : in out Node_Id;
+ New_Node : out Node_Id);
-- Build code that retrieves the address of the virtual function stored in
-- a given position of the dispatch table (used for dispatching calls).
+ -- Tag_Node is relocated.
--
-- Generates: To_Tag (Tag).D (Position);
diff --git a/gcc/ada/exp_attr.adb b/gcc/ada/exp_attr.adb
index 2df553c4585..d5cce9b43ee 100644
--- a/gcc/ada/exp_attr.adb
+++ b/gcc/ada/exp_attr.adb
@@ -235,6 +235,7 @@ package body Exp_Attr is
Agg : Node_Id;
Btyp : constant Entity_Id := Base_Type (Typ);
Sub : Entity_Id;
+ Sub_Ref : Node_Id;
E_T : constant Entity_Id := Equivalent_Type (Btyp);
Acc : constant Entity_Id :=
Etype (Next_Component (First_Component (E_T)));
@@ -355,23 +356,27 @@ package body Exp_Attr is
Attribute_Name => Name_Address);
end if;
+ Sub_Ref :=
+ Make_Attribute_Reference (Loc,
+ Prefix => Sub,
+ Attribute_Name => Name_Access);
+
+ -- We set the type of the access reference to the already generated
+ -- access_to_subprogram type, and declare the reference analyzed, to
+ -- prevent further expansion when the enclosing aggregate is analyzed.
+
+ Set_Etype (Sub_Ref, Acc);
+ Set_Analyzed (Sub_Ref);
+
Agg :=
Make_Aggregate (Loc,
- Expressions =>
- New_List (
- Obj_Ref,
- Unchecked_Convert_To (Acc,
- Make_Attribute_Reference (Loc,
- Prefix => Sub,
- Attribute_Name => Name_Address))));
+ Expressions => New_List (Obj_Ref, Sub_Ref));
Rewrite (N, Agg);
-
Analyze_And_Resolve (N, E_T);
- -- For subsequent analysis, the node must retain its type.
- -- The backend will replace it with the equivalent type where
- -- needed.
+ -- For subsequent analysis, the node must retain its type. The backend
+ -- will replace it with the equivalent type where needed.
Set_Etype (N, Typ);
end Expand_Access_To_Protected_Op;
@@ -4682,13 +4687,23 @@ package body Exp_Attr is
---------------------
function Make_Range_Test return Node_Id is
+ Temp : constant Node_Id := Duplicate_Subexpr (Pref);
+
begin
+ -- The value whose validity is being checked has been captured in
+ -- an object declaration. We certainly don't want this object to
+ -- appear valid because the declaration initializes it!
+
+ if Is_Entity_Name (Temp) then
+ Set_Is_Known_Valid (Entity (Temp), False);
+ end if;
+
return
Make_And_Then (Loc,
Left_Opnd =>
Make_Op_Ge (Loc,
Left_Opnd =>
- Unchecked_Convert_To (Btyp, Duplicate_Subexpr (Pref)),
+ Unchecked_Convert_To (Btyp, Temp),
Right_Opnd =>
Unchecked_Convert_To (Btyp,
@@ -4699,8 +4714,7 @@ package body Exp_Attr is
Right_Opnd =>
Make_Op_Le (Loc,
Left_Opnd =>
- Unchecked_Convert_To (Btyp,
- Duplicate_Subexpr_No_Checks (Pref)),
+ Unchecked_Convert_To (Btyp, Temp),
Right_Opnd =>
Unchecked_Convert_To (Btyp,
diff --git a/gcc/ada/exp_ch2.adb b/gcc/ada/exp_ch2.adb
index 5d1822d1859..e0be4042f11 100644
--- a/gcc/ada/exp_ch2.adb
+++ b/gcc/ada/exp_ch2.adb
@@ -24,6 +24,7 @@
------------------------------------------------------------------------------
with Atree; use Atree;
+with Debug; use Debug;
with Einfo; use Einfo;
with Elists; use Elists;
with Errout; use Errout;
@@ -34,12 +35,14 @@ with Exp_VFpt; use Exp_VFpt;
with Namet; use Namet;
with Nmake; use Nmake;
with Opt; use Opt;
+with Output; use Output;
with Sem; use Sem;
with Sem_Eval; use Sem_Eval;
with Sem_Res; use Sem_Res;
with Sem_Util; use Sem_Util;
with Sem_Warn; use Sem_Warn;
with Sinfo; use Sinfo;
+with Sinput; use Sinput;
with Snames; use Snames;
with Tbuild; use Tbuild;
with Uintp; use Uintp;
@@ -370,13 +373,34 @@ package body Exp_Ch2 is
Expand_Shared_Passive_Variable (N);
end if;
+ -- Test code for implementing the pragma Reviewable requirement of
+ -- classifying reads of scalars as referencing potentially uninitialized
+ -- objects or not.
+
+ if Debug_Flag_XX
+ and then Is_Scalar_Type (Etype (N))
+ and then (Is_Assignable (E) or else Is_Constant_Object (E))
+ and then Comes_From_Source (N)
+ and then not Is_LHS (N)
+ and then not Is_Actual_Out_Parameter (N)
+ and then (Nkind (Parent (N)) /= N_Attribute_Reference
+ or else Attribute_Name (Parent (N)) /= Name_Valid)
+ then
+ Write_Location (Sloc (N));
+ Write_Str (": Read from scalar """);
+ Write_Name (Chars (N));
+ Write_Str ("""");
+
+ if Is_Known_Valid (E) then
+ Write_Str (", Is_Known_Valid");
+ end if;
+
+ Write_Eol;
+ end if;
+
-- Interpret possible Current_Value for variable case
- if (Ekind (E) = E_Variable
- or else
- Ekind (E) = E_In_Out_Parameter
- or else
- Ekind (E) = E_Out_Parameter)
+ if Is_Assignable (E)
and then Present (Current_Value (E))
then
Expand_Current_Value (N);
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index e8b46e55e60..c0861e30890 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -59,6 +59,7 @@ with Sem_Disp; use Sem_Disp;
with Sem_Eval; use Sem_Eval;
with Sem_Mech; use Sem_Mech;
with Sem_Res; use Sem_Res;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Type; use Sem_Type;
with Sem_Util; use Sem_Util;
with Sinfo; use Sinfo;
@@ -752,7 +753,11 @@ package body Exp_Ch3 is
Set_Init_Proc (A_Type, Proc_Id);
if List_Length (Body_Stmts) = 1
- and then Nkind (First (Body_Stmts)) = N_Null_Statement
+
+ -- We must skip SCIL nodes because they may have been added to this
+ -- list by Insert_Actions.
+
+ and then Nkind (First_Non_SCIL_Node (Body_Stmts)) = N_Null_Statement
then
Set_Is_Null_Init_Proc (Proc_Id);
@@ -763,7 +768,7 @@ package body Exp_Ch3 is
Set_Static_Initialization
(Proc_Id,
- Build_Equivalent_Array_Aggregate (First_Subtype (A_Type)));
+ Build_Equivalent_Array_Aggregate (First_Subtype (A_Type)));
end if;
end if;
end Build_Array_Init_Proc;
@@ -1939,6 +1944,7 @@ package body Exp_Ch3 is
D := First_Discriminant (Rec_Type);
while Present (D) loop
+
-- Don't generate the assignment for discriminants in derived
-- tagged types if the discriminant is a renaming of some
-- ancestor discriminant. This initialization will be done
@@ -2330,11 +2336,16 @@ package body Exp_Ch3 is
-- the tag component.
if Generate_SCIL then
- Prepend_To (Init_Tags_List,
- New_SCIL_Node
- (SN_Kind => IP_Tag_Init,
- Related_Node => First (Init_Tags_List),
- Entity => Rec_Type));
+ declare
+ New_Node : Node_Id;
+
+ begin
+ New_Node :=
+ Make_SCIL_Tag_Init (Sloc (First (Init_Tags_List)));
+ Set_SCIL_Related_Node (New_Node, First (Init_Tags_List));
+ Set_SCIL_Entity (New_Node, Rec_Type);
+ Prepend_To (Init_Tags_List, New_Node);
+ end;
end if;
-- Ada 2005 (AI-251): Initialize the secondary tags components
@@ -2496,7 +2507,11 @@ package body Exp_Ch3 is
Set_Init_Proc (Rec_Type, Proc_Id);
if List_Length (Body_Stmts) = 1
- and then Nkind (First (Body_Stmts)) = N_Null_Statement
+
+ -- We must skip SCIL nodes because they may have been added to this
+ -- list by Insert_Actions.
+
+ and then Nkind (First_Non_SCIL_Node (Body_Stmts)) = N_Null_Statement
and then VM_Target = No_VM
then
-- Even though the init proc may be null at this time it might get
@@ -5602,105 +5617,6 @@ package body Exp_Ch3 is
-------------------------------
procedure Expand_Freeze_Record_Type (N : Node_Id) is
-
- procedure Add_Internal_Interface_Entities (Tagged_Type : Entity_Id);
- -- Add to the list of primitives of Tagged_Types the internal entities
- -- associated with interface primitives that are located in secondary
- -- dispatch tables.
-
- -------------------------------------
- -- Add_Internal_Interface_Entities --
- -------------------------------------
-
- procedure Add_Internal_Interface_Entities (Tagged_Type : Entity_Id) is
- Elmt : Elmt_Id;
- Iface : Entity_Id;
- Iface_Elmt : Elmt_Id;
- Iface_Prim : Entity_Id;
- Ifaces_List : Elist_Id;
- New_Subp : Entity_Id := Empty;
- Prim : Entity_Id;
-
- begin
- pragma Assert (Ada_Version >= Ada_05
- and then Is_Record_Type (Tagged_Type)
- and then Is_Tagged_Type (Tagged_Type)
- and then Has_Interfaces (Tagged_Type)
- and then not Is_Interface (Tagged_Type));
-
- Collect_Interfaces (Tagged_Type, Ifaces_List);
-
- Iface_Elmt := First_Elmt (Ifaces_List);
- while Present (Iface_Elmt) loop
- Iface := Node (Iface_Elmt);
-
- -- Exclude from this processing interfaces that are parents
- -- of Tagged_Type because their primitives are located in the
- -- primary dispatch table (and hence no auxiliary internal
- -- entities are required to handle secondary dispatch tables
- -- in such case).
-
- if not Is_Ancestor (Iface, Tagged_Type) then
- Elmt := First_Elmt (Primitive_Operations (Iface));
- while Present (Elmt) loop
- Iface_Prim := Node (Elmt);
-
- if not Is_Predefined_Dispatching_Operation (Iface_Prim) then
- Prim :=
- Find_Primitive_Covering_Interface
- (Tagged_Type => Tagged_Type,
- Iface_Prim => Iface_Prim);
-
- pragma Assert (Present (Prim));
-
- Derive_Subprogram
- (New_Subp => New_Subp,
- Parent_Subp => Iface_Prim,
- Derived_Type => Tagged_Type,
- Parent_Type => Iface);
-
- -- Ada 2005 (AI-251): Decorate internal entity Iface_Subp
- -- associated with interface types. These entities are
- -- only registered in the list of primitives of its
- -- corresponding tagged type because they are only used
- -- to fill the contents of the secondary dispatch tables.
- -- Therefore they are removed from the homonym chains.
-
- Set_Is_Hidden (New_Subp);
- Set_Is_Internal (New_Subp);
- Set_Alias (New_Subp, Prim);
- Set_Is_Abstract_Subprogram (New_Subp,
- Is_Abstract_Subprogram (Prim));
- Set_Interface_Alias (New_Subp, Iface_Prim);
-
- -- Internal entities associated with interface types are
- -- only registered in the list of primitives of the
- -- tagged type. They are only used to fill the contents
- -- of the secondary dispatch tables. Therefore they are
- -- not needed in the homonym chains.
-
- Remove_Homonym (New_Subp);
-
- -- Hidden entities associated with interfaces must have
- -- set the Has_Delay_Freeze attribute to ensure that, in
- -- case of locally defined tagged types (or compiling
- -- with static dispatch tables generation disabled) the
- -- corresponding entry of the secondary dispatch table is
- -- filled when such entity is frozen.
-
- Set_Has_Delayed_Freeze (New_Subp);
- end if;
-
- Next_Elmt (Elmt);
- end loop;
- end if;
-
- Next_Elmt (Iface_Elmt);
- end loop;
- end Add_Internal_Interface_Entities;
-
- -- Local variables
-
Def_Id : constant Node_Id := Entity (N);
Type_Decl : constant Node_Id := Parent (Def_Id);
Comp : Entity_Id;
@@ -5933,17 +5849,6 @@ package body Exp_Ch3 is
Insert_Actions (N, Null_Proc_Decl_List);
end if;
- -- Ada 2005 (AI-251): Add internal entities associated with
- -- secondary dispatch tables to the list of primitives of tagged
- -- types that are not interfaces
-
- if Ada_Version >= Ada_05
- and then not Is_Interface (Def_Id)
- and then Has_Interfaces (Def_Id)
- then
- Add_Internal_Interface_Entities (Def_Id);
- end if;
-
Set_Is_Frozen (Def_Id);
Set_All_DT_Position (Def_Id);
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 258ce3a8266..955d3f6a898 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -58,6 +58,7 @@ with Sem_Ch8; use Sem_Ch8;
with Sem_Ch13; use Sem_Ch13;
with Sem_Eval; use Sem_Eval;
with Sem_Res; use Sem_Res;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Type; use Sem_Type;
with Sem_Util; use Sem_Util;
with Sem_Warn; use Sem_Warn;
@@ -3965,6 +3966,16 @@ package body Exp_Ch4 is
Right,
New_Occurrence_Of (Standard_False, Loc))));
+ -- If the right part of the expression is a function call then it can
+ -- be part of the expansion of the predefined equality operator of a
+ -- tagged type and we may need to adjust its SCIL dispatching node.
+
+ if Generate_SCIL
+ and then Nkind (Right) = N_Function_Call
+ then
+ Adjust_SCIL_Node (N, Right);
+ end if;
+
Set_Then_Actions (N, Actlist);
Analyze_And_Resolve (N, Standard_Boolean);
Adjust_Result_Type (N, Typ);
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index f6a83bd2f91..44944aecaf9 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -64,6 +64,7 @@ with Sem_Disp; use Sem_Disp;
with Sem_Dist; use Sem_Dist;
with Sem_Mech; use Sem_Mech;
with Sem_Res; use Sem_Res;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Util; use Sem_Util;
with Sinfo; use Sinfo;
with Snames; use Snames;
@@ -1125,6 +1126,7 @@ package body Exp_Ch6 is
-- created, since we just passed it as an OUT parameter.
Kill_Current_Values (Temp);
+ Set_Is_Known_Valid (Temp, False);
-- If type conversion, use reverse conversion on exit
@@ -2470,7 +2472,8 @@ package body Exp_Ch6 is
-- For an OUT or IN OUT parameter that is an assignable entity,
-- we do not want to clobber the Last_Assignment field, since
-- if it is set, it was precisely because it is indeed an OUT
- -- or IN OUT parameter!
+ -- or IN OUT parameter! We do reset the Is_Known_Valid flag
+ -- since the subprogram could have returned in invalid value.
if (Ekind (Formal) = E_Out_Parameter
or else
@@ -2480,6 +2483,7 @@ package body Exp_Ch6 is
Sav := Last_Assignment (Ent);
Kill_Current_Values (Ent);
Set_Last_Assignment (Ent, Sav);
+ Set_Is_Known_Valid (Ent, False);
-- For all other cases, just kill the current values
@@ -4969,10 +4973,13 @@ package body Exp_Ch6 is
if Nkind (Orig_Bod) /= N_Subprogram_Body then
return False;
else
+ -- We must skip SCIL nodes because they are currently
+ -- implemented as special N_Null_Statement nodes.
+
Stat :=
- First
+ First_Non_SCIL_Node
(Statements (Handled_Statement_Sequence (Orig_Bod)));
- Stat2 := Next (Stat);
+ Stat2 := Next_Non_SCIL_Node (Stat);
return
Is_Empty_List (Declarations (Orig_Bod))
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index a8a32fb5114..3e8fc6a7d7a 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -54,6 +54,7 @@ with Sem_Ch3; use Sem_Ch3;
with Sem_Ch7; use Sem_Ch7;
with Sem_Ch8; use Sem_Ch8;
with Sem_Res; use Sem_Res;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Type; use Sem_Type;
with Sem_Util; use Sem_Util;
with Snames; use Snames;
@@ -3602,6 +3603,15 @@ package body Exp_Ch7 is
New_Statement : constant Node_Id := Relocate_Node (N);
begin
+ -- If the relocated node is a procedure call then check if some SCIL
+ -- node references it and needs readjustment.
+
+ if Generate_SCIL
+ and then Nkind (New_Statement) = N_Procedure_Call_Statement
+ then
+ Adjust_SCIL_Node (N, New_Statement);
+ end if;
+
Rewrite (N, Make_Transient_Block (Loc, New_Statement));
-- With the scope stack back to normal, we can call analyze on the
diff --git a/gcc/ada/exp_ch9.adb b/gcc/ada/exp_ch9.adb
index cc58d9f4fa4..3a7fa25065d 100644
--- a/gcc/ada/exp_ch9.adb
+++ b/gcc/ada/exp_ch9.adb
@@ -3193,6 +3193,18 @@ package body Exp_Ch9 is
Params := New_List;
end if;
+ -- If the type is an untagged derived type, convert to the root type,
+ -- which is the one on which the operations are defined.
+
+ if Nkind (Rec) = N_Unchecked_Type_Conversion
+ and then not Is_Tagged_Type (Etype (Rec))
+ and then Is_Derived_Type (Etype (Rec))
+ then
+ Set_Etype (Rec, Root_Type (Etype (Rec)));
+ Set_Subtype_Mark (Rec,
+ New_Occurrence_Of (Root_Type (Etype (Rec)), Sloc (N)));
+ end if;
+
Prepend (Rec, Params);
if Ekind (Sub) = E_Procedure then
@@ -4358,8 +4370,8 @@ package body Exp_Ch9 is
return N;
else
return
- Unchecked_Convert_To (Corresponding_Record_Type (Typ),
- New_Copy_Tree (N));
+ Unchecked_Convert_To
+ (Corresponding_Record_Type (Typ), New_Copy_Tree (N));
end if;
end Convert_Concurrent;
@@ -10324,6 +10336,13 @@ package body Exp_Ch9 is
S : Entity_Id; -- Primitive operation slot
begin
+ -- Under the Ravenscar profile, timed entry calls are excluded. An error
+ -- was already reported on spec, so do not attempt to expand the call.
+
+ if Restriction_Active (No_Select_Statements) then
+ return;
+ end if;
+
-- The arguments in the call may require dynamic allocation, and the
-- call statement may have been transformed into a block. The block
-- may contain additional declarations for internal entities, and the
diff --git a/gcc/ada/exp_disp.adb b/gcc/ada/exp_disp.adb
index df23c891f27..f34b1e9af33 100644
--- a/gcc/ada/exp_disp.adb
+++ b/gcc/ada/exp_disp.adb
@@ -575,6 +575,11 @@ package body Exp_Disp is
end if;
end New_Value;
+ -- Local variables
+
+ New_Node : Node_Id;
+ SCIL_Node : Node_Id;
+
-- Start of processing for Expand_Dispatching_Call
begin
@@ -643,15 +648,17 @@ package body Exp_Disp is
Typ := Non_Limited_View (Typ);
end if;
- -- Generate the SCIL node for this dispatching call
+ -- Generate the SCIL node for this dispatching call. The SCIL node for a
+ -- dispatching call is inserted in the tree before the call is rewriten
+ -- and expanded because the SCIL node must be found by the SCIL backend
+ -- BEFORE the expanded nodes associated with the call node are found.
if Generate_SCIL then
- Insert_Action (Call_Node,
- New_SCIL_Node
- (SN_Kind => Dispatching_Call,
- Related_Node => Call_Node,
- Entity => Typ,
- Target_Prim => Subp));
+ SCIL_Node := Make_SCIL_Dispatching_Call (Sloc (Call_Node));
+ Set_SCIL_Related_Node (SCIL_Node, Call_Node);
+ Set_SCIL_Entity (SCIL_Node, Typ);
+ Set_SCIL_Target_Prim (SCIL_Node, Subp);
+ Insert_Action (Call_Node, SCIL_Node);
end if;
if not Is_Limited_Type (Typ) then
@@ -804,7 +811,7 @@ package body Exp_Disp is
else
Controlling_Tag :=
Make_Selected_Component (Loc,
- Prefix => Duplicate_Subexpr_Move_Checks (Ctrl_Arg),
+ Prefix => Duplicate_Subexpr_Move_Checks (Ctrl_Arg),
Selector_Name => New_Reference_To (DTC_Entity (Subp), Loc));
end if;
@@ -813,28 +820,100 @@ package body Exp_Disp is
if Is_Predefined_Dispatching_Operation (Subp)
or else Is_Predefined_Dispatching_Alias (Subp)
then
- New_Call_Name :=
- Unchecked_Convert_To (Subp_Ptr_Typ,
- Build_Get_Predefined_Prim_Op_Address (Loc,
- Tag_Node => Controlling_Tag,
- Position => DT_Position (Subp)));
+ Build_Get_Predefined_Prim_Op_Address (Loc,
+ Tag_Node => Controlling_Tag,
+ Position => DT_Position (Subp),
+ New_Node => New_Node);
-- Handle dispatching calls to user-defined primitives
else
- New_Call_Name :=
- Unchecked_Convert_To (Subp_Ptr_Typ,
- Build_Get_Prim_Op_Address (Loc,
- Typ => Find_Dispatching_Type (Subp),
- Tag_Node => Controlling_Tag,
- Position => DT_Position (Subp)));
+ Build_Get_Prim_Op_Address (Loc,
+ Typ => Find_Dispatching_Type (Subp),
+ Tag_Node => Controlling_Tag,
+ Position => DT_Position (Subp),
+ New_Node => New_Node);
end if;
- if Nkind (Call_Node) = N_Function_Call then
+ New_Call_Name :=
+ Unchecked_Convert_To (Subp_Ptr_Typ, New_Node);
+
+ -- Complete decoration of SCIL dispatching node. It must be done after
+ -- the new call name is built to reference the nodes that will see the
+ -- SCIL backend (because Build_Get_Prim_Op_Address generates an
+ -- unchecked type conversion which relocates the controlling tag node).
+
+ if Generate_SCIL then
+
+ -- Common case: the controlling tag is the tag of an object
+ -- (for example, obj.tag)
+
+ if Nkind (Controlling_Tag) = N_Selected_Component then
+ Set_SCIL_Controlling_Tag (SCIL_Node, Controlling_Tag);
+
+ -- Handle renaming of selected component
+
+ elsif Nkind (Controlling_Tag) = N_Identifier
+ and then Nkind (Parent (Entity (Controlling_Tag))) =
+ N_Object_Renaming_Declaration
+ and then Nkind (Name (Parent (Entity (Controlling_Tag)))) =
+ N_Selected_Component
+ then
+ Set_SCIL_Controlling_Tag (SCIL_Node,
+ Name (Parent (Entity (Controlling_Tag))));
+
+ -- If the controlling tag is an identifier, the SCIL node references
+ -- the corresponding object or parameter declaration
+
+ elsif Nkind (Controlling_Tag) = N_Identifier
+ and then Nkind_In (Parent (Entity (Controlling_Tag)),
+ N_Object_Declaration,
+ N_Parameter_Specification)
+ then
+ Set_SCIL_Controlling_Tag (SCIL_Node,
+ Parent (Entity (Controlling_Tag)));
+
+ -- If the controlling tag is a dereference, the SCIL node references
+ -- the corresponding object or parameter declaration
+
+ elsif Nkind (Controlling_Tag) = N_Explicit_Dereference
+ and then Nkind (Prefix (Controlling_Tag)) = N_Identifier
+ and then Nkind_In (Parent (Entity (Prefix (Controlling_Tag))),
+ N_Object_Declaration,
+ N_Parameter_Specification)
+ then
+ Set_SCIL_Controlling_Tag (SCIL_Node,
+ Parent (Entity (Prefix (Controlling_Tag))));
+
+ -- For a direct reference of the tag of the type the SCIL node
+ -- references the the internal object declaration containing the tag
+ -- of the type.
+
+ elsif Nkind (Controlling_Tag) = N_Attribute_Reference
+ and then Attribute_Name (Controlling_Tag) = Name_Tag
+ then
+ Set_SCIL_Controlling_Tag (SCIL_Node,
+ Parent
+ (Node
+ (First_Elmt
+ (Access_Disp_Table (Entity (Prefix (Controlling_Tag)))))));
+
+ -- Interfaces are not supported. For now we leave the SCIL node
+ -- decorated with the Controlling_Tag. More work needed here???
+
+ elsif Is_Interface (Etype (Controlling_Tag)) then
+ Set_SCIL_Controlling_Tag (SCIL_Node, Controlling_Tag);
+
+ else
+ pragma Assert (False);
+ null;
+ end if;
+ end if;
+ if Nkind (Call_Node) = N_Function_Call then
New_Call :=
Make_Function_Call (Loc,
- Name => New_Call_Name,
+ Name => New_Call_Name,
Parameter_Associations => New_Params);
-- If this is a dispatching "=", we must first compare the tags so
@@ -848,26 +927,26 @@ package body Exp_Disp is
Make_Op_Eq (Loc,
Left_Opnd =>
Make_Selected_Component (Loc,
- Prefix => New_Value (Param),
+ Prefix => New_Value (Param),
Selector_Name =>
New_Reference_To (First_Tag_Component (Typ),
Loc)),
Right_Opnd =>
Make_Selected_Component (Loc,
- Prefix =>
+ Prefix =>
Unchecked_Convert_To (Typ,
New_Value (Next_Actual (Param))),
Selector_Name =>
- New_Reference_To (First_Tag_Component (Typ),
- Loc))),
+ New_Reference_To
+ (First_Tag_Component (Typ), Loc))),
Right_Opnd => New_Call);
end if;
else
New_Call :=
Make_Procedure_Call_Statement (Loc,
- Name => New_Call_Name,
+ Name => New_Call_Name,
Parameter_Associations => New_Params);
end if;
@@ -1607,17 +1686,6 @@ package body Exp_Disp is
end if;
end Expand_Interface_Thunk;
- ------------------------
- -- Get_SCIL_Node_Kind --
- ------------------------
-
- function Get_SCIL_Node_Kind (Node : Node_Id) return SCIL_Node_Kind is
- begin
- pragma Assert
- (Nkind (Node) = N_Null_Statement and then Is_SCIL_Node (Node));
- return SCIL_Node_Kind'Val (UI_To_Int (SCIL_Nkind (Node)));
- end Get_SCIL_Node_Kind;
-
------------
-- Has_DT --
------------
@@ -4247,11 +4315,11 @@ package body Exp_Disp is
-- because it has a null dispatch table.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Object_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Object_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
Append_To (Result,
@@ -4284,11 +4352,11 @@ package body Exp_Disp is
-- because it has a tag initialization.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Tag_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Tag_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
-- Generate:
@@ -4324,11 +4392,11 @@ package body Exp_Disp is
-- because it contains a dispatch table.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Object_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Object_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
Append_To (Result,
@@ -4361,11 +4429,11 @@ package body Exp_Disp is
-- because it has a tag initialization.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Tag_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Tag_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
Append_To (Result,
@@ -5140,11 +5208,11 @@ package body Exp_Disp is
-- because it has a null dispatch table.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Object_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Object_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
Append_To (Result,
@@ -5457,11 +5525,11 @@ package body Exp_Disp is
-- because it contains a dispatch table.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Object_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Object_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
Append_To (Result,
@@ -6095,6 +6163,7 @@ package body Exp_Disp is
Predef_Prims_Ptr : Node_Id;
Iface_DT : Node_Id;
Iface_DT_Ptr : Node_Id;
+ New_Node : Node_Id;
Suffix_Index : Int;
Typ_Name : Name_Id;
Typ_Comps : Elist_Id;
@@ -6158,11 +6227,11 @@ package body Exp_Disp is
-- because it has a tag initialization.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Tag_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Tag_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
Append_To (Result,
@@ -6204,11 +6273,11 @@ package body Exp_Disp is
-- because it has a tag initialization.
if Generate_SCIL then
- Insert_Before (Last (Result),
- New_SCIL_Node
- (SN_Kind => Dispatch_Table_Tag_Init,
- Related_Node => Last (Result),
- Entity => Typ));
+ New_Node :=
+ Make_SCIL_Dispatch_Table_Object_Init (Sloc (Last (Result)));
+ Set_SCIL_Related_Node (New_Node, Last (Result));
+ Set_SCIL_Entity (New_Node, Typ);
+ Insert_Before (Last (Result), New_Node);
end if;
end if;
@@ -6433,29 +6502,6 @@ package body Exp_Disp is
end if;
end New_Value;
- -------------------
- -- New_SCIL_Node --
- -------------------
-
- function New_SCIL_Node
- (SN_Kind : SCIL_Node_Kind;
- Related_Node : Node_Id;
- Entity : Entity_Id := Empty;
- Target_Prim : Entity_Id := Empty) return Node_Id
- is
- New_N : constant Node_Id :=
- New_Node (N_Null_Statement, Sloc (Related_Node));
- begin
- Set_Is_SCIL_Node (New_N);
-
- Set_SCIL_Nkind (New_N, UI_From_Int (SCIL_Node_Kind'Pos (SN_Kind)));
- Set_SCIL_Related_Node (New_N, Related_Node);
- Set_SCIL_Entity (New_N, Entity);
- Set_SCIL_Target_Prim (New_N, Target_Prim);
-
- return New_N;
- end New_SCIL_Node;
-
-----------------------------------
-- Original_View_In_Visible_Part --
-----------------------------------
@@ -6869,13 +6915,12 @@ package body Exp_Disp is
begin
pragma Assert (Present (First_Tag_Component (Typ)));
- -- Set the DT_Position for each primitive operation. Perform some
- -- sanity checks to avoid to build completely inconsistent dispatch
- -- tables.
+ -- Set the DT_Position for each primitive operation. Perform some sanity
+ -- checks to avoid building inconsistent dispatch tables.
- -- First stage: Set the DTC entity of all the primitive operations
- -- This is required to properly read the DT_Position attribute in
- -- the latter stages.
+ -- First stage: Set the DTC entity of all the primitive operations. This
+ -- is required to properly read the DT_Position attribute in the latter
+ -- stages.
Prim_Elmt := First_Prim;
Count_Prim := 0;
@@ -6885,7 +6930,8 @@ package body Exp_Disp is
-- Predefined primitives have a separate dispatch table
if not (Is_Predefined_Dispatching_Operation (Prim)
- or else Is_Predefined_Dispatching_Alias (Prim))
+ or else
+ Is_Predefined_Dispatching_Alias (Prim))
then
Count_Prim := Count_Prim + 1;
end if;
diff --git a/gcc/ada/exp_disp.ads b/gcc/ada/exp_disp.ads
index 2b3710e48ca..18f751d978d 100644
--- a/gcc/ada/exp_disp.ads
+++ b/gcc/ada/exp_disp.ads
@@ -30,34 +30,6 @@ with Types; use Types;
package Exp_Disp is
- -------------------------------
- -- SCIL Node Type Definition --
- -------------------------------
-
- -- SCIL nodes are a special kind of nodes added to the tree when the
- -- CodePeer mode is active. They are stored in the tree as special
- -- N_Null_Statement nodes that have extra attributes. The information
- -- available through these extra attributes relies on the kind of SCIL
- -- node. The SCIL node kind is stored in the Scil_Nkind attribute of
- -- the N_Null_Statement node, and indicates the type of the SCIL node.
-
- type SCIL_Node_Kind is
- (Unused,
- -- What is this for ???
-
- IP_Tag_Init,
- -- SCIL node for tag component initialization
-
- Dispatching_Call,
- -- SCIL node for dispatching call. Used by the CodePeer backend to
- -- locate nodes associated with dispatching calls.
-
- Dispatch_Table_Object_Init,
- -- SCIL node for object declaration containing a dispatch table
-
- Dispatch_Table_Tag_Init);
- -- SCIL node for tag initialization
-
-------------------------------------
-- Predefined primitive operations --
-------------------------------------
@@ -243,9 +215,6 @@ package Exp_Disp is
-- Otherwise they are set to the defining identifier and the subprogram
-- body of the generated thunk.
- function Get_SCIL_Node_Kind (Node : Node_Id) return SCIL_Node_Kind;
- -- Returns the kind of an SCIL node
-
function Is_Predefined_Dispatching_Operation (E : Entity_Id) return Boolean;
-- Ada 2005 (AI-251): Determines if E is a predefined primitive operation
@@ -340,15 +309,6 @@ package Exp_Disp is
-- tagged types this routine imports the forward declaration of the tag
-- entity, that will be declared and exported by Make_DT.
- function New_SCIL_Node
- (SN_Kind : SCIL_Node_Kind;
- Related_Node : Node_Id;
- Entity : Entity_Id := Empty;
- Target_Prim : Entity_Id := Empty) return Node_Id;
- -- Creates a new Scil node. Related_Node is the AST node associated with
- -- this Scil node. Entity is the tagged type associated with the Scil node.
- -- For Dispatching_Call nodes, Target_Prim is the dispatching primitive.
-
function Register_Primitive
(Loc : Source_Ptr;
Prim : Entity_Id) return List_Id;
diff --git a/gcc/ada/exp_util.adb b/gcc/ada/exp_util.adb
index d139a2bc321..cd05d75f1f3 100644
--- a/gcc/ada/exp_util.adb
+++ b/gcc/ada/exp_util.adb
@@ -43,6 +43,7 @@ with Rident; use Rident;
with Sem; use Sem;
with Sem_Aux; use Sem_Aux;
with Sem_Ch8; use Sem_Ch8;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Eval; use Sem_Eval;
with Sem_Res; use Sem_Res;
with Sem_Type; use Sem_Type;
@@ -1320,12 +1321,14 @@ package body Exp_Util is
Rewrite (Subtype_Indic, New_Reference_To (T, Loc));
-- nothing needs to be done for private types with unknown discriminants
- -- if the underlying type is not an unconstrained composite type.
+ -- if the underlying type is not an unconstrained composite type or it
+ -- is an unchecked union.
elsif Is_Private_Type (Unc_Type)
and then Has_Unknown_Discriminants (Unc_Type)
and then (not Is_Composite_Type (Underlying_Type (Unc_Type))
- or else Is_Constrained (Underlying_Type (Unc_Type)))
+ or else Is_Constrained (Underlying_Type (Unc_Type))
+ or else Is_Unchecked_Union (Underlying_Type (Unc_Type)))
then
null;
@@ -2755,6 +2758,10 @@ package body Exp_Util is
N_Real_Range_Specification |
N_Record_Definition |
N_Reference |
+ N_SCIL_Dispatch_Table_Object_Init |
+ N_SCIL_Dispatch_Table_Tag_Init |
+ N_SCIL_Dispatching_Call |
+ N_SCIL_Tag_Init |
N_Selected_Component |
N_Signed_Integer_Type_Definition |
N_Single_Protected_Declaration |
@@ -4634,6 +4641,15 @@ package body Exp_Util is
Constant_Present => True,
Expression => Relocate_Node (Exp));
+ -- Check if the previous node relocation requires readjustment of
+ -- some SCIL Dispatching node.
+
+ if Generate_SCIL
+ and then Nkind (Exp) = N_Function_Call
+ then
+ Adjust_SCIL_Node (Exp, Expression (E));
+ end if;
+
Set_Assignment_OK (E);
Insert_Action (Exp, E);
@@ -4794,6 +4810,16 @@ package body Exp_Util is
Defining_Identifier => Obj,
Object_Definition => New_Occurrence_Of (Exp_Type, Loc),
Expression => Relocate_Node (Exp));
+
+ -- Check if the previous node relocation requires readjustment
+ -- of some SCIL Dispatching node.
+
+ if Generate_SCIL
+ and then Nkind (Exp) = N_Function_Call
+ then
+ Adjust_SCIL_Node (Exp, Expression (Decl));
+ end if;
+
Insert_Action (Exp, Decl);
Set_Etype (Obj, Exp_Type);
Rewrite (Exp, New_Occurrence_Of (Obj, Loc));
@@ -4853,6 +4879,15 @@ package body Exp_Util is
Defining_Identifier => Def_Id,
Object_Definition => New_Reference_To (Ref_Type, Loc),
Expression => New_Exp));
+
+ -- Check if the previous node relocation requires readjustment
+ -- of some SCIL Dispatching node.
+
+ if Generate_SCIL
+ and then Nkind (Exp) = N_Function_Call
+ then
+ Adjust_SCIL_Node (Exp, Prefix (New_Exp));
+ end if;
end if;
-- Preserve the Assignment_OK flag in all copies, since at least
diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb
index 7109383555f..581d977436a 100644
--- a/gcc/ada/frontend.adb
+++ b/gcc/ada/frontend.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -46,12 +46,13 @@ with Prep;
with Prepcomp;
with Restrict; use Restrict;
with Rident; use Rident;
-with Rtsfind;
+with Rtsfind; use Rtsfind;
with Sprint;
with Scn; use Scn;
with Sem; use Sem;
with Sem_Aux;
with Sem_Ch8; use Sem_Ch8;
+with Sem_SCIL;
with Sem_Elab; use Sem_Elab;
with Sem_Prag; use Sem_Prag;
with Sem_Warn; use Sem_Warn;
@@ -308,7 +309,7 @@ begin
-- incorporate subunits at a lower level.
if Operating_Mode = Generate_Code
- and then Nkind (Unit (Cunit (Main_Unit))) = N_Subunit
+ and then Nkind (Unit (Cunit (Main_Unit))) = N_Subunit
then
Operating_Mode := Check_Semantics;
end if;
@@ -321,8 +322,8 @@ begin
-- Cleanup processing after completing main analysis
if Operating_Mode = Generate_Code
- or else (Operating_Mode = Check_Semantics
- and then ASIS_Mode)
+ or else (Operating_Mode = Check_Semantics
+ and then ASIS_Mode)
then
Instantiate_Bodies;
end if;
@@ -366,6 +367,14 @@ begin
Exp_Dbug.Qualify_All_Entity_Names;
end if;
+ -- SCIL backend requirement. Check that SCIL nodes associated with
+ -- dispatching calls reference subprogram calls.
+
+ if Generate_SCIL then
+ pragma Debug (Sem_SCIL.Check_SCIL_Nodes (Cunit (Main_Unit)));
+ null;
+ end if;
+
-- Dump the source now. Note that we do this as soon as the analysis
-- of the tree is complete, because it is not just a dump in the case
-- of -gnatD, where it rewrites all source locations in the tree.
diff --git a/gcc/ada/g-expect.adb b/gcc/ada/g-expect.adb
index 405b0331275..02bc6cf8a79 100644
--- a/gcc/ada/g-expect.adb
+++ b/gcc/ada/g-expect.adb
@@ -1195,21 +1195,28 @@ package body GNAT.Expect is
pragma Warnings (Off, Pipe2);
pragma Warnings (Off, Pipe3);
+ On_Windows : constant Boolean := Directory_Separator = '\';
+ -- This is ugly, we need a better way of doing this test ???
+
Input : File_Descriptor;
Output : File_Descriptor;
Error : File_Descriptor;
begin
- -- Since Windows does not have a separate fork/exec, we need to
- -- perform the following actions:
- -- - save stdin, stdout, stderr
- -- - replace them by our pipes
- -- - create the child with process handle inheritance
- -- - revert to the previous stdin, stdout and stderr.
+ if On_Windows then
+
+ -- Since Windows does not have a separate fork/exec, we need to
+ -- perform the following actions:
+
+ -- - save stdin, stdout, stderr
+ -- - replace them by our pipes
+ -- - create the child with process handle inheritance
+ -- - revert to the previous stdin, stdout and stderr.
- Input := Dup (GNAT.OS_Lib.Standin);
- Output := Dup (GNAT.OS_Lib.Standout);
- Error := Dup (GNAT.OS_Lib.Standerr);
+ Input := Dup (GNAT.OS_Lib.Standin);
+ Output := Dup (GNAT.OS_Lib.Standout);
+ Error := Dup (GNAT.OS_Lib.Standerr);
+ end if;
-- Since we are still called from the parent process, there is no way
-- currently we can cleanly close the unneeded ends of the pipes, but
@@ -1223,8 +1230,8 @@ package body GNAT.Expect is
Portable_Execvp (Pid.Pid'Access, Cmd & ASCII.NUL, Args);
- -- The following commands are not executed on Unix systems, and are
- -- only required for Windows systems. We are now in the parent process.
+ -- The following commands are not executed on Unix systems, and are only
+ -- required for Windows systems. We are now in the parent process.
-- Restore the old descriptors
@@ -1277,8 +1284,8 @@ package body GNAT.Expect is
-- Reuse the standard output pipe for standard error
Pipe3.all := Pipe2.all;
- else
+ else
-- Create a separate pipe for standard error
if Create_Pipe (Pipe3) /= 0 then
diff --git a/gcc/ada/g-socket.adb b/gcc/ada/g-socket.adb
index c002054395c..d32ebfc37a8 100644
--- a/gcc/ada/g-socket.adb
+++ b/gcc/ada/g-socket.adb
@@ -1664,7 +1664,14 @@ package body GNAT.Sockets is
(Msg_Name => System.Null_Address,
Msg_Namelen => 0,
Msg_Iov => Vector'Address,
- Msg_Iovlen => SOSC.Msg_Iovlen_T (Vector'Length),
+
+ -- recvmsg(2) returns EMSGSIZE on Linux (and probably on other
+ -- platforms) when the supplied vector is longer than IOV_MAX,
+ -- so use minimum of the two lengths.
+
+ Msg_Iovlen => SOSC.Msg_Iovlen_T'Min
+ (Vector'Length, SOSC.IOV_MAX),
+
Msg_Control => System.Null_Address,
Msg_Controllen => 0,
Msg_Flags => 0);
diff --git a/gcc/ada/g-sse.ads b/gcc/ada/g-sse.ads
index d7b01a991be..706516b9830 100644
--- a/gcc/ada/g-sse.ads
+++ b/gcc/ada/g-sse.ads
@@ -30,8 +30,8 @@
------------------------------------------------------------------------------
-- This package is the root of a set aimed at offering Ada bindings to a
--- subset of the Intel(r) Streaming SIMD Extensions with GNAT. The purpose is
--- to allow access from Ada to the SSE facilities defined in the Intel(r)
+-- subset of the Intel(r) Streaming SIMD Extensions with GNAT. The purpose
+-- is to allow access from Ada to the SSE facilities defined in the Intel(r)
-- compiler manuals, in particular in the Intrinsics Reference of the C++
-- Compiler User's Guide, available from http://www.intel.com.
@@ -44,48 +44,74 @@
-- This unit exposes vector _component_ types together with general comments
-- on the binding contents.
--- As of today, one other unit is offered: GNAT.SSE.Vector__Types, which
+-- One other unit is offered as of today: GNAT.SSE.Vector_Types, which
-- exposes Ada types corresponding to the reference types (__m128 and the
--- like) over which GCC builtins will operate. The exposed Ada types are
--- private. Object initializations or value observations may be performed
--- with unchecked conversions or address overlays, for example:
+-- like) over which a binding to the SSE GCC builtins may operate.
+
+-- The exposed Ada types are private. Object initializations or value
+-- observations may be performed with unchecked conversions or address
+-- overlays, for example:
-- with Ada.Unchecked_Conversion;
--- with GNAT.SSE.Vector_Types; use GNAT.SSE; use GNAT.SSE.Vector_Types;
+-- with GNAT.SSE.Vector_Types; use GNAT.SSE, GNAT.SSE.Vector_Types;
-- procedure SSE_Base is
-- -- Core operations
--- function mm_add_ss (A, B : M128) return M128;
--- pragma Import (Intrinsic, mm_add_ss, "__builtin_ia32_addss");
+-- function ia32_addps (A, B : m128) return m128;
+-- pragma Import (Intrinsic, ia32_addps, "__builtin_ia32_addps");
--- -- User views / conversions or overlays
+-- -- User views & conversions
--- type Vf32_View is array (1 .. 4) of Float;
+-- type Vf32_View is array (1 .. 4) of GNAT.SSE.Float32;
-- for Vf32_View'Alignment use VECTOR_ALIGN;
--- function To_M128 is new Ada.Unchecked_Conversion (Vf32_View, M128);
+-- function To_m128 is new Ada.Unchecked_Conversion (Vf32_View, m128);
--- X, Y, Z : M128;
+-- Xf32 : constant Vf32_View := (1.0, 1.0, 2.0, 2.0);
+-- Yf32 : constant Vf32_View := (2.0, 2.0, 1.0, 1.0);
--- Vz : Vf32_View;
--- for Vz'Address use Z'Address;
+-- X128 : constant m128 := To_m128 (Xf32);
+-- Y128 : constant m128 := To_m128 (Yf32);
-- begin
--- X := To_M128 ((1.0, 1.0, 2.0, 2.0));
--- Y := To_M128 ((2.0, 2.0, 1.0, 1.0));
--- Z := mm_add_ss (X, Y);
-
--- if vz /= (3.0, 1.0, 2.0, 2.0) then
--- raise Program_Error;
--- end if;
--- end;
+-- -- Operations & overlays
+
+-- declare
+-- Z128 : m128;
+-- Zf32 : Vf32_View;
+-- for Zf32'Address use Z128'Address;
+-- begin
+-- Z128 := ia32_addps (X128, Y128);
+-- if Zf32 /= (3.0, 3.0, 3.0, 3.0) then
+-- raise Program_Error;
+-- end if;
+-- end;
+
+-- declare
+-- type m128_View_Kind is (SSE, F32);
+-- type m128_Object (View : m128_View_Kind := F32) is record
+-- case View is
+-- when SSE => V128 : m128;
+-- when F32 => Vf32 : Vf32_View;
+-- end case;
+-- end record;
+-- pragma Unchecked_Union (m128_Object);
+
+-- O1 : constant m128_Object := (View => SSE, V128 => X128);
+-- begin
+-- if O1.Vf32 /= Xf32 then
+-- raise Program_Error;
+-- end if;
+-- end;
+-- end SSE_Base;
package GNAT.SSE is
- type Float32 is new Float;
- type Float64 is new Long_Float;
- type Integer64 is new Long_Long_Integer;
+
+ -----------------------------------
+ -- Common vector characteristics --
+ -----------------------------------
VECTOR_BYTES : constant := 16;
-- Common size of all the SSE vector types, in bytes.
@@ -100,4 +126,12 @@ package GNAT.SSE is
-- We apply that consistently to all the Ada vector types, as GCC does
-- for the corresponding C types.
+ ----------------------------
+ -- Vector component types --
+ ----------------------------
+
+ type Float32 is new Float;
+ type Float64 is new Long_Float;
+ type Integer64 is new Long_Long_Integer;
+
end GNAT.SSE;
diff --git a/gcc/ada/g-ssinty.ads b/gcc/ada/g-ssinty.ads
deleted file mode 100644
index becdc7661d6..00000000000
--- a/gcc/ada/g-ssinty.ads
+++ /dev/null
@@ -1,77 +0,0 @@
-------------------------------------------------------------------------------
--- --
--- GNAT COMPILER COMPONENTS --
--- --
--- G N A T . S S E . I N T E R N A L _ T Y P E S --
--- --
--- S p e c --
--- --
--- Copyright (C) 2009, Free Software Foundation, Inc. --
--- --
--- GNAT is free software; you can redistribute it and/or modify it under --
--- terms of the GNU General Public License as published by the Free Soft- --
--- ware Foundation; either version 3, or (at your option) any later ver- --
--- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
--- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
--- or FITNESS FOR A PARTICULAR PURPOSE. --
--- --
--- As a special exception under Section 7 of GPL version 3, you are granted --
--- additional permissions described in the GCC Runtime Library Exception, --
--- version 3.1, as published by the Free Software Foundation. --
--- --
--- You should have received a copy of the GNU General Public License and --
--- a copy of the GCC Runtime Library Exception along with this program; --
--- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
--- <http://www.gnu.org/licenses/>. --
--- --
--- GNAT was originally developed by the GNAT team at New York University. --
--- Extensive contributions were provided by Ada Core Technologies Inc. --
--- --
-------------------------------------------------------------------------------
-
--- This unit exposes low level types to interface with the GCC vector
--- builtins directly. These are useful for the development of higher level
--- bindings to the reference Intel intrinsic operations.
-
--- See GNAT.SSE for the list of targets where this facility is supported.
-
-package GNAT.SSE.Internal_Types is
-
- type v4sf is private;
- type v2df is private;
- type v2di is private;
-
-private
-
- -- GCC'wise, vector operations operate on objects of vector modes,
- -- conveyed through vector types obtained in C by setting an attribute on
- -- what looks like a component typedef. For example, in xmmintrin.h:
- --
- -- typedef float __v4sf __attribute__ ((__vector_size__ (16)));
-
- -- Applying a 'vector_size' machine attribute in Ada, as in
- --
- -- type Vf is new Float;
- -- pragma Machine_Attribute (Vf, "vector_size", 16);
- --
- -- makes Vf a 16bytes long V4SFmode GCC type but the effect on the type
- -- layout is not conveyed to the front-end. The latter still sees "Vf"
- -- as a 4bytes long single float, with numerous potential pitfalls.
-
- -- We devised a 'vector_type' alternate machine attribute, which applies
- -- to array types of the proper size and alignment from the front-end
- -- perspective:
-
- type v4sf is array (1 .. 4) of GNAT.SSE.Float32;
- for v4sf'Alignment use GNAT.SSE.VECTOR_ALIGN;
- pragma Machine_Attribute (v4sf, "vector_type");
-
- type v2di is array (1 .. 2) of GNAT.SSE.Integer64;
- for v2di'Alignment use GNAT.SSE.VECTOR_ALIGN;
- pragma Machine_Attribute (v2di, "vector_type");
-
- type v2df is array (1 .. 2) of GNAT.SSE.Float64;
- for v2df'Alignment use GNAT.SSE.VECTOR_ALIGN;
- pragma Machine_Attribute (v2df, "vector_type");
-
-end GNAT.SSE.Internal_Types;
diff --git a/gcc/ada/g-ssvety.ads b/gcc/ada/g-ssvety.ads
index 42e49bf5d83..c40706474a4 100644
--- a/gcc/ada/g-ssvety.ads
+++ b/gcc/ada/g-ssvety.ads
@@ -49,7 +49,7 @@ package GNAT.SSE.Vector_Types is
-- access the byte elements and structures.
--
-- * Use new data types only with the respective intrinsics described
- -- in this documentation. >>
+ -- in this documentation.
type m128 is private; -- SSE >= 1
type m128d is private; -- SSE >= 2
@@ -69,7 +69,7 @@ private
-- typedef float __v4sf __attribute__ ((__vector_size__ (16)));
------------
- -- M128 --
+ -- m128 --
------------
-- The __m128 data type can hold four 32-bit floating-point values
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
index 9a28ea3ef48..c5efdb5d214 100644
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -159,8 +159,8 @@ GNAT_ADA_OBJS = ada/s-bitops.o ada/ada.o ada/a-charac.o ada/a-chlat1.o ada/a-exc
ada/sem_ch12.o ada/sem_ch13.o ada/sem_ch2.o ada/sem_ch3.o ada/sem_ch4.o \
ada/sem_ch5.o ada/sem_ch6.o ada/sem_ch7.o ada/sem_ch8.o ada/sem_ch9.o \
ada/sem_case.o ada/sem_disp.o ada/sem_dist.o ada/sem_elab.o ada/sem_elim.o \
- ada/sem_eval.o ada/sem_intr.o ada/sem_mech.o ada/sem_prag.o \
- ada/sem_res.o ada/sem_smem.o ada/sem_type.o ada/sem_util.o ada/sem_vfpt.o \
+ ada/sem_eval.o ada/sem_intr.o ada/sem_mech.o ada/sem_prag.o ada/sem_res.o \
+ ada/sem_scil.o ada/sem_smem.o ada/sem_type.o ada/sem_util.o ada/sem_vfpt.o \
ada/sem_warn.o ada/sinfo-cn.o ada/sinfo.o ada/sinput.o ada/sinput-d.o \
ada/sinput-l.o ada/snames.o ada/sprint.o ada/stand.o ada/stringt.o \
ada/style.o ada/styleg.o ada/switch.o ada/switch-c.o \
@@ -1303,18 +1303,18 @@ ada/checks.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb \
ada/sem.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch3.ads \
ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_dist.ads \
- ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
- ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
- ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \
- ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
- ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/urealp.adb ada/validsw.ads
+ ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
+ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
+ ada/stand.ads ada/stringt.ads ada/stringt.adb ada/system.ads \
+ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads
ada/comperr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1350,19 +1350,20 @@ ada/cstand.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
ada/scng.adb ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads \
ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads ada/sem_mech.ads \
- ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
- ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
- ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
- ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads ada/types.ads \
- ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/widechar.ads
+ ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads \
+ ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads \
+ ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
+ ada/widechar.ads
ada/debug.o : ada/debug.ads ada/debug.adb ada/system.ads
@@ -1477,18 +1478,18 @@ ada/exp_aggr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch3.ads \
ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads \
ada/sem_dist.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
- ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb \
- ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
- ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
- ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
- ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
- ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
- ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
+ ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
+ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
+ ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+ ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+ ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
ada/widechar.ads
@@ -1505,16 +1506,17 @@ ada/exp_atag.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
ada/rident.ads ada/rtsfind.ads ada/rtsfind.adb ada/sem.ads \
ada/sem_aux.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_dist.ads \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \
+ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1535,19 +1537,20 @@ ada/exp_attr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch6.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads \
- ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
- ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \
- ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads \
+ ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
+ ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
+ ada/widechar.ads
ada/exp_ch11.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1638,16 +1641,16 @@ ada/exp_ch3.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch3.ads \
ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads \
- ada/sem_mech.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
- ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
- ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_mech.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
+ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+ ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
@@ -1666,18 +1669,18 @@ ada/exp_ch4.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
ada/sem.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch13.ads \
ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_eval.ads \
- ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
- ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-exctab.adb \
- ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
- ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/urealp.adb ada/validsw.ads
+ ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
+ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \
+ ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads
ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1696,20 +1699,20 @@ ada/exp_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch13.ads \
ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
- ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
- ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
+ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/exp_ch6.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1732,19 +1735,19 @@ ada/exp_ch6.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_aux.ads ada/sem_ch12.ads ada/sem_ch13.ads ada/sem_ch3.ads \
ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads \
ada/sem_dist.ads ada/sem_eval.ads ada/sem_mech.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
- ada/sprint.ads ada/stand.ads ada/stringt.ads ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1760,16 +1763,17 @@ ada/exp_ch7.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
ada/sem_aux.ads ada/sem_ch3.ads ada/sem_ch7.ads ada/sem_ch8.ads \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \
+ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1782,15 +1786,16 @@ ada/exp_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/lib.ads ada/namet.ads ada/nlists.ads ada/nlists.adb ada/nmake.ads \
ada/opt.ads ada/output.ads ada/restrict.ads ada/rident.ads \
ada/rtsfind.ads ada/sem.ads ada/sem_aux.ads ada/sem_ch8.ads \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-stalib.ads ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/system.ads \
+ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-stalib.ads \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
+ ada/validsw.ads
ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1809,8 +1814,8 @@ ada/exp_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_attr.ads \
ada/sem_aux.ads ada/sem_ch11.ads ada/sem_ch6.ads ada/sem_ch8.ads \
ada/sem_disp.ads ada/sem_elab.ads ada/sem_eval.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
@@ -1837,9 +1842,9 @@ ada/exp_code.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads \
ada/scng.adb ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads \
ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
- ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+ ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
@@ -1885,19 +1890,20 @@ ada/exp_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch6.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads \
- ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
- ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \
- ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads \
+ ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
+ ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
+ ada/widechar.ads
ada/exp_dist.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -1979,17 +1985,18 @@ ada/exp_intr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
ada/sem_aux.ads ada/sem_ch8.ads ada/sem_eval.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb \
- ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/urealp.adb ada/validsw.ads ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sinfo.ads \
+ ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
+ ada/stand.ads ada/stringt.ads ada/system.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \
+ ada/widechar.ads
ada/exp_pakd.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2004,17 +2011,17 @@ ada/exp_pakd.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/nlists.adb ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads \
ada/restrict.ads ada/rident.ads ada/rtsfind.ads ada/sem.ads \
ada/sem_aux.ads ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch8.ads \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
- ada/system.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
- ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/snames.ads ada/sprint.ads ada/stand.ads \
+ ada/stringt.ads ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+ ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads
ada/exp_prag.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2119,18 +2126,18 @@ ada/exp_util.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/nmake.ads ada/nmake.adb ada/opt.ads ada/output.ads ada/restrict.ads \
ada/restrict.adb ada/rident.ads ada/rtsfind.ads ada/sem.ads \
ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads \
- ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
- ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
- ada/stringt.adb ada/system.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
- ada/validsw.ads
+ ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads \
+ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+ ada/stringt.ads ada/stringt.adb ada/system.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+ ada/urealp.ads ada/urealp.adb ada/validsw.ads
ada/exp_vfpt.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2215,19 +2222,19 @@ ada/freeze.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads \
ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads \
ada/sem_intr.ads ada/sem_mech.ads ada/sem_prag.ads ada/sem_res.ads \
- ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
- ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
- ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_res.adb ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads \
+ ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/frontend.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -2244,17 +2251,17 @@ ada/frontend.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/restrict.ads ada/restrict.adb ada/rident.ads ada/rtsfind.ads \
ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
ada/sem_aux.ads ada/sem_ch8.ads ada/sem_elab.ads ada/sem_prag.ads \
- ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/sinput.adb ada/sinput-l.ads ada/snames.ads ada/sprint.ads \
- ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \
- ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
- ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_scil.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/sinput.adb ada/sinput-l.ads ada/snames.ads \
+ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/style.ads \
+ ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
+ ada/s-crc32.ads ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
+ ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/g-byorma.o : ada/gnat.ads ada/g-byorma.ads ada/g-byorma.adb \
@@ -2435,8 +2442,8 @@ ada/layout.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch13.ads \
ada/sem_ch8.ads ada/sem_disp.ads ada/sem_eval.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
@@ -3024,20 +3031,20 @@ ada/sem_aggr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scng.adb ada/sem.ads ada/sem_aggr.ads ada/sem_aggr.adb \
ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch13.ads \
ada/sem_ch3.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
- ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
- ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
+ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/sem_attr.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \
ada/a-except.ads ada/a-unccon.ads ada/a-uncdea.ads ada/alloc.ads \
@@ -3058,21 +3065,21 @@ ada/sem_attr.o : ada/ada.ads ada/a-charac.ads ada/a-chlat1.ads \
ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads \
ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \
- ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
- ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/sinput.adb ada/snames.ads ada/snames.adb ada/sprint.ads \
- ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-carun8.ads ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads ada/types.ads \
- ada/types.adb ada/uintp.ads ada/uintp.adb ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \
- ada/widechar.ads
+ ada/sem_res.ads ada/sem_res.adb ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/sinput.adb ada/snames.ads ada/snames.adb \
+ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-carun8.ads ada/s-exctab.ads ada/s-exctab.adb \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypef.ads ada/ttypes.ads \
+ ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
+ ada/validsw.ads ada/widechar.ads
ada/sem_aux.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3118,18 +3125,19 @@ ada/sem_cat.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/output.ads ada/rident.ads ada/rtsfind.ads ada/scans.ads ada/scn.ads \
ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads \
ada/sem_cat.ads ada/sem_cat.adb ada/sem_ch8.ads ada/sem_disp.ads \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+ ada/urealp.ads ada/widechar.ads
ada/sem_ch10.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3147,19 +3155,20 @@ ada/sem_ch10.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scng.adb ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads \
ada/sem_ch10.ads ada/sem_ch10.adb ada/sem_ch3.ads ada/sem_ch6.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
- ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb \
- ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
+ ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \
+ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+ ada/urealp.ads ada/widechar.ads
ada/sem_ch11.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3199,20 +3208,20 @@ ada/sem_ch12.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch12.adb ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch6.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \
- ada/sinput-l.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-exctab.adb \
- ada/s-htable.ads ada/s-htable.adb ada/s-imenne.ads ada/s-memory.ads \
- ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-strhas.ads ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/urealp.adb ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads \
+ ada/sinput.ads ada/sinput-l.ads ada/snames.ads ada/stand.ads \
+ ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-exctab.adb ada/s-htable.ads ada/s-htable.adb ada/s-imenne.ads \
+ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-strhas.ads ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/widechar.ads
ada/sem_ch13.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3272,20 +3281,21 @@ ada/sem_ch3.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_cat.adb ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch3.adb \
ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads \
ada/sem_dist.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb \
- ada/sem_mech.ads ada/sem_res.ads ada/sem_smem.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
- ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/urealp.adb ada/validsw.ads ada/widechar.ads
+ ada/sem_mech.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_smem.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
+ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \
+ ada/widechar.ads
ada/sem_ch4.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3305,19 +3315,19 @@ ada/sem_ch4.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch4.adb \
ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_intr.ads \
- ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
- ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
- ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
- ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
- ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
- ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
+ ada/sem_res.ads ada/sem_res.adb ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
+ ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
+ ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
+ ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/sem_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3338,20 +3348,20 @@ ada/sem_ch5.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch4.ads ada/sem_ch5.ads ada/sem_ch5.adb ada/sem_ch6.ads \
ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \
- ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
- ada/sem_util.adb ada/sem_warn.ads ada/sem_warn.adb ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/sprint.ads \
- ada/stand.ads ada/stringt.ads ada/stringt.adb ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
- ada/widechar.ads
+ ada/sem_res.ads ada/sem_res.adb ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sem_warn.adb \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads \
+ ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+ ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/sem_ch6.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3371,21 +3381,21 @@ ada/sem_ch6.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch10.ads ada/sem_ch12.ads ada/sem_ch3.ads ada/sem_ch4.ads \
ada/sem_ch5.ads ada/sem_ch6.ads ada/sem_ch6.adb ada/sem_ch8.ads \
ada/sem_disp.ads ada/sem_dist.ads ada/sem_elim.ads ada/sem_eval.ads \
- ada/sem_mech.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb \
- ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \
- ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
- ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \
- ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
- ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
- ada/widechar.ads
+ ada/sem_mech.ads ada/sem_prag.ads ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads \
+ ada/sinput.adb ada/snames.ads ada/snames.adb ada/stand.ads \
+ ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
+ ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-carun8.ads \
+ ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
+ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+ ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/sem_ch7.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3403,19 +3413,19 @@ ada/sem_ch7.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_cat.ads ada/sem_ch10.ads ada/sem_ch12.ads ada/sem_ch3.ads \
ada/sem_ch6.ads ada/sem_ch7.ads ada/sem_ch7.adb ada/sem_ch8.ads \
ada/sem_disp.ads ada/sem_eval.ads ada/sem_prag.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
- ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
- ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/sinput.adb ada/snames.ads ada/snames.adb ada/stand.ads \
+ ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/sem_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3436,18 +3446,18 @@ ada/sem_ch8.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads \
ada/sem_ch8.ads ada/sem_ch8.adb ada/sem_disp.ads ada/sem_dist.ads \
ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_intr.ads \
- ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads \
- ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
- ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb ada/snames.ads \
- ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \
- ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
- ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
- ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_res.ads ada/sem_res.adb ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
+ ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
+ ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
+ ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
+ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/sem_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
@@ -3469,19 +3479,19 @@ ada/sem_ch9.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_ch9.ads ada/sem_ch9.adb \
ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads \
ada/sem_eval.ads ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
- ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
- ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
- ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
- ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
- ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
- ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
- ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
- ada/urealp.ads ada/validsw.ads ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/sinput.adb ada/snames.ads ada/sprint.ads ada/stand.ads \
+ ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
+ ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
+ ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3499,19 +3509,19 @@ ada/sem_disp.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch3.ads ada/sem_ch6.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_disp.adb \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
- ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
- ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
- ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
- ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
- ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/validsw.ads \
- ada/widechar.ads
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \
+ ada/sinput.ads ada/snames.ads ada/stand.ads ada/stringt.ads \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/uintp.ads \
+ ada/uintp.adb ada/uname.ads ada/unchconv.ads ada/unchdeal.ads \
+ ada/urealp.ads ada/validsw.ads ada/widechar.ads
ada/sem_dist.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3546,18 +3556,18 @@ ada/sem_elab.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/rtsfind.ads ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb \
ada/sem.ads ada/sem_attr.ads ada/sem_aux.ads ada/sem_cat.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_elab.ads \
- ada/sem_elab.adb ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb \
- ada/sinput.ads ada/sinput.adb ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
- ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
- ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
- ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
- ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
- ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
- ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
- ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_elab.adb ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sinfo.ads \
+ ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
+ ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \
+ ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
+ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
+ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
+ ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+ ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+ ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/sem_elim.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
@@ -3594,19 +3604,19 @@ ada/sem_eval.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch4.ads ada/sem_ch6.ads ada/sem_ch8.ads ada/sem_disp.ads \
ada/sem_dist.ads ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads \
ada/sem_eval.adb ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/stringt.adb ada/style.ads ada/styleg.ads \
- ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
- ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
- ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
- ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
+ ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
+ ada/system.ads ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads \
+ ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
+ ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
+ ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/widechar.ads
ada/sem_intr.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3662,21 +3672,22 @@ ada/sem_prag.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads ada/sem_elab.ads \
ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_intr.ads \
ada/sem_mech.ads ada/sem_prag.ads ada/sem_prag.adb ada/sem_res.ads \
- ada/sem_res.adb ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
- ada/sem_vfpt.ads ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb \
- ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb ada/snames.ads \
- ada/snames.adb ada/stand.ads ada/stringt.ads ada/stringt.adb \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
- ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
- ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
- ada/ttypes.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \
- ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
- ada/urealp.adb ada/validsw.ads ada/widechar.ads
+ ada/sem_res.adb ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads \
+ ada/sem_util.adb ada/sem_vfpt.ads ada/sem_warn.ads ada/sinfo.ads \
+ ada/sinfo.adb ada/sinfo-cn.ads ada/sinput.ads ada/sinput.adb \
+ ada/snames.ads ada/snames.adb ada/stand.ads ada/stringt.ads \
+ ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \
+ ada/s-exctab.ads ada/s-exctab.adb ada/s-htable.ads ada/s-imenne.ads \
+ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tbuild.adb \
+ ada/tree_io.ads ada/ttypes.ads ada/types.ads ada/types.adb \
+ ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
+ ada/unchdeal.ads ada/urealp.ads ada/urealp.adb ada/validsw.ads \
+ ada/widechar.ads
ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3699,21 +3710,35 @@ ada/sem_res.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/sem_ch13.ads ada/sem_ch3.ads ada/sem_ch4.ads ada/sem_ch6.ads \
ada/sem_ch7.ads ada/sem_ch8.ads ada/sem_disp.ads ada/sem_dist.ads \
ada/sem_elab.ads ada/sem_elim.ads ada/sem_eval.ads ada/sem_eval.adb \
- ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb ada/sem_type.ads \
- ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
- ada/sprint.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-exctab.ads \
+ ada/sem_intr.ads ada/sem_res.ads ada/sem_res.adb ada/sem_scil.ads \
+ ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
+ ada/snames.ads ada/sprint.ads ada/stand.ads ada/stringt.ads \
+ ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \
+ ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
+ ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
+ ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
+ ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
+ ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+ ada/targparm.ads ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb \
+ ada/uname.ads ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads \
+ ada/urealp.adb ada/validsw.ads ada/widechar.ads
+
+ada/sem_scil.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
+ ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
+ ada/casing.ads ada/debug.ads ada/einfo.ads ada/einfo.adb ada/gnat.ads \
+ ada/g-htable.ads ada/hostparm.ads ada/namet.ads ada/nlists.ads \
+ ada/nlists.adb ada/nmake.ads ada/opt.ads ada/output.ads ada/rtsfind.ads \
+ ada/sem.ads ada/sem_aux.ads ada/sem_scil.ads ada/sem_scil.adb \
+ ada/sem_util.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/system.ads ada/s-exctab.ads \
ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
- ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
- ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
- ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
- ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
- ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
- ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
- ada/validsw.ads ada/widechar.ads
+ ada/s-parame.ads ada/s-stalib.ads ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
+ ada/tree_io.ads ada/types.ads ada/uintp.ads ada/uintp.adb \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads
ada/sem_smem.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3743,18 +3768,18 @@ ada/sem_type.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_attr.ads \
ada/sem_aux.ads ada/sem_ch12.ads ada/sem_ch6.ads ada/sem_ch8.ads \
ada/sem_disp.ads ada/sem_dist.ads ada/sem_eval.ads ada/sem_res.ads \
- ada/sem_type.ads ada/sem_type.adb ada/sem_util.ads ada/sem_util.adb \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/snames.ads ada/stand.ads \
- ada/stringt.ads ada/style.ads ada/styleg.ads ada/styleg.adb \
- ada/stylesw.ads ada/system.ads ada/s-crc32.ads ada/s-exctab.ads \
- ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads \
- ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads \
- ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb \
- ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
- ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
- ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads ada/types.ads \
- ada/uintp.ads ada/uintp.adb ada/uname.ads ada/unchconv.ads \
- ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_type.adb ada/sem_util.ads \
+ ada/sem_util.adb ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
+ ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
+ ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
+ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/sem_util.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/a-uncdea.ads ada/alloc.ads ada/atree.ads ada/atree.adb \
@@ -3771,19 +3796,19 @@ ada/sem_util.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads ada/sem_attr.ads \
ada/sem_aux.ads ada/sem_cat.ads ada/sem_ch6.ads ada/sem_ch8.ads \
ada/sem_disp.ads ada/sem_eval.ads ada/sem_eval.adb ada/sem_res.ads \
- ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads \
- ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
- ada/snames.ads ada/stand.ads ada/stringt.ads ada/stringt.adb \
- ada/style.ads ada/styleg.ads ada/styleg.adb ada/stylesw.ads \
- ada/system.ads ada/s-carun8.ads ada/s-crc32.ads ada/s-crc32.adb \
- ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb ada/s-imenne.ads \
- ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
- ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
- ada/s-stoele.ads ada/s-stoele.adb ada/s-strhas.ads ada/s-string.ads \
- ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads \
- ada/table.ads ada/table.adb ada/targparm.ads ada/tbuild.ads \
- ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads ada/types.ads \
- ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_scil.ads ada/sem_type.ads ada/sem_util.ads ada/sem_util.adb \
+ ada/sem_warn.ads ada/sinfo.ads ada/sinfo.adb ada/sinput.ads \
+ ada/sinput.adb ada/snames.ads ada/stand.ads ada/stringt.ads \
+ ada/stringt.adb ada/style.ads ada/styleg.ads ada/styleg.adb \
+ ada/stylesw.ads ada/system.ads ada/s-carun8.ads ada/s-crc32.ads \
+ ada/s-crc32.adb ada/s-exctab.ads ada/s-htable.ads ada/s-htable.adb \
+ ada/s-imenne.ads ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads \
+ ada/s-rident.ads ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads \
+ ada/s-stalib.ads ada/s-stoele.ads ada/s-stoele.adb ada/s-strhas.ads \
+ ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads ada/s-utf_32.ads \
+ ada/s-wchcon.ads ada/table.ads ada/table.adb ada/targparm.ads \
+ ada/tbuild.ads ada/tbuild.adb ada/tree_io.ads ada/ttypes.ads \
+ ada/types.ads ada/types.adb ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/urealp.adb \
ada/widechar.ads
@@ -3814,18 +3839,18 @@ ada/sem_warn.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
ada/output.ads ada/par_sco.ads ada/rident.ads ada/rtsfind.ads \
ada/scans.ads ada/scn.ads ada/scng.ads ada/scng.adb ada/sem.ads \
ada/sem_attr.ads ada/sem_aux.ads ada/sem_ch8.ads ada/sem_disp.ads \
- ada/sem_eval.ads ada/sem_res.ads ada/sem_type.ads ada/sem_util.ads \
- ada/sem_util.adb ada/sem_warn.ads ada/sem_warn.adb ada/sinfo.ads \
- ada/sinfo.adb ada/sinput.ads ada/sinput.adb ada/snames.ads \
- ada/stand.ads ada/stringt.ads ada/style.ads ada/styleg.ads \
- ada/styleg.adb ada/stylesw.ads ada/system.ads ada/s-crc32.ads \
- ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads ada/s-memory.ads \
- ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads ada/s-secsta.ads \
- ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads ada/s-stoele.ads \
- ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads ada/s-unstyp.ads \
- ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads ada/table.adb \
- ada/targparm.ads ada/tbuild.ads ada/tree_io.ads ada/ttypes.ads \
- ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
+ ada/sem_eval.ads ada/sem_res.ads ada/sem_scil.ads ada/sem_type.ads \
+ ada/sem_util.ads ada/sem_util.adb ada/sem_warn.ads ada/sem_warn.adb \
+ ada/sinfo.ads ada/sinfo.adb ada/sinput.ads ada/sinput.adb \
+ ada/snames.ads ada/stand.ads ada/stringt.ads ada/style.ads \
+ ada/styleg.ads ada/styleg.adb ada/stylesw.ads ada/system.ads \
+ ada/s-crc32.ads ada/s-exctab.ads ada/s-htable.ads ada/s-imenne.ads \
+ ada/s-memory.ads ada/s-os_lib.ads ada/s-parame.ads ada/s-rident.ads \
+ ada/s-secsta.ads ada/s-soflin.ads ada/s-stache.ads ada/s-stalib.ads \
+ ada/s-stoele.ads ada/s-stoele.adb ada/s-string.ads ada/s-traent.ads \
+ ada/s-unstyp.ads ada/s-utf_32.ads ada/s-wchcon.ads ada/table.ads \
+ ada/table.adb ada/targparm.ads ada/tbuild.ads ada/tree_io.ads \
+ ada/ttypes.ads ada/types.ads ada/uintp.ads ada/uintp.adb ada/uname.ads \
ada/unchconv.ads ada/unchdeal.ads ada/urealp.ads ada/widechar.ads
ada/sinfo-cn.o : ada/ada.ads ada/a-except.ads ada/a-unccon.ads \
diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
index 0e8080853fa..d487716cc53 100644
--- a/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc/ada/gcc-interface/Makefile.in
@@ -1052,7 +1052,7 @@ ifeq ($(strip $(filter-out %86 linux%,$(arch) $(osys))),)
endif
THREADSLIB = -lpthread
- EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o g-ssinty.o
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
endif
@@ -1593,7 +1593,7 @@ ifeq ($(strip $(filter-out cygwin32% mingw32% pe,$(osys))),)
endif
EXTRA_GNATRTL_NONTASKING_OBJS = \
- s-win32.o s-winext.o g-regist.o g-sse.o g-ssvety.o g-ssinty.o
+ s-win32.o s-winext.o g-regist.o g-sse.o g-ssvety.o
EXTRA_GNATRTL_TASKING_OBJS = a-exetim.o
MISCLIB = -lws2_32
@@ -2003,7 +2003,7 @@ ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
indepsw.adb<indepsw-gnu.adb
- EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o g-ssinty.o
+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
EH_MECHANISM=-gcc
THREADSLIB=-lpthread
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 12599675d83..0dcc5937e1a 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -3494,7 +3494,11 @@ gnat_to_gnu (Node_Id gnat_node)
If we are in the elaboration procedure, check if we are violating a
No_Elaboration_Code restriction by having a statement there. */
if ((IN (Nkind (gnat_node), N_Statement_Other_Than_Procedure_Call)
- && Nkind (gnat_node) != N_Null_Statement)
+ && Nkind (gnat_node) != N_Null_Statement
+ && Nkind (gnat_node) != N_SCIL_Dispatch_Table_Object_Init
+ && Nkind (gnat_node) != N_SCIL_Dispatch_Table_Tag_Init
+ && Nkind (gnat_node) != N_SCIL_Dispatching_Call
+ && Nkind (gnat_node) != N_SCIL_Tag_Init)
|| Nkind (gnat_node) == N_Procedure_Call_Statement
|| Nkind (gnat_node) == N_Label
|| Nkind (gnat_node) == N_Implicit_Label_Declaration
@@ -5290,6 +5294,15 @@ gnat_to_gnu (Node_Id gnat_node)
gnu_result = alloc_stmt_list ();
break;
+ /* SCIL nodes require no processing by this backend */
+
+ case N_SCIL_Dispatch_Table_Object_Init:
+ case N_SCIL_Dispatch_Table_Tag_Init:
+ case N_SCIL_Dispatching_Call:
+ case N_SCIL_Tag_Init:
+ gnu_result = alloc_stmt_list ();
+ break;
+
case N_Raise_Statement:
case N_Function_Specification:
case N_Procedure_Specification:
diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb
index 199e3ffb8da..ca4fe86c8f6 100644
--- a/gcc/ada/gnat1drv.adb
+++ b/gcc/ada/gnat1drv.adb
@@ -112,9 +112,12 @@ procedure Gnat1drv is
procedure Adjust_Global_Switches is
begin
- -- Debug flag -gnatd.I is a synonym of Generate_SCIL
+ -- Debug flag -gnatd.I is a synonym for Generate_SCIL and requires code
+ -- generation.
- if Debug_Flag_Dot_II then
+ if Debug_Flag_Dot_II
+ and then Operating_Mode = Generate_Code
+ then
Generate_SCIL := True;
end if;
@@ -460,25 +463,6 @@ procedure Gnat1drv is
end if;
end Check_Bad_Body;
- --------------------
- -- Check_Rep_Info --
- --------------------
-
- procedure Check_Rep_Info is
- begin
- if List_Representation_Info /= 0
- or else List_Representation_Info_Mechanisms
- then
- Set_Standard_Error;
- Write_Eol;
- Write_Str
- ("cannot generate representation information, no code generated");
- Write_Eol;
- Write_Eol;
- Set_Standard_Output;
- end if;
- end Check_Rep_Info;
-
-------------------------
-- Check_Library_Items --
-------------------------
@@ -508,6 +492,25 @@ procedure Gnat1drv is
Walk;
end Check_Library_Items;
+ --------------------
+ -- Check_Rep_Info --
+ --------------------
+
+ procedure Check_Rep_Info is
+ begin
+ if List_Representation_Info /= 0
+ or else List_Representation_Info_Mechanisms
+ then
+ Set_Standard_Error;
+ Write_Eol;
+ Write_Str
+ ("cannot generate representation information, no code generated");
+ Write_Eol;
+ Write_Eol;
+ Set_Standard_Output;
+ end if;
+ end Check_Rep_Info;
+
-- Start of processing for Gnat1drv
begin
diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi
index 14a7a8f733f..1f26563397b 100644
--- a/gcc/ada/gnat_rm.texi
+++ b/gcc/ada/gnat_rm.texi
@@ -382,7 +382,6 @@ The GNAT Library
* GNAT.Spitbol.Table_Integer (g-sptain.ads)::
* GNAT.Spitbol.Table_VString (g-sptavs.ads)::
* GNAT.SSE (g-sse.ads)::
-* GNAT.SSE.Internal_Types (g-ssinty.ads)::
* GNAT.SSE.Vector_Types (g-ssvety.ads)::
* GNAT.Strings (g-string.ads)::
* GNAT.String_Split (g-strspl.ads)::
@@ -13572,7 +13571,6 @@ of GNAT, and will generate a warning message.
* GNAT.Spitbol.Table_Integer (g-sptain.ads)::
* GNAT.Spitbol.Table_VString (g-sptavs.ads)::
* GNAT.SSE (g-sse.ads)::
-* GNAT.SSE.Internal_Types (g-ssinty.ads)::
* GNAT.SSE.Vector_Types (g-ssvety.ads)::
* GNAT.Strings (g-string.ads)::
* GNAT.String_Split (g-strspl.ads)::
@@ -14643,15 +14641,6 @@ the Intel(r) Streaming SIMD Extensions with GNAT on the x86 family of
targets. It exposes vector component types together with a general
introduction to the binding contents and use.
-@node GNAT.SSE.Internal_Types (g-ssinty.ads)
-@section @code{GNAT.SSE.Internal_Types} (@file{g-ssinty.ads})
-@cindex @code{GNAT.SSE.Internal_Types} (@file{g-ssinty.ads})
-
-@noindent
-Low level GCC vector types for direct use of the vector related
-builtins, required for the development of higher level bindings to SSE
-intrinsic operations.
-
@node GNAT.SSE.Vector_Types (g-ssvety.ads)
@section @code{GNAT.SSE.Vector_Types} (@file{g-ssvety.ads})
@cindex @code{GNAT.SSE.Vector_Types} (@file{g-ssvety.ads})
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index c2bcfbefe49..d3ed3458203 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -490,6 +490,7 @@ Verifying Properties Using gnatcheck
* gnatcheck Rule Options::
* Adding the Results of Compiler Checks to gnatcheck Output::
* Project-Wide Checks::
+* Rule exemption::
* Predefined Rules::
Sample Bodies Using gnatstub
@@ -15590,6 +15591,13 @@ Do not look for sources in the system default directory.
@cindex @option{-nostdlib} (@command{gnatfind})
Do not look for library files in the system default directory.
+@item --ext=@var{extension}
+@cindex @option{--ext} (@command{gnatfind})
+Specify an alternate ali file extension. The default is @code{ali} and other
+extensions (e.g. @code{sli} for SPARK library files) may be specified via this
+switch. Note that if this switch overrides the default, which means that only
+the new extension will be considered.
+
@item --RTS=@var{rts-path}
@cindex @option{--RTS} (@command{gnatfind})
Specifies the default location of the runtime library. Same meaning as the
@@ -20689,6 +20697,7 @@ Either a @file{@var{filename}} or an @file{@var{arg_list_filename}} must be supp
* gnatcheck Rule Options::
* Adding the Results of Compiler Checks to gnatcheck Output::
* Project-Wide Checks::
+* Rule exemption::
* Predefined Rules::
@end menu
@@ -20705,14 +20714,13 @@ named named @file{^gnatcheck.out^GNATCHECK.OUT^} and it is located in the curren
directory, @option{^-o^/OUTPUT^} option can be used to change the name and/or
location of the report file. This report contains:
@itemize @bullet
-@item a list of the Ada source files being checked,
-@item a list of enabled and disabled rules,
-@item a list of the diagnostic messages, ordered in three different ways
-and collected in three separate
-sections. Section 1 contains the raw list of diagnostic messages. It
-corresponds to the output going to @file{stdout}. Section 2 contains
-messages ordered by rules.
-Section 3 contains messages ordered by source files.
+@item date and time of @command{gnatcheck} run, the version of
+the tool that has generated this report and the full paarmeters
+of the @command{gnatcheck} invocation;
+@item the list of enabled rules;
+@item the total number of detected violations;
+@item list of source files for that rule violations have been detected;
+@item list of source files with no violations detected;
@end itemize
@node General gnatcheck Switches
@@ -20940,6 +20948,108 @@ the @option{-U} option followed by the name of the main unit:
@end smallexample
+@node Rule exemption
+@section Rule exemption
+@cindex Rule exemption (for @command{gnatcheck})
+
+@noindent
+@command{gnatcheck} can be used to inforce a coding standard. It may be
+appropriate, in some circumstances, to accept violations of the coding
+standard. In such a case, it is a good idea to justify the violation within
+the sources themselves. It makes it possible to maintain the justification
+for such violations along with the sources containing them.
+@command{gnatcheck} supports such justified violations with the notion of
+``exemption'' covering a specific source code section. Usually,
+@command{gnatcheck} issues rule violation messages both on @file{stderr}
+and in a report file. Exempted violations are not reported at all on
+@file{stderr} so that users using @command{gnatcheck} in interactive mode
+(e.g. in its GPS interface) do not need to pay attention to known and
+justified violations. The @command{gnatcheck} report includes exempted
+violations in a special section along with their justification.
+
+@menu
+* Using pragma Annotate to Control Rule Exemption::
+* gnatcheck Annotations Rules::
+@end menu
+
+@node Using pragma Annotate to Control Rule Exemption
+@subsection Using pragma @code{Annotate} to Control Rule Exemption
+@cindex Using pragma Annotate to control rule exemption
+
+@noindent
+Rule exemption is controlled by pragma @code{Annotate} when its first parameter is
+``gnatcheck''. Here is the syntax of @command{gnatcheck} annotations:
+
+@smallexample @c ada
+pragma Annotate (gnatcheck, exemption_control, Rule_Name, [justification]);
+
+exemption_control ::= "Exempt_On" | "Exempt_Off"
+
+Rule_Name ::= string_literal
+
+justification ::= string_literal
+
+@end smallexample
+
+@noindent
+When a @command{gnatcheck} annotatation has more then four parameters,
+@command{gnatcheck} issues a warning and ignore additional parameters.
+If the additional parameters do not follow the syntax above,
+@command{gnatcheck} emits a warning and ignores the annotation.
+
+@code{Rule_Name} should be the name of some existing @command{gnatcheck} rule.
+If this is not the case, the warning message is generated and the pragma is
+ignored. If @code{Rule_Name} denotes a rule that is not activated by the given
+@command{gnatcheck} call, the pragma is ignored silently.
+
+A source code section where an exemption is active for a given rule starts with
+an extempt_on annotation and terminates with an exempt_off one:
+
+@smallexample @c ada
+pragma Annotate (gnatcheck, "Exempt_On", Rule_Name, "justification");
+-- source code section
+pragma Annotate (gnatcheck, "Exempt_Off", Rule_Name);
+@end smallexample
+
+
+@node gnatcheck Annotations Rules
+@subsection @command{gnatcheck} Annotations Rules
+@cindex @command{gnatcheck} annotations rules
+
+@itemize @bullet
+
+@item
+an ``Exempt_Off'' annotation can only appear after a corresponding
+``Exempt_On'' annotation in order to create a properly formed exempted source
+code section;
+
+@item
+exempted source code sections are only based on the source location of the
+annotations. Any source construct having a source location in between the two
+annotations is part of the exempted source code section;
+
+@item
+exempted source code sections for different rules are independent. They can
+be nested or intersect with one another without limitation. It is not allowed
+to create nested or intersecting source code sections for the same rule;
+
+@item
+malformed exempted source code sections are reported by a warning and
+the corresponding rule exemption is ignored;
+
+@item
+when an exempted source code section does not contain at least one violation
+of the exempted rule, a warning is emitted on @file{stderr}. This allow proper
+maintenance of exempted source code sections;
+
+@item
+if an exempted source code section reaches the end of the compilation unit
+source and there is no @code{Annotate} pragma closing this section, then the
+exemption for the given rule is turned off and a warning is issued.
+
+@end itemize
+
+
@node Predefined Rules
@section Predefined Rules
@cindex Predefined rules (for @command{gnatcheck})
@@ -21209,20 +21319,23 @@ This rule has no parameters.
@cindex @code{Complex_Inlined_Subprograms} rule (for @command{gnatcheck})
@noindent
-Flags the body of a subprogram (or generic subprogram) if
-pragma Inline has been applied to the subprogram but the body
-is too complex to be expanded inline.
-
-A subprogram (or generic subprogram) is considered too complex for inline
-expansion if its body meets at least one of the following conditions:
+Flags a subprogram (or generic subprogram) if
+pragma Inline is applied to the subprogram and at least one of the following
+conditions is met:
@itemize @bullet
@item
-The number of local declarations and statements exceeds
-a value specified by the @option{N} rule parameter;
+it contains at least one complex declaration such as a subprogram body,
+package, task, protected declaration, or a generic instantiation
+(except instantiation of @code{Ada.Unchecked_Conversion});
+
+@item
+it contains at least one complex statement such as a loop, a case
+or a if statement, or a short circuit control form;
@item
-The body contains a @code{loop}, @code{if} or @code{case} statement;
+the number of statements exceeds
+a value specified by the @option{N} rule parameter;
@end itemize
@noindent
@@ -21230,8 +21343,8 @@ This rule has the following (mandatory) parameter for the @option{+R} option:
@table @emph
@item N
-Positive integer specifying the maximum allowed total number of local
-declarations and statements in the subprogram body.
+Positive integer specifying the maximum allowed total number of statements
+in the subprogram body.
@end table
@@ -21252,15 +21365,15 @@ This rule has no parameters.
@cindex @code{Deep_Inheritance_Hierarchies} rule (for @command{gnatcheck})
@noindent
-Flags a tagged derived type declaration if its depth (in its inheritance
+Flags a tagged derived type declaration or an interface type declaration if
+its depth (in its inheritance
hierarchy) exceeds the value specified by the @option{N} rule parameter.
-The depth of a root tagged type (ie, a tagged type that is not a derived type)
-is 0.
-If tagged type T2 derives directly from tagged type T1, then the depth of T2
-is one more than the depth of T1.
+The inheritance depth of a tagged type or interface type is defined as 0 for
+a type with no parent and no progenitor, and otherwise as 1 + max of the
+depths of the immediate parent and immediate progenitors.
-This rule does not flag interface types or private extension
+This rule does not flag private extension
declarations. In the case of a private extension, the correspondong full
declaration is checked.
@@ -21268,8 +21381,9 @@ This rule has the following (mandatory) parameter for the @option{+R} option:
@table @emph
@item N
-Positive integer specifying the maximal allowed depth of any inheritance
-hierarchy.
+Integer not less then -1 specifying the maximal allowed depth of any inheritance
+hierarchy. If the rule parameter is set to -1, the rule flags all the declarations
+of tagged and interface types.
@end table
@@ -21297,23 +21411,12 @@ for a generic declaration.
@cindex @code{Deeply_Nested_Inlining} rule (for @command{gnatcheck})
@noindent
-Flags the body of a subprogram (or generic subprogram) if
-pragma Inline has been applied to the subprogram but the body
-contains a call to another inlined subprogram that results in nested inlining
+Flags a subprogram (or generic subprogram) if
+pragma Inline has been applied to the subprogram but the subprogram
+calls to another inlined subprogram that results in nested inlining
with nesting depth exceeding the value specified by the
@option{N} rule parameter.
-This rule assumes that pragma Inline applies equally to calls on
-subprograms regardless of whether the subprogram declaration appears in the
-same compilation unit as the call, or in a separately compiled
-(e.g., @i{with}ed) unit.
-
-This rule may be useful when either the @option{-gnatn} or @option{-gnatN}
-option is used.
-
-If a subprogram should be flagged according to this rule, the body declaration
-is flagged only if it is not a completion of a subprogram declaration.
-
This rule requires the global analysis of all the compilation units that
are @command{gnatcheck} arguments; such analysis may affect the tool's
performance.
@@ -22679,9 +22782,14 @@ This rule has no parameters.
Flag each function returning an unconstrained array. Function declarations,
function bodies (and body stubs) having no separate specifications,
and generic function instantiations are checked.
-Generic function declarations, function calls and function renamings are
+Function calls and function renamings are
not checked.
+Generic function declarations, and function declarations in generic
+packages are not checked, instead this rule checks the results of
+generic instantiations (that is, expanded specification and expanded
+body corresponding to an instantiation).
+
This rule has no parameters.
@node Universal_Ranges
@@ -24852,7 +24960,7 @@ GNAT always follows the Alpha implementation.
For GNAT running on other than VMS systems, all the HP Ada 83 pragmas and
attributes are recognized, although only a subset of them can sensibly
be implemented. The description of pragmas in
-@xref{Implementation Defined Pragmas,,, gnat_rm, GNAT Reference Manual}
+@xref{Implementation Defined Pragmas,,, gnat_rm, GNAT Reference Manual},
indicates whether or not they are applicable to non-VMS systems.
@menu
@@ -25299,7 +25407,7 @@ pragma Extend_System (Aux_DEC);
@noindent
The pragma @code{Extend_System} is a configuration pragma that
is most conveniently placed in the @file{gnat.adc} file. @xref{Pragma
-Extend_System,,, gnat_rm, GNAT Reference Manual} for further details.
+Extend_System,,, gnat_rm, GNAT Reference Manual}, for further details.
HP Ada does not allow the recompilation of the package
@code{SYSTEM}. Instead HP Ada provides several pragmas
@@ -25330,7 +25438,7 @@ are virtually identical to those provided by the HP Ada 83 package
@code{TO_ADDRESS}
function for type @code{UNSIGNED_LONGWORD} is changed to
@code{TO_ADDRESS_LONG}.
-@xref{Address Clauses,,, gnat_rm, GNAT Reference Manual} for a
+@xref{Address Clauses,,, gnat_rm, GNAT Reference Manual}, for a
discussion of why this change was necessary.
@noindent
diff --git a/gcc/ada/gnatfind.adb b/gcc/ada/gnatfind.adb
index 69415ef963e..8af7b9e4f8b 100644
--- a/gcc/ada/gnatfind.adb
+++ b/gcc/ada/gnatfind.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1998-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -64,6 +64,9 @@ procedure Gnatfind is
RTS_Specified : String_Access := null;
-- Used to detect multiple use of --RTS= switch
+ EXT_Specified : String_Access := null;
+ -- Used to detect multiple use of --ext= switch
+
procedure Parse_Cmd_Line;
-- Parse every switch on the command line
@@ -95,7 +98,7 @@ procedure Gnatfind is
loop
case
GNAT.Command_Line.Getopt
- ("a aI: aO: d e f g h I: nostdinc nostdlib p: r s t -RTS=")
+ ("a aI: aO: d e f g h I: nostdinc nostdlib p: r s t -RTS= -ext=")
is
when ASCII.NUL =>
exit;
@@ -154,45 +157,74 @@ procedure Gnatfind is
-- Only switch starting with -- recognized is --RTS
- when '-' =>
- -- Check that it is the first time we see this switch
-
- if RTS_Specified = null then
- RTS_Specified := new String'(GNAT.Command_Line.Parameter);
-
- elsif RTS_Specified.all /= GNAT.Command_Line.Parameter then
- Osint.Fail ("--RTS cannot be specified multiple times");
- end if;
-
- Opt.No_Stdinc := True;
- Opt.RTS_Switch := True;
-
- declare
- Src_Path_Name : constant String_Ptr :=
- Get_RTS_Search_Dir
- (GNAT.Command_Line.Parameter, Include);
- Lib_Path_Name : constant String_Ptr :=
- Get_RTS_Search_Dir
- (GNAT.Command_Line.Parameter, Objects);
+ when '-' =>
+ if GNAT.Command_Line.Full_Switch = "-RTS" then
- begin
- if Src_Path_Name /= null and then Lib_Path_Name /= null then
- Add_Search_Dirs (Src_Path_Name, Include);
- Add_Search_Dirs (Lib_Path_Name, Objects);
+ -- Check that it is the first time we see this switch
- elsif Src_Path_Name = null and then Lib_Path_Name = null then
- Osint.Fail ("RTS path not valid: missing " &
- "adainclude and adalib directories");
+ if RTS_Specified = null then
+ RTS_Specified := new String'(GNAT.Command_Line.Parameter);
+ elsif RTS_Specified.all /= GNAT.Command_Line.Parameter then
+ Osint.Fail ("--RTS cannot be specified multiple times");
+ end if;
- elsif Src_Path_Name = null then
- Osint.Fail ("RTS path not valid: missing " &
- "adainclude directory");
+ Opt.No_Stdinc := True;
+ Opt.RTS_Switch := True;
+
+ declare
+ Src_Path_Name : constant String_Ptr :=
+ Get_RTS_Search_Dir
+ (GNAT.Command_Line.Parameter,
+ Include);
+ Lib_Path_Name : constant String_Ptr :=
+ Get_RTS_Search_Dir
+ (GNAT.Command_Line.Parameter,
+ Objects);
+
+ begin
+ if Src_Path_Name /= null
+ and then Lib_Path_Name /= null
+ then
+ Add_Search_Dirs (Src_Path_Name, Include);
+ Add_Search_Dirs (Lib_Path_Name, Objects);
+
+ elsif Src_Path_Name = null
+ and then Lib_Path_Name = null
+ then
+ Osint.Fail ("RTS path not valid: missing " &
+ "adainclude and adalib directories");
+
+ elsif Src_Path_Name = null then
+ Osint.Fail ("RTS path not valid: missing " &
+ "adainclude directory");
+
+ elsif Lib_Path_Name = null then
+ Osint.Fail ("RTS path not valid: missing " &
+ "adalib directory");
+ end if;
+ end;
+
+ -- Process -ext switch
+
+ elsif GNAT.Command_Line.Full_Switch = "-ext" then
+
+ -- Check that it is the first time we see this switch
+
+ if EXT_Specified = null then
+ EXT_Specified := new String'(GNAT.Command_Line.Parameter);
+ elsif EXT_Specified.all /= GNAT.Command_Line.Parameter then
+ Osint.Fail ("--ext cannot be specified multiple times");
+ end if;
- elsif Lib_Path_Name = null then
- Osint.Fail ("RTS path not valid: missing " &
- "adalib directory");
+ if
+ EXT_Specified'Length = Osint.ALI_Default_Suffix'Length
+ then
+ Osint.ALI_Suffix := EXT_Specified.all'Access;
+ else
+ Osint.Fail ("--ext argument must have 3 characters");
end if;
- end;
+
+ end if;
when others =>
Write_Usage;
@@ -281,6 +313,7 @@ procedure Gnatfind is
& " directory");
Put_Line (" -nostdlib Don't look for library files in the system"
& " default directory");
+ Put_Line (" --ext=xxx Specify alternate ali file extension");
Put_Line (" --RTS=dir specify the default source and object search"
& " path");
Put_Line (" -p file Use file as the default project file");
diff --git a/gcc/ada/lib-xref.ads b/gcc/ada/lib-xref.ads
index b494454e38e..2e9c8d26439 100644
--- a/gcc/ada/lib-xref.ads
+++ b/gcc/ada/lib-xref.ads
@@ -177,6 +177,7 @@ package Lib.Xref is
-- k = implicit reference to parent unit in child unit
-- l = label on END line
-- m = modification
+ -- o = own variable reference (SPARK only)
-- p = primitive operation
-- P = overriding primitive operation
-- r = reference
@@ -271,6 +272,10 @@ package Lib.Xref is
-- graph construction). Again, in the case of an accept there
-- can be multiple l lines.
+ -- o is used for variables referenced from a SPARK 'own'
+ -- definition. In the SPARK language, it is allowed to use a
+ -- variable before its actual declaration.
+
-- p is used to mark a primitive operation of the given entity.
-- For example, if we have a type Tx, and a primitive operation
-- Pq of this type, then an entry in the list of references to
diff --git a/gcc/ada/make.adb b/gcc/ada/make.adb
index a0f3b0b42fa..998e1e4a2da 100644
--- a/gcc/ada/make.adb
+++ b/gcc/ada/make.adb
@@ -343,8 +343,6 @@ package body Make is
Current_Verbosity : Prj.Verbosity := Prj.Default;
-- Verbosity to parse the project files
- Project_Tree : constant Project_Tree_Ref := new Project_Tree_Data;
-
Main_Project : Prj.Project_Id := No_Project;
-- The project id of the main project file, if any
@@ -557,25 +555,6 @@ package body Make is
procedure List_Bad_Compilations;
-- Prints out the list of all files for which the compilation failed
- procedure Verbose_Msg
- (N1 : Name_Id;
- S1 : String;
- N2 : Name_Id := No_Name;
- S2 : String := "";
- Prefix : String := " -> ";
- Minimum_Verbosity : Verbosity_Level_Type := Opt.Low);
- procedure Verbose_Msg
- (N1 : File_Name_Type;
- S1 : String;
- N2 : File_Name_Type := No_File;
- S2 : String := "";
- Prefix : String := " -> ";
- Minimum_Verbosity : Verbosity_Level_Type := Opt.Low);
- -- If the verbose flag (Verbose_Mode) is set and the verbosity level is
- -- at least equal to Minimum_Verbosity, then print Prefix to standard
- -- output followed by N1 and S1. If N2 /= No_Name then N2 is printed after
- -- S1. S2 is printed last. Both N1 and N2 are printed in quotation marks.
-
Usage_Needed : Boolean := True;
-- Flag used to make sure Makeusg is call at most once
@@ -1434,10 +1413,6 @@ package body Make is
O_File : out File_Name_Type;
O_Stamp : out Time_Stamp_Type)
is
- function File_Not_A_Source_Of
- (Uname : Name_Id;
- Sfile : File_Name_Type) return Boolean;
-
function First_New_Spec (A : ALI_Id) return File_Name_Type;
-- Looks in the with table entries of A and returns the spec file name
-- of the first withed unit (subprogram) for which no spec existed when
@@ -1452,34 +1427,6 @@ package body Make is
-- services, but this causes the whole compiler to be dragged along
-- for gnatbind and gnatmake.
- --------------------------
- -- File_Not_A_Source_Of --
- --------------------------
-
- function File_Not_A_Source_Of
- (Uname : Name_Id;
- Sfile : File_Name_Type) return Boolean
- is
- UID : Prj.Unit_Index;
-
- begin
- UID := Units_Htable.Get (Project_Tree.Units_HT, Uname);
-
- if UID /= Prj.No_Unit_Index then
- if (UID.File_Names (Impl) = null
- or else UID.File_Names (Impl).File /= Sfile)
- and then
- (UID.File_Names (Spec) = null
- or else UID.File_Names (Spec).File /= Sfile)
- then
- Verbose_Msg (Uname, "sources do not include ", Name_Id (Sfile));
- return True;
- end if;
- end if;
-
- return False;
- end File_Not_A_Source_Of;
-
--------------------
-- First_New_Spec --
--------------------
@@ -1855,72 +1802,10 @@ package body Make is
elsif not Read_Only and then Main_Project /= No_Project then
- -- Check if a file name does not correspond to the mapping of
- -- units to file names.
-
- declare
- SD : Sdep_Record;
- WR : With_Record;
- Unit_Name : Name_Id;
-
- begin
- U_Chk :
- for U in ALIs.Table (ALI).First_Unit ..
- ALIs.Table (ALI).Last_Unit
- loop
- -- Check if the file name is one of the source of the
- -- unit.
-
- Get_Name_String (Units.Table (U).Uname);
- Name_Len := Name_Len - 2;
- Unit_Name := Name_Find;
-
- if File_Not_A_Source_Of
- (Unit_Name, Units.Table (U).Sfile)
- then
- ALI := No_ALI_Id;
- return;
- end if;
-
- -- Do the same check for each of the withed units
-
- W_Check :
- for W in Units.Table (U).First_With
- ..
- Units.Table (U).Last_With
- loop
- WR := Withs.Table (W);
-
- if WR.Sfile /= No_File then
- Get_Name_String (WR.Uname);
- Name_Len := Name_Len - 2;
- Unit_Name := Name_Find;
-
- if File_Not_A_Source_Of (Unit_Name, WR.Sfile) then
- ALI := No_ALI_Id;
- return;
- end if;
- end if;
- end loop W_Check;
- end loop U_Chk;
-
- -- Check also the subunits
-
- D_Check :
- for D in ALIs.Table (ALI).First_Sdep ..
- ALIs.Table (ALI).Last_Sdep
- loop
- SD := Sdep.Table (D);
- Unit_Name := SD.Subunit_Name;
-
- if Unit_Name /= No_Name then
- if File_Not_A_Source_Of (Unit_Name, SD.Sfile) then
- ALI := No_ALI_Id;
- return;
- end if;
- end if;
- end loop D_Check;
- end;
+ if not Check_Source_Info_In_ALI (ALI) then
+ ALI := No_ALI_Id;
+ return;
+ end if;
-- Check that the ALI file is in the correct object directory.
-- If it is in the object directory of a project that is
@@ -4772,6 +4657,11 @@ package body Make is
Exit_Program (E_Success);
else
+ -- Call Get_Target_Parameters to ensure that VM_Target and
+ -- AAMP_On_Target get set before calling Usage.
+
+ Targparm.Get_Target_Parameters;
+
-- Output usage information if no files to compile
Usage;
@@ -8235,52 +8125,6 @@ package body Make is
end if;
end Usage;
- -----------------
- -- Verbose_Msg --
- -----------------
-
- procedure Verbose_Msg
- (N1 : Name_Id;
- S1 : String;
- N2 : Name_Id := No_Name;
- S2 : String := "";
- Prefix : String := " -> ";
- Minimum_Verbosity : Verbosity_Level_Type := Opt.Low)
- is
- begin
- if (not Verbose_Mode) or else (Minimum_Verbosity > Verbosity_Level) then
- return;
- end if;
-
- Write_Str (Prefix);
- Write_Str ("""");
- Write_Name (N1);
- Write_Str (""" ");
- Write_Str (S1);
-
- if N2 /= No_Name then
- Write_Str (" """);
- Write_Name (N2);
- Write_Str (""" ");
- end if;
-
- Write_Str (S2);
- Write_Eol;
- end Verbose_Msg;
-
- procedure Verbose_Msg
- (N1 : File_Name_Type;
- S1 : String;
- N2 : File_Name_Type := No_File;
- S2 : String := "";
- Prefix : String := " -> ";
- Minimum_Verbosity : Verbosity_Level_Type := Opt.Low)
- is
- begin
- Verbose_Msg
- (Name_Id (N1), S1, Name_Id (N2), S2, Prefix, Minimum_Verbosity);
- end Verbose_Msg;
-
begin
-- Make sure that in case of failure, the temp files will be deleted
diff --git a/gcc/ada/makeutl.adb b/gcc/ada/makeutl.adb
index 46169d5fa62..c0d9de4d764 100644
--- a/gcc/ada/makeutl.adb
+++ b/gcc/ada/makeutl.adb
@@ -23,9 +23,11 @@
-- --
------------------------------------------------------------------------------
+with ALI; use ALI;
with Debug;
with Osint; use Osint;
with Output; use Output;
+with Opt; use Opt;
with Prj.Ext;
with Prj.Util;
with Snames; use Snames;
@@ -154,6 +156,98 @@ package body Makeutl is
end if;
end Add_Linker_Option;
+ ------------------------------
+ -- Check_Source_Info_In_ALI --
+ ------------------------------
+
+ function Check_Source_Info_In_ALI (The_ALI : ALI_Id) return Boolean is
+ Unit_Name : Name_Id;
+
+ begin
+ -- Loop through units
+
+ for U in ALIs.Table (The_ALI).First_Unit ..
+ ALIs.Table (The_ALI).Last_Unit
+ loop
+ -- Check if the file name is one of the source of the unit
+
+ Get_Name_String (Units.Table (U).Uname);
+ Name_Len := Name_Len - 2;
+ Unit_Name := Name_Find;
+
+ if File_Not_A_Source_Of (Unit_Name, Units.Table (U).Sfile) then
+ return False;
+ end if;
+
+ -- Loop to do same check for each of the withed units
+
+ for W in Units.Table (U).First_With .. Units.Table (U).Last_With loop
+ declare
+ WR : ALI.With_Record renames Withs.Table (W);
+
+ begin
+ if WR.Sfile /= No_File then
+ Get_Name_String (WR.Uname);
+ Name_Len := Name_Len - 2;
+ Unit_Name := Name_Find;
+
+ if File_Not_A_Source_Of (Unit_Name, WR.Sfile) then
+ return False;
+ end if;
+ end if;
+ end;
+ end loop;
+ end loop;
+
+ -- Loop to check subunits
+
+ for D in ALIs.Table (The_ALI).First_Sdep ..
+ ALIs.Table (The_ALI).Last_Sdep
+ loop
+ declare
+ SD : Sdep_Record renames Sdep.Table (D);
+
+ begin
+ Unit_Name := SD.Subunit_Name;
+
+ if Unit_Name /= No_Name then
+
+ -- For separates, the file is no longer associated with the
+ -- unit ("proc-sep.adb" is not associated with unit "proc.sep".
+ -- So we need to check whether the source file still exists in
+ -- the source tree: it will if it matches the naming scheme
+ -- (and then will be for the same unit).
+
+ if Find_Source
+ (In_Tree => Project_Tree,
+ Project => No_Project,
+ Base_Name => SD.Sfile) = No_Source
+ then
+ -- If this is not a runtime file (when using -a) ? Otherwise
+ -- we get complaints about a-except.adb, which uses
+ -- separates.
+
+ if not Check_Readonly_Files
+ or else Find_File (SD.Sfile, Osint.Source) = No_File
+ then
+ if Verbose_Mode then
+ Write_Line
+ ("While parsing ALI file: Sdep associates "
+ & Get_Name_String (SD.Sfile)
+ & " with unit " & Get_Name_String (Unit_Name)
+ & " but this does not match what was found while"
+ & " parsing the project. Will recompile");
+ end if;
+ return False;
+ end if;
+ end if;
+ end if;
+ end;
+ end loop;
+
+ return True;
+ end Check_Source_Info_In_ALI;
+
-----------------
-- Create_Name --
-----------------
@@ -264,6 +358,47 @@ package body Makeutl is
end;
end Executable_Prefix_Path;
+ --------------------------
+ -- File_Not_A_Source_Of --
+ --------------------------
+
+ function File_Not_A_Source_Of
+ (Uname : Name_Id;
+ Sfile : File_Name_Type) return Boolean
+ is
+ Unit : constant Unit_Index :=
+ Units_Htable.Get (Project_Tree.Units_HT, Uname);
+
+ At_Least_One_File : Boolean := False;
+
+ begin
+ if Unit /= No_Unit_Index then
+ for F in Unit.File_Names'Range loop
+ if Unit.File_Names (F) /= null then
+ At_Least_One_File := True;
+ if Unit.File_Names (F).File = Sfile then
+ return False;
+ end if;
+ end if;
+ end loop;
+
+ if not At_Least_One_File then
+
+ -- The unit was probably created initially for a separate unit
+ -- (which are initially created as IMPL when both suffixes are the
+ -- same). Later on, Override_Kind changed the type of the file,
+ -- and the unit is no longer valid in fact.
+
+ return False;
+ end if;
+
+ Verbose_Msg (Uname, "sources do not include ", Name_Id (Sfile));
+ return True;
+ end if;
+
+ return False;
+ end File_Not_A_Source_Of;
+
----------
-- Hash --
----------
@@ -749,4 +884,52 @@ package body Makeutl is
return Result;
end Unit_Index_Of;
+ -----------------
+ -- Verbose_Msg --
+ -----------------
+
+ procedure Verbose_Msg
+ (N1 : Name_Id;
+ S1 : String;
+ N2 : Name_Id := No_Name;
+ S2 : String := "";
+ Prefix : String := " -> ";
+ Minimum_Verbosity : Opt.Verbosity_Level_Type := Opt.Low)
+ is
+ begin
+ if not Opt.Verbose_Mode
+ or else Minimum_Verbosity > Opt.Verbosity_Level
+ then
+ return;
+ end if;
+
+ Write_Str (Prefix);
+ Write_Str ("""");
+ Write_Name (N1);
+ Write_Str (""" ");
+ Write_Str (S1);
+
+ if N2 /= No_Name then
+ Write_Str (" """);
+ Write_Name (N2);
+ Write_Str (""" ");
+ end if;
+
+ Write_Str (S2);
+ Write_Eol;
+ end Verbose_Msg;
+
+ procedure Verbose_Msg
+ (N1 : File_Name_Type;
+ S1 : String;
+ N2 : File_Name_Type := No_File;
+ S2 : String := "";
+ Prefix : String := " -> ";
+ Minimum_Verbosity : Opt.Verbosity_Level_Type := Opt.Low)
+ is
+ begin
+ Verbose_Msg
+ (Name_Id (N1), S1, Name_Id (N2), S2, Prefix, Minimum_Verbosity);
+ end Verbose_Msg;
+
end Makeutl;
diff --git a/gcc/ada/makeutl.ads b/gcc/ada/makeutl.ads
index ae55ebbe62a..1dff5a16aa1 100644
--- a/gcc/ada/makeutl.ads
+++ b/gcc/ada/makeutl.ads
@@ -23,7 +23,9 @@
-- --
------------------------------------------------------------------------------
+with ALI;
with Namet; use Namet;
+with Opt;
with Osint;
with Prj; use Prj;
with Types; use Types;
@@ -34,8 +36,8 @@ package Makeutl is
type Fail_Proc is access procedure (S : String);
Do_Fail : Fail_Proc := Osint.Fail'Access;
- -- Failing procedure called from procedure Test_If_Relative_Path below.
- -- May be redirected.
+ -- Failing procedure called from procedure Test_If_Relative_Path below. May
+ -- be redirected.
Project_Tree : constant Project_Tree_Ref := new Project_Tree_Data;
-- The project tree
@@ -69,6 +71,18 @@ package Makeutl is
procedure Inform (N : File_Name_Type; Msg : String);
-- Prints out the program name followed by a colon, N and S
+ function File_Not_A_Source_Of
+ (Uname : Name_Id;
+ Sfile : File_Name_Type) return Boolean;
+ -- Check that file name Sfile is one of the source of unit Uname. Returns
+ -- True if the unit is in one of the project file, but the file name is not
+ -- one of its source. Returns False otherwise.
+
+ function Check_Source_Info_In_ALI (The_ALI : ALI.ALI_Id) return Boolean;
+ -- Check whether all file references in ALI are still valid (ie the
+ -- source files are still associated with the same units). Return True
+ -- if everything is still valid
+
function Is_External_Assignment (Argv : String) return Boolean;
-- Verify that an external assignment switch is syntactically correct
--
@@ -78,9 +92,30 @@ package Makeutl is
-- -X"name=other value"
--
-- Assumptions: 'First = 1, Argv (1 .. 2) = "-X"
- -- When this function returns True, the external assignment has
- -- been entered by a call to Prj.Ext.Add, so that in a project
- -- file, External ("name") will return "value".
+ --
+ -- When this function returns True, the external assignment has been
+ -- entered by a call to Prj.Ext.Add, so that in a project file, External
+ -- ("name") will return "value".
+
+ procedure Verbose_Msg
+ (N1 : Name_Id;
+ S1 : String;
+ N2 : Name_Id := No_Name;
+ S2 : String := "";
+ Prefix : String := " -> ";
+ Minimum_Verbosity : Opt.Verbosity_Level_Type := Opt.Low);
+ procedure Verbose_Msg
+ (N1 : File_Name_Type;
+ S1 : String;
+ N2 : File_Name_Type := No_File;
+ S2 : String := "";
+ Prefix : String := " -> ";
+ Minimum_Verbosity : Opt.Verbosity_Level_Type := Opt.Low);
+ -- If the verbose flag (Verbose_Mode) is set and the verbosity level is
+ -- at least equal to Minimum_Verbosity, then print Prefix to standard
+ -- output followed by N1 and S1. If N2 /= No_Name then N2 is printed after
+ -- S1. S2 is printed last. Both N1 and N2 are printed in quotation marks.
+ -- The two forms differ only in taking Name_Id or File_name_Type arguments.
function Linker_Options_Switches
(Project : Project_Id;
@@ -94,8 +129,8 @@ package Makeutl is
-- files exist and that they belong to a project file.
function Unit_Index_Of (ALI_File : File_Name_Type) return Int;
- -- Find the index of a unit in a source file. Return zero if the file
- -- is not a multi-unit source file.
+ -- Find the index of a unit in a source file. Return zero if the file is
+ -- not a multi-unit source file.
package Mains is
@@ -116,8 +151,8 @@ package Makeutl is
-- Reset the index to the beginning of the table
function Next_Main return String;
- -- Increase the index and return the next main.
- -- If table is exhausted, return an empty string.
+ -- Increase the index and return the next main. If table is exhausted,
+ -- return an empty string.
function Get_Location return Source_Ptr;
-- Get the location of the current main
@@ -137,12 +172,12 @@ package Makeutl is
Including_L_Switch : Boolean := True;
Including_Non_Switch : Boolean := True;
Including_RTS : Boolean := False);
- -- Test if Switch is a relative search path switch.
- -- If it is, fail if Parent is the empty string, otherwise prepend the path
- -- with Parent. This subprogram is only called when using project files.
- -- For gnatbind switches, Including_L_Switch is False, because the
- -- argument of the -L switch is not a path. If Including_RTS is True,
- -- process also switches --RTS=.
+ -- Test if Switch is a relative search path switch. If it is, fail if
+ -- Parent is the empty string, otherwise prepend the path with Parent.
+ -- This subprogram is only called when using project files. For gnatbind
+ -- switches, Including_L_Switch is False, because the argument of the -L
+ -- switch is not a path. If Including_RTS is True, process also switches
+ -- --RTS=.
function Path_Or_File_Name (Path : Path_Name_Type) return String;
-- Returns a file name if -df is used, otherwise return a path name
@@ -152,9 +187,9 @@ package Makeutl is
----------------------
procedure Mark (Source_File : File_Name_Type; Index : Int := 0);
- -- Mark a unit, identified by its source file and, when Index is not 0,
- -- the index of the unit in the source file. Marking is used to signal
- -- that the unit has already been inserted in the Q.
+ -- Mark a unit, identified by its source file and, when Index is not 0, the
+ -- index of the unit in the source file. Marking is used to signal that the
+ -- unit has already been inserted in the Q.
function Is_Marked
(Source_File : File_Name_Type;
diff --git a/gcc/ada/osint.ads b/gcc/ada/osint.ads
index 5de8eced2ac..a44d4e24b3c 100644
--- a/gcc/ada/osint.ads
+++ b/gcc/ada/osint.ads
@@ -571,10 +571,11 @@ package Osint is
pragma Import (C, Len_Arg, "__gnat_len_arg");
-- Get length of argument
-private
+ ALI_Default_Suffix : constant String_Ptr := new String'("ali");
+ ALI_Suffix : String_Ptr := ALI_Default_Suffix;
+ -- The suffixes used for the library files (also known as ALI files)
- ALI_Suffix : constant String_Ptr := new String'("ali");
- -- The suffix used for the library files (also known as ALI files)
+private
Current_Main : File_Name_Type := No_File;
-- Used to save a simple file name between calls to Next_Main_Source and
diff --git a/gcc/ada/prj-nmsc.adb b/gcc/ada/prj-nmsc.adb
index f0ded903ff9..75e4c6ea717 100644
--- a/gcc/ada/prj-nmsc.adb
+++ b/gcc/ada/prj-nmsc.adb
@@ -726,11 +726,28 @@ package body Prj.Nmsc is
Id.Kind := Kind;
Id.Alternate_Languages := Alternate_Languages;
Id.Locally_Removed := Locally_Removed;
+ Id.Index := Index;
+ Id.File := File_Name;
+ Id.Display_File := Display_File;
+ Id.Dep_Name := Dependency_Name
+ (File_Name, Lang_Id.Config.Dependency_Kind);
+ Id.Naming_Exception := Naming_Exception;
-- Add the source id to the Unit_Sources_HT hash table, if the unit name
-- is not null.
if Unit /= No_Name then
+
+ -- Note: we might be creating a dummy unit here, when we in fact have
+ -- a separate. For instance, file file-bar.adb will initially be
+ -- assumed to be the IMPL of unit "file.bar". Only later on (in
+ -- Check_Object_Files) will we parse those units that only have an
+ -- impl and no spec to make sure whether we have a Separate in fact
+ -- (that significantly reduces the number of times we need to parse
+ -- the files, since we are then only interested in those with no
+ -- spec). We still need those dummy units in the table, since that's
+ -- the name we find in the ALI file
+
UData := Units_Htable.Get (Data.Tree.Units_HT, Unit);
if UData = No_Unit_Index then
@@ -746,13 +763,6 @@ package body Prj.Nmsc is
Override_Kind (Id, Kind);
end if;
- Id.Index := Index;
- Id.File := File_Name;
- Id.Display_File := Display_File;
- Id.Dep_Name := Dependency_Name
- (File_Name, Lang_Id.Config.Dependency_Kind);
- Id.Naming_Exception := Naming_Exception;
-
if Is_Compilable (Id) and then Config.Object_Generated then
Id.Object := Object_Name (File_Name, Config.Object_File_Suffix);
Id.Switches := Switches_Name (File_Name);
@@ -6541,6 +6551,14 @@ package body Prj.Nmsc is
Source.Kind := Kind;
+ if Current_Verbosity = High
+ and then Source.File /= No_File
+ then
+ Write_Line ("Override kind for "
+ & Get_Name_String (Source.File)
+ & " kind=" & Source.Kind'Img);
+ end if;
+
if Source.Kind in Spec_Or_Body and then Source.Unit /= null then
Source.Unit.File_Names (Source.Kind) := Source;
end if;
diff --git a/gcc/ada/prj-tree.adb b/gcc/ada/prj-tree.adb
index 1f15c80b27b..2d94f5c4bbb 100644
--- a/gcc/ada/prj-tree.adb
+++ b/gcc/ada/prj-tree.adb
@@ -989,14 +989,14 @@ package body Prj.Tree is
-- Free --
----------
- procedure Free (Prj : in out Project_Node_Tree_Ref) is
+ procedure Free (Proj : in out Project_Node_Tree_Ref) is
procedure Unchecked_Free is new Ada.Unchecked_Deallocation
(Project_Node_Tree_Data, Project_Node_Tree_Ref);
begin
- if Prj /= null then
- Project_Node_Table.Free (Prj.Project_Nodes);
- Projects_Htable.Reset (Prj.Projects_HT);
- Unchecked_Free (Prj);
+ if Proj /= null then
+ Project_Node_Table.Free (Proj.Project_Nodes);
+ Projects_Htable.Reset (Proj.Projects_HT);
+ Unchecked_Free (Proj);
end if;
end Free;
diff --git a/gcc/ada/prj-tree.ads b/gcc/ada/prj-tree.ads
index 46cfcf14a21..e68c36eaad4 100644
--- a/gcc/ada/prj-tree.ads
+++ b/gcc/ada/prj-tree.ads
@@ -1373,7 +1373,7 @@ package Prj.Tree is
end record;
-- The data for a project node tree
- procedure Free (Prj : in out Project_Node_Tree_Ref);
+ procedure Free (Proj : in out Project_Node_Tree_Ref);
-- Free memory used by Prj
private
diff --git a/gcc/ada/prj.adb b/gcc/ada/prj.adb
index fb002f45cfe..2ad790324a7 100644
--- a/gcc/ada/prj.adb
+++ b/gcc/ada/prj.adb
@@ -600,9 +600,9 @@ package body Prj is
-- Image --
-----------
- function Image (Casing : Casing_Type) return String is
+ function Image (The_Casing : Casing_Type) return String is
begin
- return The_Casing_Images (Casing).all;
+ return The_Casing_Images (The_Casing).all;
end Image;
-----------------------------
@@ -1053,6 +1053,7 @@ package body Prj is
-----------------------------------
procedure Compute_All_Imported_Projects (Project : Project_Id) is
+
procedure Recursive_Add (Prj : Project_Id; Dummy : in out Boolean);
-- Recursively add the projects imported by project Project, but not
-- those that are extended.
@@ -1069,8 +1070,9 @@ package body Prj is
begin
-- A project is not importing itself
- if Project /= Prj then
- Prj2 := Ultimate_Extending_Project_Of (Prj);
+ Prj2 := Ultimate_Extending_Project_Of (Prj);
+
+ if Project /= Prj2 then
-- Check that the project is not already in the list. We know the
-- one passed to Recursive_Add have never been visited before, but
@@ -1081,6 +1083,7 @@ package body Prj is
if List.Project = Prj2 then
return;
end if;
+
List := List.Next;
end loop;
@@ -1095,6 +1098,7 @@ package body Prj is
procedure For_All_Projects is
new For_Every_Project_Imported (Boolean, Recursive_Add);
+
Dummy : Boolean := False;
begin
diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads
index ff2e01f0e49..8f95c08b59f 100644
--- a/gcc/ada/prj.ads
+++ b/gcc/ada/prj.ads
@@ -600,15 +600,24 @@ package Prj is
type Source_Kind is (Spec, Impl, Sep);
subtype Spec_Or_Body is Source_Kind range Spec .. Impl;
+ -- The following declarations declare a structure used to store the Name
+ -- and File and Path names of a unit, with a reference to its GNAT Project
+ -- File(s). Some units might have neither Spec nor Impl when they were
+ -- created for a "separate".
+
type File_Names_Data is array (Spec_Or_Body) of Source_Id;
+
type Unit_Data is record
Name : Name_Id := No_Name;
File_Names : File_Names_Data;
end record;
+
type Unit_Index is access all Unit_Data;
+
No_Unit_Index : constant Unit_Index := null;
- -- Name and File and Path names of a unit, with a reference to its
- -- GNAT Project File(s).
+ -- Used to indicate a null entry for no unit
+
+ -- Structure to define source data
type Source_Data is record
Project : Project_Id := No_Project;
@@ -625,7 +634,7 @@ package Prj is
Declared_In_Interfaces : Boolean := False;
-- True when source is declared in attribute Interfaces
- Alternate_Languages : Language_List;
+ Alternate_Languages : Language_List := null;
-- List of languages a header file may also be, in addition of language
-- Language_Name.
@@ -786,7 +795,7 @@ package Prj is
Symbol_Policy => Autonomous);
-- The default value of the symbol data
- function Image (Casing : Casing_Type) return String;
+ function Image (The_Casing : Casing_Type) return String;
-- Similar to 'Image (but avoid use of this attribute in compiler)
function Value (Image : String) return Casing_Type;
@@ -1052,7 +1061,8 @@ package Prj is
-- The list of all directly imported projects, if any
All_Imported_Projects : Project_List;
- -- The list of all projects imported directly or indirectly, if any
+ -- The list of all projects imported directly or indirectly, if any.
+ -- This does not include the project itself.
-----------------
-- Directories --
diff --git a/gcc/ada/raise.c b/gcc/ada/raise.c
index d82132354f8..1f087783b67 100644
--- a/gcc/ada/raise.c
+++ b/gcc/ada/raise.c
@@ -29,11 +29,8 @@
* *
****************************************************************************/
-/* Shared routines to support exception handling.
- Note that _gnat_builtin_longjmp should disappear at some point, replaced
- by direct call to __builtin_longjmp from Ada code.
- __gnat_unhandled_terminate is code shared between all exception handling
- mechanisms */
+/* Shared routines to support exception handling. __gnat_unhandled_terminate
+ is shared between all exception handling mechanisms. */
#ifdef IN_RTS
#include "tconfig.h"
@@ -46,13 +43,19 @@
#include "adaint.h"
#include "raise.h"
-/* We have not yet figured out how to import this directly */
+/* Wrapper to builtin_longjmp. This is for the compiler eh only, as the sjlj
+ runtime library interfaces directly to the intrinsic. We can't yet do
+ this for the compiler itself, because this capability relies on changes
+ made in april 2008 and we need to preserve the possibility to bootstrap
+ with an older base version. */
+#if defined (IN_GCC) && !defined (IN_RTS)
void
_gnat_builtin_longjmp (void *ptr, int flag ATTRIBUTE_UNUSED)
{
__builtin_longjmp (ptr, 1);
}
+#endif
/* When an exception is raised for which no handler exists, the procedure
Ada.Exceptions.Unhandled_Exception is called, which performs the call to
diff --git a/gcc/ada/s-linux-hppa.ads b/gcc/ada/s-linux-hppa.ads
index 16393c539f6..6176376cbeb 100644
--- a/gcc/ada/s-linux-hppa.ads
+++ b/gcc/ada/s-linux-hppa.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2009, Free Software Foundation, Inc. --
+-- Copyright (C) 2008-2009, Free Software Foundation, Inc. --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
diff --git a/gcc/ada/s-linux.ads b/gcc/ada/s-linux.ads
index 83b07c018e6..29918d7d4ca 100644
--- a/gcc/ada/s-linux.ads
+++ b/gcc/ada/s-linux.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2009, Free Software Foundation, Inc. --
+-- Copyright (C) 2008-2009, Free Software Foundation, Inc. --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
diff --git a/gcc/ada/s-oscons-tmplt.c b/gcc/ada/s-oscons-tmplt.c
index b5dd2a86a7b..c4218c2ab78 100644
--- a/gcc/ada/s-oscons-tmplt.c
+++ b/gcc/ada/s-oscons-tmplt.c
@@ -78,6 +78,11 @@ pragma Style_Checks ("M32766");
** $ RUN xoscons
**/
+#if defined (__linux__) && !defined (_XOPEN_SOURCE)
+/* For Linux _XOPEN_SOURCE must be defined, otherwise IOV_MAX is not defined */
+#define _XOPEN_SOURCE 500
+#endif
+
#include <stdlib.h>
#include <string.h>
#include <limits.h>
diff --git a/gcc/ada/s-soflin.ads b/gcc/ada/s-soflin.ads
index 16b483b28b8..783fd8878eb 100644
--- a/gcc/ada/s-soflin.ads
+++ b/gcc/ada/s-soflin.ads
@@ -242,7 +242,7 @@ package System.Soft_Links is
function Get_Exc_Stack_Addr_NT return Address;
Get_Exc_Stack_Addr : Get_Address_Call := Get_Exc_Stack_Addr_NT'Access;
- function Get_Current_Excep_NT return EOA;
+ function Get_Current_Excep_NT return EOA;
Get_Current_Excep : Get_EOA_Call := Get_Current_Excep_NT'Access;
diff --git a/gcc/ada/s-tasini.adb b/gcc/ada/s-tasini.adb
index f473e0e7595..cacd86c4c22 100644
--- a/gcc/ada/s-tasini.adb
+++ b/gcc/ada/s-tasini.adb
@@ -190,12 +190,13 @@ package body System.Tasking.Initialization is
return;
end if;
- -- pragma Assert
- -- ((Self_ID.Pending_ATC_Level >= Self_ID.ATC_Nesting_Level or else
- -- Self_ID.Deferral_Level > 0));
+ -- The following assertion is by default disabled. See the comment in
+ -- Defer_Abort on the situations in which it may be useful to uncomment
+ -- this assertion and enable the test.
- -- See comment in Defer_Abort on the situations in which it may be
- -- useful to uncomment the above assertion.
+ -- pragma Assert
+ -- (Self_ID.Pending_ATC_Level >= Self_ID.ATC_Nesting_Level or else
+ -- Self_ID.Deferral_Level > 0);
Self_ID.Deferral_Level := Self_ID.Deferral_Level + 1;
end Defer_Abort_Nestable;
diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb
index 94b2acf3a48..bac147c96b9 100644
--- a/gcc/ada/sem.adb
+++ b/gcc/ada/sem.adb
@@ -243,7 +243,7 @@ package body Sem is
Analyze_Free_Statement (N);
when N_Freeze_Entity =>
- null; -- no semantic processing required
+ Analyze_Freeze_Entity (N);
when N_Full_Type_Declaration =>
Analyze_Type_Declaration (N);
@@ -603,6 +603,18 @@ package body Sem is
when N_Push_Pop_xxx_Label =>
null;
+ -- SCIL nodes don't need analysis because they are decorated when
+ -- they are built. They are added to the tree by Insert_Actions and
+ -- the call to analyze them is generated when the full list is
+ -- analyzed.
+
+ when
+ N_SCIL_Dispatch_Table_Object_Init |
+ N_SCIL_Dispatch_Table_Tag_Init |
+ N_SCIL_Dispatching_Call |
+ N_SCIL_Tag_Init =>
+ null;
+
-- For the remaining node types, we generate compiler abort, because
-- these nodes are always analyzed within the Sem_Chn routines and
-- there should never be a case of making a call to the main Analyze
@@ -1680,8 +1692,16 @@ package body Sem is
--------------------
procedure Do_Withed_Unit (Withed_Unit : Node_Id) is
+ Save_Do_Main : constant Boolean := Do_Main;
+
begin
+ -- Do not process the main unit if coming from a with_clause,
+ -- as would happen with a parent body that has a child spec
+ -- in its context.
+
+ Do_Main := False;
Do_Unit_And_Dependents (Withed_Unit, Unit (Withed_Unit));
+ Do_Main := Save_Do_Main;
end Do_Withed_Unit;
procedure Do_Withed_Units is new Walk_Withs (Do_Withed_Unit);
@@ -1691,104 +1711,102 @@ package body Sem is
begin
if not Seen (Unit_Num) then
- Seen (Unit_Num) := True;
-
- -- Process corresponding spec of body first
-
- if Nkind_In (Item, N_Package_Body, N_Subprogram_Body) then
- declare
- Spec_Unit : constant Node_Id := Library_Unit (CU);
- begin
- if Spec_Unit = CU then -- ???Why needed?
- pragma Assert (Acts_As_Spec (CU));
- null;
- else
- Do_Unit_And_Dependents (Spec_Unit, Unit (Spec_Unit));
- end if;
- end;
- end if;
-
-- Process the with clauses
Do_Withed_Units (CU, Include_Limited => False);
- -- Process the unit itself
+ -- Process the unit if it is a spec. If it is the main unit,
+ -- process it only if we have done all other units.
if not Nkind_In (Item, N_Package_Body, N_Subprogram_Body)
or else Acts_As_Spec (CU)
- or else (CU = Cunit (Main_Unit) and then Do_Main)
then
- Do_Action (CU, Item);
- Done (Unit_Num) := True;
+ if CU = Cunit (Main_Unit) and then not Do_Main then
+ Seen (Unit_Num) := False;
+
+ else
+ Seen (Unit_Num) := True;
+ Do_Action (CU, Item);
+ Done (Unit_Num) := True;
+ end if;
end if;
end if;
- -- Process corresponding body of spec last. This is either the main
- -- unit, or the body of a spec that is in the context of the main
- -- unit, and that is instantiated, or else contains a generic that
- -- is instantiated, or a subprogram that is inlined in the main unit.
+ -- Process bodies. The spec, if present, has been processed already.
+ -- A body appears if it is the main, or the body of a spec that is
+ -- in the context of the main unit, and that is instantiated, or else
+ -- contains a generic that is instantiated, or a subprogram that is
+ -- or a subprogram that is inlined in the main unit.
-- We exclude bodies that may appear in a circular dependency list,
-- where spec A depends on spec B and body of B depends on spec A.
-- This is not an elaboration issue, but body B must be excluded
-- from the processing.
- if Nkind (Item) = N_Package_Declaration then
- declare
- Body_Unit : constant Node_Id := Library_Unit (CU);
+ declare
+ Body_Unit : Node_Id := Empty;
+ Body_Num : Unit_Number_Type;
- function Circular_Dependence (B : Node_Id) return Boolean;
- -- Check whether this body depends on a spec that is pending,
- -- that is to say has been seen but not processed yet.
+ function Circular_Dependence (B : Node_Id) return Boolean;
+ -- Check whether this body depends on a spec that is pending,
+ -- that is to say has been seen but not processed yet.
- -------------------------
- -- Circular_Dependence --
- -------------------------
+ -------------------------
+ -- Circular_Dependence --
+ -------------------------
- function Circular_Dependence (B : Node_Id) return Boolean is
- Item : Node_Id;
- UN : Unit_Number_Type;
+ function Circular_Dependence (B : Node_Id) return Boolean is
+ Item : Node_Id;
+ UN : Unit_Number_Type;
- begin
- Item := First (Context_Items (B));
- while Present (Item) loop
- if Nkind (Item) = N_With_Clause then
- UN := Get_Cunit_Unit_Number (Library_Unit (Item));
-
- if Seen (UN)
- and then not Done (UN)
- then
- return True;
- end if;
+ begin
+ Item := First (Context_Items (B));
+ while Present (Item) loop
+ if Nkind (Item) = N_With_Clause then
+ UN := Get_Cunit_Unit_Number (Library_Unit (Item));
+
+ if Seen (UN)
+ and then not Done (UN)
+ then
+ return True;
end if;
+ end if;
- Next (Item);
- end loop;
+ Next (Item);
+ end loop;
- return False;
- end Circular_Dependence;
+ return False;
+ end Circular_Dependence;
- begin
- if Present (Body_Unit)
+ begin
+ if Nkind (Item) = N_Package_Declaration then
+ Body_Unit := Library_Unit (CU);
- -- Since specs and bodies are not done at the same time,
- -- guard against listing a body more than once.
+ elsif Nkind_In (Item, N_Package_Body, N_Subprogram_Body) then
+ Body_Unit := CU;
+ end if;
- and then not Seen (Get_Cunit_Unit_Number (Body_Unit))
+ if Present (Body_Unit)
- -- Would be good to comment each of these tests ???
+ -- Since specs and bodies are not done at the same time,
+ -- guard against listing a body more than once. Bodies are
+ -- only processed when the main unit is being processed,
+ -- after all other units in the list. The DEC extension
+ -- to System is excluded because of circularities.
- and then Body_Unit /= Cunit (Main_Unit)
- and then Unit_Num /= Get_Source_Unit (System_Aux_Id)
- and then not Circular_Dependence (Body_Unit)
- and then Do_Main
- then
- Do_Unit_And_Dependents (Body_Unit, Unit (Body_Unit));
- Do_Action (Body_Unit, Unit (Body_Unit));
- Done (Get_Cunit_Unit_Number (Body_Unit)) := True;
- end if;
- end;
- end if;
+ and then not Seen (Get_Cunit_Unit_Number (Body_Unit))
+ and then
+ (No (System_Aux_Id)
+ or else Unit_Num /= Get_Source_Unit (System_Aux_Id))
+ and then not Circular_Dependence (Body_Unit)
+ and then Do_Main
+ then
+ Body_Num := Get_Cunit_Unit_Number (Body_Unit);
+ Seen (Body_Num) := True;
+ Do_Action (Body_Unit, Unit (Body_Unit));
+ Done (Body_Num) := True;
+ end if;
+ end;
end Do_Unit_And_Dependents;
-- Local Declarations
@@ -1862,7 +1880,25 @@ package body Sem is
if not Done (Main_Unit) then
Do_Main := True;
- Do_Unit_And_Dependents (Cunit (Main_Unit), Unit (Cunit (Main_Unit)));
+
+ declare
+ Main_CU : constant Node_Id := Cunit (Main_Unit);
+
+ begin
+ -- If the main unit is an instantiation, the body appears before
+ -- the instance spec, which is added later to the unit list. Do
+ -- the spec if present, body will follow.
+
+ if Nkind (Original_Node (Unit (Main_CU)))
+ in N_Generic_Instantiation
+ and then Present (Library_Unit (Main_CU))
+ then
+ Do_Unit_And_Dependents
+ (Library_Unit (Main_CU), Unit (Library_Unit (Main_CU)));
+ else
+ Do_Unit_And_Dependents (Main_CU, Unit (Main_CU));
+ end if;
+ end;
end if;
if Debug_Unit_Walk then
@@ -1940,9 +1976,11 @@ package body Sem is
end loop;
-- See if it belongs to current unit, and if so, include its
- -- with_clauses.
+ -- with_clauses. Do not process main unit prematurely.
- if Pnode = CU then
+ if Pnode = CU
+ and then CU /= Cunit (Main_Unit)
+ then
Walk_Immediate (Cunit (S), Include_Limited);
end if;
end;
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
index 36fd6dc8e4b..af29d9a3fdc 100644
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -2737,7 +2737,7 @@ package body Sem_Aggr is
end if;
end if;
- Generate_Reference (Compon, Selector_Name);
+ Generate_Reference (Compon, Selector_Name, 'm');
else
Error_Msg_NE
diff --git a/gcc/ada/sem_aux.adb b/gcc/ada/sem_aux.adb
index 6513e73d073..c1b3a331892 100755
--- a/gcc/ada/sem_aux.adb
+++ b/gcc/ada/sem_aux.adb
@@ -312,11 +312,11 @@ package body Sem_Aux is
Ent : Entity_Id;
begin
- -- If the base type has no freeze node, it is a type in standard,
+ -- If the base type has no freeze node, it is a type in Standard,
-- and always acts as its own first subtype unless it is one of the
-- predefined integer types. If the type is formal, it is also a first
-- subtype, and its base type has no freeze node. On the other hand, a
- -- subtype of a generic formal is not its own first_subtype. Its base
+ -- subtype of a generic formal is not its own first subtype. Its base
-- type, if anonymous, is attached to the formal type decl. from which
-- the first subtype is obtained.
diff --git a/gcc/ada/sem_aux.ads b/gcc/ada/sem_aux.ads
index f8467446130..464a764a3e3 100755
--- a/gcc/ada/sem_aux.ads
+++ b/gcc/ada/sem_aux.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -36,7 +36,7 @@
-- Historical note. Many of the routines here were originally in Einfo, but
-- Einfo is supposed to be a relatively low level package dealing with the
-- content of entities in the tree, so this package is used for routines that
--- require more than minimal semantic knowldge.
+-- require more than minimal semantic knowledge.
with Alloc; use Alloc;
with Table;
diff --git a/gcc/ada/sem_cat.adb b/gcc/ada/sem_cat.adb
index e24b456952f..d5d38235f36 100644
--- a/gcc/ada/sem_cat.adb
+++ b/gcc/ada/sem_cat.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -1774,12 +1774,12 @@ package body Sem_Cat is
-- Check RCI or RT unit type declaration. It may not contain the
-- declaration of an access-to-object type unless it is a general access
- -- type that designates a class-wide limited private type. There are
- -- also constraints on the primitive subprograms of the class-wide type
- -- (RM E.2.2(14), see Validate_RACW_Primitives).
+ -- type that designates a class-wide limited private type or subtype.
+ -- There are also constraints on the primitive subprograms of the
+ -- class-wide type (RM E.2.2(14), see Validate_RACW_Primitives).
if Ekind (T) /= E_General_Access_Type
- or else Ekind (Designated_Type (T)) /= E_Class_Wide_Type
+ or else not Is_Class_Wide_Type (Designated_Type (T))
then
if In_RCI_Declaration (Parent (T)) then
Error_Msg_N
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index a2156b38cd4..d76475f7d30 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -40,6 +40,7 @@ with Rident; use Rident;
with Rtsfind; use Rtsfind;
with Sem; use Sem;
with Sem_Aux; use Sem_Aux;
+with Sem_Ch3; use Sem_Ch3;
with Sem_Ch8; use Sem_Ch8;
with Sem_Eval; use Sem_Eval;
with Sem_Res; use Sem_Res;
@@ -2197,6 +2198,38 @@ package body Sem_Ch13 is
Analyze (Expression (N));
end Analyze_Free_Statement;
+ ---------------------------
+ -- Analyze_Freeze_Entity --
+ ---------------------------
+
+ -- This does not belong in sem_ch13, and I don't like the big new
+ -- dependency on sem_ch3, I would in fact move this to sem_ch3 or
+ -- somewhere else, and then Add_Internal_Interface_Entitites can be
+ -- private to sem_ch3.adb. ???
+
+ procedure Analyze_Freeze_Entity (N : Node_Id) is
+ E : constant Entity_Id := Entity (N);
+
+ begin
+ -- For tagged types covering interfaces add internal entities that link
+ -- the primitives of the interfaces with the primitives that cover them.
+
+ -- Note: These entities were originally generated only when generating
+ -- code because their main purpose was to provide support to initialize
+ -- the secondary dispatch tables. They are now generated also when
+ -- compiling with no code generation to provide ASIS the relationship
+ -- between interface primitives and tagged type primitives.
+
+ if Ada_Version >= Ada_05
+ and then Ekind (E) = E_Record_Type
+ and then Is_Tagged_Type (E)
+ and then not Is_Interface (E)
+ and then Has_Interfaces (E)
+ then
+ Add_Internal_Interface_Entities (E);
+ end if;
+ end Analyze_Freeze_Entity;
+
------------------------------------------
-- Analyze_Record_Representation_Clause --
------------------------------------------
diff --git a/gcc/ada/sem_ch13.ads b/gcc/ada/sem_ch13.ads
index 175f3040fc8..93587fd38d2 100644
--- a/gcc/ada/sem_ch13.ads
+++ b/gcc/ada/sem_ch13.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -31,6 +31,7 @@ package Sem_Ch13 is
procedure Analyze_Attribute_Definition_Clause (N : Node_Id);
procedure Analyze_Enumeration_Representation_Clause (N : Node_Id);
procedure Analyze_Free_Statement (N : Node_Id);
+ procedure Analyze_Freeze_Entity (N : Node_Id);
procedure Analyze_Record_Representation_Clause (N : Node_Id);
procedure Analyze_Code_Statement (N : Node_Id);
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index b96b9d9ba38..adea69db29e 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -753,6 +753,7 @@ package body Sem_Ch3 is
-- is associated with one of the protected operations, and must
-- be available in the scope that encloses the protected declaration.
-- Otherwise the type is in the scope enclosing the subprogram.
+
-- If the function has formals, The return type of a subprogram
-- declaration is analyzed in the scope of the subprogram (see
-- Process_Formals) and thus the protected type, if present, is
@@ -1506,6 +1507,96 @@ package body Sem_Ch3 is
end if;
end Add_Interface_Tag_Components;
+ -------------------------------------
+ -- Add_Internal_Interface_Entities --
+ -------------------------------------
+
+ procedure Add_Internal_Interface_Entities (Tagged_Type : Entity_Id) is
+ Elmt : Elmt_Id;
+ Iface : Entity_Id;
+ Iface_Elmt : Elmt_Id;
+ Iface_Prim : Entity_Id;
+ Ifaces_List : Elist_Id;
+ New_Subp : Entity_Id := Empty;
+ Prim : Entity_Id;
+
+ begin
+ pragma Assert (Ada_Version >= Ada_05
+ and then Is_Record_Type (Tagged_Type)
+ and then Is_Tagged_Type (Tagged_Type)
+ and then Has_Interfaces (Tagged_Type)
+ and then not Is_Interface (Tagged_Type));
+
+ Collect_Interfaces (Tagged_Type, Ifaces_List);
+
+ Iface_Elmt := First_Elmt (Ifaces_List);
+ while Present (Iface_Elmt) loop
+ Iface := Node (Iface_Elmt);
+
+ -- Exclude from this processing interfaces that are parents of
+ -- Tagged_Type because their primitives are located in the primary
+ -- dispatch table (and hence no auxiliary internal entities are
+ -- required to handle secondary dispatch tables in such case).
+
+ if not Is_Ancestor (Iface, Tagged_Type) then
+ Elmt := First_Elmt (Primitive_Operations (Iface));
+ while Present (Elmt) loop
+ Iface_Prim := Node (Elmt);
+
+ if not Is_Predefined_Dispatching_Operation (Iface_Prim) then
+ Prim :=
+ Find_Primitive_Covering_Interface
+ (Tagged_Type => Tagged_Type,
+ Iface_Prim => Iface_Prim);
+
+ pragma Assert (Present (Prim));
+
+ Derive_Subprogram
+ (New_Subp => New_Subp,
+ Parent_Subp => Iface_Prim,
+ Derived_Type => Tagged_Type,
+ Parent_Type => Iface);
+
+ -- Ada 2005 (AI-251): Decorate internal entity Iface_Subp
+ -- associated with interface types. These entities are
+ -- only registered in the list of primitives of its
+ -- corresponding tagged type because they are only used
+ -- to fill the contents of the secondary dispatch tables.
+ -- Therefore they are removed from the homonym chains.
+
+ Set_Is_Hidden (New_Subp);
+ Set_Is_Internal (New_Subp);
+ Set_Alias (New_Subp, Prim);
+ Set_Is_Abstract_Subprogram (New_Subp,
+ Is_Abstract_Subprogram (Prim));
+ Set_Interface_Alias (New_Subp, Iface_Prim);
+
+ -- Internal entities associated with interface types are
+ -- only registered in the list of primitives of the tagged
+ -- type. They are only used to fill the contents of the
+ -- secondary dispatch tables. Therefore they are not needed
+ -- in the homonym chains.
+
+ Remove_Homonym (New_Subp);
+
+ -- Hidden entities associated with interfaces must have set
+ -- the Has_Delay_Freeze attribute to ensure that, in case of
+ -- locally defined tagged types (or compiling with static
+ -- dispatch tables generation disabled) the corresponding
+ -- entry of the secondary dispatch table is filled when
+ -- such an entity is frozen.
+
+ Set_Has_Delayed_Freeze (New_Subp);
+ end if;
+
+ Next_Elmt (Elmt);
+ end loop;
+ end if;
+
+ Next_Elmt (Iface_Elmt);
+ end loop;
+ end Add_Internal_Interface_Entities;
+
-----------------------------------
-- Analyze_Component_Declaration --
-----------------------------------
@@ -2588,8 +2679,8 @@ package body Sem_Ch3 is
and then Is_Access_Constant (Etype (E))
then
Error_Msg_N
- ("access to variable cannot be initialized " &
- "with an access-to-constant expression", E);
+ ("access to variable cannot be initialized "
+ & "with an access-to-constant expression", E);
end if;
if not Assignment_OK (N) then
@@ -2598,10 +2689,9 @@ package body Sem_Ch3 is
Check_Unset_Reference (E);
- -- If this is a variable, then set current value.
- -- If this is a declared constant of a scalar type
- -- with a static expression, indicate that it is
- -- always valid.
+ -- If this is a variable, then set current value. If this is a
+ -- declared constant of a scalar type with a static expression,
+ -- indicate that it is always valid.
if not Constant_Present (N) then
if Compile_Time_Known_Value (E) then
@@ -4827,17 +4917,74 @@ package body Sem_Ch3 is
Parent_Type : Entity_Id;
Derived_Type : Entity_Id)
is
- D_Constraint : Node_Id;
- Disc_Spec : Node_Id;
- Old_Disc : Entity_Id;
- New_Disc : Entity_Id;
+ Loc : constant Source_Ptr := Sloc (N);
+
+ Corr_Record : constant Entity_Id :=
+ Make_Defining_Identifier (Loc, New_Internal_Name ('C'));
+
+ Corr_Decl : Node_Id;
+ Corr_Decl_Needed : Boolean;
+ -- If the derived type has fewer discriminants than its parent, the
+ -- corresponding record is also a derived type, in order to account for
+ -- the bound discriminants. We create a full type declaration for it in
+ -- this case.
Constraint_Present : constant Boolean :=
- Nkind (Subtype_Indication (Type_Definition (N)))
- = N_Subtype_Indication;
+ Nkind (Subtype_Indication (Type_Definition (N))) =
+ N_Subtype_Indication;
+
+ D_Constraint : Node_Id;
+ New_Constraint : Elist_Id;
+ Old_Disc : Entity_Id;
+ New_Disc : Entity_Id;
+ New_N : Node_Id;
begin
Set_Stored_Constraint (Derived_Type, No_Elist);
+ Corr_Decl_Needed := False;
+ Old_Disc := Empty;
+
+ if Present (Discriminant_Specifications (N))
+ and then Constraint_Present
+ then
+ Old_Disc := First_Discriminant (Parent_Type);
+ New_Disc := First (Discriminant_Specifications (N));
+ while Present (New_Disc) and then Present (Old_Disc) loop
+ Next_Discriminant (Old_Disc);
+ Next (New_Disc);
+ end loop;
+ end if;
+
+ if Present (Old_Disc) then
+
+ -- The new type has fewer discriminants, so we need to create a new
+ -- corresponding record, which is derived from the corresponding
+ -- record of the parent, and has a stored constraint that captures
+ -- the values of the discriminant constraints.
+
+ -- The type declaration for the derived corresponding record has
+ -- the same discriminant part and constraints as the current
+ -- declaration. Copy the unanalyzed tree to build declaration.
+
+ Corr_Decl_Needed := True;
+ New_N := Copy_Separate_Tree (N);
+
+ Corr_Decl :=
+ Make_Full_Type_Declaration (Loc,
+ Defining_Identifier => Corr_Record,
+ Discriminant_Specifications =>
+ Discriminant_Specifications (New_N),
+ Type_Definition =>
+ Make_Derived_Type_Definition (Loc,
+ Subtype_Indication =>
+ Make_Subtype_Indication (Loc,
+ Subtype_Mark =>
+ New_Occurrence_Of
+ (Corresponding_Record_Type (Parent_Type), Loc),
+ Constraint =>
+ Constraint
+ (Subtype_Indication (Type_Definition (New_N))))));
+ end if;
-- Copy Storage_Size and Relative_Deadline variables if task case
@@ -4851,6 +4998,16 @@ package body Sem_Ch3 is
if Present (Discriminant_Specifications (N)) then
Push_Scope (Derived_Type);
Check_Or_Process_Discriminants (N, Derived_Type);
+
+ if Constraint_Present then
+ New_Constraint :=
+ Expand_To_Stored_Constraint
+ (Parent_Type,
+ Build_Discriminant_Constraints
+ (Parent_Type,
+ Subtype_Indication (Type_Definition (N)), True));
+ end if;
+
End_Scope;
elsif Constraint_Present then
@@ -4881,9 +5038,9 @@ package body Sem_Ch3 is
end;
end if;
- -- All attributes are inherited from parent. In particular,
- -- entries and the corresponding record type are the same.
- -- Discriminants may be renamed, and must be treated separately.
+ -- By default, operations and private data are inherited from parent.
+ -- However, in the presence of bound discriminants, a new corresponding
+ -- record will be created, see below.
Set_Has_Discriminants
(Derived_Type, Has_Discriminants (Parent_Type));
@@ -4911,61 +5068,110 @@ package body Sem_Ch3 is
(Constraints
(Constraint (Subtype_Indication (Type_Definition (N)))));
- Old_Disc := First_Discriminant (Parent_Type);
- New_Disc := First_Discriminant (Derived_Type);
- Disc_Spec := First (Discriminant_Specifications (N));
- while Present (Old_Disc) and then Present (Disc_Spec) loop
- if Nkind (Discriminant_Type (Disc_Spec)) /=
- N_Access_Definition
- then
- Analyze (Discriminant_Type (Disc_Spec));
+ Old_Disc := First_Discriminant (Parent_Type);
- if not Subtypes_Statically_Compatible (
- Etype (Discriminant_Type (Disc_Spec)),
- Etype (Old_Disc))
- then
- Error_Msg_N
- ("not statically compatible with parent discriminant",
- Discriminant_Type (Disc_Spec));
+ while Present (D_Constraint) loop
+ if Nkind (D_Constraint) /= N_Discriminant_Association then
+
+ -- Positional constraint. If it is a reference to a new
+ -- discriminant, it constrains the corresponding old one.
+
+ if Nkind (D_Constraint) = N_Identifier then
+ New_Disc := First_Discriminant (Derived_Type);
+ while Present (New_Disc) loop
+ exit when Chars (New_Disc) = Chars (D_Constraint);
+ Next_Discriminant (New_Disc);
+ end loop;
+
+ if Present (New_Disc) then
+ Set_Corresponding_Discriminant (New_Disc, Old_Disc);
+ end if;
+ end if;
+
+ Next_Discriminant (Old_Disc);
+
+ -- if this is a named constraint, search by name for the old
+ -- discriminants constrained by the new one.
+
+ elsif Nkind (Expression (D_Constraint)) = N_Identifier then
+
+ -- Find new discriminant with that name
+
+ New_Disc := First_Discriminant (Derived_Type);
+ while Present (New_Disc) loop
+ exit when
+ Chars (New_Disc) = Chars (Expression (D_Constraint));
+ Next_Discriminant (New_Disc);
+ end loop;
+
+ if Present (New_Disc) then
+
+ -- Verify that new discriminant renames some discriminant
+ -- of the parent type, and associate the new discriminant
+ -- with one or more old ones that it renames.
+
+ declare
+ Selector : Node_Id;
+
+ begin
+ Selector := First (Selector_Names (D_Constraint));
+ while Present (Selector) loop
+ Old_Disc := First_Discriminant (Parent_Type);
+ while Present (Old_Disc) loop
+ exit when Chars (Old_Disc) = Chars (Selector);
+ Next_Discriminant (Old_Disc);
+ end loop;
+
+ if Present (Old_Disc) then
+ Set_Corresponding_Discriminant
+ (New_Disc, Old_Disc);
+ end if;
+
+ Next (Selector);
+ end loop;
+ end;
end if;
end if;
- if Nkind (D_Constraint) = N_Identifier
- and then Chars (D_Constraint) /=
- Chars (Defining_Identifier (Disc_Spec))
+ Next (D_Constraint);
+ end loop;
+
+ New_Disc := First_Discriminant (Derived_Type);
+ while Present (New_Disc) loop
+ if No (Corresponding_Discriminant (New_Disc)) then
+ Error_Msg_NE
+ ("new discriminant& must constrain old one", N, New_Disc);
+
+ elsif not
+ Subtypes_Statically_Compatible
+ (Etype (New_Disc),
+ Etype (Corresponding_Discriminant (New_Disc)))
then
- Error_Msg_N ("new discriminants must constrain old ones",
- D_Constraint);
- else
- Set_Corresponding_Discriminant (New_Disc, Old_Disc);
+ Error_Msg_NE
+ ("& not statically compatible with parent discriminant",
+ N, New_Disc);
end if;
- Next_Discriminant (Old_Disc);
Next_Discriminant (New_Disc);
- Next (Disc_Spec);
end loop;
-
- if Present (Old_Disc) or else Present (Disc_Spec) then
- Error_Msg_N ("discriminant mismatch in derivation", N);
- end if;
-
end if;
elsif Present (Discriminant_Specifications (N)) then
Error_Msg_N
- ("missing discriminant constraint in untagged derivation",
- N);
+ ("missing discriminant constraint in untagged derivation", N);
end if;
+ -- The entity chain of the derived type includes the new discriminants
+ -- but shares operations with the parent.
+
if Present (Discriminant_Specifications (N)) then
Old_Disc := First_Discriminant (Parent_Type);
while Present (Old_Disc) loop
-
if No (Next_Entity (Old_Disc))
or else Ekind (Next_Entity (Old_Disc)) /= E_Discriminant
then
- Set_Next_Entity (Last_Entity (Derived_Type),
- Next_Entity (Old_Disc));
+ Set_Next_Entity
+ (Last_Entity (Derived_Type), Next_Entity (Old_Disc));
exit;
end if;
@@ -4984,6 +5190,13 @@ package body Sem_Ch3 is
Set_Last_Entity (Derived_Type, Last_Entity (Parent_Type));
Set_Has_Completion (Derived_Type);
+
+ if Corr_Decl_Needed then
+ Set_Stored_Constraint (Derived_Type, New_Constraint);
+ Insert_After (N, Corr_Decl);
+ Analyze (Corr_Decl);
+ Set_Corresponding_Record_Type (Derived_Type, Corr_Record);
+ end if;
end Build_Derived_Concurrent_Type;
------------------------------------
diff --git a/gcc/ada/sem_ch3.ads b/gcc/ada/sem_ch3.ads
index 6c7dbaae032..6bfa52844d0 100644
--- a/gcc/ada/sem_ch3.ads
+++ b/gcc/ada/sem_ch3.ads
@@ -64,6 +64,11 @@ package Sem_Ch3 is
-- the signature of the implicit type works like the profile of a regular
-- subprogram.
+ procedure Add_Internal_Interface_Entities (Tagged_Type : Entity_Id);
+ -- Add to the list of primitives of Tagged_Type the internal entities
+ -- associated with covered interface primitives. These entities link the
+ -- interface primitives with the tagged type primitives that cover them.
+
procedure Analyze_Declarations (L : List_Id);
-- Called to analyze a list of declarations (in what context ???). Also
-- performs necessary freezing actions (more description needed ???)
@@ -95,23 +100,22 @@ package Sem_Ch3 is
-- Could both mechanisms be merged ???
procedure Check_Abstract_Overriding (T : Entity_Id);
- -- Check that all abstract subprograms inherited from T's parent type
- -- have been overridden as required, and that nonabstract subprograms
- -- have not been incorrectly overridden with an abstract subprogram.
+ -- Check that all abstract subprograms inherited from T's parent type have
+ -- been overridden as required, and that nonabstract subprograms have not
+ -- been incorrectly overridden with an abstract subprogram.
procedure Check_Aliased_Component_Types (T : Entity_Id);
-- Given an array type or record type T, check that if the type is
- -- nonlimited, then the nominal subtype of any components of T
- -- that have discriminants must be constrained.
+ -- nonlimited, then the nominal subtype of any components of T that
+ -- have discriminants must be constrained.
procedure Check_Completion (Body_Id : Node_Id := Empty);
- -- At the end of a declarative part, verify that all entities that
- -- require completion have received one. If Body_Id is absent, the
- -- error indicating a missing completion is placed on the declaration
- -- that needs completion. If Body_Id is present, it is the defining
- -- identifier of a package body, and errors are posted on that node,
- -- rather than on the declarations that require completion in the package
- -- declaration.
+ -- At the end of a declarative part, verify that all entities that require
+ -- completion have received one. If Body_Id is absent, the error indicating
+ -- a missing completion is placed on the declaration that needs completion.
+ -- If Body_Id is present, it is the defining identifier of a package body,
+ -- and errors are posted on that node, rather than on the declarations that
+ -- require completion in the package declaration.
procedure Derive_Subprogram
(New_Subp : in out Entity_Id;
@@ -138,8 +142,8 @@ package Sem_Ch3 is
-- the derived subprograms are aliased to those of the actual, not those of
-- the ancestor.
--
- -- Note: one might expect this to be private to the package body, but
- -- there is one rather unusual usage in package Exp_Dist.
+ -- Note: one might expect this to be private to the package body, but there
+ -- is one rather unusual usage in package Exp_Dist.
function Find_Hidden_Interface
(Src : Elist_Id;
@@ -162,8 +166,8 @@ package Sem_Ch3 is
Typ_For_Constraint : Entity_Id;
Constraint : Elist_Id) return Node_Id;
-- ??? MORE DOCUMENTATION
- -- Given a discriminant somewhere in the Typ_For_Constraint tree
- -- and a Constraint, return the value of that discriminant.
+ -- Given a discriminant somewhere in the Typ_For_Constraint tree and a
+ -- Constraint, return the value of that discriminant.
function Is_Null_Extension (T : Entity_Id) return Boolean;
-- Returns True if the tagged type T has an N_Full_Type_Declaration that
@@ -232,7 +236,7 @@ package Sem_Ch3 is
-- of the dependant private subtypes. The second action is to recopy the
-- primitive operations of the private view (in the tagged case).
-- N is the N_Full_Type_Declaration node.
-
+ --
-- Full_T is the full view of the type whose full declaration is in N.
--
-- Priv_T is the private view of the type whose full declaration is in N.
@@ -243,16 +247,16 @@ package Sem_Ch3 is
Check_List : List_Id := Empty_List;
R_Check_Off : Boolean := False);
-- Process a range expression that appears in a declaration context. The
- -- range is analyzed and resolved with the base type of the given type,
- -- and an appropriate check for expressions in non-static contexts made
- -- on the bounds. R is analyzed and resolved using T, so the caller should
- -- if necessary link R into the tree before the call, and in particular in
- -- the case of a subtype declaration, it is appropriate to set the parent
- -- pointer of R so that the types get properly frozen. The Check_List
- -- parameter is used when the subprogram is called from
- -- Build_Record_Init_Proc and is used to return a set of constraint
- -- checking statements generated by the Checks package. R_Check_Off is set
- -- to True when the call to Range_Check is to be skipped.
+ -- range is analyzed and resolved with the base type of the given type, and
+ -- an appropriate check for expressions in non-static contexts made on the
+ -- bounds. R is analyzed and resolved using T, so the caller should if
+ -- necessary link R into the tree before the call, and in particular in the
+ -- case of a subtype declaration, it is appropriate to set the parent
+ -- pointer of R so that the types get properly frozen. Check_List is used
+ -- when the subprogram is called from Build_Record_Init_Proc and is used to
+ -- return a set of constraint checking statements generated by the Checks
+ -- package. R_Check_Off is set to True when the call to Range_Check is to
+ -- be skipped.
function Process_Subtype
(S : Node_Id;
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb
index 826380e4c27..28856d0f24d 100644
--- a/gcc/ada/sem_ch4.adb
+++ b/gcc/ada/sem_ch4.adb
@@ -47,6 +47,7 @@ with Sem_Cat; use Sem_Cat;
with Sem_Ch3; use Sem_Ch3;
with Sem_Ch6; use Sem_Ch6;
with Sem_Ch8; use Sem_Ch8;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Disp; use Sem_Disp;
with Sem_Dist; use Sem_Dist;
with Sem_Eval; use Sem_Eval;
@@ -3875,6 +3876,15 @@ package body Sem_Ch4 is
T : Entity_Id;
begin
+ -- Check if the expression is a function call for which we need to
+ -- adjust a SCIL dispatching node.
+
+ if Generate_SCIL
+ and then Nkind (Expr) = N_Function_Call
+ then
+ Adjust_SCIL_Node (N, Expr);
+ end if;
+
-- If Conversion_OK is set, then the Etype is already set, and the
-- only processing required is to analyze the expression. This is
-- used to construct certain "illegal" conversions which are not
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index fe7ffbc49c3..1f6806b231a 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -46,6 +46,7 @@ with Sem_Disp; use Sem_Disp;
with Sem_Elab; use Sem_Elab;
with Sem_Eval; use Sem_Eval;
with Sem_Res; use Sem_Res;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Type; use Sem_Type;
with Sem_Util; use Sem_Util;
with Sem_Warn; use Sem_Warn;
@@ -1570,6 +1571,15 @@ package body Sem_Ch5 is
Name => New_Occurrence_Of (Id, Loc),
Expression => Relocate_Node (Original_Bound));
+ -- If the relocated node is a function call then check if some
+ -- SCIL node references it and needs readjustment.
+
+ if Generate_SCIL
+ and then Nkind (Original_Bound) = N_Function_Call
+ then
+ Adjust_SCIL_Node (Original_Bound, Expression (Assign));
+ end if;
+
Insert_Before (Parent (N), Assign);
Analyze (Assign);
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 7d4bcd15211..32323400b6d 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -681,6 +681,11 @@ package body Sem_Ch6 is
end if;
end if;
+ -- Mark the return object as referenced, since the return is an
+ -- implicit reference of the object.
+
+ Set_Referenced (Defining_Identifier (Obj_Decl));
+
Check_References (Stm_Entity);
end;
end if;
@@ -4370,6 +4375,13 @@ package body Sem_Ch6 is
elsif Ekind (Subp) = E_Entry then
Decl := Parent (Subp);
+ -- No point in analyzing a malformed operator
+
+ elsif Nkind (Subp) = N_Defining_Operator_Symbol
+ and then Error_Posted (Subp)
+ then
+ return;
+
else
Decl := Unit_Declaration_Node (Subp);
end if;
@@ -4471,7 +4483,8 @@ package body Sem_Ch6 is
Style.Missing_Overriding (Decl, Subp);
end if;
- -- If Subp is an operator, it may override a predefined operation.
+ -- If Subp is an operator, it may override a predefined operation, if
+ -- it is defined in the same scope as the type to which it applies.
-- In that case overridden_subp is empty because of our implicit
-- representation for predefined operators. We have to check whether the
-- signature of Subp matches that of a predefined operator. Note that
@@ -4482,54 +4495,65 @@ package body Sem_Ch6 is
-- explicit overridden operation.
elsif Nkind (Subp) = N_Defining_Operator_Symbol then
+ declare
+ Typ : constant Entity_Id :=
+ Base_Type (Etype (First_Formal (Subp)));
- if Must_Not_Override (Spec) then
-
- -- If this is not a primitive operation or protected subprogram,
- -- then "not overriding" is illegal.
+ Can_Override : constant Boolean :=
+ Operator_Matches_Spec (Subp, Subp)
+ and then Scope (Subp) = Scope (Typ)
+ and then not Is_Class_Wide_Type (Typ);
- if not Is_Primitive
- and then Ekind (Scope (Subp)) /= E_Protected_Type
- then
- Error_Msg_N
- ("overriding indicator only allowed "
- & "if subprogram is primitive", Subp);
+ begin
+ if Must_Not_Override (Spec) then
- elsif Operator_Matches_Spec (Subp, Subp) then
- Error_Msg_NE
- ("subprogram & overrides predefined operator ", Spec, Subp);
- end if;
+ -- If this is not a primitive or a protected subprogram, then
+ -- "not overriding" is illegal.
- elsif Must_Override (Spec) then
- if Is_Overriding_Operation (Subp) then
- Set_Is_Overriding_Operation (Subp);
+ if not Is_Primitive
+ and then Ekind (Scope (Subp)) /= E_Protected_Type
+ then
+ Error_Msg_N
+ ("overriding indicator only allowed "
+ & "if subprogram is primitive", Subp);
- elsif not Operator_Matches_Spec (Subp, Subp) then
- Error_Msg_NE ("subprogram & is not overriding", Spec, Subp);
- end if;
+ elsif Can_Override then
+ Error_Msg_NE
+ ("subprogram & overrides predefined operator ",
+ Spec, Subp);
+ end if;
- elsif not Error_Posted (Subp)
- and then Style_Check
- and then Operator_Matches_Spec (Subp, Subp)
- and then
- not Is_Predefined_File_Name
- (Unit_File_Name (Get_Source_Unit (Subp)))
- then
- Set_Is_Overriding_Operation (Subp);
+ elsif Must_Override (Spec) then
+ if Is_Overriding_Operation (Subp) then
+ Set_Is_Overriding_Operation (Subp);
- -- If style checks are enabled, indicate that the indicator is
- -- missing. However, at the point of declaration, the type of
- -- which this is a primitive operation may be private, in which
- -- case the indicator would be premature.
+ elsif not Can_Override then
+ Error_Msg_NE ("subprogram & is not overriding", Spec, Subp);
+ end if;
- if Has_Private_Declaration (Etype (Subp))
- or else Has_Private_Declaration (Etype (First_Formal (Subp)))
+ elsif not Error_Posted (Subp)
+ and then Style_Check
+ and then Can_Override
+ and then
+ not Is_Predefined_File_Name
+ (Unit_File_Name (Get_Source_Unit (Subp)))
then
- null;
- else
- Style.Missing_Overriding (Decl, Subp);
+ Set_Is_Overriding_Operation (Subp);
+
+ -- If style checks are enabled, indicate that the indicator is
+ -- missing. However, at the point of declaration, the type of
+ -- which this is a primitive operation may be private, in which
+ -- case the indicator would be premature.
+
+ if Has_Private_Declaration (Etype (Subp))
+ or else Has_Private_Declaration (Etype (First_Formal (Subp)))
+ then
+ null;
+ else
+ Style.Missing_Overriding (Decl, Subp);
+ end if;
end if;
- end if;
+ end;
elsif Must_Override (Spec) then
if Ekind (Subp) = E_Entry then
@@ -7673,10 +7697,22 @@ package body Sem_Ch6 is
Set_Is_Overriding_Operation (S);
Check_Overriding_Indicator (S, E, Is_Primitive => True);
- -- Indicate that S overrides the operation from which
- -- E is inherited.
-
- if Comes_From_Source (S) then
+ -- If S is a user-defined subprogram or a null procedure
+ -- expanded to override an inherited null procedure, then
+ -- indicate that E overrides the operation from which S
+ -- is inherited. It seems odd that Overridden_Operation
+ -- isn't set in all cases where Is_Overriding_Operation
+ -- is true, but doing so causes infinite loops in the
+ -- compiler for implicit overriding subprograms. ???
+
+ if Comes_From_Source (S)
+ or else
+ (Present (Parent (S))
+ and then
+ Nkind (Parent (S)) = N_Procedure_Specification
+ and then
+ Null_Present (Parent (S)))
+ then
if Present (Alias (E)) then
Set_Overridden_Operation (S, Alias (E));
else
diff --git a/gcc/ada/sem_ch7.adb b/gcc/ada/sem_ch7.adb
index c3a1fb39713..27505f215a9 100644
--- a/gcc/ada/sem_ch7.adb
+++ b/gcc/ada/sem_ch7.adb
@@ -1907,12 +1907,15 @@ package body Sem_Ch7 is
if Tagged_Present (Def) then
Set_Ekind (Id, E_Record_Type_With_Private);
- Make_Class_Wide_Type (Id);
Set_Primitive_Operations (Id, New_Elmt_List);
Set_Is_Abstract_Type (Id, Abstract_Present (Def));
Set_Is_Limited_Record (Id, Limited_Present (Def));
Set_Has_Delayed_Freeze (Id, True);
+ -- Create a class-wide type with the same attributes
+
+ Make_Class_Wide_Type (Id);
+
elsif Abstract_Present (Def) then
Error_Msg_N ("only a tagged type can be abstract", N);
end if;
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index 385337a99bb..18853d72729 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -424,6 +424,10 @@ package body Sem_Eval is
-- have a 'Last/'First reference in which case the value returned is the
-- appropriate type bound.
+ function Is_Known_Valid_Operand (Opnd : Node_Id) return Boolean;
+ -- Even if the context does not assume that values are valid, some
+ -- simple cases can be recognized.
+
function Is_Same_Value (L, R : Node_Id) return Boolean;
-- Returns True iff L and R represent expressions that definitely
-- have identical (but not necessarily compile time known) values
@@ -522,7 +526,7 @@ package body Sem_Eval is
else -- Attribute_Name (N) = Name_Last
return Make_Integer_Literal (Sloc (N),
Intval => Intval (String_Literal_Low_Bound (Xtyp))
- + String_Literal_Length (Xtyp));
+ + String_Literal_Length (Xtyp));
end if;
end if;
@@ -551,6 +555,22 @@ package body Sem_Eval is
return N;
end Compare_Fixup;
+ ----------------------------
+ -- Is_Known_Valid_Operand --
+ ----------------------------
+
+ function Is_Known_Valid_Operand (Opnd : Node_Id) return Boolean is
+ begin
+ return (Is_Entity_Name (Opnd)
+ and then
+ (Is_Known_Valid (Entity (Opnd))
+ or else Ekind (Entity (Opnd)) = E_In_Parameter
+ or else
+ (Ekind (Entity (Opnd)) in Object_Kind
+ and then Present (Current_Value (Entity (Opnd))))))
+ or else Is_OK_Static_Expression (Opnd);
+ end Is_Known_Valid_Operand;
+
-------------------
-- Is_Same_Value --
-------------------
@@ -560,12 +580,11 @@ package body Sem_Eval is
Rf : constant Node_Id := Compare_Fixup (R);
function Is_Same_Subscript (L, R : List_Id) return Boolean;
- -- L, R are the Expressions values from two attribute nodes
- -- for First or Last attributes. Either may be set to No_List
- -- if no expressions are present (indicating subscript 1).
- -- The result is True if both expressions represent the same
- -- subscript (note that one case is where one subscript is
- -- missing and the other is explicitly set to 1).
+ -- L, R are the Expressions values from two attribute nodes for First
+ -- or Last attributes. Either may be set to No_List if no expressions
+ -- are present (indicating subscript 1). The result is True if both
+ -- expressions represent the same subscript (note one case is where
+ -- one subscript is missing and the other is explicitly set to 1).
-----------------------
-- Is_Same_Subscript --
@@ -886,20 +905,12 @@ package body Sem_Eval is
and then LLo = RLo
then
- -- if the range includes a single literal and we
- -- can assume validity then the result is known
- -- even if an operand is not static.
+ -- If the range includes a single literal and we can assume
+ -- validity then the result is known even if an operand is
+ -- not static.
if Assume_Valid then
return EQ;
-
- elsif Is_Entity_Name (L)
- and then Is_Entity_Name (R)
- and then Is_Known_Valid (Entity (L))
- and then Is_Known_Valid (Entity (R))
- then
- return EQ;
-
else
return Unknown;
end if;
@@ -909,6 +920,15 @@ package body Sem_Eval is
elsif RHi = LLo then
return GE;
+
+ elsif not Is_Known_Valid_Operand (L)
+ and then not Assume_Valid
+ then
+ if Is_Same_Value (L, R) then
+ return EQ;
+ else
+ return Unknown;
+ end if;
end if;
end if;
end;
diff --git a/gcc/ada/sem_scil.adb b/gcc/ada/sem_scil.adb
new file mode 100644
index 00000000000..f47d1288f81
--- /dev/null
+++ b/gcc/ada/sem_scil.adb
@@ -0,0 +1,649 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- S E M _ S C I L --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 2009, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING3. If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+with Einfo; use Einfo;
+with Namet; use Namet;
+with Nlists; use Nlists;
+with Opt; use Opt;
+with Rtsfind; use Rtsfind;
+with Sem; use Sem;
+with Sem_Aux; use Sem_Aux;
+with Sem_Util; use Sem_Util;
+with Sinfo; use Sinfo;
+with Snames; use Snames;
+with Stand; use Stand;
+
+package body Sem_SCIL is
+
+ ----------------------
+ -- Adjust_SCIL_Node --
+ ----------------------
+
+ procedure Adjust_SCIL_Node (Old_Node : Node_Id; New_Node : Node_Id) is
+ SCIL_Node : Node_Id;
+
+ begin
+ pragma Assert (Generate_SCIL);
+
+ -- Check cases in which no action is required. Currently the only SCIL
+ -- nodes that may require adjustment are those of dispatching calls
+ -- internally generated by the frontend.
+
+ if Comes_From_Source (Old_Node)
+ or else not
+ Nkind_In (New_Node, N_Function_Call, N_Procedure_Call_Statement)
+ then
+ return;
+
+ -- Conditional expression associated with equality operator. Old_Node
+ -- may be part of the expansion of the predefined equality operator of
+ -- a tagged type and hence we need to check if it has a SCIL dispatching
+ -- node that needs adjustment.
+
+ elsif Nkind (Old_Node) = N_Conditional_Expression
+ and then (Nkind (Original_Node (Old_Node)) = N_Op_Eq
+ or else
+ (Nkind (Original_Node (Old_Node)) = N_Function_Call
+ and then Chars (Name (Original_Node (Old_Node))) =
+ Name_Op_Eq))
+ then
+ null;
+
+ -- Type conversions may involve dispatching calls to functions whose
+ -- associated SCIL dispatching node needs adjustment.
+
+ elsif Nkind (Old_Node) = N_Type_Conversion then
+ null;
+
+ -- Relocated subprogram call
+
+ elsif Nkind (Old_Node) = Nkind (New_Node)
+ and then Original_Node (Old_Node) = Original_Node (New_Node)
+ then
+ null;
+
+ else
+ return;
+ end if;
+
+ -- Search for the SCIL node and update it (if found)
+
+ SCIL_Node := Find_SCIL_Node (Old_Node);
+
+ if Present (SCIL_Node) then
+ Set_SCIL_Related_Node (SCIL_Node, New_Node);
+ end if;
+ end Adjust_SCIL_Node;
+
+ ---------------------
+ -- Check_SCIL_Node --
+ ---------------------
+
+ -- Is this a good name for the function, given it only deals with
+ -- N_SCIL_Dispatching_Call case ???
+
+ function Check_SCIL_Node (N : Node_Id) return Traverse_Result is
+ Ctrl_Tag : Node_Id;
+ Ctrl_Typ : Entity_Id;
+
+ begin
+ if Nkind (N) = N_SCIL_Dispatching_Call then
+ Ctrl_Tag := SCIL_Controlling_Tag (N);
+
+ -- SCIL_Related_Node of SCIL dispatching call nodes MUST reference
+ -- subprogram calls.
+
+ if not Nkind_In (SCIL_Related_Node (N), N_Function_Call,
+ N_Procedure_Call_Statement)
+ then
+ pragma Assert (False);
+ raise Program_Error;
+
+ -- In simple cases the controlling tag is the tag of the controlling
+ -- argument (i.e. Obj.Tag).
+
+ elsif Nkind (Ctrl_Tag) = N_Selected_Component then
+ Ctrl_Typ := Etype (Ctrl_Tag);
+
+ -- Interface types are unsupported
+
+ if Is_Interface (Ctrl_Typ)
+ or else (RTE_Available (RE_Interface_Tag)
+ and then Ctrl_Typ = RTE (RE_Interface_Tag))
+ then
+ null;
+
+ else
+ pragma Assert (Ctrl_Typ = RTE (RE_Tag));
+ null;
+ end if;
+
+ -- When the controlling tag of a dispatching call is an identifier
+ -- the SCIL_Controlling_Tag attribute references the corresponding
+ -- object or parameter declaration. Interface types are still
+ -- unsupported.
+
+ elsif Nkind_In (Ctrl_Tag, N_Object_Declaration,
+ N_Parameter_Specification)
+ then
+ Ctrl_Typ := Etype (Defining_Identifier (Ctrl_Tag));
+
+ -- Interface types are unsupported.
+
+ if Is_Interface (Ctrl_Typ)
+ or else (RTE_Available (RE_Interface_Tag)
+ and then Ctrl_Typ = RTE (RE_Interface_Tag))
+ or else (Is_Access_Type (Ctrl_Typ)
+ and then
+ Is_Interface
+ (Available_View
+ (Base_Type (Designated_Type (Ctrl_Typ)))))
+ then
+ null;
+
+ else
+ pragma Assert
+ (Ctrl_Typ = RTE (RE_Tag)
+ or else
+ (Is_Access_Type (Ctrl_Typ)
+ and then Available_View
+ (Base_Type (Designated_Type (Ctrl_Typ))) =
+ RTE (RE_Tag)));
+ null;
+ end if;
+
+ -- Interface types are unsupported
+
+ elsif Is_Interface (Etype (Ctrl_Tag)) then
+ null;
+
+ else
+ pragma Assert (False);
+ raise Program_Error;
+ end if;
+
+ return Skip;
+
+ -- Node is not N_SCIL_Dispatching_Call
+
+ else
+ return OK;
+ end if;
+ end Check_SCIL_Node;
+
+ --------------------
+ -- Find_SCIL_Node --
+ --------------------
+
+ function Find_SCIL_Node (Node : Node_Id) return Node_Id is
+ Found_Node : Node_Id;
+ -- This variable stores the last node found by the nested subprogram
+ -- Find_SCIL_Node.
+
+ function Find_SCIL_Node (L : List_Id) return Boolean;
+ -- Searches in list L for a SCIL node associated with a dispatching call
+ -- whose SCIL_Related_Node is Node. If found returns true and stores the
+ -- SCIL node in Found_Node; otherwise returns False and sets Found_Node
+ -- to Empty.
+
+ --------------------
+ -- Find_SCIL_Node --
+ --------------------
+
+ function Find_SCIL_Node (L : List_Id) return Boolean is
+ N : Node_Id;
+
+ begin
+ N := First (L);
+ while Present (N) loop
+ if Nkind (N) in N_SCIL_Node
+ and then SCIL_Related_Node (N) = Node
+ then
+ Found_Node := N;
+ return True;
+ end if;
+
+ Next (N);
+ end loop;
+
+ Found_Node := Empty;
+ return False;
+ end Find_SCIL_Node;
+
+ -- Local variables
+
+ P : Node_Id;
+
+ -- Start of processing for Find_SCIL_Node
+
+ begin
+ pragma Assert (Generate_SCIL);
+
+ -- Search for the SCIL node in list associated with a transient scope
+
+ if Scope_Is_Transient then
+ declare
+ SE : Scope_Stack_Entry
+ renames Scope_Stack.Table (Scope_Stack.Last);
+ begin
+ if SE.Is_Transient
+ and then Present (SE.Actions_To_Be_Wrapped_Before)
+ and then Find_SCIL_Node (SE.Actions_To_Be_Wrapped_Before)
+ then
+ return Found_Node;
+ end if;
+ end;
+ end if;
+
+ -- Otherwise climb up the tree searching for the SCIL node analyzing
+ -- all the lists in which Insert_Actions may have inserted it
+
+ P := Node;
+ while Present (P) loop
+ case Nkind (P) is
+
+ -- Actions associated with AND THEN or OR ELSE
+
+ when N_Short_Circuit =>
+ if Present (Actions (P))
+ and then Find_SCIL_Node (Actions (P))
+ then
+ return Found_Node;
+ end if;
+
+ -- Actions of conditional expressions
+
+ when N_Conditional_Expression =>
+ if (Present (Then_Actions (P))
+ and then Find_SCIL_Node (Actions (P)))
+ or else
+ (Present (Else_Actions (P))
+ and then Find_SCIL_Node (Else_Actions (P)))
+ then
+ return Found_Node;
+ end if;
+
+ -- Conditions of while expression or elsif.
+
+ when N_Iteration_Scheme |
+ N_Elsif_Part
+ =>
+ if Present (Condition_Actions (P))
+ and then Find_SCIL_Node (Condition_Actions (P))
+ then
+ return Found_Node;
+ end if;
+
+ -- Statements, declarations, pragmas, representation clauses
+
+ when
+ -- Statements
+
+ N_Procedure_Call_Statement |
+ N_Statement_Other_Than_Procedure_Call |
+
+ -- Pragmas
+
+ N_Pragma |
+
+ -- Representation_Clause
+
+ N_At_Clause |
+ N_Attribute_Definition_Clause |
+ N_Enumeration_Representation_Clause |
+ N_Record_Representation_Clause |
+
+ -- Declarations
+
+ N_Abstract_Subprogram_Declaration |
+ N_Entry_Body |
+ N_Exception_Declaration |
+ N_Exception_Renaming_Declaration |
+ N_Formal_Abstract_Subprogram_Declaration |
+ N_Formal_Concrete_Subprogram_Declaration |
+ N_Formal_Object_Declaration |
+ N_Formal_Type_Declaration |
+ N_Full_Type_Declaration |
+ N_Function_Instantiation |
+ N_Generic_Function_Renaming_Declaration |
+ N_Generic_Package_Declaration |
+ N_Generic_Package_Renaming_Declaration |
+ N_Generic_Procedure_Renaming_Declaration |
+ N_Generic_Subprogram_Declaration |
+ N_Implicit_Label_Declaration |
+ N_Incomplete_Type_Declaration |
+ N_Number_Declaration |
+ N_Object_Declaration |
+ N_Object_Renaming_Declaration |
+ N_Package_Body |
+ N_Package_Body_Stub |
+ N_Package_Declaration |
+ N_Package_Instantiation |
+ N_Package_Renaming_Declaration |
+ N_Private_Extension_Declaration |
+ N_Private_Type_Declaration |
+ N_Procedure_Instantiation |
+ N_Protected_Body |
+ N_Protected_Body_Stub |
+ N_Protected_Type_Declaration |
+ N_Single_Task_Declaration |
+ N_Subprogram_Body |
+ N_Subprogram_Body_Stub |
+ N_Subprogram_Declaration |
+ N_Subprogram_Renaming_Declaration |
+ N_Subtype_Declaration |
+ N_Task_Body |
+ N_Task_Body_Stub |
+ N_Task_Type_Declaration |
+
+ -- Freeze entity behaves like a declaration or statement
+
+ N_Freeze_Entity
+ =>
+ -- Do not search here if the item is not a list member
+
+ if not Is_List_Member (P) then
+ null;
+
+ -- Do not search if parent of P is an N_Component_Association
+ -- node (i.e. we are in the context of an N_Aggregate or
+ -- N_Extension_Aggregate node). In this case the node should
+ -- have been added before the entire aggregate.
+
+ elsif Nkind (Parent (P)) = N_Component_Association then
+ null;
+
+ -- Do not search if the parent of P is either an N_Variant
+ -- node or an N_Record_Definition node. In this case the node
+ -- should have been added before the entire record.
+
+ elsif Nkind (Parent (P)) = N_Variant
+ or else Nkind (Parent (P)) = N_Record_Definition
+ then
+ null;
+
+ -- Otherwise search it in the list containing this node
+
+ elsif Find_SCIL_Node (List_Containing (P)) then
+ return Found_Node;
+ end if;
+
+ -- A special case, N_Raise_xxx_Error can act either as a statement
+ -- or a subexpression. We diferentiate them by looking at the
+ -- Etype. It is set to Standard_Void_Type in the statement case.
+
+ when
+ N_Raise_xxx_Error =>
+ if Etype (P) = Standard_Void_Type then
+ if Is_List_Member (P)
+ and then Find_SCIL_Node (List_Containing (P))
+ then
+ return Found_Node;
+ end if;
+
+ -- In the subexpression case, keep climbing
+
+ else
+ null;
+ end if;
+
+ -- If a component association appears within a loop created for
+ -- an array aggregate, check if the SCIL node was added to the
+ -- the list of nodes attached to the association.
+
+ when
+ N_Component_Association =>
+ if Nkind (Parent (P)) = N_Aggregate
+ and then Present (Loop_Actions (P))
+ and then Find_SCIL_Node (Loop_Actions (P))
+ then
+ return Found_Node;
+ end if;
+
+ -- Another special case, an attribute denoting a procedure call
+
+ when
+ N_Attribute_Reference =>
+ if Is_Procedure_Attribute_Name (Attribute_Name (P))
+ and then Find_SCIL_Node (List_Containing (P))
+ then
+ return Found_Node;
+
+ -- In the subexpression case, keep climbing
+
+ else
+ null;
+ end if;
+
+ -- SCIL nodes do not have subtrees and hence they can never be
+ -- found climbing tree
+
+ when
+ N_SCIL_Dispatch_Table_Object_Init |
+ N_SCIL_Dispatch_Table_Tag_Init |
+ N_SCIL_Dispatching_Call |
+ N_SCIL_Tag_Init
+ =>
+ pragma Assert (False);
+ raise Program_Error;
+
+ -- For all other node types, keep climbing tree
+
+ when
+ N_Abortable_Part |
+ N_Accept_Alternative |
+ N_Access_Definition |
+ N_Access_Function_Definition |
+ N_Access_Procedure_Definition |
+ N_Access_To_Object_Definition |
+ N_Aggregate |
+ N_Allocator |
+ N_Case_Statement_Alternative |
+ N_Character_Literal |
+ N_Compilation_Unit |
+ N_Compilation_Unit_Aux |
+ N_Component_Clause |
+ N_Component_Declaration |
+ N_Component_Definition |
+ N_Component_List |
+ N_Constrained_Array_Definition |
+ N_Decimal_Fixed_Point_Definition |
+ N_Defining_Character_Literal |
+ N_Defining_Identifier |
+ N_Defining_Operator_Symbol |
+ N_Defining_Program_Unit_Name |
+ N_Delay_Alternative |
+ N_Delta_Constraint |
+ N_Derived_Type_Definition |
+ N_Designator |
+ N_Digits_Constraint |
+ N_Discriminant_Association |
+ N_Discriminant_Specification |
+ N_Empty |
+ N_Entry_Body_Formal_Part |
+ N_Entry_Call_Alternative |
+ N_Entry_Declaration |
+ N_Entry_Index_Specification |
+ N_Enumeration_Type_Definition |
+ N_Error |
+ N_Exception_Handler |
+ N_Expanded_Name |
+ N_Explicit_Dereference |
+ N_Extension_Aggregate |
+ N_Floating_Point_Definition |
+ N_Formal_Decimal_Fixed_Point_Definition |
+ N_Formal_Derived_Type_Definition |
+ N_Formal_Discrete_Type_Definition |
+ N_Formal_Floating_Point_Definition |
+ N_Formal_Modular_Type_Definition |
+ N_Formal_Ordinary_Fixed_Point_Definition |
+ N_Formal_Package_Declaration |
+ N_Formal_Private_Type_Definition |
+ N_Formal_Signed_Integer_Type_Definition |
+ N_Function_Call |
+ N_Function_Specification |
+ N_Generic_Association |
+ N_Handled_Sequence_Of_Statements |
+ N_Identifier |
+ N_In |
+ N_Index_Or_Discriminant_Constraint |
+ N_Indexed_Component |
+ N_Integer_Literal |
+ N_Itype_Reference |
+ N_Label |
+ N_Loop_Parameter_Specification |
+ N_Mod_Clause |
+ N_Modular_Type_Definition |
+ N_Not_In |
+ N_Null |
+ N_Op_Abs |
+ N_Op_Add |
+ N_Op_And |
+ N_Op_Concat |
+ N_Op_Divide |
+ N_Op_Eq |
+ N_Op_Expon |
+ N_Op_Ge |
+ N_Op_Gt |
+ N_Op_Le |
+ N_Op_Lt |
+ N_Op_Minus |
+ N_Op_Mod |
+ N_Op_Multiply |
+ N_Op_Ne |
+ N_Op_Not |
+ N_Op_Or |
+ N_Op_Plus |
+ N_Op_Rem |
+ N_Op_Rotate_Left |
+ N_Op_Rotate_Right |
+ N_Op_Shift_Left |
+ N_Op_Shift_Right |
+ N_Op_Shift_Right_Arithmetic |
+ N_Op_Subtract |
+ N_Op_Xor |
+ N_Operator_Symbol |
+ N_Ordinary_Fixed_Point_Definition |
+ N_Others_Choice |
+ N_Package_Specification |
+ N_Parameter_Association |
+ N_Parameter_Specification |
+ N_Pop_Constraint_Error_Label |
+ N_Pop_Program_Error_Label |
+ N_Pop_Storage_Error_Label |
+ N_Pragma_Argument_Association |
+ N_Procedure_Specification |
+ N_Protected_Definition |
+ N_Push_Constraint_Error_Label |
+ N_Push_Program_Error_Label |
+ N_Push_Storage_Error_Label |
+ N_Qualified_Expression |
+ N_Range |
+ N_Range_Constraint |
+ N_Real_Literal |
+ N_Real_Range_Specification |
+ N_Record_Definition |
+ N_Reference |
+ N_Selected_Component |
+ N_Signed_Integer_Type_Definition |
+ N_Single_Protected_Declaration |
+ N_Slice |
+ N_String_Literal |
+ N_Subprogram_Info |
+ N_Subtype_Indication |
+ N_Subunit |
+ N_Task_Definition |
+ N_Terminate_Alternative |
+ N_Triggering_Alternative |
+ N_Type_Conversion |
+ N_Unchecked_Expression |
+ N_Unchecked_Type_Conversion |
+ N_Unconstrained_Array_Definition |
+ N_Unused_At_End |
+ N_Unused_At_Start |
+ N_Use_Package_Clause |
+ N_Use_Type_Clause |
+ N_Variant |
+ N_Variant_Part |
+ N_Validate_Unchecked_Conversion |
+ N_With_Clause
+ =>
+ null;
+
+ end case;
+
+ -- If we fall through above tests, keep climbing tree
+
+ if Nkind (Parent (P)) = N_Subunit then
+
+ -- This is the proper body corresponding to a stub. Insertion done
+ -- at the point of the stub, which is in the declarative part of
+ -- the parent unit.
+
+ P := Corresponding_Stub (Parent (P));
+
+ else
+ P := Parent (P);
+ end if;
+ end loop;
+
+ -- SCIL node not found
+
+ return Empty;
+ end Find_SCIL_Node;
+
+ -------------------------
+ -- First_Non_SCIL_Node --
+ -------------------------
+
+ function First_Non_SCIL_Node (L : List_Id) return Node_Id is
+ N : Node_Id;
+
+ begin
+ N := First (L);
+ while Nkind (N) in N_SCIL_Node loop
+ Next (N);
+ end loop;
+
+ return N;
+ end First_Non_SCIL_Node;
+
+ ------------------------
+ -- Next_Non_SCIL_Node --
+ ------------------------
+
+ function Next_Non_SCIL_Node (N : Node_Id) return Node_Id is
+ Aux_N : Node_Id;
+
+ begin
+ Aux_N := Next (N);
+ while Nkind (Aux_N) in N_SCIL_Node loop
+ Next (Aux_N);
+ end loop;
+
+ return Aux_N;
+ end Next_Non_SCIL_Node;
+
+end Sem_SCIL;
diff --git a/gcc/ada/sem_scil.ads b/gcc/ada/sem_scil.ads
new file mode 100644
index 00000000000..f257e636295
--- /dev/null
+++ b/gcc/ada/sem_scil.ads
@@ -0,0 +1,58 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- S E M _ S C I L --
+-- --
+-- B o d y --
+-- --
+-- Copyright (C) 2009, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
+-- for more details. You should have received a copy of the GNU General --
+-- Public License distributed with GNAT; see file COPYING3. If not, go to --
+-- http://www.gnu.org/licenses for a complete copy of the license. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This package contains routines involved in the frontend addition and
+-- verification of SCIL nodes.
+
+with Atree; use Atree;
+with Types; use Types;
+
+package Sem_SCIL is
+
+ -- Here would be a good place to document what SCIL is all about ???
+
+ procedure Adjust_SCIL_Node (Old_Node : Node_Id; New_Node : Node_Id);
+ -- Searches for a SCIL dispatching node associated with Old_Node. If found
+ -- then update its SCIL_Related_Node field to reference New_Node.
+
+ function Check_SCIL_Node (N : Node_Id) return Traverse_Result;
+ -- Process a single node during the tree traversal. Done to verify that
+ -- SCIL nodes decoration fulfill the requirements of the SCIL backend.
+
+ procedure Check_SCIL_Nodes is new Traverse_Proc (Check_SCIL_Node);
+ -- The traversal procedure itself
+
+ function Find_SCIL_Node (Node : Node_Id) return Node_Id;
+ -- Searches for a SCIL dispatching node associated with Node. If not found
+ -- then return Empty.
+
+ function First_Non_SCIL_Node (L : List_Id) return Node_Id;
+ -- Returns the first non-SCIL node of list L
+
+ function Next_Non_SCIL_Node (N : Node_Id) return Node_Id;
+ -- N must be a member of a list. Returns the next non SCIL node in the list
+ -- containing N, or Empty if this is the last non SCIL node in the list.
+
+end Sem_SCIL;
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 8cd32783e1a..37965afb69a 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -50,6 +50,7 @@ with Sem_Ch8; use Sem_Ch8;
with Sem_Disp; use Sem_Disp;
with Sem_Eval; use Sem_Eval;
with Sem_Res; use Sem_Res;
+with Sem_SCIL; use Sem_SCIL;
with Sem_Type; use Sem_Type;
with Sinfo; use Sinfo;
with Sinput; use Sinput;
@@ -5229,6 +5230,16 @@ package body Sem_Util is
begin
Save_Interps (N, New_Prefix);
+
+ -- Check if the node relocation requires readjustment of some SCIL
+ -- dispatching node.
+
+ if Generate_SCIL
+ and then Nkind (N) = N_Function_Call
+ then
+ Adjust_SCIL_Node (N, New_Prefix);
+ end if;
+
Rewrite (N, Make_Explicit_Dereference (Sloc (N), Prefix => New_Prefix));
Set_Etype (N, Designated_Type (Etype (New_Prefix)));
@@ -5334,6 +5345,19 @@ package body Sem_Util is
and then E = Base_Type (E);
end Is_AAMP_Float;
+ -----------------------------
+ -- Is_Actual_Out_Parameter --
+ -----------------------------
+
+ function Is_Actual_Out_Parameter (N : Node_Id) return Boolean is
+ Formal : Entity_Id;
+ Call : Node_Id;
+ begin
+ Find_Actual (N, Formal, Call);
+ return Present (Formal)
+ and then Ekind (Formal) = E_Out_Parameter;
+ end Is_Actual_Out_Parameter;
+
-------------------------
-- Is_Actual_Parameter --
-------------------------
@@ -6113,6 +6137,21 @@ package body Sem_Util is
end if;
end Is_Fully_Initialized_Variant;
+ ------------
+ -- Is_LHS --
+ ------------
+
+ -- We seem to have a lot of overlapping functions that do similar things
+ -- (testing for left hand sides or lvalues???). Anyway, since this one is
+ -- purely syntactic, it should be in Sem_Aux I would think???
+
+ function Is_LHS (N : Node_Id) return Boolean is
+ P : constant Node_Id := Parent (N);
+ begin
+ return Nkind (P) = N_Assignment_Statement
+ and then Name (P) = N;
+ end Is_LHS;
+
----------------------------
-- Is_Inherited_Operation --
----------------------------
@@ -7114,19 +7153,33 @@ package body Sem_Util is
Last_Assignment_Only : Boolean := False)
is
begin
+ -- ??? do we have to worry about clearing cached checks?
+
if Is_Assignable (Ent) then
Set_Last_Assignment (Ent, Empty);
end if;
- if not Last_Assignment_Only and then Is_Object (Ent) then
- Kill_Checks (Ent);
- Set_Current_Value (Ent, Empty);
+ if Is_Object (Ent) then
+ if not Last_Assignment_Only then
+ Kill_Checks (Ent);
+ Set_Current_Value (Ent, Empty);
- if not Can_Never_Be_Null (Ent) then
- Set_Is_Known_Non_Null (Ent, False);
- end if;
+ if not Can_Never_Be_Null (Ent) then
+ Set_Is_Known_Non_Null (Ent, False);
+ end if;
+
+ Set_Is_Known_Null (Ent, False);
- Set_Is_Known_Null (Ent, False);
+ -- Reset Is_Known_Valid unless type is always valid, or if we have
+ -- a loop parameter (loop parameters are always valid, since their
+ -- bounds are defined by the bounds given in the loop header).
+
+ if not Is_Known_Valid (Etype (Ent))
+ and then Ekind (Ent) /= E_Loop_Parameter
+ then
+ Set_Is_Known_Valid (Ent, False);
+ end if;
+ end if;
end if;
end Kill_Current_Values;
@@ -10396,10 +10449,7 @@ package body Sem_Util is
begin
-- Deal with indexed or selected component where prefix is modified
- if Nkind (N) = N_Indexed_Component
- or else
- Nkind (N) = N_Selected_Component
- then
+ if Nkind_In (N, N_Indexed_Component, N_Selected_Component) then
Pref := Prefix (N);
-- If prefix is access type, then it is the designated object that is
diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads
index aa3958f8b4f..0e3dde668e6 100644
--- a/gcc/ada/sem_util.ads
+++ b/gcc/ada/sem_util.ads
@@ -629,6 +629,9 @@ package Sem_Util is
-- the dependency of Einfo on Targparm which would be required for a
-- synthesized attribute.
+ function Is_Actual_Out_Parameter (N : Node_Id) return Boolean;
+ -- Determines if N is an actual parameter of out mode in a subprogram call
+
function Is_Actual_Parameter (N : Node_Id) return Boolean;
-- Determines if N is an actual parameter in a subprogram call
@@ -659,11 +662,10 @@ package Sem_Util is
function Is_Dependent_Component_Of_Mutable_Object
(Object : Node_Id) return Boolean;
- -- Returns True if Object is the name of a subcomponent that
- -- depends on discriminants of a variable whose nominal subtype
- -- is unconstrained and not indefinite, and the variable is
- -- not aliased. Otherwise returns False. The nodes passed
- -- to this function are assumed to denote objects.
+ -- Returns True if Object is the name of a subcomponent that depends on
+ -- discriminants of a variable whose nominal subtype is unconstrained and
+ -- not indefinite, and the variable is not aliased. Otherwise returns
+ -- False. The nodes passed to this function are assumed to denote objects.
function Is_Dereferenced (N : Node_Id) return Boolean;
-- N is a subexpression node of an access type. This function returns
@@ -690,19 +692,21 @@ package Sem_Util is
-- point type T, i.e. if it is an exact multiple of Small.
function Is_Fully_Initialized_Type (Typ : Entity_Id) return Boolean;
- -- Typ is a type entity. This function returns true if this type is
- -- fully initialized, meaning that an object of the type is fully
- -- initialized. Note that initialization resulting from the use of
- -- pragma Normalized_Scalars does not count. Note that this is only
- -- used for the purpose of issuing warnings for objects that are
- -- potentially referenced uninitialized. This means that the result
- -- returned is not crucial, but probably should err on the side of
- -- thinking things are fully initialized if it does not know.
+ -- Typ is a type entity. This function returns true if this type is fully
+ -- initialized, meaning that an object of the type is fully initialized.
+ -- Note that initialization resulting from use of pragma Normalized_Scalars
+ -- does not count. Note that this is only used for the purpose of issuing
+ -- warnings for objects that are potentially referenced uninitialized. This
+ -- means that the result returned is not crucial, but should err on the
+ -- side of thinking things are fully initialized if it does not know.
function Is_Inherited_Operation (E : Entity_Id) return Boolean;
-- E is a subprogram. Return True is E is an implicit operation inherited
-- by a derived type declarations.
+ function Is_LHS (N : Node_Id) return Boolean;
+ -- Returns True iff N is used as Name in an assignment statement.
+
function Is_Library_Level_Entity (E : Entity_Id) return Boolean;
-- A library-level declaration is one that is accessible from Standard,
-- i.e. a library unit or an entity declared in a library package.
@@ -816,9 +820,9 @@ package Sem_Util is
-- clear the Is_True_Constant flag, since that only gets reset if there
-- really is an assignment somewhere in the entity scope). This procedure
-- also calls Kill_All_Checks, since this is a special case of needing to
- -- forget saved values. This procedure also clears Is_Known_Non_Null flags
- -- in variables, constants or parameters since these are also not known to
- -- be valid.
+ -- forget saved values. This procedure also clears the Is_Known_Null and
+ -- Is_Known_Non_Null and Is_Known_Valid flags in variables, constants or
+ -- parameters since these are also not known to be trustable any more.
--
-- The Last_Assignment_Only flag is set True to clear only Last_Assignment
-- fields and leave other fields unchanged. This is used when we encounter
@@ -835,8 +839,8 @@ package Sem_Util is
Last_Assignment_Only : Boolean := False);
-- This performs the same processing as described above for the form with
-- no argument, but for the specific entity given. The call has no effect
- -- if the entity Ent is not for an object. Again, Last_Assignment_Only is
- -- set if you want to clear only the Last_Assignment field (see above).
+ -- if the entity Ent is not for an object. Last_Assignment_Only has the
+ -- same meaning as for the call with no Ent.
procedure Kill_Size_Check_Code (E : Entity_Id);
-- Called when an address clause or pragma Import is applied to an entity.
diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb
index e580f474820..e917ccf7327 100644
--- a/gcc/ada/sem_warn.adb
+++ b/gcc/ada/sem_warn.adb
@@ -3904,7 +3904,6 @@ package body Sem_Warn is
then
if Warn_On_Modified_Unread
and then not Is_Imported (E)
- and then not Is_Return_Object (E)
and then not Is_Aliased (E)
and then No (Renamed_Object (E))
then
diff --git a/gcc/ada/sinfo.adb b/gcc/ada/sinfo.adb
index 3ecaf513ffe..816adcf5afc 100644
--- a/gcc/ada/sinfo.adb
+++ b/gcc/ada/sinfo.adb
@@ -1703,14 +1703,6 @@ package body Sinfo is
return Flag7 (N);
end Is_Protected_Subprogram_Body;
- function Is_SCIL_Node
- (N : Node_Id) return Boolean is
- begin
- pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- return Flag4 (N);
- end Is_SCIL_Node;
-
function Is_Static_Coextension
(N : Node_Id) return Boolean is
begin
@@ -2541,27 +2533,33 @@ package body Sinfo is
return Flag18 (N);
end Rounded_Result;
- function SCIL_Entity
+ function SCIL_Controlling_Tag
(N : Node_Id) return Node_Id is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- return Node4 (N);
- end SCIL_Entity;
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call);
+ return Node5 (N);
+ end SCIL_Controlling_Tag;
- function SCIL_Nkind
- (N : Node_Id) return Uint is
+ function SCIL_Entity
+ (N : Node_Id) return Node_Id is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- return Uint3 (N);
- end SCIL_Nkind;
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Object_Init
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Tag_Init
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call
+ or else NT (N).Nkind = N_SCIL_Tag_Init);
+ return Node4 (N);
+ end SCIL_Entity;
function SCIL_Related_Node
(N : Node_Id) return Node_Id is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Object_Init
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Tag_Init
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call
+ or else NT (N).Nkind = N_SCIL_Tag_Init);
return Node1 (N);
end SCIL_Related_Node;
@@ -2569,7 +2567,7 @@ package body Sinfo is
(N : Node_Id) return Node_Id is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call);
return Node2 (N);
end SCIL_Target_Prim;
@@ -4557,14 +4555,6 @@ package body Sinfo is
Set_Flag7 (N, Val);
end Set_Is_Protected_Subprogram_Body;
- procedure Set_Is_SCIL_Node
- (N : Node_Id; Val : Boolean := True) is
- begin
- pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- Set_Flag4 (N, Val);
- end Set_Is_SCIL_Node;
-
procedure Set_Is_Static_Coextension
(N : Node_Id; Val : Boolean := True) is
begin
@@ -5395,36 +5385,42 @@ package body Sinfo is
Set_Flag18 (N, Val);
end Set_Rounded_Result;
- procedure Set_SCIL_Entity
+ procedure Set_SCIL_Controlling_Tag
(N : Node_Id; Val : Node_Id) is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- Set_Node4 (N, Val); -- semantic field, no parent set
- end Set_SCIL_Entity;
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call);
+ Set_Node5 (N, Val); -- semantic field, no parent set
+ end Set_SCIL_Controlling_Tag;
- procedure Set_SCIL_Nkind
- (N : Node_Id; Val : Uint) is
+ procedure Set_SCIL_Entity
+ (N : Node_Id; Val : Node_Id) is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- Set_Uint3 (N, Val);
- end Set_SCIL_Nkind;
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Object_Init
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Tag_Init
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call
+ or else NT (N).Nkind = N_SCIL_Tag_Init);
+ Set_Node4 (N, Val); -- semantic field, no parent set
+ end Set_SCIL_Entity;
procedure Set_SCIL_Related_Node
(N : Node_Id; Val : Node_Id) is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- Set_Node1 (N, Val);
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Object_Init
+ or else NT (N).Nkind = N_SCIL_Dispatch_Table_Tag_Init
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call
+ or else NT (N).Nkind = N_SCIL_Tag_Init);
+ Set_Node1 (N, Val); -- semantic field, no parent set
end Set_SCIL_Related_Node;
procedure Set_SCIL_Target_Prim
(N : Node_Id; Val : Node_Id) is
begin
pragma Assert (False
- or else NT (N).Nkind = N_Null_Statement);
- Set_Node2 (N, Val);
+ or else NT (N).Nkind = N_SCIL_Dispatching_Call);
+ Set_Node2 (N, Val); -- semantic field, no parent set
end Set_SCIL_Target_Prim;
procedure Set_Scope
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index bf0841fb5b5..b598b771de3 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -1251,15 +1251,6 @@ package Sinfo is
-- handler to make sure that the associated protected object is unlocked
-- when the subprogram completes.
- -- Is_SCIL_Node (Flag4-Sem)
- -- Present in N_Null_Statement nodes. Set to indicate that it is a SCIL
- -- node. SCIL nodes are special nodes that help the CodePeer backend
- -- locating nodes that require special processing. In order to minimize
- -- the impact on the compiler and ASIS, and also to maximize flexibility
- -- when adding SCIL nodes to the tree, instead of adding new kind of
- -- nodes, SCIL nodes are added to the tree as N_Null_Statement nodes on
- -- which this attribute is set.
-
-- Is_Static_Coextension (Flag14-Sem)
-- Present in N_Allocator nodes. Set if the allocator is a coextension
-- of an object allocated on the stack rather than the heap.
@@ -1599,21 +1590,20 @@ package Sinfo is
-- and multiplication operations.
-- SCIL_Entity (Node4-Sem)
- -- Present in N_Null_Statement nodes that are SCIL nodes. Used to
- -- reference the tagged type associated with the SCIL node.
-
- -- SCIL_Nkind (Uint3-Sem)
- -- Present in N_Null_Statement nodes that are SCIL nodes. Used to
- -- indicate the kind of SCIL node (see SCIL node kinds in exp_disp.ads).
+ -- Present in SCIL nodes. Used to reference the tagged type associated
+ -- with the SCIL node.
-- SCIL_Related_Node (Node1-Sem)
- -- Present in N_Null_Statement nodes that are SCIL nodes. Used to
- -- reference a tree node that requires special processing in the
- -- CodePeer backend.
+ -- Present in SCIL nodes. Used to reference a tree node that requires
+ -- special processing in the CodePeer backend.
+
+ -- SCIL_Controlling_Tag (Node5-Sem)
+ -- Present in N_SCIL_Dispatching_Call nodes. Used to reference the
+ -- controlling tag of a dispatching call.
-- SCIL_Target_Prim (Node2-Sem)
- -- Present in N_Null_Statement nodes. Used to reference the tagged type
- -- primitive associated with the SCIL node.
+ -- Present in N_SCIL_Dispatching_Call nodes. Used to reference the tagged
+ -- type primitive associated with the SCIL node.
-- Scope (Node3-Sem)
-- Present in defining identifiers, defining character literals and
@@ -3862,11 +3852,6 @@ package Sinfo is
-- N_Null_Statement
-- Sloc points to NULL
- -- Is_SCIL_Node (Flag4-Sem)
- -- SCIL_Nkind (Uint3-Sem)
- -- SCIL_Related_Node (Node1-Sem)
- -- SCIL_Entity (Node4-Sem)
- -- SCIL_Target_Prim (Node2-Sem)
----------------
-- 5.1 Label --
@@ -6861,6 +6846,43 @@ package Sinfo is
-- Note: in the case where a debug source file is generated, the Sloc
-- for this node points to the quote in the Sprint file output.
+ -----------------
+ -- SCIL Nodes --
+ -----------------
+
+ -- SCIL nodes are special nodes added to the tree when the CodePeer
+ -- mode is active. They help the CodePeer backend to locate nodes that
+ -- require special processing.
+
+ -- Major documentation on the general design of the SCIL interface, and
+ -- in particular detailed description of these nodes is missing and is
+ -- to be supplied in the future, when the design has finalized ???
+
+ -- Meanwhile these nodes should be considered in experimental form, and
+ -- should be ignored by all code generating back ends. ???
+
+ -- N_SCIL_Dispatch_Table_Object_Init
+ -- Sloc references a declaration node containing a dispatch table
+ -- SCIL_Related_Node (Node1-Sem)
+ -- SCIL_Entity (Node4-Sem)
+
+ -- N_SCIL_Dispatch_Table_Tag_Init
+ -- Sloc references a node for a tag initialization
+ -- SCIL_Related_Node (Node1-Sem)
+ -- SCIL_Entity (Node4-Sem)
+
+ -- N_SCIL_Dispatching_Call
+ -- Sloc references the node of a dispatching call
+ -- SCIL_Related_Node (Node1-Sem)
+ -- SCIL_Target_Prim (Node2-Sem)
+ -- SCIL_Entity (Node4-Sem)
+ -- SCIL_Controlling_Tag (Node5-Sem)
+
+ -- N_SCIL_Tag_Init
+ -- Sloc references the node of a tag component initialization
+ -- SCIL_Related_Node (Node1-Sem)
+ -- SCIL_Entity (Node4-Sem)
+
---------------------
-- Subprogram_Info --
---------------------
@@ -7298,6 +7320,13 @@ package Sinfo is
N_Pop_Program_Error_Label,
N_Pop_Storage_Error_Label,
+ -- SCIL nodes
+
+ N_SCIL_Dispatch_Table_Object_Init,
+ N_SCIL_Dispatch_Table_Tag_Init,
+ N_SCIL_Dispatching_Call,
+ N_SCIL_Tag_Init,
+
-- Other nodes (not part of any subtype class)
N_Abortable_Part,
@@ -7430,12 +7459,6 @@ package Sinfo is
N_Attribute_Reference;
-- Nodes that have Entity fields
-- Warning: DOES NOT INCLUDE N_Freeze_Entity!
- --
- -- Warning: DOES NOT INCLUDE N_Null_Assignment because it not always
- -- available. The Entity attribute is only available in SCIL nodes
- -- (that is, N_Null_Assignment nodes that have Is_Scil_Node set to true).
- -- Processing such nodes never requires testing if the node is in
- -- N_Has_Entity node kind.
subtype N_Has_Etype is Node_Kind range
N_Error ..
@@ -7511,8 +7534,12 @@ package Sinfo is
N_Attribute_Definition_Clause;
subtype N_Short_Circuit is Node_Kind range
- N_And_Then ..
- N_Or_Else;
+ N_And_Then ..
+ N_Or_Else;
+
+ subtype N_SCIL_Node is Node_Kind range
+ N_SCIL_Dispatch_Table_Object_Init ..
+ N_SCIL_Tag_Init;
subtype N_Statement_Other_Than_Procedure_Call is Node_Kind range
N_Abort_Statement ..
@@ -8088,9 +8115,6 @@ package Sinfo is
function Is_Protected_Subprogram_Body
(N : Node_Id) return Boolean; -- Flag7
- function Is_SCIL_Node
- (N : Node_Id) return Boolean; -- Flag4
-
function Is_Static_Coextension
(N : Node_Id) return Boolean; -- Flag14
@@ -8346,12 +8370,12 @@ package Sinfo is
function Rounded_Result
(N : Node_Id) return Boolean; -- Flag18
+ function SCIL_Controlling_Tag
+ (N : Node_Id) return Node_Id; -- Node5
+
function SCIL_Entity
(N : Node_Id) return Node_Id; -- Node4
- function SCIL_Nkind
- (N : Node_Id) return Uint; -- Uint3
-
function SCIL_Related_Node
(N : Node_Id) return Node_Id; -- Node1
@@ -9000,9 +9024,6 @@ package Sinfo is
procedure Set_Is_Protected_Subprogram_Body
(N : Node_Id; Val : Boolean := True); -- Flag7
- procedure Set_Is_SCIL_Node
- (N : Node_Id; Val : Boolean := True); -- Flag4
-
procedure Set_Is_Static_Coextension
(N : Node_Id; Val : Boolean := True); -- Flag14
@@ -9258,12 +9279,12 @@ package Sinfo is
procedure Set_Rounded_Result
(N : Node_Id; Val : Boolean := True); -- Flag18
+ procedure Set_SCIL_Controlling_Tag
+ (N : Node_Id; Val : Node_Id); -- Node5
+
procedure Set_SCIL_Entity
(N : Node_Id; Val : Node_Id); -- Node4
- procedure Set_SCIL_Nkind
- (N : Node_Id; Val : Uint); -- Uint3
-
procedure Set_SCIL_Related_Node
(N : Node_Id; Val : Node_Id); -- Node1
@@ -10998,6 +11019,36 @@ package Sinfo is
-- End of inserted output from makeisf program
+ -- Entries for SCIL nodes
+
+ N_SCIL_Dispatch_Table_Object_Init =>
+ (1 => False, -- SCIL_Related_Node (Node1-Sem)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- SCIL_Entity (Node4-Sem)
+ 5 => False), -- unused
+
+ N_SCIL_Dispatch_Table_Tag_Init =>
+ (1 => False, -- SCIL_Related_Node (Node1-Sem)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- SCIL_Entity (Node4-Sem)
+ 5 => False), -- unused
+
+ N_SCIL_Dispatching_Call =>
+ (1 => False, -- SCIL_Related_Node (Node1-Sem)
+ 2 => False, -- SCIL_Target_Prim (Node2-Sem)
+ 3 => False, -- unused
+ 4 => False, -- SCIL_Entity (Node4-Sem)
+ 5 => False), -- SCIL_Controlling_Tag (Node5-Sem)
+
+ N_SCIL_Tag_Init =>
+ (1 => False, -- SCIL_Related_Node (Node1-Sem)
+ 2 => False, -- unused
+ 3 => False, -- unused
+ 4 => False, -- SCIL_Entity (Node4-Sem)
+ 5 => False), -- unused
+
-- Entries for Empty, Error and Unused. Even thought these have a Chars
-- field for debugging purposes, they are not really syntactic fields, so
-- we mark all fields as unused.
@@ -11210,7 +11261,6 @@ package Sinfo is
pragma Inline (Is_Overloaded);
pragma Inline (Is_Power_Of_2_For_Shift);
pragma Inline (Is_Protected_Subprogram_Body);
- pragma Inline (Is_SCIL_Node);
pragma Inline (Is_Static_Coextension);
pragma Inline (Is_Static_Expression);
pragma Inline (Is_Subprogram_Descriptor);
@@ -11296,8 +11346,8 @@ package Sinfo is
pragma Inline (Reverse_Present);
pragma Inline (Right_Opnd);
pragma Inline (Rounded_Result);
+ pragma Inline (SCIL_Controlling_Tag);
pragma Inline (SCIL_Entity);
- pragma Inline (SCIL_Nkind);
pragma Inline (SCIL_Related_Node);
pragma Inline (SCIL_Target_Prim);
pragma Inline (Scope);
@@ -11510,7 +11560,6 @@ package Sinfo is
pragma Inline (Set_Is_Overloaded);
pragma Inline (Set_Is_Power_Of_2_For_Shift);
pragma Inline (Set_Is_Protected_Subprogram_Body);
- pragma Inline (Set_Is_SCIL_Node);
pragma Inline (Set_Has_Self_Reference);
pragma Inline (Set_Is_Static_Coextension);
pragma Inline (Set_Is_Static_Expression);
@@ -11596,8 +11645,8 @@ package Sinfo is
pragma Inline (Set_Reverse_Present);
pragma Inline (Set_Right_Opnd);
pragma Inline (Set_Rounded_Result);
+ pragma Inline (Set_SCIL_Controlling_Tag);
pragma Inline (Set_SCIL_Entity);
- pragma Inline (Set_SCIL_Nkind);
pragma Inline (Set_SCIL_Related_Node);
pragma Inline (Set_SCIL_Target_Prim);
pragma Inline (Set_Scope);
diff --git a/gcc/ada/sprint.adb b/gcc/ada/sprint.adb
index ec042b9ed79..e73d204d758 100644
--- a/gcc/ada/sprint.adb
+++ b/gcc/ada/sprint.adb
@@ -2637,6 +2637,23 @@ package body Sprint is
Write_Char (';');
+ -- Don't we want to print more detail???
+
+ -- Doc of this extended syntax belongs in sinfo.ads and/or
+ -- sprint.ads ???
+
+ when N_SCIL_Dispatch_Table_Object_Init =>
+ Write_Indent_Str ("[N_SCIL_Dispatch_Table_Object_Init]");
+
+ when N_SCIL_Dispatch_Table_Tag_Init =>
+ Write_Indent_Str ("[N_SCIL_Dispatch_Table_Tag_Init]");
+
+ when N_SCIL_Dispatching_Call =>
+ Write_Indent_Str ("[N_SCIL_Dispatching_Node]");
+
+ when N_SCIL_Tag_Init =>
+ Write_Indent_Str ("[N_SCIL_Dispatch_Table_Tag_Init]");
+
when N_Simple_Return_Statement =>
if Present (Expression (Node)) then
Write_Indent_Str_Sloc ("return ");
diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb
index 0d6e9ccac91..6d704403da9 100644
--- a/gcc/ada/usage.adb
+++ b/gcc/ada/usage.adb
@@ -91,9 +91,9 @@ begin
Write_Eol;
- -- Common GCC switches not available in JGNAT/MGNAT
+ -- Common GCC switches not available for JVM, .NET, and AAMP targets
- if VM_Target = No_VM then
+ if VM_Target = No_VM and then not AAMP_On_Target then
Write_Switch_Char ("fstack-check ", "");
Write_Line ("Generate stack checking code");
diff --git a/gcc/ada/xr_tabls.adb b/gcc/ada/xr_tabls.adb
index 82b2e7d0382..95bdfa985d8 100644
--- a/gcc/ada/xr_tabls.adb
+++ b/gcc/ada/xr_tabls.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1998-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1998-2009, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -495,9 +495,10 @@ package body Xr_Tabls is
begin
if Index /= 0 then
- return Ada_File_Name (Ada_File_Name'First .. Index) & "ali";
+ return Ada_File_Name (Ada_File_Name'First .. Index)
+ & Osint.ALI_Suffix.all;
else
- return Ada_File_Name & ".ali";
+ return Ada_File_Name & "." & Osint.ALI_Suffix.all;
end if;
end ALI_File_Name;
@@ -823,12 +824,14 @@ package body Xr_Tabls is
end if;
if File.Dir = null then
- if Ada.Strings.Fixed.Tail (File.File.all, 3) = "ali" then
+ if Ada.Strings.Fixed.Tail (File.File.all, 3) =
+ Osint.ALI_Suffix.all
+ then
Tmp := Locate_Regular_File
- (Internal_Strip (File.File.all), Directories.Obj_Dir);
+ (Internal_Strip (File.File.all), Directories.Obj_Dir);
else
Tmp := Locate_Regular_File
- (File.File.all, Directories.Src_Dir);
+ (File.File.all, Directories.Src_Dir);
end if;
if Tmp = null then
@@ -1392,7 +1395,7 @@ package body Xr_Tabls is
-- least for gnatxref, and probably for gnatfind as well
if F'Length > 4
- and then F (F'Last - 3 .. F'Last) = ".ali"
+ and then F (F'Last - 3 .. F'Last) = "." & Osint.ALI_Suffix.all
then
Unvisited_Files := new Unvisited_Files_Record'
(File => File_Ref,
diff --git a/gcc/ada/xref_lib.adb b/gcc/ada/xref_lib.adb
index 935291328fe..475f15e3816 100644
--- a/gcc/ada/xref_lib.adb
+++ b/gcc/ada/xref_lib.adb
@@ -308,7 +308,7 @@ package body Xref_Lib is
-- Case where we have an ALI file, accept it even though this is
-- not official usage, since the intention is obvious
- if Tail (File, 4) = ".ali" then
+ if Tail (File, 4) = "." & Osint.ALI_Suffix.all then
File_Ref := Add_To_Xref_File
(File, Visited => False, Emit_Warning => True);
@@ -466,7 +466,9 @@ package body Xref_Lib is
return;
end if;
- elsif Last > 4 and then Dir_Ent (Last - 3 .. Last) = ".ali" then
+ elsif Last > 4
+ and then Dir_Ent (Last - 3 .. Last) = "." & Osint.ALI_Suffix.all
+ then
File_Ref :=
Add_To_Xref_File (Dir_Ent (1 .. Last), Visited => False);
end if;