[Issue 14865] New: Elide calling invariant for classes with no invariant defined

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Mon Aug 3 10:49:57 PDT 2015


https://issues.dlang.org/show_bug.cgi?id=14865

          Issue ID: 14865
           Summary: Elide calling invariant for classes with no invariant
                    defined
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: dmitry.olsh at gmail.com

See relevant discussion:
http://forum.dlang.org/thread/xdcfidwawitalwjgqzfr@forum.dlang.org?page=1

It's a common knowledge that class invariant stays injected as a call to some
internal routine even if there is no user-defined invariant for a given class.
It should be elided or at the very least inlined and carried on to all of the
usual optimizations to avoid redundant null checks (it seems to check for null
pointer only by default). 

Citing the relevant part of discussion:

On 8/3/15 12:59 PM, Dmitry Olshansky wrote:
> On 03-Aug-2015 19:54, Steven Schveighoffer wrote:

>> ALSO, make SURE you are compiling in release mode, so you aren't calling
>> a virtual invariant function before/after every call.
>
> This one is critical. Actually why do we have an extra call for trivial
> null-check on any object that doesn't even have invariant?

Actually, that the call to the invariant should be avoidable if the object
doesn't have one. It should be easy to check the vtable pointer to see if it
points at the "default" invariant (which does nothing).

-Steve

--


More information about the Digitalmars-d-bugs mailing list