+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>
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);
procedure Q (X : Float);
procedure Q (X : Integer) renames Inner.PI;
pragma Convention (C, Q); -- { dg-error "non-local entity" }
-end Renamings;
+end Renaming1;
--- /dev/null
+-- { 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;
--- /dev/null
+-- { 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;
--- /dev/null
+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;
--- /dev/null
+-- { 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;
--- /dev/null
+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;
--- /dev/null
+-- { 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;