Implement cast to void

This commit is contained in:
Alexey Prokhin 2013-12-08 13:13:43 +04:00
parent 5a10a23cef
commit dcf005213b
2 changed files with 3 additions and 15 deletions

View file

@ -576,14 +576,6 @@ DValue* DtoCastInt(Loc& loc, DValue* val, Type* _to)
return new DImValue(_to, rval); return new DImValue(_to, rval);
} }
// Check for special DMD hack to avoid "has no effect" error.
// See expression.c, method AssignExp::semantic(), around line 11499
llvm::ConstantInt* isConstInt = isaConstantInt(rval);
if (from == Type::tint32 && to == Type::tvoid && isConstInt->isNullValue())
{
return val;
}
size_t fromsz = from->size(); size_t fromsz = from->size();
size_t tosz = to->size(); size_t tosz = to->size();

View file

@ -1140,13 +1140,9 @@ DValue* CastExp::toElem(IRState* p)
// get the value to cast // get the value to cast
DValue* u = e1->toElem(p); DValue* u = e1->toElem(p);
// a constructor expression is casted to void in order to mark // handle cast to void (usually created by frontend to avoid "has no effect" error)
// the value as unused. See expression.d, method AssignExp::semantic(), if (to == Type::tvoid)
// around line 11681 return new DImValue(Type::tvoid, llvm::UndefValue::get(voidToI8(DtoType(Type::tvoid))));
if (to == Type::tvoid && e1->op == TOKconstruct)
{
return new DNullValue(Type::tvoid, 0);
}
// cast it to the 'to' type, if necessary // cast it to the 'to' type, if necessary
DValue* v = u; DValue* v = u;