Commit b90cfacd by Hristian Kirtchev Committed by Arnaud Charlet

restrict.adb, [...]: Remove redundant type conversion.

2007-08-31  Hristian Kirtchev  <kirtchev@adacore.com>

        * restrict.adb, namet.adb, par-util.adb: Remove redundant type
	conversion.

	* sem_res.adb (Resolve_Qualified_Expression): Add machinery to detect
	simple redundant qualifications. The check is performed whenever the
	expression is a non-overloaded identifier.
	(Resolve_Type_Conversion): Enchance the redundant type conversion check
	to include loop parameters.
	(Valid_Conversion): Avoid generation of spurious error message.

From-SVN: r127976
parent 05af427c
......@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
-- Copyright (C) 1992-2007, 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- --
......@@ -149,7 +149,7 @@ package body Namet is
else
Write_Str ("Hash_Table (");
Write_Int (Int (J));
Write_Int (J);
Write_Str (") has ");
declare
......
......@@ -61,7 +61,7 @@ package body Util is
end if;
for J in S'Range loop
S (J) := Fold_Lower (Tname (Integer (J) + 4));
S (J) := Fold_Lower (Tname (J + 4));
end loop;
Get_Name_String (Token_Name);
......
......@@ -99,7 +99,7 @@ package body Restrict is
and then not Suppress_Restriction_Message (N)
then
Namet.Unlock;
Check_Restriction (Restriction_Id'(No_Elaboration_Code), N);
Check_Restriction (No_Elaboration_Code, N);
Namet.Lock;
end if;
end Check_Elaboration_Code_Allowed;
......@@ -110,7 +110,7 @@ package body Restrict is
procedure Check_No_Implicit_Heap_Alloc (N : Node_Id) is
begin
Check_Restriction (Restriction_Id'(No_Implicit_Heap_Allocations), N);
Check_Restriction (No_Implicit_Heap_Allocations, N);
end Check_No_Implicit_Heap_Alloc;
---------------------------
......
......@@ -7582,10 +7582,15 @@ package body Sem_Res is
end if;
if Is_Entity_Name (Orig_N)
and then Etype (Entity (Orig_N)) = Orig_T
and then
(Etype (Entity (Orig_N)) = Orig_T
or else
(Ekind (Entity (Orig_N)) = E_Loop_Parameter
and then Covers (Orig_T, Etype (Entity (Orig_N)))))
then
Error_Msg_Node_2 := Orig_T;
Error_Msg_NE
("?useless conversion, & has this type!", N, Entity (Orig_N));
("?redundant conversion, & is of type &!", N, Entity (Orig_N));
end if;
end if;
......@@ -8803,9 +8808,14 @@ package body Sem_Res is
("\?Program_Error will be raised at run time", Operand);
else
-- Avoid generation of spurious error message
if not Error_Posted (N) then
Error_Msg_N
("cannot convert local pointer to non-local access type",
Operand);
end if;
return False;
end if;
......
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