diff options
author | Bob Duff <duff@adacore.com> | 2019-07-03 08:15:28 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-07-03 08:15:28 +0000 |
commit | e08a896b96792d73293db82d0dc3541c17e545ad (patch) | |
tree | 873033257e40845a247e50b2c395a10f182c897b /gcc/ada | |
parent | 07fb741a3672a677a48a2672345d2dd67f944fad (diff) | |
download | gcc-e08a896b96792d73293db82d0dc3541c17e545ad.zip gcc-e08a896b96792d73293db82d0dc3541c17e545ad.tar.gz gcc-e08a896b96792d73293db82d0dc3541c17e545ad.tar.bz2 |
[Ada] Improve warnings about infinite loops
The compiler now has fewer false alarms when warning about infinite
loops. For example, a loop of the form "for X of A ...", where A is an
array, cannot be infinite. The compiler no longer warns in this case.
2019-07-03 Bob Duff <duff@adacore.com>
gcc/ada/
* sem_warn.adb (Check_Infinite_Loop_Warning): Avoid the warning
if an Iterator_Specification is present.
gcc/testsuite/
* gnat.dg/warn20.adb, gnat.dg/warn20_pkg.adb,
gnat.dg/warn20_pkg.ads: New testcase.
From-SVN: r272978
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/sem_warn.adb | 13 |
2 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index dd14590..02f35d5 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 2019-07-03 Bob Duff <duff@adacore.com> + * sem_warn.adb (Check_Infinite_Loop_Warning): Avoid the warning + if an Iterator_Specification is present. + +2019-07-03 Bob Duff <duff@adacore.com> + * doc/gnat_ugn/gnat_utility_programs.rst: Document default new-line behavior. diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index dda94d2..7e13aa5 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -632,9 +632,16 @@ package body Sem_Warn is Expression := Condition (Iter); - -- For iteration, do not process, since loop will always terminate - - elsif Present (Loop_Parameter_Specification (Iter)) then + -- For Loop_Parameter_Specification, do not process, since loop + -- will always terminate. For Iterator_Specification, also do not + -- process. Either it will always terminate (e.g. "for X of + -- Some_Array ..."), or we can't tell if it's going to terminate + -- without looking at the iterator, so any warning here would be + -- noise. + + elsif Present (Loop_Parameter_Specification (Iter)) + or else Present (Iterator_Specification (Iter)) + then return; end if; end if; |