trans.c (gnat_to_gnu): Rework special code dealing with boolean rvalues and set the location directly.

* gcc-interface/trans.c (gnat_to_gnu): Rework special code dealing
	with boolean rvalues and set the location directly.  Do not set the
	location in the other cases for a simple name.
	(gnat_to_gnu_external): Clear the location on the expression.

From-SVN: r237123
This commit is contained in:
Eric Botcazou 2016-06-06 09:31:13 +00:00 committed by Eric Botcazou
parent d5ebeb8c1b
commit f1ff07ec09
2 changed files with 26 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2016-06-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (gnat_to_gnu): Rework special code dealing
with boolean rvalues and set the location directly. Do not set the
location in the other cases for a simple name.
(gnat_to_gnu_external): Clear the location on the expression.
2016-06-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_Component>: Remove

View File

@ -7686,10 +7686,11 @@ gnat_to_gnu (Node_Id gnat_node)
current_function_decl = NULL_TREE;
/* When not optimizing, turn boolean rvalues B into B != false tests
so that the code just below can put the location information of the
reference to B on the inequality operator for better debug info. */
so that we can put the location information of the reference to B on
the inequality operator for better debug info. */
if (!optimize
&& TREE_CODE (gnu_result) != INTEGER_CST
&& TREE_CODE (gnu_result) != TYPE_DECL
&& (kind == N_Identifier
|| kind == N_Expanded_Name
|| kind == N_Explicit_Dereference
@ -7698,15 +7699,19 @@ gnat_to_gnu (Node_Id gnat_node)
|| kind == N_Selected_Component)
&& TREE_CODE (get_base_type (gnu_result_type)) == BOOLEAN_TYPE
&& !lvalue_required_p (gnat_node, gnu_result_type, false, false, false))
gnu_result = build_binary_op (NE_EXPR, gnu_result_type,
convert (gnu_result_type, gnu_result),
convert (gnu_result_type,
boolean_false_node));
{
gnu_result
= build_binary_op (NE_EXPR, gnu_result_type,
convert (gnu_result_type, gnu_result),
convert (gnu_result_type, boolean_false_node));
if (TREE_CODE (gnu_result) != INTEGER_CST)
set_gnu_expr_location_from_node (gnu_result, gnat_node);
}
/* Set the location information on the result. Note that we may have
no result if we tried to build a CALL_EXPR node to a procedure with
no side-effects and optimization is enabled. */
if (gnu_result && EXPR_P (gnu_result))
/* Set the location information on the result if it's not a simple name.
Note that we may have no result if we tried to build a CALL_EXPR node
to a procedure with no side-effects and optimization is enabled. */
else if (kind != N_Identifier && gnu_result && EXPR_P (gnu_result))
set_gnu_expr_location_from_node (gnu_result, gnat_node);
/* If we're supposed to return something of void_type, it means we have
@ -7858,6 +7863,10 @@ gnat_to_gnu_external (Node_Id gnat_node)
if (went_into_elab_proc)
current_function_decl = NULL_TREE;
/* Do not import locations from external units. */
if (gnu_result && EXPR_P (gnu_result))
SET_EXPR_LOCATION (gnu_result, UNKNOWN_LOCATION);
return gnu_result;
}