From f9e5da46f7708d7eaf5a080e51dd6d5553bdf37a Mon Sep 17 00:00:00 2001 From: Hristian Kirtchev Date: Thu, 11 Jul 2019 08:02:07 +0000 Subject: [Ada] Infinite loop on illegal declaration This patch updates predicate Null_Status to prevent an infinite recursion when the argument is an illegal object declaration of an access type. 2019-07-11 Hristian Kirtchev gcc/ada/ * sem_util.adb (Null_Status): Assume that an erroneous construct has an undefined null status. gcc/testsuite/ * gnat.dg/self_ref1.adb: New testcase. From-SVN: r273389 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/sem_util.adb | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'gcc/ada') diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a17ab7e..0a1bd24 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,10 @@ 2019-07-11 Hristian Kirtchev + * sem_util.adb (Null_Status): Assume that an erroneous construct + has an undefined null status. + +2019-07-11 Hristian Kirtchev + * checks.adb, exp_ch6.adb, gnat1drv.adb, sem_aux.adb, sem_ch2.adb, sem_ch8.adb, sem_res.adb: Minor reformatting. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 147c281..04d981a6 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -22367,9 +22367,15 @@ package body Sem_Util is -- Start of processing for Null_Status begin + -- Prevent cascaded errors or infinite loops when trying to determine + -- the null status of an erroneous construct. + + if Error_Posted (N) then + return Unknown; + -- An allocator always creates a non-null value - if Nkind (N) = N_Allocator then + elsif Nkind (N) = N_Allocator then return Is_Non_Null; -- Taking the 'Access of something yields a non-null value -- cgit v1.1