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:
parent
c3b36d484f
commit
4a13695ca1
@ -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;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user