aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2018-07-16 14:11:37 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2018-07-16 14:11:37 +0000
commit1d6c2060053f0a3adc3a43831539f2f7bb9ce44e (patch)
treed10bcffdc0c02446ceb4714f91f790ef374485fe
parentbf6ff5e5f5f45d28548d12e0cb8178b4c8903d37 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/ada/sem.adb10
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;