mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-02-25 23:26:16 +08:00
trans.c (emit_range_check): Do not emit the check if the base type of the expression is the type against...
* trans.c (emit_range_check): Do not emit the check if the base type of the expression is the type against which its range must be checked. From-SVN: r133083
This commit is contained in:
parent
725c2d321c
commit
e1e7141cf3
@ -1,3 +1,8 @@
|
||||
2008-03-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* trans.c (emit_range_check): Do not emit the check if the base type
|
||||
of the expression is the type against which its range must be checked.
|
||||
|
||||
2008-03-08 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* decl.c (maybe_pad_type): Use value_factor_p.
|
||||
|
@ -5757,6 +5757,11 @@ emit_range_check (tree gnu_expr, Entity_Id gnat_range_type)
|
||||
tree gnu_high = TYPE_MAX_VALUE (gnu_range_type);
|
||||
tree gnu_compare_type = get_base_type (TREE_TYPE (gnu_expr));
|
||||
|
||||
/* If GNU_EXPR has GNAT_RANGE_TYPE as its base type, no check is needed.
|
||||
This can for example happen when translating 'Val or 'Value. */
|
||||
if (gnu_compare_type == gnu_range_type)
|
||||
return gnu_expr;
|
||||
|
||||
/* If GNU_EXPR has an integral type that is narrower than GNU_RANGE_TYPE,
|
||||
we can't do anything since we might be truncating the bounds. No
|
||||
check is needed in this case. */
|
||||
|
@ -1,3 +1,7 @@
|
||||
2008-03-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/range_check2.adb: New test.
|
||||
|
||||
2008-03-10 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR tree-optimization/35494
|
||||
|
13
gcc/testsuite/gnat.dg/range_check2.adb
Normal file
13
gcc/testsuite/gnat.dg/range_check2.adb
Normal file
@ -0,0 +1,13 @@
|
||||
-- { dg-do compile }
|
||||
-- { dg-options "-O2" }
|
||||
|
||||
procedure Range_Check2 is
|
||||
|
||||
subtype Block_Subtype is String(1 .. 6);
|
||||
type Color is (Black, Red, Green, Yellow, Blue, Magenta, Cyan, White);
|
||||
Foregrnd_Color : Color := White;
|
||||
Block : Block_Subtype := "123456";
|
||||
|
||||
begin
|
||||
Foregrnd_Color := Color'Val(Integer'Value(Block(5 .. 6)));
|
||||
end;
|
Loading…
Reference in New Issue
Block a user