+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.
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. */
+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
--- /dev/null
+-- { 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;