2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-18 11:40:54 +08:00

[multiple changes]

2009-04-15  Bob Duff  <duff@adacore.com>

	* sem_ch5.adb (Analyze_Loop_Statement): Don't check for infinite loop
	warnings unless the loop comes from source, because checking generated
	loops is a waste of time, and makes it harder to debug
	Check_Infinite_Loop_Warning.

	* sem_warn.adb (Check_Infinite_Loop_Warning): If the local variable
	tested in the while loop is a renaming, do not warn. Otherwise, we get
	false alarms, because it's usually renaming something that we can't
	deal with (an indexed component, a global variable, ...).

	* gnat_rm.texi: Fix typo

2009-04-15  Thomas Quinot  <quinot@adacore.com>

	* sem_ch6.adb: Minor reformatting

From-SVN: r146111
This commit is contained in:
Arnaud Charlet 2009-04-15 14:52:48 +02:00
parent c3b36d484f
commit 4a13695ca1
5 changed files with 37 additions and 14 deletions

@ -1,3 +1,21 @@
2009-04-15 Bob Duff <duff@adacore.com>
* sem_ch5.adb (Analyze_Loop_Statement): Don't check for infinite loop
warnings unless the loop comes from source, because checking generated
loops is a waste of time, and makes it harder to debug
Check_Infinite_Loop_Warning.
* sem_warn.adb (Check_Infinite_Loop_Warning): If the local variable
tested in the while loop is a renaming, do not warn. Otherwise, we get
false alarms, because it's usually renaming something that we can't
deal with (an indexed component, a global variable, ...).
* gnat_rm.texi: Fix typo
2009-04-15 Thomas Quinot <quinot@adacore.com>
* sem_ch6.adb: Minor reformatting
2009-04-15 Hristian Kirtchev <kirtchev@adacore.com>
* exp_ch7.adb (Expand_Ctrl_Function_Call): Check for the case where the

@ -5189,9 +5189,9 @@ also be used as a configuration pragma.
The fourth form, with an On|Off parameter and a string, is used to
control individual messages, based on their text. The string argument
is a pattern that is used to match against the text of individual
warning messages (not including the initial "warnings: " tag).
warning messages (not including the initial "warning: " tag).
The pattern may contain asterisks which match zero or more characters in
The pattern may contain asterisks, which match zero or more characters in
the message. For example, you can use
@code{pragma Warnings (Off, "*bits of*unused")} to suppress the warning
message @code{warning: 960 bits of "a" unused}. No other regular

@ -2031,7 +2031,12 @@ package body Sem_Ch5 is
Process_End_Label (Loop_Statement, 'e', Ent);
End_Scope;
Kill_Current_Values;
Check_Infinite_Loop_Warning (N);
-- No point in checking for warnings in code we generated
if Comes_From_Source (N) then
Check_Infinite_Loop_Warning (N);
end if;
-- Code after loop is unreachable if the loop has no WHILE or FOR
-- and contains no EXIT statements within the body of the loop.

@ -3954,9 +3954,9 @@ package body Sem_Ch6 is
procedure Possible_Freeze (T : Entity_Id);
-- T is the type of either a formal parameter or of the return type.
-- If T is not yet frozen and needs a delayed freeze, then the
-- subprogram itself must be delayed. If T is the limited view of
-- of an incomplete type the subprogram must be frozen as well,
-- because T may depend on local types that have not been frozen yet.
-- subprogram itself must be delayed. If T is the limited view of an
-- incomplete type the subprogram must be frozen as well, because
-- T may depend on local types that have not been frozen yet.
---------------------
-- Possible_Freeze --
@ -3964,9 +3964,7 @@ package body Sem_Ch6 is
procedure Possible_Freeze (T : Entity_Id) is
begin
if Has_Delayed_Freeze (T)
and then not Is_Frozen (T)
then
if Has_Delayed_Freeze (T) and then not Is_Frozen (T) then
Set_Has_Delayed_Freeze (Designator);
elsif Is_Access_Type (T)
@ -3975,11 +3973,10 @@ package body Sem_Ch6 is
then
Set_Has_Delayed_Freeze (Designator);
elsif Ekind (T) = E_Incomplete_Type
and then From_With_Type (T)
then
elsif Ekind (T) = E_Incomplete_Type and then From_With_Type (T) then
Set_Has_Delayed_Freeze (Designator);
end if;
end Possible_Freeze;
-- Start of processing for Check_Delayed_Subprogram

@ -541,7 +541,7 @@ package body Sem_Warn is
-- Start of processing for Check_Infinite_Loop_Warning
begin
-- We need a while iteration with no condition actions. Conditions
-- We need a while iteration with no condition actions. Condition
-- actions just make things too complicated to get the warning right.
if No (Iter)
@ -556,12 +556,15 @@ package body Sem_Warn is
Find_Var (Condition (Iter));
-- Nothing to do if local variable from source not found
-- Nothing to do if local variable from source not found. If it's a
-- renaming, it is probably renaming something too complicated to deal
-- with here.
if No (Var)
or else Ekind (Var) /= E_Variable
or else Is_Library_Level_Entity (Var)
or else not Comes_From_Source (Var)
or else Nkind (Parent (Var)) = N_Object_Renaming_Declaration
then
return;