]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Aug 2014 09:52:02 +0000 (11:52 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Aug 2014 09:52:02 +0000 (11:52 +0200)
2014-08-04  Arnaud Charlet  <charlet@adacore.com>

* exp_util.adb (Check_Float_Op_Overflow): No-op in codepeer
mode for now, to revert to previous behavior.
* checks.adb: Revert previous change, no longer needed.

2014-08-04  Robert Dewar  <dewar@adacore.com>

* gnat1drv.adb (Adjust_Global_Switches): Don't set
Check_Float_Overflow if Machine_Oveflows_On_Target is True.
* sem_prag.adb (Analyze_Pragma, case Check_Float_Overflow): Don't
set Check_Float_Overflow if Machine_Oveflows_On_Target is True.
* switch-c.adb (Scan_Front_End_Switches): Don't set
Check_Float_Overflow if Machine_Oveflows_On_Target is True.

2014-08-04  Vincent Celier  <celier@adacore.com>

* prj-attr.adb: Add new default indications for
attributes Object_Dir, Exec_Dir, Source_Dirs and Target.
(Attribute_Default_Of): New function (Initialize): Set the
default for those attributes that have one specified.
* prj-attr.ads (Attribute_Data): New component Default.
* prj-proc.adb (Expression): Take into account the new defaults
for attributes Object_Dir, Exec_Dir and Source_Dirs.
* prj-strt.adb (Attribute_Reference): Set the default for
the attribute.
* prj-tree.ads, prj-tree.adb (Default_Of): New function.
(Set_Default_Of): New procedure.
* prj.adb (The_Dot_String): New global Name_Id variable,
initialized in procedure Initialize.
(Dot_String): New function
(Initialize): Initialize The_Dot_String.
(Reset): Create the string list Shared.Dot_String_List.
* prj.ads (Attribute_Default_Value): New enumeration type.
(Project_Qualifier): Change enumeration value Dry to Abstract_Project.
(Dot_String): New function.
(Shared_Project_Tree_Data): New string list component Dot_String_List.
* projects.texi: Document new defaults for attribute Object_Dir,
Exec_Dir and Source_Dirs.

From-SVN: r213548

19 files changed:
gcc/ada/ChangeLog
gcc/ada/checks.adb
gcc/ada/exp_util.adb
gcc/ada/gnat1drv.adb
gcc/ada/prj-attr-pm.adb
gcc/ada/prj-attr.adb
gcc/ada/prj-attr.ads
gcc/ada/prj-nmsc.adb
gcc/ada/prj-part.adb
gcc/ada/prj-pp.adb
gcc/ada/prj-proc.adb
gcc/ada/prj-strt.adb
gcc/ada/prj-tree.adb
gcc/ada/prj-tree.ads
gcc/ada/prj.adb
gcc/ada/prj.ads
gcc/ada/projects.texi
gcc/ada/sem_prag.adb
gcc/ada/switch-c.adb

index 474921e0726e17aaf4f149c10ceaa58534b38834..af2af30e9823afa541c8bd7640dd40df73baae40 100644 (file)
@@ -1,3 +1,43 @@
+2014-08-04  Arnaud Charlet  <charlet@adacore.com>
+
+       * exp_util.adb (Check_Float_Op_Overflow): No-op in codepeer
+       mode for now, to revert to previous behavior.
+       * checks.adb: Revert previous change, no longer needed.
+
+2014-08-04  Robert Dewar  <dewar@adacore.com>
+
+       * gnat1drv.adb (Adjust_Global_Switches): Don't set
+       Check_Float_Overflow if Machine_Oveflows_On_Target is True.
+       * sem_prag.adb (Analyze_Pragma, case Check_Float_Overflow): Don't
+       set Check_Float_Overflow if Machine_Oveflows_On_Target is True.
+       * switch-c.adb (Scan_Front_End_Switches): Don't set
+       Check_Float_Overflow if Machine_Oveflows_On_Target is True.
+
+2014-08-04  Vincent Celier  <celier@adacore.com>
+
+       * prj-attr.adb: Add new default indications for
+       attributes Object_Dir, Exec_Dir, Source_Dirs and Target.
+       (Attribute_Default_Of): New function (Initialize): Set the
+       default for those attributes that have one specified.
+       * prj-attr.ads (Attribute_Data): New component Default.
+       * prj-proc.adb (Expression): Take into account the new defaults
+       for attributes Object_Dir, Exec_Dir and Source_Dirs.
+       * prj-strt.adb (Attribute_Reference): Set the default for
+       the attribute.
+       * prj-tree.ads, prj-tree.adb (Default_Of): New function.
+       (Set_Default_Of): New procedure.
+       * prj.adb (The_Dot_String): New global Name_Id variable,
+       initialized in procedure Initialize.
+       (Dot_String): New function
+       (Initialize): Initialize The_Dot_String.
+       (Reset): Create the string list Shared.Dot_String_List.
+       * prj.ads (Attribute_Default_Value): New enumeration type.
+       (Project_Qualifier): Change enumeration value Dry to Abstract_Project.
+       (Dot_String): New function.
+       (Shared_Project_Tree_Data): New string list component Dot_String_List.
+       * projects.texi: Document new defaults for attribute Object_Dir,
+       Exec_Dir and Source_Dirs.
+
 2014-08-04  Robert Dewar  <dewar@adacore.com>
 
        * sem_ch12.adb: Minor reformatting.
index cddd15a57f916a7f6e9f9727d72db16eb38cd365..0b934eb2a2bf26291ba430171d8bf456b07a5a3e 100644 (file)
@@ -9214,7 +9214,6 @@ package body Checks is
       Wnode       : Node_Id  := Warn_Node;
       Ret_Result  : Check_Result := (Empty, Empty);
       Num_Checks  : Integer := 0;
-      Reason      : RT_Exception_Code := CE_Range_Check_Failed;
 
       procedure Add_Check (N : Node_Id);
       --  Adds the action given to Ret_Result if N is non-Empty
@@ -9836,16 +9835,6 @@ package body Checks is
          else
             if not In_Subrange_Of (S_Typ, T_Typ) then
                Cond := Discrete_Expr_Cond (Ck_Node, T_Typ);
-
-            --  Special case CodePeer_Mode and apparently redundant checks on
-            --  floating point types: these are used as overflow checks, see
-            --  Exp_Util.Check_Float_Op_Overflow.
-
-            elsif CodePeer_Mode and then Check_Float_Overflow
-              and then Is_Floating_Point_Type (S_Typ)
-            then
-               Cond := Discrete_Expr_Cond (Ck_Node, T_Typ);
-               Reason := CE_Overflow_Check_Failed;
             end if;
          end if;
       end if;
@@ -10040,7 +10029,7 @@ package body Checks is
          Add_Check
            (Make_Raise_Constraint_Error (Loc,
              Condition => Cond,
-             Reason    => Reason));
+             Reason    => CE_Range_Check_Failed));
       end if;
 
       return Ret_Result;
index f3ea21fe2bfcc484c583287c795efd11a3b4a835..5532d58bf2d078ac084f4548a761873c9543224e 100644 (file)
@@ -1643,30 +1643,12 @@ package body Exp_Util is
 
       if not Check_Float_Overflow
         or else not Is_Floating_Point_Type (Etype (N))
-      then
-         return;
-      end if;
 
-      --  Special expansion for CodePeer_Mode: we reuse the Apply_Range_Check
-      --  machinery instead of expanding a 'Valid attribute, since CodePeer
-      --  does not know how to handle expansion of 'Valid on floating point.
-      --  ??? Consider using the same expansion in normal mode. This should
-      --  work assuming division checks are also enabled (to prevent generation
-      --  of NaNs), except for e.g. unchecked conversions which might also
-      --  generate NaNs.
-
-      if CodePeer_Mode then
-         declare
-            Typ : constant Entity_Id := Etype (N);
-         begin
-            --  Prevent recursion
+        --  In CodePeer_Mode, rely on the overflow check flag being set instead
 
-            Set_Analyzed (N);
-
-            Apply_Range_Check (N, Typ);
-            Analyze_And_Resolve (N, Typ);
-            return;
-         end;
+        or else CodePeer_Mode
+      then
+         return;
       end if;
 
       --  Otherwise we replace the expression by
index e074b08d41a706546bfe977a1210ccba59edc7c1..50f4befcc10bc76dd1cb301c9ce6587eb03462e3 100644 (file)
@@ -371,9 +371,11 @@ procedure Gnat1drv is
 
          --  Detect overflow on unconstrained floating-point types, such as
          --  the predefined types Float, Long_Float and Long_Long_Float from
-         --  package Standard.
+         --  package Standard. Not necessary if float overflows are checked
+         --  (Machine_Overflow true), since appropriate Do_Overflow_Check flags
+         --  will be set in any case.
 
-         Check_Float_Overflow := True;
+         Check_Float_Overflow := not Machine_Overflows_On_Target;
 
          --  Set STRICT mode for overflow checks if not set explicitly. This
          --  prevents suppressing of overflow checks by default, in code down
index 9b75c0526e4e6ce548315a124096ab0278bdb40a..f9f41b1628368334e6b7c08b845e04ce0a2565bd 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2004-2010, Free Software Foundation, Inc.         --
+--          Copyright (C) 2004-2014, 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- --
@@ -47,6 +47,7 @@ package body Prj.Attr.PM is
             Attr_Kind      => Unknown,
             Read_Only      => False,
             Others_Allowed => False,
+            Default        => Empty_Value,
             Next           =>
               Package_Attributes.Table (To_Package.Value).First_Attribute));
 
index 04ce48a4aa8190e1ed7e3466929badd698f9f10f..9e003e4761cb03a3e6eb13f66afb875bb665a89e 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2001-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2001-2014, 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- --
@@ -34,7 +34,7 @@ package body Prj.Attr is
 
    --  Data for predefined attributes and packages
 
-   --  Names are in lower case and end with '#'
+   --  Names are in lower case and end with '#' or 'D'.
 
    --  Package names are preceded by 'P'
 
@@ -59,6 +59,11 @@ package body Prj.Attr is
    --     'O' to indicate that others is allowed as an index for an associative
    --     array
 
+   --  If the character after the name in lower case letter is a 'D'
+   --  (for default), then 'D' must be followed by an enumeration value of type
+   --  Attribute_Default_Value, followed by a '#'.
+   --  Example:
+   --    "SVobject_dirDdot_value#"
    --  End is indicated by two consecutive '#'
 
    Initialization_Data : constant String :=
@@ -76,9 +81,9 @@ package body Prj.Attr is
 
    --  Directories
 
-   "SVobject_dir#" &
-   "SVexec_dir#" &
-   "LVsource_dirs#" &
+   "SVobject_dirDdot_value#" &
+   "SVexec_dirDobject_dir_value#" &
+   "LVsource_dirsDdot_value#" &
    "Lainherit_source_path#" &
    "LVexcluded_source_dirs#" &
    "LVignore_source_sub_dirs#" &
@@ -129,7 +134,7 @@ package body Prj.Attr is
    "Satoolchain_description#" &
    "Saobject_generated#" &
    "Saobjects_linked#" &
-   "SVtarget#" &
+   "SVtargetDtarget_value#" &
 
    --  Configuration - Libraries
 
@@ -416,6 +421,21 @@ package body Prj.Attr is
       Package_Names (Last_Package_Name) := new String'(Name);
    end Add_Package_Name;
 
+   --------------------------
+   -- Attribute_Default_Of --
+   --------------------------
+
+   function Attribute_Default_Of
+     (Attribute : Attribute_Node_Id) return Attribute_Default_Value
+   is
+   begin
+      if Attribute = Empty_Attribute then
+         return Empty_Value;
+      else
+         return Attrs.Table (Attribute.Value).Default;
+      end if;
+   end Attribute_Default_Of;
+
    -----------------------
    -- Attribute_Kind_Of --
    -----------------------
@@ -482,6 +502,7 @@ package body Prj.Attr is
       First_Attribute   : Attr_Node_Id      := Attr.First_Attribute;
       Read_Only         : Boolean;
       Others_Allowed    : Boolean;
+      Default           : Attribute_Default_Value;
 
       function Attribute_Location return String;
       --  Returns a string depending if we are in the project level attributes
@@ -611,9 +632,11 @@ package body Prj.Attr is
 
             Read_Only := False;
             Others_Allowed := False;
+            Default := Empty_Value;
 
             if Initialization_Data (Start) = 'R' then
                Read_Only := True;
+               Default := Read_Only_Value;
                Start := Start + 1;
 
             elsif Initialization_Data (Start) = 'O' then
@@ -623,12 +646,42 @@ package body Prj.Attr is
 
             Finish := Start;
 
-            while Initialization_Data (Finish) /= '#' loop
+            while Initialization_Data (Finish) /= '#'
+              and then
+                Initialization_Data (Finish) /= 'D'
+            loop
                Finish := Finish + 1;
             end loop;
 
             Attribute_Name :=
               Name_Id_Of (Initialization_Data (Start .. Finish - 1));
+
+            if Initialization_Data (Finish) = 'D' then
+               Start := Finish + 1;
+               Finish := Start;
+
+               while Initialization_Data (Finish) /= '#' loop
+                  Finish := Finish + 1;
+               end loop;
+
+               declare
+                  Default_Name : constant String :=
+                    Initialization_Data (Start .. Finish - 1);
+                  pragma Unsuppress (All_Checks);
+
+               begin
+                  Default := Attribute_Default_Value'Value (Default_Name);
+
+               exception
+                  when Constraint_Error =>
+                     Osint.Fail
+                       ("illegal default value """ &
+                        Default_Name &
+                        """ for attribute " &
+                        Get_Name_String (Attribute_Name));
+               end;
+            end if;
+
             Attrs.Increment_Last;
 
             if Current_Attribute = Empty_Attr then
@@ -662,6 +715,7 @@ package body Prj.Attr is
                Attr_Kind      => Attr_Kind,
                Read_Only      => Read_Only,
                Others_Allowed => Others_Allowed,
+               Default        => Default,
                Next           => Empty_Attr);
             Start := Finish + 1;
          end if;
@@ -770,7 +824,8 @@ package body Prj.Attr is
       Attr_Kind          : Defined_Attribute_Kind;
       Var_Kind           : Defined_Variable_Kind;
       Index_Is_File_Name : Boolean := False;
-      Opt_Index          : Boolean := False)
+      Opt_Index          : Boolean := False;
+      Default            : Attribute_Default_Value := Empty_Value)
    is
       Attr_Name       : Name_Id;
       First_Attr      : Attr_Node_Id := Empty_Attr;
@@ -840,6 +895,7 @@ package body Prj.Attr is
          Attr_Kind      => Real_Attr_Kind,
          Read_Only      => False,
          Others_Allowed => False,
+         Default        => Default,
          Next           => First_Attr);
 
       Package_Attributes.Table (In_Package.Value).First_Attribute :=
@@ -952,6 +1008,7 @@ package body Prj.Attr is
             Attr_Kind      => Attr_Kind,
             Read_Only      => False,
             Others_Allowed => False,
+            Default        => Attributes (Index).Default,
             Next           => First_Attr);
          First_Attr := Attrs.Last;
       end loop;
index dc60cd69135e41f092d106eb795995d5ec66c1e5..5b944f9b3bb19346365a65af99030d66cd3e194c 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2001-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2001-2014, 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- --
@@ -107,6 +107,10 @@ package Prj.Attr is
       Var_Kind : Defined_Variable_Kind;
       --  The attribute value kind: single or list
 
+      Default : Attribute_Default_Value := Empty_Value;
+      --  The value of the attribute when referenced if the attribute has not
+      --  been (yet) declared.
+
    end record;
    --  Name and characteristics of an attribute in a package registered
    --  explicitly with Register_New_Package (see below).
@@ -190,6 +194,12 @@ package Prj.Attr is
    --  Set the variable kind of a known attribute. Does nothing if Attribute is
    --  Empty_Attribute.
 
+   function Attribute_Default_Of
+     (Attribute : Attribute_Node_Id) return Attribute_Default_Value;
+   --  Returns the default of the attribute, Read_Only_Value for read only
+   --  attributes, Empty_Value when ndefault not specified or specified
+   --  value.
+
    function Optional_Index_Of (Attribute : Attribute_Node_Id) return Boolean;
    --  Returns True if Attribute is a known attribute and may have an
    --  optional index. Returns False otherwise.
@@ -232,12 +242,13 @@ package Prj.Attr is
       Attr_Kind          : Defined_Attribute_Kind;
       Var_Kind           : Defined_Variable_Kind;
       Index_Is_File_Name : Boolean := False;
-      Opt_Index          : Boolean := False);
+      Opt_Index          : Boolean := False;
+      Default            : Attribute_Default_Value := Empty_Value);
    --  Add a new attribute to registered package In_Package. Fails if Name
    --  (the attribute name) is empty, if In_Package is Empty_Package or if
    --  the attribute name has a duplicate name. See definition of type
    --  Attribute_Data above for the meaning of parameters Attr_Kind, Var_Kind,
-   --  Index_Is_File_Name and Opt_Index.
+   --  Index_Is_File_Name, Opt_Index and Default.
 
    function Package_Node_Id_Of (Name : Name_Id) return Package_Node_Id;
    --  Returns the package node id of the package with name Name. Returns
@@ -320,6 +331,7 @@ private
       Attr_Kind      : Attribute_Kind;
       Read_Only      : Boolean;
       Others_Allowed : Boolean;
+      Default        : Attribute_Default_Value;
       Next           : Attr_Node_Id;
    end record;
    --  Data for an attribute
index fb14af79731c75c83013ca9192f01f65a6adb0ca..93b5963b644b6a11f6c699a5e952d1153da309e8 100644 (file)
@@ -8517,7 +8517,7 @@ package body Prj.Nmsc is
                   Show_Source_Dirs (Project, Shared);
                end if;
 
-               if Project.Qualifier = Dry then
+               if Project.Qualifier = Abstract_Project then
                   Check_Abstract_Project (Project, Data);
                end if;
          end case;
index 48b57aa454bb32d731eb9a81d7e41f51b6ead59c..6d4a7f15fb48db3db1811b8f6a326d97566c3d8d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2001-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2001-2014, 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- --
@@ -1094,7 +1094,8 @@ package body Prj.Part is
          while Present (With_Clause) loop
             Imported := Project_Node_Of (With_Clause, In_Tree);
 
-            if Project_Qualifier_Of (Imported, In_Tree) /= Dry then
+            if Project_Qualifier_Of (Imported, In_Tree) /= Abstract_Project
+            then
                Error_Msg_Name_1 := Name_Id (Path_Name_Of (Imported, In_Tree));
                Error_Msg (Flags, "can only import abstract projects, not %%",
                           Token_Ptr);
@@ -1152,7 +1153,7 @@ package body Prj.Part is
       Qualifier_Location := Token_Ptr;
 
       if Token = Tok_Abstract then
-         Proj_Qualifier := Dry;
+         Proj_Qualifier := Abstract_Project;
          Scan (In_Tree);
 
       elsif Token = Tok_Identifier then
@@ -1370,7 +1371,8 @@ package body Prj.Part is
             if Extended then
 
                if A_Project_Name_And_Node.Extended then
-                  if A_Project_Name_And_Node.Proj_Qualifier /= Dry then
+                  if A_Project_Name_And_Node.Proj_Qualifier /= Abstract_Project
+                  then
                      Error_Msg
                        (Env.Flags,
                         "cannot extend the same project file several times",
@@ -1811,8 +1813,11 @@ package body Prj.Part is
                      --  with sources if it inherits sources from the project
                      --  it extends.
 
-                     if Project_Qualifier_Of (Project, In_Tree) = Dry and then
-                       Project_Qualifier_Of (Extended_Project, In_Tree) /= Dry
+                     if Project_Qualifier_Of
+                         (Project, In_Tree) = Abstract_Project
+                        and then
+                         Project_Qualifier_Of
+                           (Extended_Project, In_Tree) /= Abstract_Project
                      then
                         Error_Msg
                           (Env.Flags, "an abstract project can only extend " &
@@ -1925,7 +1930,9 @@ package body Prj.Part is
          Set_Project_Declaration_Of (Project, In_Tree, Project_Declaration);
 
          if Present (Extended_Project)
-           and then Project_Qualifier_Of (Extended_Project, In_Tree) /= Dry
+           and then
+             Project_Qualifier_Of
+               (Extended_Project, In_Tree) /= Abstract_Project
          then
             Set_Extending_Project_Of
               (Project_Declaration_Of (Extended_Project, In_Tree), In_Tree,
index 30402eae41b0c641be57e17a542e116aedae62d0..9ccd935f6af224a3a30e746aae5aa2a9807b1092 100644 (file)
@@ -403,7 +403,7 @@ package body Prj.PP is
                         Write_String ("library ", Indent);
                      when Configuration =>
                         Write_String ("configuration ", Indent);
-                     when Dry =>
+                     when Abstract_Project =>
                         Write_String ("abstract ", Indent);
                   end case;
 
index 08232cdd5c81eeeb87b76011c5d7b74f89b6a0bf..bd681d6b5b30829cbe8229a976dedcc3a6270cc6 100644 (file)
@@ -519,6 +519,8 @@ package body Prj.Proc is
       Last : String_List_Id := Nil_String;
       --  Reference to the last string elements in Result, when Kind is List
 
+      Current_Term_Kind : Project_Node_Kind;
+
    begin
       Result.Project := Project;
       Result.Location := Location_Of (First_Term, From_Project_Node_Tree);
@@ -528,8 +530,10 @@ package body Prj.Proc is
       The_Term := First_Term;
       while Present (The_Term) loop
          The_Current_Term := Current_Term (The_Term, From_Project_Node_Tree);
+         Current_Term_Kind :=
+           Kind_Of (The_Current_Term, From_Project_Node_Tree);
 
-         case Kind_Of (The_Current_Term, From_Project_Node_Tree) is
+         case Current_Term_Kind is
 
             when N_Literal_String =>
 
@@ -700,6 +704,13 @@ package body Prj.Proc is
                   Index           : Name_Id := No_Name;
 
                begin
+                  <<Object_Dir_Restart>>
+                  The_Project := Project;
+                  The_Package := Pkg;
+                  The_Name := No_Name;
+                  The_Variable_Id := No_Variable;
+                  Index := No_Name;
+
                   if Present (Term_Project)
                     and then Term_Project /= From_Project_Node
                   then
@@ -741,9 +752,7 @@ package body Prj.Proc is
                   The_Name :=
                     Name_Of (The_Current_Term, From_Project_Node_Tree);
 
-                  if Kind_Of (The_Current_Term, From_Project_Node_Tree) =
-                                                        N_Attribute_Reference
-                  then
+                  if Current_Term_Kind = N_Attribute_Reference then
                      Index :=
                        Associative_Array_Index_Of
                          (The_Current_Term, From_Project_Node_Tree);
@@ -759,9 +768,7 @@ package body Prj.Proc is
 
                         --  First, if there is a package, look into the package
 
-                        if Kind_Of (The_Current_Term, From_Project_Node_Tree) =
-                                                        N_Variable_Reference
-                        then
+                        if Current_Term_Kind = N_Variable_Reference then
                            The_Variable_Id :=
                              Shared.Packages.Table
                                (The_Package).Decl.Variables;
@@ -786,9 +793,7 @@ package body Prj.Proc is
 
                         --  If we have not found it, look into the project
 
-                        if Kind_Of (The_Current_Term, From_Project_Node_Tree) =
-                             N_Variable_Reference
-                        then
+                        if Current_Term_Kind = N_Variable_Reference then
                            The_Variable_Id := The_Project.Decl.Variables;
                         else
                            The_Variable_Id := The_Project.Decl.Attributes;
@@ -882,6 +887,63 @@ package body Prj.Proc is
                      end;
                   end if;
 
+                  --  Check the defaults
+
+                  if Current_Term_Kind = N_Attribute_Reference
+                    and then The_Variable.Default
+                  then
+                     declare
+                        The_Default : constant Attribute_Default_Value :=
+                          Default_Of
+                            (The_Current_Term, From_Project_Node_Tree);
+                     begin
+                        case The_Variable.Kind is
+                        when Undefined =>
+                           null;
+
+                        when Single =>
+                           case The_Default is
+                              when Read_Only_Value =>
+                                 null;
+
+                              when Empty_Value =>
+                                 The_Variable.Value := Empty_String;
+
+                              when Dot_Value =>
+                                 The_Variable.Value := Dot_String;
+
+                              when Object_Dir_Value =>
+                                 From_Project_Node_Tree.Project_Nodes.Table
+                                   (The_Current_Term).Name :=
+                                   Snames.Name_Object_Dir;
+                                 From_Project_Node_Tree.Project_Nodes.Table
+                                   (The_Current_Term).Default :=
+                                   Dot_Value;
+                                 goto Object_Dir_Restart;
+
+                              when Target_Value =>
+                                 null;
+                           end case;
+
+                        when List =>
+                           case The_Default is
+                              when Read_Only_Value =>
+                                 null;
+
+                              when Empty_Value =>
+                                 The_Variable.Values := Nil_String;
+
+                              when Dot_Value =>
+                                 The_Variable.Values :=
+                                   Shared.Dot_String_List;
+
+                              when Object_Dir_Value | Target_Value =>
+                                 null;
+                           end case;
+                        end case;
+                     end;
+                  end if;
+
                   case Kind is
 
                      when Undefined =>
index a4c8ce04b3aac8483aa39efaf5eebb57500821cc..cacae775aa0860dc158d8f3a7d6c7d1eca17792c 100644 (file)
@@ -218,6 +218,9 @@ package body Prj.Strt is
               (Reference, In_Tree,
                To => Attribute_Kind_Of (Current_Attribute) in
                       All_Case_Insensitive_Associative_Array);
+            Set_Default_Of
+              (Reference, In_Tree,
+               To => Attribute_Default_Of (Current_Attribute));
 
             --  Scan past the attribute name
 
index 2ff5a9fff18043e828b332bf2e4eeb56e41e3cd9..023947c4e97872bb06243062675577ba57b69fc7 100644 (file)
@@ -122,6 +122,7 @@ package body Prj.Tree is
             Src_Index => 0,
             Path_Name => No_Path,
             Value     => No_Name,
+            Default   => Empty_Value,
             Field1    => Empty_Node,
             Field2    => Empty_Node,
             Field3    => Empty_Node,
@@ -172,6 +173,7 @@ package body Prj.Tree is
                Src_Index        => 0,
                Path_Name        => No_Path,
                Value            => Comments.Table (J).Value,
+               Default          => Empty_Value,
                Field1           => Empty_Node,
                Field2           => Empty_Node,
                Field3           => Empty_Node,
@@ -340,6 +342,7 @@ package body Prj.Tree is
          Src_Index        => 0,
          Path_Name        => No_Path,
          Value            => No_Name,
+         Default          => Empty_Value,
          Field1           => Empty_Node,
          Field2           => Empty_Node,
          Field3           => Empty_Node,
@@ -385,6 +388,22 @@ package body Prj.Tree is
       return In_Tree.Project_Nodes.Table (Node).Field1;
    end Current_Term;
 
+   ----------------
+   -- Default_Of --
+   ----------------
+
+   function Default_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref) return Attribute_Default_Value
+   is
+   begin
+      pragma Assert
+        (Present (Node)
+          and then
+            In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference);
+      return In_Tree.Project_Nodes.Table (Node).Default;
+   end Default_Of;
+
    --------------------------
    -- Default_Project_Node --
    --------------------------
@@ -416,6 +435,7 @@ package body Prj.Tree is
          Src_Index        => 0,
          Path_Name        => No_Path,
          Value            => No_Name,
+         Default          => Empty_Value,
          Field1           => Empty_Node,
          Field2           => Empty_Node,
          Field3           => Empty_Node,
@@ -452,6 +472,7 @@ package body Prj.Tree is
                Src_Index        => 0,
                Path_Name        => No_Path,
                Value            => No_Name,
+               Default          => Empty_Value,
                Field1           => Empty_Node,
                Field2           => Empty_Node,
                Field3           => Empty_Node,
@@ -486,6 +507,7 @@ package body Prj.Tree is
                   Src_Index        => 0,
                   Path_Name        => No_Path,
                   Value            => Comments.Table (J).Value,
+                  Default          => Empty_Value,
                   Field1           => Empty_Node,
                   Field2           => Empty_Node,
                   Field3           => Empty_Node,
@@ -1867,6 +1889,23 @@ package body Prj.Tree is
       In_Tree.Project_Nodes.Table (Node).Field1 := To;
    end Set_Current_Term;
 
+   --------------------
+   -- Set_Default_Of --
+   --------------------
+
+   procedure Set_Default_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref;
+      To      : Attribute_Default_Value)
+   is
+   begin
+      pragma Assert
+        (Present (Node)
+          and then
+            In_Tree.Project_Nodes.Table (Node).Kind = N_Attribute_Reference);
+      In_Tree.Project_Nodes.Table (Node).Default := To;
+   end Set_Default_Of;
+
    ----------------------
    -- Set_Directory_Of --
    ----------------------
index 0a7da7f20ef08bed6d054595d08b1011ed6552b6..e798d6b670041b44e7b5df7a369ce21cc8cbd9bd 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2001-2013, Free Software Foundation, Inc.         --
+--          Copyright (C) 2001-2014, 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- --
@@ -590,6 +590,12 @@ package Prj.Tree is
    --  Only valid for N_Variable_Reference or N_Attribute_Reference nodes.
    --  May return Empty_Node.
 
+   function Default_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref) return Attribute_Default_Value;
+   pragma Inline (Default_Of);
+   --  Only valid for N_Attribute_Reference nodes
+
    function String_Type_Of
      (Node    : Project_Node_Id;
       In_Tree : Project_Node_Tree_Ref) return Project_Node_Id;
@@ -1068,7 +1074,14 @@ package Prj.Tree is
       In_Tree : Project_Node_Tree_Ref;
       To      : Project_Node_Id);
    pragma Inline (Set_Package_Node_Of);
-   --  Only valid for N_Variable_Reference or N_Attribute_Reference nodes.
+   --  Only valid for N_Variable_Reference or N_Attribute_Reference nodes
+
+   procedure Set_Default_Of
+     (Node    : Project_Node_Id;
+      In_Tree : Project_Node_Tree_Ref;
+      To      : Attribute_Default_Value);
+   pragma Inline (Set_Default_Of);
+   --  Only valid for N_Attribute_Reference nodes
 
    procedure Set_String_Type_Of
      (Node    : Project_Node_Id;
@@ -1179,6 +1192,9 @@ package Prj.Tree is
          Value : Name_Id := No_Name;
          --  See below for what Project_Node_Kind it is used
 
+         Default : Attribute_Default_Value := Empty_Value;
+         --  Only used in N_Attribute_Reference
+
          Field1 : Project_Node_Id := Empty_Node;
          --  See below the meaning for each Project_Node_Kind
 
index 3c4d11592ef6623e9d25e0ba44a5a62adc2e5d8b..8e5914ba1581e37e1d404e762ae16d0af57c7f1f 100644 (file)
@@ -61,6 +61,8 @@ package body Prj is
 
    The_Empty_String : Name_Id := No_Name;
 
+   The_Dot_String   : Name_Id := No_Name;
+
    Debug_Level : Integer := 0;
    --  Current indentation level for debug traces
 
@@ -307,6 +309,15 @@ package body Prj is
       end case;
    end Dependency_Name;
 
+   ----------------
+   -- Dot_String --
+   ----------------
+
+   function Dot_String return Name_Id is
+   begin
+      return The_Dot_String;
+   end Dot_String;
+
    ----------------
    -- Empty_File --
    ----------------
@@ -1057,6 +1068,10 @@ package body Prj is
          Name_Len := 0;
          The_Empty_String := Name_Find;
 
+         Name_Len := 1;
+         Name_Buffer (1) := '.';
+         The_Dot_String := Name_Find;
+
          Prj.Attr.Initialize;
 
          --  Make sure that new reserved words after Ada 95 may be used as
@@ -1442,6 +1457,20 @@ package body Prj is
          Array_Table.Init            (Tree.Shared.Arrays);
          Package_Table.Init          (Tree.Shared.Packages);
 
+         --  Create Dot_String_List
+
+         String_Element_Table.Append
+           (Tree.Shared.String_Elements,
+            String_Element'
+              (Value         => The_Dot_String,
+               Index         => 0,
+               Display_Value => The_Dot_String,
+               Location      => No_Location,
+               Flag          => False,
+               Next          => Nil_String));
+         Tree.Shared.Dot_String_List :=
+           String_Element_Table.Last (Tree.Shared.String_Elements);
+
          --  Private part table
 
          Temp_Files_Table.Init (Tree.Shared.Private_Part.Temp_Files);
index 329cc6d21159bc7135ee4a90b32672a436d06186..b44bfa4297f889e7f6ab5abb304b41cef7daa93b 100644 (file)
@@ -72,6 +72,25 @@ package Prj is
    type Yes_No_Unknown is (Yes, No, Unknown);
    --  Tri-state to decide if -lgnarl is needed when linking
 
+   type Attribute_Default_Value is
+     (Read_Only_Value,
+      --  for read only attributes (Name, Project_Dir)
+
+      Empty_Value,
+      --  empty string or empty string list
+
+      Dot_Value,
+      --  "." or (".")
+
+      Object_Dir_Value,
+      --  'Object_Dir
+
+      Target_Value
+      --  'Target (special rules)
+     );
+   --  Describe the default values of attributes that are referenced but not
+   --  declared.
+
    pragma Warnings (Off);
    type Project_Qualifier is
      (Unspecified,
@@ -83,7 +102,7 @@ package Prj is
 
       Library,
       Configuration,
-      Dry,
+      Abstract_Project,
       Aggregate,
       Aggregate_Library);
    pragma Warnings (On);
@@ -91,7 +110,7 @@ package Prj is
    --  file:
    --    Standard:             standard project ...
    --    Library:              library project is ...
-   --    Dry:                  abstract project is
+   --    Abstract_Project:     abstract project is
    --    Aggregate:            aggregate project is
    --    Aggregate_Library:    aggregate library project is ...
    --    Configuration:        configuration project is ...
@@ -123,6 +142,9 @@ package Prj is
    function Empty_String return Name_Id;
    --  Return the id for an empty string ""
 
+   function Dot_String return Name_Id;
+   --  Return the id for "."
+
    type Path_Information is record
       Name         : Path_Name_Type := No_Path;
       Display_Name : Path_Name_Type := No_Path;
@@ -1570,6 +1592,7 @@ package Prj is
       Arrays            : Array_Table.Instance;
       Packages          : Package_Table.Instance;
       Private_Part      : Private_Project_Tree_Data;
+      Dot_String_List   : String_List_Id := Nil_String;
    end record;
    type Shared_Project_Tree_Data_Access is access all Shared_Project_Tree_Data;
    --  The data that is shared among multiple trees, when these trees are
index 9622e0511e0f5f32d030112d012e7c1a1b8ecbc6..b61decaa7ef8438225f6f61b369ccbba5e77ac16 100644 (file)
@@ -3724,7 +3724,7 @@ Here are some examples of attribute declarations:
 Attributes references may appear anywhere in expressions, and are used
 to retrieve the value previously assigned to the attribute. If an attribute
 has not been set in a given package or project, its value defaults to the
-empty string or the empty list.
+empty string or the empty list, with some exceptions.
 
 @smallexample
 attribute_reference ::=
@@ -3746,6 +3746,15 @@ Examples are:
   Builder'Default_Switches ("Ada")
 @end smallexample
 
+The exceptions to the empty defaults are:
+
+@itemize @bullet
+@item Object_Dir: default is "."
+@item Exec_Dir: default is 'Object_Dir, that is the value of attribute
+  Object_Dir in the same project, declared or defaulted.
+@item Source_Dirs: default is (".")
+@end itemize
+
 @noindent
 The prefix of an attribute may be:
 
index 21a2ae8516b514743b9f8f1a5295682d8c3f0608..6b94a8b2873f752e2c5b6413d3174218b4cbcd19 100644 (file)
@@ -11806,7 +11806,7 @@ package body Sem_Prag is
             GNAT_Pragma;
             Check_Valid_Configuration_Pragma;
             Check_Arg_Count (0);
-            Check_Float_Overflow := True;
+            Check_Float_Overflow := not Machine_Overflows_On_Target;
 
          ----------------
          -- Check_Name --
index 5cdbd41415f231c93daba55bd56ac2ea96a85e14..46939c6fd523784b92c44fd2a871885e68388a47 100644 (file)
@@ -32,11 +32,13 @@ with Lib;      use Lib;
 with Osint;    use Osint;
 with Opt;      use Opt;
 with Stylesw;  use Stylesw;
+with Targparm; use Targparm;
 with Ttypes;   use Ttypes;
 with Validsw;  use Validsw;
 with Warnsw;   use Warnsw;
 
 with Ada.Unchecked_Deallocation;
+
 with System.WCh_Con; use System.WCh_Con;
 with System.OS_Lib;
 
@@ -572,7 +574,7 @@ package body Switch.C is
 
                   when 'F' =>
                      Ptr := Ptr + 1;
-                     Check_Float_Overflow := True;
+                     Check_Float_Overflow := not Machine_Overflows_On_Target;
 
                   --  -gnateG (save preprocessor output)