-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2016, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2017, 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- --
-- Line for @response_file
- Write_Line (" @<resp_file> Get arguments from response file");
+ Write_Line
+ (" @<resp_file> Get arguments from response file");
Write_Eol;
-- Line for -aO switch
- Write_Line (" -aOdir Specify library files search path");
+ Write_Line
+ (" -aOdir Specify library files search path");
-- Line for -aI switch
- Write_Line (" -aIdir Specify source files search path");
+ Write_Line
+ (" -aIdir Specify source files search path");
-- Line for a switch
- Write_Line (" -a Automatically initialize elaboration " &
- "procedure");
+ Write_Line
+ (" -a Automatically initialize elaboration procedure");
-- Lines for -A switch
- Write_Line (" -A Give list of ALI files in partition");
- Write_Line (" -A=file Write ALI file list to named file");
+ Write_Line
+ (" -A Give list of ALI files in partition");
+ Write_Line
+ (" -A=file Write ALI file list to named file");
-- Line for -b switch
- Write_Line (" -b Generate brief messages to stderr " &
- "even if verbose mode set");
+ Write_Line
+ (" -b Generate brief messages to stderr even if verbose mode "
+ & "set");
-- Line for -c switch
- Write_Line (" -c Check only, no generation of " &
- "binder output file");
+ Write_Line
+ (" -c Check only, no generation of binder output file");
-- Line for -d switch
- Write_Line (" -dnn[k|m] Default primary stack " &
- "size = nn [kilo|mega] bytes");
+ Write_Line
+ (" -dnn[k|m] Default primary stack size = nn [kilo|mega] bytes");
-- Line for D switch
- Write_Line (" -Dnn[k|m] Default secondary stack " &
- "size = nn [kilo|mega] bytes");
+ Write_Line
+ (" -Dnn[k|m] Default secondary stack size = nn [kilo|mega] bytes");
-- Line for -e switch
- Write_Line (" -e Output complete list of elaboration " &
- "order dependencies");
+ Write_Line
+ (" -e Output complete list of elaboration order dependencies");
-- Line for -E switch
- Write_Line (" -Ea Store tracebacks in exception occurrences");
- Write_Line (" -Es Store tracebacks in exception occurrences,");
- Write_Line (" and enable symbolic tracebacks");
- Write_Line (" -E Same as -Ea");
+ Write_Line
+ (" -Ea Store tracebacks in exception occurrences");
+ Write_Line
+ (" -Es Store tracebacks in exception occurrences,");
+ Write_Line
+ (" and enable symbolic tracebacks");
+ Write_Line
+ (" -E Same as -Ea");
-- Line for -f switch
- Write_Line (" -ffile Force elaboration order from given file");
+ Write_Line
+ (" -ffile Force elaboration order from given file");
-- Line for -F switch
- Write_Line (" -F Force checking of elaboration Flags");
+ Write_Line
+ (" -F Force checking of elaboration Flags");
-- Line for -h switch
- Write_Line (" -h Output this usage (help) information");
+ Write_Line
+ (" -h Output this usage (help) information");
-- Lines for -I switch
- Write_Line (" -Idir Specify library and source files search path");
- Write_Line (" -I- Don't look for sources & library files " &
- "in default directory");
+ Write_Line
+ (" -Idir Specify library and source files search path");
+ Write_Line
+ (" -I- Don't look for sources & library files in default "
+ & "directory");
-- Line for -K switch
- Write_Line (" -K Give list of linker options specified " &
- "for link");
+ Write_Line
+ (" -K Give list of linker options specified for link");
-- Line for -l switch
- Write_Line (" -l Output chosen elaboration order");
+ Write_Line
+ (" -l Output chosen elaboration order");
-- Line of -L switch
- Write_Line (" -Lxyz Library build: adainit/final " &
- "renamed to xyzinit/final, implies -n");
+ Write_Line
+ (" -Lxyz Library build: adainit/final renamed to xyzinit/final, "
+ & "implies -n");
-- Line for -m switch
- Write_Line (" -mnnn Limit number of detected errors/warnings " &
- "to nnn (1-999999)");
+ Write_Line
+ (" -mnnn Limit number of detected errors/warnings to nnn "
+ & "(1-999999)");
-- Line for -M switch
- Write_Line (" -Mxyz Rename generated main program from " &
- "main to xyz");
+ Write_Line
+ (" -Mxyz Rename generated main program from main to xyz");
-- Line for -n switch
- Write_Line (" -n No Ada main program (foreign main routine)");
+ Write_Line
+ (" -n No Ada main program (foreign main routine)");
+
+ -- Line for -nognarl
+
+ Write_Line
+ (" -nognarl Don't use libgnarl when writing linker instructions");
-- Line for -nostdinc
- Write_Line (" -nostdinc Don't look for source files " &
- "in the system default directory");
+ Write_Line
+ (" -nostdinc Don't look for source files in the system default "
+ & "directory");
-- Line for -nostdlib
- Write_Line (" -nostdlib Don't look for library files " &
- "in the system default directory");
+ Write_Line
+ (" -nostdlib Don't look for library files in the system default "
+ & "directory");
-- Line for -o switch
- Write_Line (" -o file Give the output file name " &
- "(default is b~xxx.adb)");
+ Write_Line
+ (" -o file Give the output file name (default is b~xxx.adb)");
-- Line for -O switch
- Write_Line (" -O Give list of objects required for link");
+ Write_Line
+ (" -O Give list of objects required for link");
-- Line for -p switch
- Write_Line (" -p Pessimistic (worst-case) elaboration order");
+ Write_Line
+ (" -p Pessimistic (worst-case) elaboration order");
-- Line for -P switch
- Write_Line (" -P Generate binder file suitable for CodePeer");
+ Write_Line
+ (" -P Generate binder file suitable for CodePeer");
-- Line for -r switch
- Write_Line (" -r List restrictions that could be applied " &
- "to this partition");
+ Write_Line
+ (" -r List restrictions that could be applied to this "
+ & "partition");
-- Line for -R switch
-- Line for -s switch
- Write_Line (" -s Require all source files to be present");
+ Write_Line
+ (" -s Require all source files to be present");
-- Line for -S?? switch
- Write_Line (" -S?? Sin/lo/hi/xx/ev Initialize_Scalars " &
- "invalid/low/high/hex/env var");
+ Write_Line
+ (" -S?? Sin/lo/hi/xx/ev Initialize_Scalars "
+ & "invalid/low/high/hex/env var");
-- Line for -static
- Write_Line (" -static Link against a static GNAT run time");
+ Write_Line
+ (" -static Link against a static GNAT run time");
-- Line for -shared
- Write_Line (" -shared Link against a shared GNAT run time");
+ Write_Line
+ (" -shared Link against a shared GNAT run time");
-- Line for -t switch
- Write_Line (" -t Tolerate time stamp and other " &
- "consistency errors");
+ Write_Line
+ (" -t Tolerate time stamp and other consistency errors");
-- Line for -T switch
- Write_Line (" -Tn Set time slice value to n " &
- "milliseconds (n >= 0)");
+ Write_Line
+ (" -Tn Set time slice value to n milliseconds (n >= 0)");
-- Line for -u switch
- Write_Line (" -un Enable dynamic stack analysis, with " &
- "n results stored");
+ Write_Line
+ (" -un Enable dynamic stack analysis, with n results stored");
-- Line for -v switch
- Write_Line (" -v Verbose mode. Error messages, " &
- "header, summary output to stdout");
+ Write_Line
+ (" -v Verbose mode. Error messages, header, summary output to "
+ & "stdout");
-- Line for -V switch
- Write_Line (" -Vkey=val Record bind-time variable key " &
- "with value val");
+ Write_Line
+ (" -Vkey=val Record bind-time variable key with value val");
-- Line for -w switch
- Write_Line (" -wx Warning mode. (x=s/e for " &
- "suppress/treat as error)");
+ Write_Line
+ (" -wx Warning mode. (x=s/e for suppress/treat as error)");
-- Line for -W switch
- Write_Str (" -W? Wide character encoding method (");
+ Write_Str
+ (" -W? Wide character encoding method (");
for J in WC_Encoding_Method loop
Write_Char (WC_Encoding_Letters (J));
-- Line for -x switch
- Write_Line (" -x Exclude source files (check object " &
- "consistency only)");
+ Write_Line
+ (" -x Exclude source files (check object consistency only)");
-- Line for -X switch
- Write_Line (" -Xnnn Default exit status value = nnn");
+ Write_Line
+ (" -Xnnn Default exit status value = nnn");
-- Line for -y switch
- Write_Line (" -y Enable leap seconds");
+ Write_Line
+ (" -y Enable leap seconds");
-- Line for -z switch
- Write_Line (" -z No main subprogram (zero main)");
+ Write_Line
+ (" -z No main subprogram (zero main)");
-- Line for --RTS
-- Line for -Z switch
- Write_Line (" -Z " &
- "Zero formatting in auxiliary outputs (-e, -K, -l, -R)");
+ Write_Line
+ (" -Z Zero formatting in auxiliary outputs (-e, -K, -l, -R)");
-- Line for --RTS
- Write_Line (" --RTS=dir Specify the default source and " &
- "object search path");
+ Write_Line
+ (" --RTS=dir Specify the default source and object search path");
-- Line for sfile
- Write_Line (" lfile Library file names");
+ Write_Line
+ (" lfile Library file names");
end Display;
end Bindusg;
Counter : Int := 0;
Finalizer_Data : Finalization_Exception_Data;
- Num_Comps : Nat := 0;
function Process_Component_List_For_Finalize
(Comps : Node_Id) return List_Id;
(Comps : Node_Id) return List_Id
is
procedure Process_Component_For_Finalize
- (Decl : Node_Id;
- Alts : List_Id;
- Decls : List_Id;
- Stmts : List_Id);
+ (Decl : Node_Id;
+ Alts : List_Id;
+ Decls : List_Id;
+ Stmts : List_Id;
+ Num_Comps : in out Nat);
-- Process the declaration of a single controlled component. If
-- flag Is_Local is enabled, create the corresponding label and
-- jump circuitry. Alts is the list of case alternatives, Decls
-- is the top level declaration list where labels are declared
- -- and Stmts is the list of finalization actions.
+ -- and Stmts is the list of finalization actions. Num_Comps
+ -- denotes the current number of components needing finalization.
------------------------------------
-- Process_Component_For_Finalize --
------------------------------------
procedure Process_Component_For_Finalize
- (Decl : Node_Id;
- Alts : List_Id;
- Decls : List_Id;
- Stmts : List_Id)
+ (Decl : Node_Id;
+ Alts : List_Id;
+ Decls : List_Id;
+ Stmts : List_Id;
+ Num_Comps : in out Nat)
is
Id : constant Entity_Id := Defining_Identifier (Decl);
Typ : constant Entity_Id := Etype (Id);
Jump_Block : Node_Id;
Label : Node_Id;
Label_Id : Entity_Id;
+ Num_Comps : Nat;
Stmts : List_Id;
Var_Case : Node_Id;
and then Has_Access_Constraint (Decl_Id)
and then No (Expression (Decl))
then
- Process_Component_For_Finalize (Decl, Alts, Decls, Stmts);
+ Process_Component_For_Finalize
+ (Decl, Alts, Decls, Stmts, Num_Comps);
end if;
Prev_Non_Pragma (Decl);
then
null;
else
- Process_Component_For_Finalize (Decl, Alts, Decls, Stmts);
+ Process_Component_For_Finalize
+ (Decl, Alts, Decls, Stmts, Num_Comps);
end if;
end if;