From: Eric Botcazou Date: Mon, 10 Mar 2008 19:26:35 +0000 (+0000) Subject: trans.c (emit_range_check): Do not emit the check if the base type of the expression... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e1e7141cf3128d384dca902928d98a47cb57dddd;p=gcc.git 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c3c9cadc2b8..814d51730f5 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2008-03-10 Eric Botcazou + + * 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 * decl.c (maybe_pad_type): Use value_factor_p. diff --git a/gcc/ada/trans.c b/gcc/ada/trans.c index acf4de3793d..4cfd2253987 100644 --- a/gcc/ada/trans.c +++ b/gcc/ada/trans.c @@ -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. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 693a2a1a7be..d4cb32611cb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-03-10 Eric Botcazou + + * gnat.dg/range_check2.adb: New test. + 2008-03-10 H.J. Lu PR tree-optimization/35494 diff --git a/gcc/testsuite/gnat.dg/range_check2.adb b/gcc/testsuite/gnat.dg/range_check2.adb new file mode 100644 index 00000000000..33172f155e5 --- /dev/null +++ b/gcc/testsuite/gnat.dg/range_check2.adb @@ -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;