This exports End_Location from sinfo and uses it in gigi, instead of redoing
the computation locally.
Tested on x86_64-suse-linux, applied on the mainline.
2014-05-18 Eric Botcazou <ebotca...@adacore.com>
* fe.h (Set_Present_Expr): Move around.
(End_Location): New macro.
* gcc-interface/trans.c (Case_Statement_to_gnu): Use End_Location.
--
Eric Botcazou
Index: fe.h
===================================================================
--- fe.h (revision 210579)
+++ fe.h (working copy)
@@ -56,8 +56,7 @@ extern char Fold_Lower[], Fold_Upper[];
extern Boolean Debug_Flag_NN;
/* einfo: We will be setting Esize for types, Component_Bit_Offset for fields,
- Alignment for types and objects, Component_Size for array types, and
- Present_Expr for N_Variant nodes. */
+ Alignment for types and objects, Component_Size for array types. */
#define Set_Alignment einfo__set_alignment
#define Set_Component_Bit_Offset einfo__set_component_bit_offset
@@ -65,7 +64,6 @@ extern Boolean Debug_Flag_NN;
#define Set_Esize einfo__set_esize
#define Set_Mechanism einfo__set_mechanism
#define Set_RM_Size einfo__set_rm_size
-#define Set_Present_Expr sinfo__set_present_expr
extern void Set_Alignment (Entity_Id, Uint);
extern void Set_Component_Bit_Offset (Entity_Id, Uint);
@@ -73,7 +71,6 @@ extern void Set_Component_Size (Entity_
extern void Set_Esize (Entity_Id, Uint);
extern void Set_Mechanism (Entity_Id, Mechanism_Type);
extern void Set_RM_Size (Entity_Id, Uint);
-extern void Set_Present_Expr (Node_Id, Uint);
#define Is_Entity_Name einfo__is_entity_name
extern Boolean Is_Entity_Name (Node_Id);
@@ -253,11 +250,15 @@ extern Node_Id First_Actual (Node_Id);
extern Node_Id Next_Actual (Node_Id);
extern Boolean Requires_Transient_Scope (Entity_Id);
-/* sinfo: These functions aren't in sinfo.h since we don't make the
- setting functions, just the retrieval functions. */
+/* sinfo: */
-#define Set_Has_No_Elaboration_Code sinfo__set_has_no_elaboration_code
+#define End_Location sinfo__end_location
+#define Set_Has_No_Elaboration_Code sinfo__set_has_no_elaboration_code
+#define Set_Present_Expr sinfo__set_present_expr
+
+extern Source_Ptr End_Location (Node_Id);
extern void Set_Has_No_Elaboration_Code (Node_Id, Boolean);
+extern void Set_Present_Expr (Node_Id, Uint);
/* targparm: */
Index: gcc-interface/trans.c
===================================================================
--- gcc-interface/trans.c (revision 210585)
+++ gcc-interface/trans.c (working copy)
@@ -2384,8 +2384,7 @@ Case_Statement_to_gnu (Node_Id gnat_node
/* We build a SWITCH_EXPR that contains the code with interspersed
CASE_LABEL_EXPRs for each label. */
- if (!Sloc_to_locus (Sloc (gnat_node) + UI_To_Int (End_Span (gnat_node)),
- &end_locus))
+ if (!Sloc_to_locus (End_Location (gnat_node), &end_locus))
end_locus = input_location;
gnu_label = create_artificial_label (end_locus);
start_stmt_group ();