June 21, 2012 [Issue 8275] New: DMD assumes that Object.toHash() overrides are @safe, even though base is @trusted | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=8275 Summary: DMD assumes that Object.toHash() overrides are @safe, even though base is @trusted Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: minor Priority: P2 Component: DMD AssignedTo: nobody@puremagic.com ReportedBy: alex@lycus.org --- Comment #0 from Alex Rønne Petersen <alex@lycus.org> 2012-06-21 04:37:10 CEST --- class A { override hash_t toHash() pure nothrow const { return *cast(hash_t*)&main; } } void main() { } test.d(5): Error: cast from void function() to uint* not allowed in safe code -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
June 21, 2012 [Issue 8275] DMD assumes that Object.toHash() overrides are @safe, even though base is @trusted | ||||
---|---|---|---|---|
| ||||
Posted in reply to Alex Rønne Petersen | http://d.puremagic.com/issues/show_bug.cgi?id=8275 Kenji Hara <k.hara.pg@gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID --- Comment #1 from Kenji Hara <k.hara.pg@gmail.com> 2012-06-20 21:02:37 PDT --- This is an expected behavior of attribute inference with inheritance. class A { void foo() @trusted {} } class B : A { override void foo() { int n; //auto p = cast(int*)n; // not allowed in safe code } } void main() { pragma(msg, typeof(A.foo)); // prints "@trusted void()" pragma(msg, typeof(B.foo)); // prints "@safe void()" ! } When you inherit a @trusted method, the derived method that you write is inferred as @safe. In other words, if you want to write @trusted code, you should qualify the method with @trueted attribute. class B : A { override void foo() @trusted { int n; auto p = cast(int*)n; // allowed in trusted code } } It seems to me that is necessary to avoid accidentally breaking of @safe system. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation