fixed a bug with setjmp.
Fixed a bug with non-struct pointers referring to structs
This commit is contained in:
parent
c24f960d82
commit
bfd6e2061f
3 changed files with 11 additions and 5 deletions
|
@ -41,7 +41,9 @@ ch7sel(expp, oper, idf)
|
||||||
exp = *expp;
|
exp = *expp;
|
||||||
tp = exp->ex_type;
|
tp = exp->ex_type;
|
||||||
if (oper == ARROW) {
|
if (oper == ARROW) {
|
||||||
if (tp->tp_fund == POINTER) /* normal case */
|
if (tp->tp_fund == POINTER &&
|
||||||
|
( tp->tp_up->tp_fund == STRUCT ||
|
||||||
|
tp->tp_up->tp_fund == UNION)) /* normal case */
|
||||||
tp = tp->tp_up;
|
tp = tp->tp_up;
|
||||||
else { /* constructions like "12->selector" and
|
else { /* constructions like "12->selector" and
|
||||||
"char c; c->selector"
|
"char c; c->selector"
|
||||||
|
@ -54,6 +56,8 @@ ch7sel(expp, oper, idf)
|
||||||
sd = idf2sdef(idf, tp);
|
sd = idf2sdef(idf, tp);
|
||||||
tp = sd->sd_stype;
|
tp = sd->sd_stype;
|
||||||
break;
|
break;
|
||||||
|
case POINTER:
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
expr_error(exp, "-> applied to %s",
|
expr_error(exp, "-> applied to %s",
|
||||||
symbol2str(tp->tp_fund));
|
symbol2str(tp->tp_fund));
|
||||||
|
@ -61,7 +65,7 @@ ch7sel(expp, oper, idf)
|
||||||
exp->ex_type = error_type;
|
exp->ex_type = error_type;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} /* tp->tp_fund != POINTER */
|
}
|
||||||
} /* oper == ARROW */
|
} /* oper == ARROW */
|
||||||
else { /* oper == '.' */
|
else { /* oper == '.' */
|
||||||
/* filter out illegal expressions "non_lvalue.sel" */
|
/* filter out illegal expressions "non_lvalue.sel" */
|
||||||
|
|
|
@ -34,7 +34,7 @@ int idfsize = IDFSIZE;
|
||||||
extern char options[];
|
extern char options[];
|
||||||
extern arith NewLocal();
|
extern arith NewLocal();
|
||||||
|
|
||||||
char sp_occurred[SP_TOTAL]; /* indicate occurrence of special id */
|
char sp_occurred[SP_TOTAL+1]; /* indicate occurrence of special id */
|
||||||
|
|
||||||
struct idf *idf_hashtable[HASHSIZE];
|
struct idf *idf_hashtable[HASHSIZE];
|
||||||
/* All identifiers can in principle be reached through
|
/* All identifiers can in principle be reached through
|
||||||
|
|
|
@ -136,9 +136,11 @@ LocalFinish()
|
||||||
}
|
}
|
||||||
regs[i] = 0;
|
regs[i] = 0;
|
||||||
}
|
}
|
||||||
|
if (! options['n']) {
|
||||||
|
C_mes_begin(ms_reg);
|
||||||
|
C_mes_end();
|
||||||
|
}
|
||||||
#ifdef USE_TMP
|
#ifdef USE_TMP
|
||||||
C_mes_begin(ms_reg);
|
|
||||||
C_mes_end();
|
|
||||||
C_endpart(loc_id);
|
C_endpart(loc_id);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue