mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
Fix "Casting class references to void* should be @safe
"
This commit is contained in:
parent
bd703c7136
commit
37978248a9
2 changed files with 11 additions and 7 deletions
|
@ -181,6 +181,10 @@ bool isSafeCast(Expression e, Type tfrom, Type tto, ref string msg)
|
|||
auto tfromb = tfrom.toBasetype();
|
||||
auto ttob = tto.toBasetype();
|
||||
|
||||
// Casting to void* is always safe, https://github.com/dlang/dmd/issues/20514
|
||||
if (ttob.isTypePointer() && ttob.nextOf().toBasetype().ty == Tvoid)
|
||||
return true;
|
||||
|
||||
if (ttob.ty == Tclass && tfromb.ty == Tclass)
|
||||
{
|
||||
ClassDeclaration cdfrom = tfromb.isClassHandle();
|
||||
|
|
|
@ -24,9 +24,9 @@ void pointercast2()
|
|||
int b;
|
||||
Object c;
|
||||
|
||||
static assert(!__traits(compiles, cast(void*)a));
|
||||
static assert(!__traits(compiles, cast(void*)b));
|
||||
static assert(!__traits(compiles, cast(void*)c));
|
||||
static assert(__traits(compiles, cast(void*)a));
|
||||
static assert(__traits(compiles, cast(void*)b));
|
||||
static assert(__traits(compiles, cast(void*)c));
|
||||
}
|
||||
|
||||
@safe
|
||||
|
@ -231,11 +231,11 @@ void multablecast()
|
|||
static assert( __traits(compiles, cast(const(void)*)mp));
|
||||
static assert( __traits(compiles, cast(const(void)*)ip));
|
||||
|
||||
static assert(!__traits(compiles, cast(immutable(void)*)mp));
|
||||
static assert(!__traits(compiles, cast(immutable(void)*)cp));
|
||||
static assert(__traits(compiles, cast(immutable(void)*)mp));
|
||||
static assert(__traits(compiles, cast(immutable(void)*)cp));
|
||||
|
||||
static assert(!__traits(compiles, cast(void*)cp));
|
||||
static assert(!__traits(compiles, cast(void*)ip));
|
||||
static assert(__traits(compiles, cast(void*)cp));
|
||||
static assert(__traits(compiles, cast(void*)ip));
|
||||
}
|
||||
|
||||
@safe
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue