From: Eric Botcazou Date: Mon, 6 Jun 2016 09:31:13 +0000 (+0000) Subject: trans.c (gnat_to_gnu): Rework special code dealing with boolean rvalues and set the... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f1ff07ec096c3b59ef3d883e00dd4a840314eaf8;p=gcc.git 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0370cd112ee..a958655efe3 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2016-06-06 Eric Botcazou + + * 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 * gcc-interface/decl.c (gnat_to_gnu_entity) : Remove diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index c8f125b5547..d0071d39e55 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -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)); - - /* 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)) + { + 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 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; }