From a1d7228158d344b16ef9baf8c8ed7a27649fc410 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 26 Sep 2011 08:37:32 +0000 Subject: [PATCH] sem_ch6.adb (Set_Formal_Mode): Set Can_Never_Be_Null on an IN or IN OUT formal parameter which is of an... * sem_ch6.adb (Set_Formal_Mode): Set Can_Never_Be_Null on an IN or IN OUT formal parameter which is of an null-exclusion access subtype. Co-Authored-By: Robert Dewar From-SVN: r179183 --- gcc/ada/ChangeLog | 6 ++++++ gcc/ada/sem_ch6.adb | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 47842198be6..b747f8ab2df 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2011-09-26 Eric Botcazou + Robert Dewar + + * sem_ch6.adb (Set_Formal_Mode): Set Can_Never_Be_Null on an IN or IN + OUT formal parameter which is of an null-exclusion access subtype. + 2011-09-26 Eric Botcazou * gcc-interface/ada-tree.h (DECL_CAN_NEVER_BE_NULL_P): New macro. diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb index b2a046bb4f8..a9a45bc6445 100644 --- a/gcc/ada/sem_ch6.adb +++ b/gcc/ada/sem_ch6.adb @@ -10267,6 +10267,16 @@ package body Sem_Ch6 is and then Can_Never_Be_Null (Etype (Formal_Id)) then Set_Is_Known_Non_Null (Formal_Id); + + -- We can also set Can_Never_Be_Null (thus preventing some junk + -- access checks) for the case of an IN parameter, which cannot + -- be changed, or for an IN OUT parameter, which can be changed but + -- not to a null value. But for an OUT parameter, the initial value + -- passed in can be null, so we can't set this flag in that case. + + if Ekind (Formal_Id) /= E_Out_Parameter then + Set_Can_Never_Be_Null (Formal_Id); + end if; end if; Set_Mechanism (Formal_Id, Default_Mechanism); -- 2.30.2