if (nd_tp->tp_fund == T_STRING) return;
nd_tp = BaseType(nd_tp);
if (nd->nd_class == Value) {
+ if (nd_tp->tp_fund == T_REAL && tp->tp_fund != T_REAL) goto Out;
switch(tp->tp_fund) {
case T_REAL:
- if (nd_tp->tp_fund == T_REAL) {
- break;
- }
- goto Out;
+ break;
case T_SUBRANGE:
if (! chk_bounds(tp->sub_lb, nd->nd_INT,
BaseType(tp)->tp_fund) ||
case T_INTORCARD:
case T_CARDINAL:
case T_POINTER:
- if ((nd_tp->tp_fund == T_INTEGER &&
- nd->nd_INT < 0) ||
+ if ((nd_tp->tp_fund == T_INTEGER && nd->nd_INT < 0) ||
(nd->nd_INT & ~full_mask[(int)(tp->tp_size)])) {
node_warning(nd,
W_ORDINARY,
make INTEGER ranges symmetric, t.i., MIN(INTEGER) = - MAX(INTEGER).
This is useful for interpreters that use the "real" MIN(INTEGER) to
indicate "undefined".
+.IP \fB-R\fR
+disable all range checks.
.LP
.SH FILES
.IR ~em/lib/em_m2 :
W_ORDINARY,
"zero stepsize in FOR loop");
}
- if (stepsize < 0) {
- stepsize = -stepsize;
- }
fnd = left->nd_right;
if (good_forvar) {
bstp = BaseType(nd->nd_type);
ForLoopVarExpr(nd);
}
else {
+ stepsize = -stepsize;
C_zlt(l2);
ForLoopVarExpr(nd);
C_lol(tmp);
if (stepsize) {
C_loc(stepsize);
C_dvu(int_size);
- C_loc((arith) 1);
- C_adu(int_size);
}
C_stl(tmp);
nd->nd_def->df_flags |= D_FORLOOP;
}
WalkNode(right, exit_label);
nd->nd_def->df_flags &= ~D_FORLOOP;
- if (stepsize && good_forvar) {
+ if (good_forvar && stepsize) {
+ C_lol(tmp);
+ C_zeq(l2);
C_lol(tmp);
C_loc((arith) 1);
C_sbu(int_size);
C_stl(tmp);
- C_lol(tmp);
- C_zeq(l2);
C_loc(left->nd_INT);
ForLoopVarExpr(nd);
C_adu(int_size);