Commit f330b1ec by Eric Botcazou Committed by Eric Botcazou

utils.c (pad_type_hash): Use hashval_t for hash value.

	* gcc-interface/utils.c (pad_type_hash): Use hashval_t for hash value.
	(convert): Do not use an unchecked conversion for converting from a
	type to another type padding it.

From-SVN: r253971
parent de624bee
2017-10-21 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (pad_type_hash): Use hashval_t for hash value.
(convert): Do not use an unchecked conversion for converting from a
type to another type padding it.
2017-10-20 Doug Rupp <rupp@adacore.com> 2017-10-20 Doug Rupp <rupp@adacore.com>
* libgnarl/s-osinte__linux.ads (Relative_Timed_Wait): Add variable * libgnarl/s-osinte__linux.ads (Relative_Timed_Wait): Add variable
......
...@@ -101,7 +101,7 @@ static tree handle_vector_type_attribute (tree *, tree, tree, int, bool *); ...@@ -101,7 +101,7 @@ static tree handle_vector_type_attribute (tree *, tree, tree, int, bool *);
/* Fake handler for attributes we don't properly support, typically because /* Fake handler for attributes we don't properly support, typically because
they'd require dragging a lot of the common-c front-end circuitry. */ they'd require dragging a lot of the common-c front-end circuitry. */
static tree fake_attribute_handler (tree *, tree, tree, int, bool *); static tree fake_attribute_handler (tree *, tree, tree, int, bool *);
/* Table of machine-independent internal attributes for Ada. We support /* Table of machine-independent internal attributes for Ada. We support
this minimal set of attributes to accommodate the needs of builtins. */ this minimal set of attributes to accommodate the needs of builtins. */
...@@ -222,8 +222,9 @@ static GTY((deletable)) tree free_block_chain; ...@@ -222,8 +222,9 @@ static GTY((deletable)) tree free_block_chain;
/* A hash table of padded types. It is modelled on the generic type /* A hash table of padded types. It is modelled on the generic type
hash table in tree.c, which must thus be used as a reference. */ hash table in tree.c, which must thus be used as a reference. */
struct GTY((for_user)) pad_type_hash { struct GTY((for_user)) pad_type_hash
unsigned long hash; {
hashval_t hash;
tree type; tree type;
}; };
...@@ -4249,10 +4250,13 @@ convert (tree type, tree expr) ...@@ -4249,10 +4250,13 @@ convert (tree type, tree expr)
return convert (type, TREE_OPERAND (expr, 0)); return convert (type, TREE_OPERAND (expr, 0));
/* If the inner type is of self-referential size and the expression type /* If the inner type is of self-referential size and the expression type
is a record, do this as an unchecked conversion. But first pad the is a record, do this as an unchecked conversion unless both types are
expression if possible to have the same size on both sides. */ essentially the same. But first pad the expression if possible to
have the same size on both sides. */
if (ecode == RECORD_TYPE if (ecode == RECORD_TYPE
&& CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type)))) && CONTAINS_PLACEHOLDER_P (DECL_SIZE (TYPE_FIELDS (type)))
&& TYPE_MAIN_VARIANT (etype)
!= TYPE_MAIN_VARIANT (TREE_TYPE (TYPE_FIELDS (type))))
{ {
if (TREE_CODE (TYPE_SIZE (etype)) == INTEGER_CST) if (TREE_CODE (TYPE_SIZE (etype)) == INTEGER_CST)
expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty, expr = convert (maybe_pad_type (etype, TYPE_SIZE (type), 0, Empty,
......
2017-10-21 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/specs/discr_private.ads: Rename into ...
* gnat.dg/specs/discr2.ads: ...this.
* gnat.dg/specs/discr_record_constant.ads: Rename into...
* gnat.dg/specs/discr3.ads: ...this.
* gnat.dg/specs/discr4.ads: New test.
* gnat.dg/specs/discr4_pkg.ads: New helper.
2017-10-21 Paul Thomas <pault@gcc.gnu.org> 2017-10-21 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82586 PR fortran/82586
......
-- { dg-do compile } -- { dg-do compile }
-- { dg-options "-gnatws" } -- { dg-options "-gnatws" }
package Discr_Private is package Discr2 is
package Dec is package Dec is
type T_DECIMAL (Prec : Integer := 1) is private; type T_DECIMAL (Prec : Integer := 1) is private;
...@@ -47,4 +47,4 @@ package Discr_Private is ...@@ -47,4 +47,4 @@ package Discr_Private is
end case; end case;
end record; end record;
end Discr_Private; end Discr2;
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
pragma Restrictions (No_Implicit_Heap_Allocations); pragma Restrictions (No_Implicit_Heap_Allocations);
package Discr_Record_Constant is package Discr3 is
type T (Big : Boolean := False) is record type T (Big : Boolean := False) is record
case Big is case Big is
...@@ -19,4 +19,4 @@ package Discr_Record_Constant is ...@@ -19,4 +19,4 @@ package Discr_Record_Constant is
Con : constant T := D; -- Violation of restriction Con : constant T := D; -- Violation of restriction
Ter : constant T := Con; -- Violation of restriction Ter : constant T := Con; -- Violation of restriction
end Discr_Record_Constant; end Discr3;
-- { dg-do compile }
-- { dg-options "-O" }
with Disc4_Pkg; use Disc4_Pkg;
package Disc4 is
type Data is record
Val : Rec;
Set : Boolean;
end record;
type Pair is record
Lower, Upper : Data;
end record;
function Build (L, U : Rec) return Pair is ((L, True), (U, False));
C1 : constant Pair := Build (Rec_One, Rec_Three);
C2 : constant Pair := Build (Get (0), Rec_Three);
end Disc4;
package Disc4_Pkg is
type Enum is (One, Two, Three);
type Rec is private;
Rec_One : constant Rec;
Rec_Three : constant Rec;
function Get (Value : Integer) return Rec;
private
type Rec (D : Enum := Two) is record
case D is
when One => null;
when Two => Value : Integer;
when Three => null;
end case;
end record;
Rec_One : constant Rec := (D => One);
Rec_Three : constant Rec := (D => Three);
function Get (Value : Integer) return Rec is (Two, Value);
end Disc4_Pkg;
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