Commit 9422c886 by Eric Botcazou Committed by Eric Botcazou

decl.c (gnat_to_gnu_entity): In the renaming case...

	* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: In the renaming
	case, use the padded type if the renamed object has an unconstrained
	type with default discriminant.

From-SVN: r187209
parent 80096613
2012-05-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/decl.c (gnat_to_gnu_entity) <object>: In the renaming
case, use the padded type if the renamed object has an unconstrained
type with default discriminant.
2012-05-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/trans.c (Loop_Statement_to_gnu): Also handle invariant
conditions with only one bound.
(Raise_Error_to_gnu): Likewise.  New function extracted from...
(gnat_to_gnu) <N_Raise_Constraint_Error>: ...here.  Call above function
(Raise_Error_to_gnu): Likewise. New function extracted from...
(gnat_to_gnu) <N_Raise_Constraint_Error>: ...here. Call above function
in regular mode only.
2012-05-06 Eric Botcazou <ebotcazou@adacore.com>
......
......@@ -938,6 +938,14 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnu_type = TREE_TYPE (gnu_expr);
}
/* Or else, if the renamed object has an unconstrained type with
default discriminant, use the padded type. */
else if (TYPE_IS_PADDING_P (TREE_TYPE (gnu_expr))
&& TREE_TYPE (TYPE_FIELDS (TREE_TYPE (gnu_expr)))
== gnu_type
&& CONTAINS_PLACEHOLDER_P (TYPE_SIZE (gnu_type)))
gnu_type = TREE_TYPE (gnu_expr);
/* Case 1: If this is a constant renaming stemming from a function
call, treat it as a normal object whose initial value is what
is being renamed. RM 3.3 says that the result of evaluating a
......
2012-05-04 Eric Botcazou <ebotcazou@adacore.com>
2012-05-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc.target/ia64/pr48496.c: New test.
* gcc.target/ia64/pr52657.c: Likewise.
* gnat.dg/specs/renamings.ads: Rename to...
* gnat.dg/specs/renaming1.ads: ...this.
* gnat.dg/specs/renaming2.ads: New test.
* gnat.dg/specs/renaming2_pkg1.ads: New helper.
* gnat.dg/specs/renaming2_pkg2.ads: Likewise.
* gnat.dg/specs/renaming2_pkg3.ads: Likewise.
* gnat.dg/specs/renaming2_pkg4.ad[sb]: Likewise.
2012-05-06 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/discr36.ad[sb]: New test.
* gnat.dg/discr36_pkg.ad[sb]: New helper.
2012-05-05 Manuel López-Ibáñez <manu@gcc.gnu.org>
......
package Renamings is
-- { dg-do compile }
package Renaming1 is
package Inner is
procedure PI (X : Integer);
......@@ -11,4 +13,4 @@ package Renamings is
procedure Q (X : Float);
procedure Q (X : Integer) renames Inner.PI;
pragma Convention (C, Q); -- { dg-error "non-local entity" }
end Renamings;
end Renaming1;
-- { dg-do compile }
with Renaming2_Pkg1;
package Renaming2 is
type T is null record;
package Iter is new Renaming2_Pkg1.GP.Inner (T);
end Renaming2;
-- { dg-excess-errors "no code generated" }
with Renaming2_Pkg2;
with Renaming2_Pkg3;
with Renaming2_Pkg4;
package Renaming2_Pkg1 is
package Impl is new
Renaming2_Pkg3 (Base_Index_T => Positive, Value_T => Renaming2_Pkg2.Root);
use Impl;
package GP is new
Renaming2_Pkg4 (Length_T => Impl.Length_T, Value_T => Renaming2_Pkg2.Root);
end Renaming2_Pkg1;
package Renaming2_Pkg2 is
type Root is private;
private
type Root (D : Boolean := False) is record
case D is
when True => N : Natural;
when False => null;
end case;
end record;
end Renaming2_Pkg2;
-- { dg-excess-errors "no code generated" }
generic
type Base_Index_T is range <>;
type Value_T is private;
package Renaming2_Pkg3 is
type T is private;
subtype Length_T is Base_Index_T range 0 .. Base_Index_T'Last;
function Value (L : Length_T) return Value_T;
function Next return Length_T;
private
type Obj_T is null record;
type T is access Obj_T;
end Renaming2_Pkg3;
package body Renaming2_Pkg4 is
package body Inner is
function Next_Value return Value_T is
Next_Value : Value_T renames Value (Next);
begin
return Next_Value;
end Next_Value;
end Inner;
end Renaming2_Pkg4;
-- { dg-excess-errors "no code generated" }
generic
type Length_T is range <>;
with function Next return Length_T is <>;
type Value_T is private;
with function Value (L : Length_T) return Value_T is <>;
package Renaming2_Pkg4 is
generic
type T is private;
package Inner is
type Slave_T is tagged null record;
function Next_Value return Value_T;
end Inner;
end Renaming2_Pkg4;
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