summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-20 14:32:17 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-20 14:32:17 +0000
commit85e01c7d8497bacc6b6806640ed23e44ebb8a26e (patch)
treeed65d762a493384828cef0fc9627602ebaf63cda
parent56abc2d4746169306f321d03f1f6f70310ee48d1 (diff)
downloadgcc-85e01c7d8497bacc6b6806640ed23e44ebb8a26e.tar.gz
2014-10-20 Vincent Celier <celier@adacore.com>
* prj-attr.adb: New project level attribute Runtime. * prj-conf.adb (Get_Project_Runtimes): New procedure to get the attributes Runtime declared in the main project, to use in auto-configuration. (Get_Or_Create_Configuration_File): Call Get_Project_Runtimes. * prj-proc.adb (Runtime_Defaults): New table to store the default values of attributes Runtime (<language>). (Set_Default_Runtime_For): New procedure to store the default value of a Runtime (<language>) in table Runtime_Defaults. (Expression): Use the value stored in table Runtime_Defaults as the default for Runtime (<language>). * prj-proc.ads (Set_Default_Runtime_For): New procedure. * prj.ads (Attribute_Default_Value): New enumerated value Runtime_Value. 2014-10-20 Ed Schonberg <schonberg@adacore.com> * sem_ch3.adb (Analyze_Object_Declaration): If the type is an unconstrained unchecked_union type, rewrite declaration as a renaming to prevent attempt to retrieve non- existent discriminants from expression. 2014-10-20 Ed Schonberg <schonberg@adacore.com> * gnat_ugn.texi: Minor reformatting. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216479 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ada/ChangeLog28
-rw-r--r--gcc/ada/gnat_ugn.texi2
-rw-r--r--gcc/ada/prj-attr.adb1
-rw-r--r--gcc/ada/prj-conf.adb37
-rw-r--r--gcc/ada/prj-proc.adb33
-rw-r--r--gcc/ada/prj-proc.ads3
-rw-r--r--gcc/ada/prj.ads3
-rw-r--r--gcc/ada/sem_ch3.adb26
8 files changed, 130 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 1665487ea47..a27cae15192 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,31 @@
+2014-10-20 Vincent Celier <celier@adacore.com>
+
+ * prj-attr.adb: New project level attribute Runtime.
+ * prj-conf.adb (Get_Project_Runtimes): New procedure to get
+ the attributes Runtime declared in the main project, to use
+ in auto-configuration.
+ (Get_Or_Create_Configuration_File): Call Get_Project_Runtimes.
+ * prj-proc.adb (Runtime_Defaults): New table to store
+ the default values of attributes Runtime (<language>).
+ (Set_Default_Runtime_For): New procedure to store the default
+ value of a Runtime (<language>) in table Runtime_Defaults.
+ (Expression): Use the value stored in table Runtime_Defaults as
+ the default for Runtime (<language>).
+ * prj-proc.ads (Set_Default_Runtime_For): New procedure.
+ * prj.ads (Attribute_Default_Value): New enumerated value
+ Runtime_Value.
+
+2014-10-20 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch3.adb (Analyze_Object_Declaration): If the type is
+ an unconstrained unchecked_union type, rewrite declaration
+ as a renaming to prevent attempt to retrieve non- existent
+ discriminants from expression.
+
+2014-10-20 Ed Schonberg <schonberg@adacore.com>
+
+ * gnat_ugn.texi: Minor reformatting.
+
2014-10-20 Tristan Gingold <gingold@adacore.com>
* init.c (__gnat_is_stack_guard): Don't use mach_vm_region_recurse on
diff --git a/gcc/ada/gnat_ugn.texi b/gcc/ada/gnat_ugn.texi
index f586f87b17b..d38f0d799fb 100644
--- a/gcc/ada/gnat_ugn.texi
+++ b/gcc/ada/gnat_ugn.texi
@@ -8127,7 +8127,7 @@ Generate binder file suitable for CodePeer.
@item -R
@cindex @option{-R} (@command{gnatbind})
-Output closure source list, which includes all non-time-units that are
+Output closure source list, which includes all non-runtime-units that are
included in the bind.
@item -Ra
diff --git a/gcc/ada/prj-attr.adb b/gcc/ada/prj-attr.adb
index d515c01a1b2..06777bb9e7a 100644
--- a/gcc/ada/prj-attr.adb
+++ b/gcc/ada/prj-attr.adb
@@ -136,6 +136,7 @@ package body Prj.Attr is
"Saobject_generated#" &
"Saobjects_linked#" &
"SVtargetDtarget_value#" &
+ "SaruntimeDruntime_value#" &
-- Configuration - Libraries
diff --git a/gcc/ada/prj-conf.adb b/gcc/ada/prj-conf.adb
index 206fa4c7228..0be49a079fb 100644
--- a/gcc/ada/prj-conf.adb
+++ b/gcc/ada/prj-conf.adb
@@ -660,6 +660,10 @@ package body Prj.Conf is
-- If Target_Name is empty, get the specified target in the project
-- file, if any.
+ procedure Get_Project_Runtimes;
+ -- Get the various Runtime (<lang>) in the project file or any project
+ -- it extends, if any are specified.
+
function Get_Config_Switches return Argument_List_Access;
-- Return the --config switches to use for gprconfig
@@ -833,6 +837,38 @@ package body Prj.Conf is
end if;
end Get_Project_Target;
+ --------------------------
+ -- Get_Project_Runtimes --
+ --------------------------
+
+ procedure Get_Project_Runtimes is
+ Element : Array_Element;
+ Id : Array_Element_Id;
+ Lang : Name_Id;
+ Proj : Project_Id;
+
+ begin
+ Proj := Project;
+
+ while Proj /= No_Project loop
+ Id := Value_Of (Name_Runtime, Proj.Decl.Arrays, Shared);
+
+ while Id /= No_Array_Element loop
+ Element := Shared.Array_Elements.Table (Id);
+ Lang := Element.Index;
+
+ if not Runtime_Name_Set_For (Lang) then
+ Set_Runtime_For
+ (Lang, RTS_Name => Get_Name_String (Element.Value.Value));
+ end if;
+
+ Id := Element.Next;
+ end loop;
+
+ Proj := Proj.Extends;
+ end loop;
+ end Get_Project_Runtimes;
+
-----------------------
-- Default_File_Name --
-----------------------
@@ -1384,6 +1420,7 @@ package body Prj.Conf is
Config := No_Project;
Get_Project_Target;
+ Get_Project_Runtimes;
Check_Builder_Switches;
-- Do not attempt to find a configuration project file when
diff --git a/gcc/ada/prj-proc.adb b/gcc/ada/prj-proc.adb
index 2b865a27fd7..dbb77144104 100644
--- a/gcc/ada/prj-proc.adb
+++ b/gcc/ada/prj-proc.adb
@@ -63,6 +63,15 @@ package body Prj.Proc is
Equal => "=");
-- This hash table contains all processed projects
+ package Runtime_Defaults is new GNAT.HTable.Simple_HTable
+ (Header_Num => Prj.Header_Num,
+ Element => Name_Id,
+ No_Element => No_Name,
+ Key => Name_Id,
+ Hash => Prj.Hash,
+ Equal => "=");
+ -- Stores the default values of 'Runtime names for the various languages
+
procedure Add (To_Exp : in out Name_Id; Str : Name_Id);
-- Concatenate two strings and returns another string if both
-- arguments are not null string.
@@ -943,6 +952,16 @@ package body Prj.Proc is
(Opt.Target_Value.all);
The_Variable.Value := Name_Find;
end if;
+
+ when Runtime_Value =>
+ Get_Name_String (Index);
+ To_Lower (Name_Buffer (1 .. Name_Len));
+ The_Variable.Value :=
+ Runtime_Defaults.Get (Name_Find);
+ if The_Variable.Value = No_Name then
+ The_Variable.Value := Empty_String;
+ end if;
+
end case;
when List =>
@@ -957,7 +976,9 @@ package body Prj.Proc is
The_Variable.Values :=
Shared.Dot_String_List;
- when Object_Dir_Value | Target_Value =>
+ when Object_Dir_Value |
+ Target_Value |
+ Runtime_Value =>
null;
end case;
end case;
@@ -3126,4 +3147,14 @@ package body Prj.Proc is
end if;
end Recursive_Process;
+ -----------------------------
+ -- Set_Default_Runtime_For --
+ -----------------------------
+
+ procedure Set_Default_Runtime_For (Language : Name_Id; Value : String) is
+ begin
+ Name_Len := Value'Length;
+ Name_Buffer (1 .. Name_Len) := Value;
+ Runtime_Defaults.Set (Language, Name_Find);
+ end Set_Default_Runtime_For;
end Prj.Proc;
diff --git a/gcc/ada/prj-proc.ads b/gcc/ada/prj-proc.ads
index 2b0680ebe52..0156df87f44 100644
--- a/gcc/ada/prj-proc.ads
+++ b/gcc/ada/prj-proc.ads
@@ -90,4 +90,7 @@ package Prj.Proc is
On_New_Tree_Loaded : Tree_Loaded_Callback := null);
-- Performs the two phases of the processing
+ procedure Set_Default_Runtime_For (Language : Name_Id; Value : String);
+ -- Set the default value for the runtime of Language. To be used for the
+ -- value of 'Runtime(<Language>) when Runtime (<language>) is not declared.
end Prj.Proc;
diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads
index 1beff66a9da..804d88aa210 100644
--- a/gcc/ada/prj.ads
+++ b/gcc/ada/prj.ads
@@ -77,7 +77,8 @@ package Prj is
Empty_Value, -- Empty string or empty string list
Dot_Value, -- "." or (".")
Object_Dir_Value, -- 'Object_Dir
- Target_Value); -- 'Target (special rules)
+ Target_Value, -- 'Target (special rules)
+ Runtime_Value); -- 'Runtime (special rules)
-- Describe the default values of attributes that are referenced but not
-- declared.
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index b81d3636433..9294eb81fc7 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -3839,6 +3839,32 @@ package body Sem_Ch3 is
elsif GNATprove_Mode then
null;
+ -- If the type is an unchecked union, no subtype can be built from
+ -- the expression. Rewrite declaration as a renaming, which the
+ -- back-end can handle properly. This is a rather unusual case,
+ -- because most unchecked_union declarations have default values
+ -- for discriminants and are thus unconstrained.
+
+ elsif Is_Unchecked_Union (T) then
+ if Constant_Present (N)
+ or else Nkind (E) = N_Function_Call
+ then
+ Set_Ekind (Id, E_Constant);
+ else
+ Set_Ekind (Id, E_Variable);
+ end if;
+
+ Rewrite (N,
+ Make_Object_Renaming_Declaration (Loc,
+ Defining_Identifier => Id,
+ Subtype_Mark => New_Occurrence_Of (T, Loc),
+ Name => E));
+
+ Set_Renamed_Object (Id, E);
+ Freeze_Before (N, T);
+ Set_Is_Frozen (Id);
+ return;
+
else
Expand_Subtype_From_Expr (N, T, Object_Definition (N), E);
Act_T := Find_Type_Of_Object (Object_Definition (N), N);