aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2012-05-15 14:06:55 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2012-05-15 14:06:55 +0200
commit5b5b27adff45664299c19f4666e078f4acecfdf7 (patch)
tree01c416110922a7e372c9c428f0077e8b755bd4ee /gcc
parent053cf9940a4086500ebaa994d29b894e8f5ed71a (diff)
downloadgcc-5b5b27adff45664299c19f4666e078f4acecfdf7.zip
gcc-5b5b27adff45664299c19f4666e078f4acecfdf7.tar.gz
gcc-5b5b27adff45664299c19f4666e078f4acecfdf7.tar.bz2
[multiple changes]
2012-05-15 Thomas Quinot <quinot@adacore.com> * uintp.adb (Image_Uint): Use UI_Div_Rem to get quotient and remainder of U / Base in a single operation. 2012-05-15 Robert Dewar <dewar@adacore.com> * exp_ch5.adb, inline.adb, sem_ch10.adb, prj.ads, sem_util.adb, a-ngelfu.ads, exp_ch4.adb, exp_ch6.adb, aspects.ads, sem_ch6.adb, vms_data.ads, exp_ch3.adb, prj-env.adb: Minor reformatting. From-SVN: r187529
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog11
-rw-r--r--gcc/ada/a-ngelfu.ads4
-rw-r--r--gcc/ada/aspects.ads41
-rw-r--r--gcc/ada/exp_ch3.adb4
-rw-r--r--gcc/ada/exp_ch4.adb4
-rw-r--r--gcc/ada/exp_ch5.adb8
-rw-r--r--gcc/ada/exp_ch6.adb2
-rw-r--r--gcc/ada/inline.adb51
-rw-r--r--gcc/ada/prj-env.adb4
-rw-r--r--gcc/ada/prj.ads3
-rw-r--r--gcc/ada/sem_ch10.adb4
-rw-r--r--gcc/ada/sem_ch6.adb1
-rw-r--r--gcc/ada/sem_util.adb3
-rw-r--r--gcc/ada/uintp.adb28
-rw-r--r--gcc/ada/vms_data.ads9
15 files changed, 97 insertions, 80 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index a68c95c..81f1da4 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,16 @@
2012-05-15 Thomas Quinot <quinot@adacore.com>
+ * uintp.adb (Image_Uint): Use UI_Div_Rem to get quotient and
+ remainder of U / Base in a single operation.
+
+2012-05-15 Robert Dewar <dewar@adacore.com>
+
+ * exp_ch5.adb, inline.adb, sem_ch10.adb, prj.ads, sem_util.adb,
+ a-ngelfu.ads, exp_ch4.adb, exp_ch6.adb, aspects.ads, sem_ch6.adb,
+ vms_data.ads, exp_ch3.adb, prj-env.adb: Minor reformatting.
+
+2012-05-15 Thomas Quinot <quinot@adacore.com>
+
* exp_ch4.adb (Has_Inferable_Discriminants): For a qualified
expression, use correct node for test on the subtype denoted by
the subtype mark.
diff --git a/gcc/ada/a-ngelfu.ads b/gcc/ada/a-ngelfu.ads
index 03aed54..9f7d3a3 100644
--- a/gcc/ada/a-ngelfu.ads
+++ b/gcc/ada/a-ngelfu.ads
@@ -11,10 +11,6 @@
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
-- apply solely to the Post aspects that have been added to the spec. --
--- Except for these parts of the document, in accordance with the copyright --
--- of that document, you can freely copy and modify this specification, --
--- provided that if you redistribute a modified version, any changes that --
--- you have made are clearly indicated. --
-- --
-- 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- --
diff --git a/gcc/ada/aspects.ads b/gcc/ada/aspects.ads
index bc5b9c6..7392bee 100644
--- a/gcc/ada/aspects.ads
+++ b/gcc/ada/aspects.ads
@@ -34,30 +34,35 @@
-- aspect specifications from the tree. The semantic processing for aspect
-- specifications is found in Sem_Ch13.Analyze_Aspect_Specifications.
+------------------------
+-- Adding New Aspects --
+------------------------
+
-- In general, each aspect should have a corresponding pragma, so that the
-- newly developed functionality is available for Ada versions < Ada 2012.
-- When both are defined, it is convenient to first transform the aspect into
-- an equivalent pragma in Sem_Ch13.Analyze_Aspect_Specifications, and then
-- analyze the pragma in Sem_Prag.Analyze_Pragma.
--- To add a new aspect:
--- * create a name in snames.ads-tmpl
--- * create a value in type Aspect_Id in this unit
--- * add a value for the aspect in the global arrays defined in this unit
--- * add code for analyzing the aspect in
--- Sem_Ch13.Analyze_Aspect_Specifications. This may involve adding some
--- nodes to the tree to perform additional treatments later.
--- * if the semantic analysis of expressions/names in the aspect should not
--- occur at the point the aspect is defined, add code in the adequate
--- semantic analysis procedure for the aspect. For example, this is the case
--- for aspects Pre and Post on subprograms, which are pre-analyzed at the
--- end of the list of declarations to which the subprogram belongs, and
--- fully analyzed (possibly with expansion) during the semantic analysis of
--- subprogram bodies.
-
--- Additionally, to add a corresponding pragma for a new aspect:
--- * create a name for the pragma in snames.ads-tmpl
--- * add code for analyzing the pragma in Sem_Prag.Analyze_Pragma
+-- To add a new aspect, you need to do the following
+
+-- 1. Create a name in snames.ads-tmpl
+
+-- 2. Create a value in type Aspect_Id in this unit
+
+-- 3. Add a value for the aspect in the global arrays defined in this unit
+
+-- 4. Add code for the aspect in Sem_Ch13.Analyze_Aspect_Specifications.
+-- This may involve adding some nodes to the tree to perform additional
+-- treatments later.
+
+-- 5. Ff the semantic analysis of expressions/names in the aspect should not
+-- occur at the point the aspect is defined, add code in the adequate
+-- semantic analysis procedure for the aspect. For example, this is the
+-- case for aspects Pre and Post on subprograms, which are pre-analyzed
+-- at the end of the declaration list to which the subprogram belongs,
+-- and fully analyzed (possibly with expansion) during the semantic
+-- analysis of subprogram bodies.
with Namet; use Namet;
with Snames; use Snames;
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index ecc5a1c..8240ed4 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -1931,7 +1931,7 @@ package body Exp_Ch3 is
Set_Declarations (Body_Node, New_List (
Make_Full_Type_Declaration (Loc,
Defining_Identifier => Acc_Type,
- Type_Definition =>
+ Type_Definition =>
Make_Access_To_Object_Definition (Loc,
All_Present => True,
Null_Exclusion_Present => False,
@@ -1949,7 +1949,7 @@ package body Exp_Ch3 is
Make_Selected_Component (Loc,
Prefix =>
Unchecked_Convert_To (Acc_Type,
- Make_Identifier (Loc, Name_uO)),
+ Make_Identifier (Loc, Name_uO)),
Selector_Name =>
New_Reference_To (Iface_Comp, Loc)),
Attribute_Name => Name_Position)))));
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 69c483a..4efa476 100644
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -10106,9 +10106,7 @@ package body Exp_Ch4 is
elsif Nkind (N) = N_Qualified_Expression then
return Is_Unchecked_Union (Etype (Subtype_Mark (N)))
- and then
- Is_Constrained (Etype (Subtype_Mark (N)));
-
+ and then Is_Constrained (Etype (Subtype_Mark (N)));
end if;
return False;
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 0acb74b..a9f6ce4 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -344,14 +344,12 @@ package body Exp_Ch5 is
elsif Has_Controlled_Component (L_Type) then
Loop_Required := True;
- -- If changing scalar storage order and assigning a bit packed arrau,
+ -- If changing scalar storage order and assigning a bit packed array,
-- force loop expansion.
elsif Is_Bit_Packed_Array (L_Type)
- and then
- (In_Reverse_Storage_Order_Record (Rhs)
- /=
- In_Reverse_Storage_Order_Record (Lhs))
+ and then (In_Reverse_Storage_Order_Record (Rhs) /=
+ In_Reverse_Storage_Order_Record (Lhs))
then
Loop_Required := True;
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index ab27d23..3cbb790 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -2712,7 +2712,7 @@ package body Exp_Ch6 is
end loop;
-- Handle unchecked conversion of access types generated
- -- in thunks (cf. Expand_Interface_Thunk)
+ -- in thunks (cf. Expand_Interface_Thunk).
elsif Is_Access_Type (Etype (Actual))
and then Nkind (Actual) = N_Unchecked_Type_Conversion
diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb
index 2c84992..2fa6054 100644
--- a/gcc/ada/inline.adb
+++ b/gcc/ada/inline.adb
@@ -743,14 +743,17 @@ package body Inline is
for Index in Inlined.First .. Inlined.Last loop
if not Is_Called (Inlined.Table (Index).Name) then
+
-- This means that Add_Inlined_Body added the subprogram to the
-- table but wasn't able to handle its code unit. Do nothing.
Inlined.Table (Index).Processed := True;
+
elsif Inlined.Table (Index).Main_Call then
Pending_Inlined.Increment_Last;
Pending_Inlined.Table (Pending_Inlined.Last) := Index;
Inlined.Table (Index).Processed := True;
+
else
Set_Is_Called (Inlined.Table (Index).Name, False);
end if;
@@ -967,10 +970,12 @@ package body Inline is
function Get_Code_Unit_Entity (E : Entity_Id) return Entity_Id is
Unit : Entity_Id := Cunit_Entity (Get_Code_Unit (E));
+
begin
if Ekind (Unit) = E_Package_Body then
Unit := Spec_Entity (Unit);
end if;
+
return Unit;
end Get_Code_Unit_Entity;
@@ -1003,6 +1008,28 @@ package body Inline is
return False;
end Has_Initialized_Type;
+ -----------------------------
+ -- In_Main_Unit_Or_Subunit --
+ -----------------------------
+
+ function In_Main_Unit_Or_Subunit (E : Entity_Id) return Boolean is
+ Comp : Node_Id := Cunit (Get_Code_Unit (E));
+
+ begin
+ -- Check whether the subprogram or package to inline is within the main
+ -- unit or its spec or within a subunit. In either case there are no
+ -- additional bodies to process. If the subprogram appears in a parent
+ -- of the current unit, the check on whether inlining is possible is
+ -- done in Analyze_Inlined_Bodies.
+
+ while Nkind (Unit (Comp)) = N_Subunit loop
+ Comp := Library_Unit (Comp);
+ end loop;
+
+ return Comp = Cunit (Main_Unit)
+ or else Comp = Library_Unit (Cunit (Main_Unit));
+ end In_Main_Unit_Or_Subunit;
+
----------------
-- Initialize --
----------------
@@ -1037,7 +1064,6 @@ package body Inline is
begin
if Serious_Errors_Detected = 0 then
-
Expander_Active := (Operating_Mode = Opt.Generate_Code);
Push_Scope (Standard_Standard);
To_Clean := New_Elmt_List;
@@ -1156,27 +1182,4 @@ package body Inline is
end loop;
end Remove_Dead_Instance;
- -----------------------------
- -- In_Main_Unit_Or_Subunit --
- -----------------------------
-
- function In_Main_Unit_Or_Subunit (E : Entity_Id) return Boolean is
- Comp : Node_Id := Cunit (Get_Code_Unit (E));
-
- begin
- -- Check whether the subprogram or package to inline is within the main
- -- unit or its spec or within a subunit. In either case there are no
- -- additional bodies to process. If the subprogram appears in a parent
- -- of the current unit, the check on whether inlining is possible is
- -- done in Analyze_Inlined_Bodies.
-
- while Nkind (Unit (Comp)) = N_Subunit loop
- Comp := Library_Unit (Comp);
- end loop;
-
- return
- Comp = Cunit (Main_Unit)
- or else Comp = Library_Unit (Cunit (Main_Unit));
- end In_Main_Unit_Or_Subunit;
-
end Inline;
diff --git a/gcc/ada/prj-env.adb b/gcc/ada/prj-env.adb
index ae0fd18..dac6512 100644
--- a/gcc/ada/prj-env.adb
+++ b/gcc/ada/prj-env.adb
@@ -754,7 +754,7 @@ package body Prj.Env is
exit when Data = No_Source;
if Data.Unit /= No_Unit_Index then
- if Data.Locally_Removed and then (not Data.Suppressed) then
+ if Data.Locally_Removed and then not Data.Suppressed then
Fmap.Add_Forbidden_File_Name (Data.File);
else
Fmap.Add_To_File_Map
@@ -829,7 +829,7 @@ package body Prj.Env is
Source := Prj.Element (Iter);
exit when Source = No_Source;
- if (not Source.Suppressed)
+ if not Source.Suppressed
and then Source.Replaced_By = No_Source
and then Source.Path.Name /= No_Path
and then (Source.Language.Config.Kind = File_Based
diff --git a/gcc/ada/prj.ads b/gcc/ada/prj.ads
index 93e0664..b0d7666 100644
--- a/gcc/ada/prj.ads
+++ b/gcc/ada/prj.ads
@@ -788,8 +788,7 @@ package Prj is
-- These sources should not be put in the mapping file.
Replaced_By : Source_Id := No_Source;
- -- Indicate the source in an extending project that replaces the current
- -- source.
+ -- Source in an extending project that replaces the current source
File : File_Name_Type := No_File;
-- Canonical file name of the source
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 3334d1d..11239f8 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -2991,8 +2991,8 @@ package body Sem_Ch10 is
-- with_clause on a child unit implies that the implicit with on the
-- parent is also private.
- if Nkind_In
- (Unit (N), N_Package_Declaration, N_Generic_Package_Declaration)
+ if Nkind_In (Unit (N), N_Package_Declaration,
+ N_Generic_Package_Declaration)
then
Set_Private_Present (Withn, Private_Present (Item));
end if;
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 2b27ca4..a2868a9 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -6072,7 +6072,6 @@ package body Sem_Ch6 is
begin
while Present (Old_Discr) and then Present (New_Discr) loop
-
New_Discr_Id := Defining_Identifier (New_Discr);
-- The subtype mark of the discriminant on the full type has not
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 522ea3c..bf245f0 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -3172,12 +3172,13 @@ package body Sem_Util is
function Enclosing_Lib_Unit_Entity
(E : Entity_Id := Current_Scope) return Entity_Id
is
- Unit_Entity : Entity_Id := E;
+ Unit_Entity : Entity_Id;
begin
-- Look for enclosing library unit entity by following scope links.
-- Equivalent to, but faster than indexing through the scope stack.
+ Unit_Entity := E;
while (Present (Scope (Unit_Entity))
and then Scope (Unit_Entity) /= Standard_Standard)
and not Is_Child_Unit (Unit_Entity)
diff --git a/gcc/ada/uintp.adb b/gcc/ada/uintp.adb
index 1afd8b8..fe8624d 100644
--- a/gcc/ada/uintp.adb
+++ b/gcc/ada/uintp.adb
@@ -370,9 +370,12 @@ package body Uintp is
H : constant array (Int range 0 .. 15) of Character :=
"0123456789ABCDEF";
+ Q, R : Uint;
begin
- if U >= Base then
- Image_Uint (U / Base);
+ UI_Div_Rem (U, Base, Q, R);
+
+ if Q > Uint_0 then
+ Image_Uint (Q);
end if;
if Digs_Output = 4 and then Base = Uint_16 then
@@ -380,7 +383,7 @@ package body Uintp is
Digs_Output := 0;
end if;
- Image_Char (H (UI_To_Int (U rem Base)));
+ Image_Char (H (UI_To_Int (R)));
Digs_Output := Digs_Output + 1;
end Image_Uint;
@@ -2383,8 +2386,8 @@ package body Uintp is
-- Special cases when Right is less than 13 and Left is larger
-- larger than one digit. All of these algorithms depend on the
- -- base being 2 ** 15 We work with Abs (Left) and Abs(Right)
- -- then multiply result by Sign (Left)
+ -- base being 2 ** 15. We work with Abs (Left) and Abs(Right)
+ -- then multiply result by Sign (Left).
if (Right <= Uint_12) and then (Right >= Uint_Minus_12) then
@@ -2394,7 +2397,7 @@ package body Uintp is
Sign := 1;
end if;
- -- All cases are listed, grouped by mathematical method It is
+ -- All cases are listed, grouped by mathematical method. It is
-- not inefficient to do have this case list out of order since
-- GCC sorts the cases we list.
@@ -2403,9 +2406,10 @@ package body Uintp is
when 1 =>
return Uint_0;
- -- Powers of two are simple AND's with LS Left Digit GCC
- -- will recognise these constants as powers of 2 and replace
- -- the rem with simpler operations where possible.
+ -- Powers of two are simple AND's with the least significant
+ -- digit of Left. GCC will recognise these constants as
+ -- powers of 2 and replace the rem with simpler operations
+ -- where possible.
-- Least_Sig_Digit might return Negative numbers
@@ -2426,7 +2430,7 @@ package body Uintp is
-- If B Rem Right = 1 then
-- Left Rem Right = Sum_Of_Digits_Base_B (Left) Rem Right
- -- Note: 2^32 mod 3 = 1
+ -- Note: 2^30 mod 3 = 1
when 3 =>
return UI_From_Int (
@@ -2438,7 +2442,7 @@ package body Uintp is
return UI_From_Int (
Sign * (Sum_Digits (Left, 1) rem Int (7)));
- -- Note: 2^32 mod 5 = -1
+ -- Note: 2^30 mod 5 = -1
-- Alternating sums might be negative, but rem is always
-- positive hence we must use mod here.
@@ -2483,7 +2487,7 @@ package body Uintp is
-- (M1 mod m1) = (M2 mod m2) = 1 AND
-- (M1 mod m2) = (M2 mod m1) = 0
- -- So u mod m = (u1 * M1 + u2 * M2) mod m Where u1 = (u mod
+ -- So u mod m = (u1 * M1 + u2 * M2) mod m where u1 = (u mod
-- m1) AND u2 = (u mod m2); Under typical circumstances the
-- last mod m can be done with a (possible) single
-- subtraction.
diff --git a/gcc/ada/vms_data.ads b/gcc/ada/vms_data.ads
index 1ebe8d3..e438f84 100644
--- a/gcc/ada/vms_data.ads
+++ b/gcc/ada/vms_data.ads
@@ -1779,9 +1779,12 @@ package VMS_Data is
-- Causes errors to be displayed as soon as they are encountered, rather
-- than after compilation is terminated. If GNAT terminates prematurely
-- or goes into an infinite loop, the last error message displayed may
- -- help to pinpoint the culprit. Use with caution: This qualifier is
- -- intended for use in debugging the compiler proper, and may cause
- -- output of warnings suppressed by pragma.
+ -- help to pinpoint the culprit.
+ --
+ -- Note that this qualifier is intended only for helping to diagnose
+ -- illegal programs when the compiler fails. It disconnects many of the
+ -- normal handling procedures for error messages, and may for example
+ -- cause malfunction of pragma Warnings.
S_GCC_Inline : aliased constant S := "/INLINE=" &
"PRAGMA " &