From: Eric Botcazou Date: Sat, 20 Sep 2008 10:29:08 +0000 (+0000) Subject: exp_dbug.ads: Document new convention for the XVZ variable. X-Git-Tag: releases/gcc-4.4.0~2353 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7fda15966e1c2f6613cef8c30c26cc05dba2e590;p=thirdparty%2Fgcc.git exp_dbug.ads: Document new convention for the XVZ variable. * exp_dbug.ads: Document new convention for the XVZ variable. * gcc-interface/decl.c (gnat_to_gnu_entity) : Generate debug info if necessary for the type padding the component type. : Likewise. (maybe_pad_type): Emit the XVZ variable in units. * gcc-interface/trans.c (Loop_Statement_to_gnu): Fix formatting nits. (Subprogram_Body_to_gnu): Set the source line of the subprogram's node on statements generated to initialize the parameter attributes cache. Set the source line of the end label of the body on the special return statement built for a procedure with copy-in copy-out parameters. From-SVN: r140513 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 186a59466b42..f7dfb866e8d8 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,16 @@ +2008-09-20 Eric Botcazou + + * exp_dbug.ads: Document new convention for the XVZ variable. + * gcc-interface/decl.c (gnat_to_gnu_entity) : Generate + debug info if necessary for the type padding the component type. + : Likewise. + (maybe_pad_type): Emit the XVZ variable in units. + * gcc-interface/trans.c (Loop_Statement_to_gnu): Fix formatting nits. + (Subprogram_Body_to_gnu): Set the source line of the subprogram's node + on statements generated to initialize the parameter attributes cache. + Set the source line of the end label of the body on the special return + statement built for a procedure with copy-in copy-out parameters. + 2008-09-20 Eric Botcazou PR ada/37585 diff --git a/gcc/ada/exp_dbug.ads b/gcc/ada/exp_dbug.ads index 71c2f79b14fd..3a6297ce9eec 100644 --- a/gcc/ada/exp_dbug.ads +++ b/gcc/ada/exp_dbug.ads @@ -851,7 +851,7 @@ package Exp_Dbug is -- The size of the objects typed as x should be obtained from the -- structure of x (and x___XVE, if applicable) as for ordinary types -- unless there is a variable named x___XVZ, which, if present, will - -- hold the size (in bits) of x. + -- hold the size (in bytes) of x. -- The type x will either be a subtype of y (see also Subtypes of -- Variant Records, below) or will contain no fields at all. The layout, diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index c254990d45c4..a8fa1badac30 100644 --- a/gcc/ada/gcc-interface/decl.c +++ b/gcc/ada/gcc-interface/decl.c @@ -1955,8 +1955,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) never be declared otherwise. This is necessary to ensure that its subtrees are properly marked. */ if (tem != orig_tem) - create_type_decl (TYPE_NAME (tem), tem, NULL, true, false, - gnat_entity); + create_type_decl (TYPE_NAME (tem), tem, NULL, true, + debug_info_p, gnat_entity); } if (Has_Volatile_Components (gnat_entity)) @@ -2324,7 +2324,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition) to ensure that its subtrees are properly marked. */ if (gnu_type != orig_gnu_type) create_type_decl (TYPE_NAME (gnu_type), gnu_type, NULL, - true, false, gnat_entity); + true, debug_info_p, gnat_entity); } if (Has_Volatile_Components (Base_Type (gnat_entity))) @@ -5867,8 +5867,8 @@ maybe_pad_type (tree type, tree size, unsigned int align, if (size && TREE_CODE (size) != INTEGER_CST && definition) create_var_decl (concat_id_with_name (name, "XVZ"), NULL_TREE, - bitsizetype, TYPE_SIZE (record), false, false, false, - false, NULL, gnat_entity); + sizetype, TYPE_SIZE_UNIT (record), false, false, + false, false, NULL, gnat_entity); } rest_of_record_type_compilation (record); diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index 938408bf8e1b..9a6f4cf36ef0 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -1689,17 +1689,20 @@ Loop_Statement_to_gnu (Node_Id gnat_node) push_stack (&gnu_loop_label_stack, NULL_TREE, LOOP_STMT_LABEL (gnu_loop_stmt)); - /* Set the condition that under which the loop should continue. - For "LOOP .... END LOOP;" the condition is always true. */ + /* Set the condition under which the loop must keep going. + For the case "LOOP .... END LOOP;" the condition is always true. */ if (No (gnat_iter_scheme)) ; - /* The case "WHILE condition LOOP ..... END LOOP;" */ + + /* For the case "WHILE condition LOOP ..... END LOOP;" it's immediate. */ else if (Present (Condition (gnat_iter_scheme))) LOOP_STMT_TOP_COND (gnu_loop_stmt) = gnat_to_gnu (Condition (gnat_iter_scheme)); + + /* Otherwise we have an iteration scheme and the condition is given by + the bounds of the subtype of the iteration variable. */ else { - /* We have an iteration scheme. */ Node_Id gnat_loop_spec = Loop_Parameter_Specification (gnat_iter_scheme); Entity_Id gnat_loop_var = Defining_Entity (gnat_loop_spec); Entity_Id gnat_type = Etype (gnat_loop_var); @@ -1745,7 +1748,7 @@ Loop_Statement_to_gnu (Node_Id gnat_node) gnu_loop_var = convert (get_base_type (gnu_type), gnu_loop_var); /* Set either the top or bottom exit condition as appropriate depending - on whether or not we know an overflow cannot occur. */ + on whether or not we know an overflow cannot occur. */ if (gnu_cond_expr) LOOP_STMT_BOT_COND (gnu_loop_stmt) = build_binary_op (NE_EXPR, integer_type_node, @@ -1763,12 +1766,12 @@ Loop_Statement_to_gnu (Node_Id gnat_node) convert (TREE_TYPE (gnu_loop_var), integer_one_node)); set_expr_location_from_node (LOOP_STMT_UPDATE (gnu_loop_stmt), - gnat_iter_scheme); + gnat_iter_scheme); } /* If the loop was named, have the name point to this loop. In this case, the association is not a ..._DECL node, but the end label from this - LOOP_STMT. */ + LOOP_STMT. */ if (Present (Identifier (gnat_node))) save_gnu_tree (Entity (Identifier (gnat_node)), LOOP_STMT_LABEL (gnu_loop_stmt), true); @@ -1788,7 +1791,7 @@ Loop_Statement_to_gnu (Node_Id gnat_node) } /* If we have an outer COND_EXPR, that's our result and this loop is its - "true" statement. Otherwise, the result is the LOOP_STMT. */ + "true" statement. Otherwise, the result is the LOOP_STMT. */ if (gnu_cond_expr) { COND_EXPR_THEN (gnu_cond_expr) = gnu_loop_stmt; @@ -1981,11 +1984,11 @@ Subprogram_Body_to_gnu (Node_Id gnat_node) for (i = 0; VEC_iterate (parm_attr, cache, i, pa); i++) { if (pa->first) - add_stmt (pa->first); + add_stmt_with_node (pa->first, gnat_node); if (pa->last) - add_stmt (pa->last); + add_stmt_with_node (pa->last, gnat_node); if (pa->length) - add_stmt (pa->length); + add_stmt_with_node (pa->length, gnat_node); } add_stmt (gnu_result); @@ -2017,7 +2020,7 @@ Subprogram_Body_to_gnu (Node_Id gnat_node) add_stmt_with_node (build_return_expr (DECL_RESULT (gnu_subprog_decl), gnu_retval), - gnat_node); + End_Label (Handled_Statement_Sequence (gnat_node))); gnat_poplevel (); gnu_result = end_stmt_group (); }