[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 20 Oct 2014 14:32:17 +0000 (16:32 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 20 Oct 2014 14:32:17 +0000 (16:32 +0200)
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.

From-SVN: r216479

gcc/ada/ChangeLog
gcc/ada/gnat_ugn.texi
gcc/ada/prj-attr.adb
gcc/ada/prj-conf.adb
gcc/ada/prj-proc.adb
gcc/ada/prj-proc.ads
gcc/ada/prj.ads
gcc/ada/sem_ch3.adb

index 1665487ea4748532a6a144b67299f0a04f3a14bd..a27cae15192a795efc9beb8809d89eaad0ca4a01 100644 (file)
@@ -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
index f586f87b17b269d3d51158952d5de366b5defed3..d38f0d799fb41c4b42fba75e50c169a3706e0042 100644 (file)
@@ -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
index d515c01a1b202f9e462e7c45391c28b03b50fdd9..06777bb9e7ac7975c63c4a619ae75d3e657bdbf0 100644 (file)
@@ -136,6 +136,7 @@ package body Prj.Attr is
    "Saobject_generated#" &
    "Saobjects_linked#" &
    "SVtargetDtarget_value#" &
+   "SaruntimeDruntime_value#" &
 
    --  Configuration - Libraries
 
index 206fa4c72288c970766465d44c9d55fbc57e4299..0be49a079fb729365b1d4432a338bd4ef2eb30bd 100644 (file)
@@ -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
index 2b865a27fd730e9d6011aff3798cbf720800ac39..dbb7714410498bc710635757780eb392f581153a 100644 (file)
@@ -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;
index 2b0680ebe5285629bcb8fc46b903d120a8e87c63..0156df87f4496563df54112ac12c14b21904ab8b 100644 (file)
@@ -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;
index 1beff66a9da962d69087c0253dfcc0bf1d8f7d15..804d88aa2100876e90b36b33c287053d16c70ab7 100644 (file)
@@ -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.
 
index b81d36364332ff4e68d95e493a8ca5297125b97f..9294eb81fc750ac318524e473bf998fa4ed337cd 100644 (file)
@@ -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);