www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21223] New: nothrow constructor may call throwing constructor

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

          Issue ID: 21223
           Summary: nothrow constructor may call throwing constructor with
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: moonlightsentinel disroot.org

Consider the following example:

==============================================================
struct HasDtor
{
    ~this()
    {
        // Enforce  system, ... just to be sure
        __gshared int i;
        if (++i)
            throw new Exception(new immutable(char)[](10));
    }
}

// The user-defined dtor matches the ctor attributes
struct Strict
{
    HasDtor member;

    this(int) pure nothrow  nogc  safe {}

    ~this() pure nothrow  nogc  safe {}
}

==============================================================

Compiling this code with `-preview=dtorfields` will insert a potential call to
HasDtor.~this into Strict.this. This is obviously an error because the
destructor doesn't match the attributes enforced by the constructor, yet only
pure nothrow  nogc will be reported while non-nothrow is accepted.

--
Sep 04 2020