]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Fix latent bug in set_end_locus_from_node
authorBob Duff <duff@adacore.com>
Wed, 11 Aug 2021 11:44:31 +0000 (07:44 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 5 Oct 2021 08:20:08 +0000 (08:20 +0000)
gcc/ada/

* gcc-interface/trans.c (set_end_locus_from_node): Check that
Handled_Statement_Sequence is not Empty before calling
End_Label, because the Empty node has no End_Label, and
depending on the exact node layout chosen by gen_il, calling
End_Label might crash, or might work OK by accident.

gcc/ada/gcc-interface/trans.c

index 158bfe35f7b8efb35c9e6541d130e15dff28016b..4aaa567237c4af85dfca2d1c34ad019815c8e3e4 100644 (file)
@@ -10507,10 +10507,15 @@ set_end_locus_from_node (tree gnu_node, Node_Id gnat_node)
     case N_Package_Body:
     case N_Subprogram_Body:
     case N_Block_Statement:
-      gnat_end_label = End_Label (Handled_Statement_Sequence (gnat_node));
+      if (Present (Handled_Statement_Sequence (gnat_node)))
+       gnat_end_label = End_Label (Handled_Statement_Sequence (gnat_node));
+      else
+       gnat_end_label = Empty;
+
       break;
 
     case N_Package_Declaration:
+      gcc_checking_assert (Present (Specification (gnat_node)));
       gnat_end_label = End_Label (Specification (gnat_node));
       break;