aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog13
-rw-r--r--gcc/ada/exp_dbug.ads2
-rw-r--r--gcc/ada/gcc-interface/decl.c10
-rw-r--r--gcc/ada/gcc-interface/trans.c27
4 files changed, 34 insertions, 18 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 186a594..f7dfb86 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,18 @@
2008-09-20 Eric Botcazou <ebotcazou@adacore.com>
+ * exp_dbug.ads: Document new convention for the XVZ variable.
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Type>: Generate
+ debug info if necessary for the type padding the component type.
+ <E_Array_Subtype>: 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 <ebotcazou@adacore.com>
+
PR ada/37585
* gcc-interface/utils.c (create_subprog_decl): Disable inlining for
inlined external functions if they contain a nested function not
diff --git a/gcc/ada/exp_dbug.ads b/gcc/ada/exp_dbug.ads
index 71c2f79..3a6297c 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 c254990..a8fa1ba 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 938408b..9a6f4cf 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 ();
}