mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-04 00:55:49 +03:00
Implement cast to void
This commit is contained in:
parent
5a10a23cef
commit
dcf005213b
2 changed files with 3 additions and 15 deletions
|
@ -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();
|
||||||
|
|
||||||
|
|
10
gen/toir.cpp
10
gen/toir.cpp
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue