mirror of git://gcc.gnu.org/git/gcc.git
utils.c (convert): For a biased input type, convert the bias itself to the base type before adding it.
* gcc-interface/utils.c (convert): For a biased input type, convert the bias itself to the base type before adding it. From-SVN: r240910
This commit is contained in:
parent
f47ef399b6
commit
55cfd746c7
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-10-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* gcc-interface/utils.c (convert): For a biased input type, convert
|
||||||
|
the bias itself to the base type before adding it.
|
||||||
|
|
||||||
2016-10-08 Eric Botcazou <ebotcazou@adacore.com>
|
2016-10-08 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
* gcc-interface/utils.c (convert) <VECTOR_CST>: Add missing break.
|
* gcc-interface/utils.c (convert) <VECTOR_CST>: Add missing break.
|
||||||
|
|
|
||||||
|
|
@ -4193,12 +4193,15 @@ convert (tree type, tree expr)
|
||||||
return convert (type, unpadded);
|
return convert (type, unpadded);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the input is a biased type, adjust first. */
|
/* If the input is a biased type, convert first to the base type and add
|
||||||
|
the bias. Note that the bias must go through a full conversion to the
|
||||||
|
base type, lest it is itself a biased value; this happens for subtypes
|
||||||
|
of biased types. */
|
||||||
if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
|
if (ecode == INTEGER_TYPE && TYPE_BIASED_REPRESENTATION_P (etype))
|
||||||
return convert (type, fold_build2 (PLUS_EXPR, TREE_TYPE (etype),
|
return convert (type, fold_build2 (PLUS_EXPR, TREE_TYPE (etype),
|
||||||
fold_convert (TREE_TYPE (etype), expr),
|
fold_convert (TREE_TYPE (etype), expr),
|
||||||
fold_convert (TREE_TYPE (etype),
|
convert (TREE_TYPE (etype),
|
||||||
TYPE_MIN_VALUE (etype))));
|
TYPE_MIN_VALUE (etype))));
|
||||||
|
|
||||||
/* If the input is a justified modular type, we need to extract the actual
|
/* If the input is a justified modular type, we need to extract the actual
|
||||||
object before converting it to any other type with the exceptions of an
|
object before converting it to any other type with the exceptions of an
|
||||||
|
|
@ -4502,7 +4505,12 @@ convert (tree type, tree expr)
|
||||||
&& (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE
|
&& (ecode == ARRAY_TYPE || ecode == UNCONSTRAINED_ARRAY_TYPE
|
||||||
|| (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))))
|
|| (ecode == RECORD_TYPE && TYPE_CONTAINS_TEMPLATE_P (etype))))
|
||||||
return unchecked_convert (type, expr, false);
|
return unchecked_convert (type, expr, false);
|
||||||
else if (TYPE_BIASED_REPRESENTATION_P (type))
|
|
||||||
|
/* If the output is a biased type, convert first to the base type and
|
||||||
|
subtract the bias. Note that the bias itself must go through a full
|
||||||
|
conversion to the base type, lest it is a biased value; this happens
|
||||||
|
for subtypes of biased types. */
|
||||||
|
if (TYPE_BIASED_REPRESENTATION_P (type))
|
||||||
return fold_convert (type,
|
return fold_convert (type,
|
||||||
fold_build2 (MINUS_EXPR, TREE_TYPE (type),
|
fold_build2 (MINUS_EXPR, TREE_TYPE (type),
|
||||||
convert (TREE_TYPE (type), expr),
|
convert (TREE_TYPE (type), expr),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
2016-10-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* gnat.dg/biased_subtype.adb: New test.
|
||||||
|
|
||||||
2016-10-09 Jakub Jelinek <jakub@redhat.com>
|
2016-10-09 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR tree-optimization/77901
|
PR tree-optimization/77901
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
-- { dg-do run }
|
||||||
|
-- { dg-options "-gnatws" }
|
||||||
|
|
||||||
|
procedure Biased_Subtype is
|
||||||
|
|
||||||
|
CIM_Max_AA : constant := 9_999_999;
|
||||||
|
CIM_Min_AA : constant := -999_999;
|
||||||
|
|
||||||
|
type TIM_AA is range CIM_Min_AA..CIM_Max_AA + 1;
|
||||||
|
for TIM_AA'Size use 24;
|
||||||
|
|
||||||
|
subtype STIM_AA is TIM_AA range TIM_AA(CIM_Min_AA)..TIM_AA(CIM_Max_AA);
|
||||||
|
|
||||||
|
SAA : STIM_AA := 1;
|
||||||
|
|
||||||
|
begin
|
||||||
|
if Integer(SAA) /= 1 then
|
||||||
|
raise Program_Error;
|
||||||
|
end if;
|
||||||
|
end;
|
||||||
Loading…
Reference in New Issue