diff options
author | Piotr Trojanek <trojanek@adacore.com> | 2018-07-16 14:11:37 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2018-07-16 14:11:37 +0000 |
commit | 1d6c2060053f0a3adc3a43831539f2f7bb9ce44e (patch) | |
tree | d10bcffdc0c02446ceb4714f91f790ef374485fe | |
parent | bf6ff5e5f5f45d28548d12e0cb8178b4c8903d37 (diff) | |
download | gcc-1d6c2060053f0a3adc3a43831539f2f7bb9ce44e.zip gcc-1d6c2060053f0a3adc3a43831539f2f7bb9ce44e.tar.gz gcc-1d6c2060053f0a3adc3a43831539f2f7bb9ce44e.tar.bz2 |
[Ada] Avoid crash when traversing units with -gnatd.WW debug switch
The debug switch -gnatd.WW enables extra info when traversing library units
with Walk_Library_Items, which is used in the CodePeer and GNATprove. This
routine was crashing when trying to print info about a unit with configuration
pragmas (typically an .adc file). Now fixed.
No test, as the crash only happens when a GNATprove backend is manually called
with -gnatd.WW switch. Frontend is not affected.
2018-07-16 Piotr Trojanek <trojanek@adacore.com>
gcc/ada/
* sem.adb (Walk_Library_Items): Skip units with configuration pragmas
when printing debug info.
From-SVN: r262720
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/sem.adb | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 02bb422..f3c32e1 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 2018-07-16 Piotr Trojanek <trojanek@adacore.com> + * sem.adb (Walk_Library_Items): Skip units with configuration pragmas + when printing debug info. + +2018-07-16 Piotr Trojanek <trojanek@adacore.com> + * sem.adb (Walk_Library_Items): Reuse local constant. (Is_Subunit_Of_Main): Turn condition to positive and flip the IF-THEN-ELSE branches; avoid potentially ineffective assignment to the diff --git a/gcc/ada/sem.adb b/gcc/ada/sem.adb index 2f2f846..b80dfcf 100644 --- a/gcc/ada/sem.adb +++ b/gcc/ada/sem.adb @@ -2242,8 +2242,14 @@ package body Sem is for Unit_Num in Done'Range loop if not Done (Unit_Num) then - Write_Unit_Info - (Unit_Num, Unit (Cunit (Unit_Num)), Withs => True); + + -- Units with configuration pragmas (.ads files) have empty + -- compilation-unit nodes; skip printing info about them. + + if Present (Cunit (Unit_Num)) then + Write_Unit_Info + (Unit_Num, Unit (Cunit (Unit_Num)), Withs => True); + end if; end if; end loop; |