trans.c (gnat_gimplify_expr): Add 'type' variable.
* gcc-interface/trans.c (gnat_gimplify_expr): Add 'type' variable. <case NULL_EXPR>: Deal with unconstrained array types and use 'type'. <case ADDR_EXPR>: Use 'type'. <case DECL_EXPR>: Likewise. From-SVN: r217964
This commit is contained in:
parent
0211f6178a
commit
5e0f1fca62
4 changed files with 37 additions and 10 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-11-22 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gcc-interface/trans.c (gnat_gimplify_expr): Add 'type' variable.
|
||||
<case NULL_EXPR>: Deal with unconstrained array types and use 'type'.
|
||||
<case ADDR_EXPR>: Use 'type'.
|
||||
<case DECL_EXPR>: Likewise.
|
||||
|
||||
2014-11-20 Arnaud Charlet <charlet@adacore.com>
|
||||
|
||||
PR ada/63931
|
||||
|
|
|
@ -7657,6 +7657,7 @@ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
|
|||
gimple_seq *post_p ATTRIBUTE_UNUSED)
|
||||
{
|
||||
tree expr = *expr_p;
|
||||
tree type = TREE_TYPE (expr);
|
||||
tree op;
|
||||
|
||||
if (IS_ADA_STMT (expr))
|
||||
|
@ -7665,16 +7666,17 @@ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
|
|||
switch (TREE_CODE (expr))
|
||||
{
|
||||
case NULL_EXPR:
|
||||
/* If this is for a scalar, just make a VAR_DECL for it. If for
|
||||
an aggregate, get a null pointer of the appropriate type and
|
||||
dereference it. */
|
||||
if (AGGREGATE_TYPE_P (TREE_TYPE (expr)))
|
||||
*expr_p = build1 (INDIRECT_REF, TREE_TYPE (expr),
|
||||
convert (build_pointer_type (TREE_TYPE (expr)),
|
||||
integer_zero_node));
|
||||
/* If this is an aggregate type, build a null pointer of the appropriate
|
||||
type and dereference it. */
|
||||
if (AGGREGATE_TYPE_P (type)
|
||||
|| TREE_CODE (type) == UNCONSTRAINED_ARRAY_TYPE)
|
||||
*expr_p = build_unary_op (INDIRECT_REF, NULL_TREE,
|
||||
convert (build_pointer_type (type),
|
||||
integer_zero_node));
|
||||
/* Otherwise, just make a VAR_DECL. */
|
||||
else
|
||||
{
|
||||
*expr_p = create_tmp_var (TREE_TYPE (expr), NULL);
|
||||
*expr_p = create_tmp_var (type, NULL);
|
||||
TREE_NO_WARNING (*expr_p) = 1;
|
||||
}
|
||||
|
||||
|
@ -7697,7 +7699,7 @@ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
|
|||
if (TREE_CODE (op) == CONSTRUCTOR && TREE_CONSTANT (op))
|
||||
{
|
||||
tree addr = build_fold_addr_expr (tree_output_constant_def (op));
|
||||
*expr_p = fold_convert (TREE_TYPE (expr), addr);
|
||||
*expr_p = fold_convert (type, addr);
|
||||
return GS_ALL_DONE;
|
||||
}
|
||||
|
||||
|
@ -7711,7 +7713,7 @@ gnat_gimplify_expr (tree *expr_p, gimple_seq *pre_p,
|
|||
required if the type is passed by reference. */
|
||||
if ((TREE_CODE (op) == CONSTRUCTOR || TREE_CODE (op) == CALL_EXPR)
|
||||
&& AGGREGATE_TYPE_P (TREE_TYPE (op))
|
||||
&& !AGGREGATE_TYPE_P (TREE_TYPE (expr)))
|
||||
&& !AGGREGATE_TYPE_P (type))
|
||||
{
|
||||
tree mod, new_var = create_tmp_var_raw (TREE_TYPE (op), "C");
|
||||
gimple_add_tmp_var (new_var);
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2014-11-22 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/specs/no_streams.ads: New test.
|
||||
|
||||
2014-11-22 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* gcc.dg/store-motion-fgcse-sm.c (dg-final): Cleanup
|
||||
|
|
14
gcc/testsuite/gnat.dg/specs/no_streams.ads
Normal file
14
gcc/testsuite/gnat.dg/specs/no_streams.ads
Normal file
|
@ -0,0 +1,14 @@
|
|||
-- { dg-do compile }
|
||||
|
||||
pragma Restrictions (No_Streams);
|
||||
|
||||
with Ada.Containers.Ordered_Maps;
|
||||
|
||||
package No_Streams is
|
||||
|
||||
type Arr is new String (1..8);
|
||||
|
||||
package My_Ordered_Map is new Ada.Containers.Ordered_Maps
|
||||
(Key_Type => Natural, Element_Type => Arr);
|
||||
|
||||
end No_Streams;
|
Loading…
Add table
Reference in a new issue