Merged DMD commit 59c07625e84aadd2f684ea77f925ae540d5c8906:

bugzilla 4926 ICE: PREC_zero assertion failure due to unset precedence
This commit is contained in:
David Nadlinger
2011-04-22 15:03:13 +02:00
parent 55315f59ef
commit fb79515eee
3 changed files with 37 additions and 1 deletions

View File

@@ -5283,7 +5283,8 @@ Expression *AssertExp::semantic(Scope *sc)
if (e1->isBool(FALSE))
{
FuncDeclaration *fd = sc->parent->isFuncDeclaration();
fd->hasReturnExp |= 4;
if (fd)
fd->hasReturnExp |= 4;
if (!global.params.useAssert)
{ Expression *e = new HaltExp(loc);
@@ -9697,6 +9698,14 @@ RemoveExp::RemoveExp(Loc loc, Expression *e1, Expression *e2)
type = Type::tvoid;
}
void RemoveExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs)
{
expToCBuffer(buf, hgs, e1, PREC_primary);
buf->writestring(".remove(");
expToCBuffer(buf, hgs, e2, PREC_assign);
buf->writestring(")");
}
/************************************************************/
CmpExp::CmpExp(enum TOK op, Loc loc, Expression *e1, Expression *e2)

View File

@@ -1806,6 +1806,7 @@ struct InExp : BinExp
struct RemoveExp : BinExp
{
RemoveExp(Loc loc, Expression *e1, Expression *e2);
void toCBuffer(OutBuffer *buf, HdrGenState *hgs);
#if IN_DMD
elem *toElem(IRState *irs);
#endif

View File

@@ -5485,35 +5485,53 @@ void initPrecedence()
precedence[TOKsuper] = PREC_primary;
precedence[TOKint64] = PREC_primary;
precedence[TOKfloat64] = PREC_primary;
precedence[TOKcomplex80] = PREC_primary;
precedence[TOKnull] = PREC_primary;
precedence[TOKstring] = PREC_primary;
precedence[TOKarrayliteral] = PREC_primary;
precedence[TOKassocarrayliteral] = PREC_primary;
#if DMDV2
precedence[TOKfile] = PREC_primary;
precedence[TOKline] = PREC_primary;
#endif
precedence[TOKtypeid] = PREC_primary;
precedence[TOKis] = PREC_primary;
precedence[TOKassert] = PREC_primary;
precedence[TOKhalt] = PREC_primary;
precedence[TOKtemplate] = PREC_primary;
precedence[TOKdsymbol] = PREC_primary;
precedence[TOKfunction] = PREC_primary;
precedence[TOKvar] = PREC_primary;
precedence[TOKsymoff] = PREC_primary;
precedence[TOKstructliteral] = PREC_primary;
precedence[TOKarraylength] = PREC_primary;
precedence[TOKremove] = PREC_primary;
precedence[TOKtuple] = PREC_primary;
#if DMDV2
precedence[TOKtraits] = PREC_primary;
precedence[TOKdefault] = PREC_primary;
precedence[TOKoverloadset] = PREC_primary;
#endif
// post
precedence[TOKdotti] = PREC_primary;
precedence[TOKdot] = PREC_primary;
precedence[TOKdottd] = PREC_primary;
precedence[TOKdotexp] = PREC_primary;
precedence[TOKdottype] = PREC_primary;
// precedence[TOKarrow] = PREC_primary;
precedence[TOKplusplus] = PREC_primary;
precedence[TOKminusminus] = PREC_primary;
#if DMDV2
precedence[TOKpreplusplus] = PREC_primary;
precedence[TOKpreminusminus] = PREC_primary;
#endif
precedence[TOKcall] = PREC_primary;
precedence[TOKslice] = PREC_primary;
precedence[TOKarray] = PREC_primary;
precedence[TOKindex] = PREC_primary;
precedence[TOKdelegate] = PREC_unary;
precedence[TOKaddress] = PREC_unary;
precedence[TOKstar] = PREC_unary;
precedence[TOKneg] = PREC_unary;
@@ -5523,8 +5541,13 @@ void initPrecedence()
precedence[TOKtilde] = PREC_unary;
precedence[TOKdelete] = PREC_unary;
precedence[TOKnew] = PREC_unary;
precedence[TOKnewanonclass] = PREC_unary;
precedence[TOKcast] = PREC_unary;
#if DMDV2
precedence[TOKpow] = PREC_pow;
#endif
precedence[TOKmul] = PREC_mul;
precedence[TOKdiv] = PREC_mul;
precedence[TOKmod] = PREC_mul;
@@ -5587,6 +5610,9 @@ void initPrecedence()
precedence[TOKmulass] = PREC_assign;
precedence[TOKdivass] = PREC_assign;
precedence[TOKmodass] = PREC_assign;
#if DMDV2
precedence[TOKpowass] = PREC_assign;
#endif
precedence[TOKshlass] = PREC_assign;
precedence[TOKshrass] = PREC_assign;
precedence[TOKushrass] = PREC_assign;