From: Arnaud Charlet Date: Wed, 15 Apr 2009 12:52:48 +0000 (+0200) Subject: [multiple changes] X-Git-Tag: releases/gcc-4.5.0~6589 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4a13695ca1f5a81aa054ff52e15705b88016bd17;p=thirdparty%2Fgcc.git [multiple changes] 2009-04-15 Bob Duff * 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 * sem_ch6.adb: Minor reformatting From-SVN: r146111 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ff19f3ac8bcf..48eac4e06e5c 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,21 @@ +2009-04-15 Bob Duff + + * 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 + + * sem_ch6.adb: Minor reformatting + 2009-04-15 Hristian Kirtchev * exp_ch7.adb (Expand_Ctrl_Function_Call): Check for the case where the diff --git a/gcc/ada/gnat_rm.texi b/gcc/ada/gnat_rm.texi index adb319341f47..fe463550ae18 100644 --- a/gcc/ada/gnat_rm.texi +++ b/gcc/ada/gnat_rm.texi @@ -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 diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index 6a387d6fc31e..dab987174cea 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -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. diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index 23ed091c2749..576f9cd45b86 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -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 diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index 29a850a6e0a1..2724255540b6 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -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;