Commit 0e1a6f29 by Olivier Hainque Committed by Olivier Hainque

tree-nested.c (convert_local_reference): Handle VIEW_CONVERT_EXPR.

	* tree-nested.c (convert_local_reference): Handle VIEW_CONVERT_EXPR.
	Request walking the subtrees only, leaving the current is_lhs/val_only
	untouched.
	(convert_non_local_reference): Likewise.

	testsuite/
	* gnat.dg/lhs_view_convert.adb: New test.

From-SVN: r125646
parent beff4180
2007-06-12 Olivier Hainque <hainque@adacore.com>
* tree-nested.c (convert_local_reference): Handle VIEW_CONVERT_EXPR.
Request walking the subtrees only, leaving the current is_lhs/val_only
untouched.
(convert_non_local_reference): Likewise.
2007-06-12 Nathan Sidwell <nathan@codesourcery.com>
* config/m68k/m68k-devices.def (52221, 52223, 5253): New.
......
2007-06-12 Olivier Hainque <hainque@adacore.com>
* gnat.dg/lhs_view_convert.adb: New test.
2007-06-12 Richard Guenther <rguenther@suse.de>
PR tree-optimization/15353
-- { dg-do run }
-- { dg-options "-gnatp" }
procedure Lhs_View_Convert is
type Root is tagged record
RV : Natural;
end record;
type Derived is new Root with null record;
Root_Instance : Root := (RV => 1);
Derived_Instance : Derived;
procedure Process is
X : Natural := Derived_Instance.RV;
begin
null;
end;
begin
Derived_Instance.RV := 2;
Root (Derived_Instance) := Root (Root_Instance);
if Derived_Instance.RV /= Root_Instance.RV then
raise Program_Error;
end if;
end;
......@@ -1035,6 +1035,13 @@ convert_nonlocal_reference (tree *tp, int *walk_subtrees, void *data)
walk_tree (tp, convert_nonlocal_reference, wi, NULL);
break;
case VIEW_CONVERT_EXPR:
/* Just request to look at the subtrees, leaving val_only and lhs
untouched. This might actually be for !val_only + lhs, in which
case we don't want to force a replacement by a temporary. */
*walk_subtrees = 1;
break;
case OMP_PARALLEL:
save_suppress = info->suppress_expansion;
if (convert_nonlocal_omp_clauses (&OMP_PARALLEL_CLAUSES (t), wi))
......@@ -1313,6 +1320,13 @@ convert_local_reference (tree *tp, int *walk_subtrees, void *data)
wi->val_only = save_val_only;
break;
case VIEW_CONVERT_EXPR:
/* Just request to look at the subtrees, leaving val_only and lhs
untouched. This might actually be for !val_only + lhs, in which
case we don't want to force a replacement by a temporary. */
*walk_subtrees = 1;
break;
case OMP_PARALLEL:
save_suppress = info->suppress_expansion;
if (convert_local_omp_clauses (&OMP_PARALLEL_CLAUSES (t), wi))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment