]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Wed, 15 Apr 2009 12:52:48 +0000 (14:52 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 15 Apr 2009 12:52:48 +0000 (14:52 +0200)
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

gcc/ada/ChangeLog
gcc/ada/gnat_rm.texi
gcc/ada/sem_ch5.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_warn.adb

index ff19f3ac8bcfdb9a8164b258bfd83c8240b60b58..48eac4e06e5cd681612e2de063451b3867039878 100644 (file)
@@ -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
index adb319341f47dd92d41cbc13ba7a9f8a9e830f50..fe463550ae181e2777bdf4c14f9a8b19c52a90cb 100644 (file)
@@ -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
index 6a387d6fc31e9459af78b8cb07521ee41ca0e4aa..dab987174cea2f0a2c3e710b1687afae8d013c43 100644 (file)
@@ -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.
index 23ed091c2749bc8172f821b4fb68c7c192bce9fb..576f9cd45b86652e87296d2996656f8282426387 100644 (file)
@@ -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
index 29a850a6e0a123e20ecff3c9b50f44ea6e0453c3..2724255540b6ca3da93ba896611f5f6cf0c3fe48 100644 (file)
@@ -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;