Commit 7e6060af by Arnaud Charlet

[multiple changes]

2017-04-27  Jerome Lambourg  <lambourg@adacore.com>

	* bindusg.adb, bindgen.adb, gnatbind.adb, opt.ads: add -nognarl switch.

2017-04-27  Justin Squirek  <squirek@adacore.com>

	* exp_ch7.adb (Build_Finalize_Statements): Move Num_Comps to
	Process_Component_List_For_Finalization as a local variable.
	(Process_Component_For_Finalize): Add an extra parameter to avoid
	global references.
	(Process_Component_List_For_Finalization): Correct calls to
	Process_Component_For_Finalize to take Num_Comps as a parameter.

From-SVN: r247310
parent 522aa6ee
2017-04-27 Jerome Lambourg <lambourg@adacore.com>
* bindusg.adb, bindgen.adb, gnatbind.adb, opt.ads: add -nognarl switch.
2017-04-27 Justin Squirek <squirek@adacore.com>
* exp_ch7.adb (Build_Finalize_Statements): Move Num_Comps to
Process_Component_List_For_Finalization as a local variable.
(Process_Component_For_Finalize): Add an extra parameter to avoid
global references.
(Process_Component_List_For_Finalization): Correct calls to
Process_Component_For_Finalize to take Num_Comps as a parameter.
2017-04-27 Hristian Kirtchev <kirtchev@adacore.com> 2017-04-27 Hristian Kirtchev <kirtchev@adacore.com>
* sem_ch8.adb (Find_Direct_Name): Account for the case where * sem_ch8.adb (Find_Direct_Name): Account for the case where
......
...@@ -2853,7 +2853,9 @@ package body Bindgen is ...@@ -2853,7 +2853,9 @@ package body Bindgen is
-- used: System.OS_Interface should always be used by any tasking -- used: System.OS_Interface should always be used by any tasking
-- application. -- application.
Check_Package (With_GNARL, "system.os_interface%s"); if not Opt.No_Libgnarl then
Check_Package (With_GNARL, "system.os_interface%s");
end if;
-- Ditto for the use of restricted tasking -- Ditto for the use of restricted tasking
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- 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 -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -60,136 +60,166 @@ package body Bindusg is ...@@ -60,136 +60,166 @@ package body Bindusg is
-- Line for @response_file -- Line for @response_file
Write_Line (" @<resp_file> Get arguments from response file"); Write_Line
(" @<resp_file> Get arguments from response file");
Write_Eol; Write_Eol;
-- Line for -aO switch -- Line for -aO switch
Write_Line (" -aOdir Specify library files search path"); Write_Line
(" -aOdir Specify library files search path");
-- Line for -aI switch -- Line for -aI switch
Write_Line (" -aIdir Specify source files search path"); Write_Line
(" -aIdir Specify source files search path");
-- Line for a switch -- Line for a switch
Write_Line (" -a Automatically initialize elaboration " & Write_Line
"procedure"); (" -a Automatically initialize elaboration procedure");
-- Lines for -A switch -- Lines for -A switch
Write_Line (" -A Give list of ALI files in partition"); Write_Line
Write_Line (" -A=file Write ALI file list to named file"); (" -A Give list of ALI files in partition");
Write_Line
(" -A=file Write ALI file list to named file");
-- Line for -b switch -- Line for -b switch
Write_Line (" -b Generate brief messages to stderr " & Write_Line
"even if verbose mode set"); (" -b Generate brief messages to stderr even if verbose mode "
& "set");
-- Line for -c switch -- Line for -c switch
Write_Line (" -c Check only, no generation of " & Write_Line
"binder output file"); (" -c Check only, no generation of binder output file");
-- Line for -d switch -- Line for -d switch
Write_Line (" -dnn[k|m] Default primary stack " & Write_Line
"size = nn [kilo|mega] bytes"); (" -dnn[k|m] Default primary stack size = nn [kilo|mega] bytes");
-- Line for D switch -- Line for D switch
Write_Line (" -Dnn[k|m] Default secondary stack " & Write_Line
"size = nn [kilo|mega] bytes"); (" -Dnn[k|m] Default secondary stack size = nn [kilo|mega] bytes");
-- Line for -e switch -- Line for -e switch
Write_Line (" -e Output complete list of elaboration " & Write_Line
"order dependencies"); (" -e Output complete list of elaboration order dependencies");
-- Line for -E switch -- Line for -E switch
Write_Line (" -Ea Store tracebacks in exception occurrences"); Write_Line
Write_Line (" -Es Store tracebacks in exception occurrences,"); (" -Ea Store tracebacks in exception occurrences");
Write_Line (" and enable symbolic tracebacks"); Write_Line
Write_Line (" -E Same as -Ea"); (" -Es Store tracebacks in exception occurrences,");
Write_Line
(" and enable symbolic tracebacks");
Write_Line
(" -E Same as -Ea");
-- Line for -f switch -- 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 -- Line for -F switch
Write_Line (" -F Force checking of elaboration Flags"); Write_Line
(" -F Force checking of elaboration Flags");
-- Line for -h switch -- Line for -h switch
Write_Line (" -h Output this usage (help) information"); Write_Line
(" -h Output this usage (help) information");
-- Lines for -I switch -- Lines for -I switch
Write_Line (" -Idir Specify library and source files search path"); Write_Line
Write_Line (" -I- Don't look for sources & library files " & (" -Idir Specify library and source files search path");
"in default directory"); Write_Line
(" -I- Don't look for sources & library files in default "
& "directory");
-- Line for -K switch -- Line for -K switch
Write_Line (" -K Give list of linker options specified " & Write_Line
"for link"); (" -K Give list of linker options specified for link");
-- Line for -l switch -- Line for -l switch
Write_Line (" -l Output chosen elaboration order"); Write_Line
(" -l Output chosen elaboration order");
-- Line of -L switch -- Line of -L switch
Write_Line (" -Lxyz Library build: adainit/final " & Write_Line
"renamed to xyzinit/final, implies -n"); (" -Lxyz Library build: adainit/final renamed to xyzinit/final, "
& "implies -n");
-- Line for -m switch -- Line for -m switch
Write_Line (" -mnnn Limit number of detected errors/warnings " & Write_Line
"to nnn (1-999999)"); (" -mnnn Limit number of detected errors/warnings to nnn "
& "(1-999999)");
-- Line for -M switch -- Line for -M switch
Write_Line (" -Mxyz Rename generated main program from " & Write_Line
"main to xyz"); (" -Mxyz Rename generated main program from main to xyz");
-- Line for -n switch -- 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 -- Line for -nostdinc
Write_Line (" -nostdinc Don't look for source files " & Write_Line
"in the system default directory"); (" -nostdinc Don't look for source files in the system default "
& "directory");
-- Line for -nostdlib -- Line for -nostdlib
Write_Line (" -nostdlib Don't look for library files " & Write_Line
"in the system default directory"); (" -nostdlib Don't look for library files in the system default "
& "directory");
-- Line for -o switch -- Line for -o switch
Write_Line (" -o file Give the output file name " & Write_Line
"(default is b~xxx.adb)"); (" -o file Give the output file name (default is b~xxx.adb)");
-- Line for -O switch -- 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 -- Line for -p switch
Write_Line (" -p Pessimistic (worst-case) elaboration order"); Write_Line
(" -p Pessimistic (worst-case) elaboration order");
-- Line for -P switch -- 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 -- Line for -r switch
Write_Line (" -r List restrictions that could be applied " & Write_Line
"to this partition"); (" -r List restrictions that could be applied to this "
& "partition");
-- Line for -R switch -- Line for -R switch
...@@ -198,53 +228,59 @@ package body Bindusg is ...@@ -198,53 +228,59 @@ package body Bindusg is
-- Line for -s 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 -- Line for -S?? switch
Write_Line (" -S?? Sin/lo/hi/xx/ev Initialize_Scalars " & Write_Line
"invalid/low/high/hex/env var"); (" -S?? Sin/lo/hi/xx/ev Initialize_Scalars "
& "invalid/low/high/hex/env var");
-- Line for -static -- 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 -- 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 -- Line for -t switch
Write_Line (" -t Tolerate time stamp and other " & Write_Line
"consistency errors"); (" -t Tolerate time stamp and other consistency errors");
-- Line for -T switch -- Line for -T switch
Write_Line (" -Tn Set time slice value to n " & Write_Line
"milliseconds (n >= 0)"); (" -Tn Set time slice value to n milliseconds (n >= 0)");
-- Line for -u switch -- Line for -u switch
Write_Line (" -un Enable dynamic stack analysis, with " & Write_Line
"n results stored"); (" -un Enable dynamic stack analysis, with n results stored");
-- Line for -v switch -- Line for -v switch
Write_Line (" -v Verbose mode. Error messages, " & Write_Line
"header, summary output to stdout"); (" -v Verbose mode. Error messages, header, summary output to "
& "stdout");
-- Line for -V switch -- Line for -V switch
Write_Line (" -Vkey=val Record bind-time variable key " & Write_Line
"with value val"); (" -Vkey=val Record bind-time variable key with value val");
-- Line for -w switch -- Line for -w switch
Write_Line (" -wx Warning mode. (x=s/e for " & Write_Line
"suppress/treat as error)"); (" -wx Warning mode. (x=s/e for suppress/treat as error)");
-- Line for -W switch -- 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 for J in WC_Encoding_Method loop
Write_Char (WC_Encoding_Letters (J)); Write_Char (WC_Encoding_Letters (J));
...@@ -260,36 +296,40 @@ package body Bindusg is ...@@ -260,36 +296,40 @@ package body Bindusg is
-- Line for -x switch -- Line for -x switch
Write_Line (" -x Exclude source files (check object " & Write_Line
"consistency only)"); (" -x Exclude source files (check object consistency only)");
-- Line for -X switch -- Line for -X switch
Write_Line (" -Xnnn Default exit status value = nnn"); Write_Line
(" -Xnnn Default exit status value = nnn");
-- Line for -y switch -- Line for -y switch
Write_Line (" -y Enable leap seconds"); Write_Line
(" -y Enable leap seconds");
-- Line for -z switch -- 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 --RTS
-- Line for -Z switch -- Line for -Z switch
Write_Line (" -Z " & Write_Line
"Zero formatting in auxiliary outputs (-e, -K, -l, -R)"); (" -Z Zero formatting in auxiliary outputs (-e, -K, -l, -R)");
-- Line for --RTS -- Line for --RTS
Write_Line (" --RTS=dir Specify the default source and " & Write_Line
"object search path"); (" --RTS=dir Specify the default source and object search path");
-- Line for sfile -- Line for sfile
Write_Line (" lfile Library file names"); Write_Line
(" lfile Library file names");
end Display; end Display;
end Bindusg; end Bindusg;
...@@ -6935,7 +6935,6 @@ package body Exp_Ch7 is ...@@ -6935,7 +6935,6 @@ package body Exp_Ch7 is
Counter : Int := 0; Counter : Int := 0;
Finalizer_Data : Finalization_Exception_Data; Finalizer_Data : Finalization_Exception_Data;
Num_Comps : Nat := 0;
function Process_Component_List_For_Finalize function Process_Component_List_For_Finalize
(Comps : Node_Id) return List_Id; (Comps : Node_Id) return List_Id;
...@@ -6951,25 +6950,28 @@ package body Exp_Ch7 is ...@@ -6951,25 +6950,28 @@ package body Exp_Ch7 is
(Comps : Node_Id) return List_Id (Comps : Node_Id) return List_Id
is is
procedure Process_Component_For_Finalize procedure Process_Component_For_Finalize
(Decl : Node_Id; (Decl : Node_Id;
Alts : List_Id; Alts : List_Id;
Decls : List_Id; Decls : List_Id;
Stmts : List_Id); Stmts : List_Id;
Num_Comps : in out Nat);
-- Process the declaration of a single controlled component. If -- Process the declaration of a single controlled component. If
-- flag Is_Local is enabled, create the corresponding label and -- flag Is_Local is enabled, create the corresponding label and
-- jump circuitry. Alts is the list of case alternatives, Decls -- jump circuitry. Alts is the list of case alternatives, Decls
-- is the top level declaration list where labels are declared -- 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 -- -- Process_Component_For_Finalize --
------------------------------------ ------------------------------------
procedure Process_Component_For_Finalize procedure Process_Component_For_Finalize
(Decl : Node_Id; (Decl : Node_Id;
Alts : List_Id; Alts : List_Id;
Decls : List_Id; Decls : List_Id;
Stmts : List_Id) Stmts : List_Id;
Num_Comps : in out Nat)
is is
Id : constant Entity_Id := Defining_Identifier (Decl); Id : constant Entity_Id := Defining_Identifier (Decl);
Typ : constant Entity_Id := Etype (Id); Typ : constant Entity_Id := Etype (Id);
...@@ -7075,6 +7077,7 @@ package body Exp_Ch7 is ...@@ -7075,6 +7077,7 @@ package body Exp_Ch7 is
Jump_Block : Node_Id; Jump_Block : Node_Id;
Label : Node_Id; Label : Node_Id;
Label_Id : Entity_Id; Label_Id : Entity_Id;
Num_Comps : Nat;
Stmts : List_Id; Stmts : List_Id;
Var_Case : Node_Id; Var_Case : Node_Id;
...@@ -7185,7 +7188,8 @@ package body Exp_Ch7 is ...@@ -7185,7 +7188,8 @@ package body Exp_Ch7 is
and then Has_Access_Constraint (Decl_Id) and then Has_Access_Constraint (Decl_Id)
and then No (Expression (Decl)) and then No (Expression (Decl))
then then
Process_Component_For_Finalize (Decl, Alts, Decls, Stmts); Process_Component_For_Finalize
(Decl, Alts, Decls, Stmts, Num_Comps);
end if; end if;
Prev_Non_Pragma (Decl); Prev_Non_Pragma (Decl);
...@@ -7212,7 +7216,8 @@ package body Exp_Ch7 is ...@@ -7212,7 +7216,8 @@ package body Exp_Ch7 is
then then
null; null;
else else
Process_Component_For_Finalize (Decl, Alts, Decls, Stmts); Process_Component_For_Finalize
(Decl, Alts, Decls, Stmts, Num_Comps);
end if; end if;
end if; end if;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- B o d y -- -- 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 -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -447,6 +447,9 @@ procedure Gnatbind is ...@@ -447,6 +447,9 @@ procedure Gnatbind is
elsif Argv (2 .. Argv'Last) = "nostdinc" then elsif Argv (2 .. Argv'Last) = "nostdinc" then
Opt.No_Stdinc := True; Opt.No_Stdinc := True;
elsif Argv (2 .. Argv'Last) = "nognarl" then
Opt.No_Libgnarl := True;
-- -static -- -static
elsif Argv (2 .. Argv'Last) = "static" then elsif Argv (2 .. Argv'Last) = "static" then
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- -- -- --
-- S p e c -- -- S p e c --
-- -- -- --
-- 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 -- -- 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- -- -- terms of the GNU General Public License as published by the Free Soft- --
...@@ -1147,6 +1147,10 @@ package Opt is ...@@ -1147,6 +1147,10 @@ package Opt is
-- GNATMAKE, GNATBIND, GNATFIND, GNATXREF -- GNATMAKE, GNATBIND, GNATFIND, GNATXREF
-- Set to True if no default library search dirs added to search list. -- Set to True if no default library search dirs added to search list.
No_Libgnarl : Boolean := False;
-- GNATBIND
-- Set to True if libgnarl is not available in the runtime.
No_Strict_Aliasing : Boolean := False; No_Strict_Aliasing : Boolean := False;
-- GNAT -- GNAT
-- Set True if pragma No_Strict_Aliasing with no parameters encountered. -- Set True if pragma No_Strict_Aliasing with no parameters encountered.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment