diff options
Diffstat (limited to 'gcc/ada/par-ch4.adb')
-rw-r--r-- | gcc/ada/par-ch4.adb | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb index 0334034..b56c8b0 100644 --- a/gcc/ada/par-ch4.adb +++ b/gcc/ada/par-ch4.adb @@ -2328,19 +2328,35 @@ package body Ch4 is -- Error recovery: can raise Error_Resync function P_Allocator return Node_Id is - Alloc_Node : Node_Id; - Type_Node : Node_Id; + Alloc_Node : Node_Id; + Type_Node : Node_Id; + Null_Exclusion_Present : Boolean; begin Alloc_Node := New_Node (N_Allocator, Token_Ptr); T_New; + + -- Scan Null_Exclusion if present (Ada 0Y (AI-231)) + + if Extensions_Allowed then + Null_Exclusion_Present := P_Null_Exclusion; + Set_Null_Exclusion_Present (Alloc_Node, Null_Exclusion_Present); + + -- If Ada 95, null exclusion never present + + else + Null_Exclusion_Present := False; + end if; + Type_Node := P_Subtype_Mark_Resync; if Token = Tok_Apostrophe then Scan; -- past apostrophe Set_Expression (Alloc_Node, P_Qualified_Expression (Type_Node)); else - Set_Expression (Alloc_Node, P_Subtype_Indication (Type_Node)); + Set_Expression + (Alloc_Node, + P_Subtype_Indication (Type_Node, Null_Exclusion_Present)); end if; return Alloc_Node; |