Skip to content

Stack overflow in Visual D's D_parser component #195

Description

@rainers

There have been a number of reports about stack overflow errors in DParserCOMServer, Visual D's D_Parser process, e.g. https://issues.dlang.org/show_bug.cgi?id=15458

I could reproduce the issue in the bug report (not in the debug version, I guess the analyzer timeout kicks in before the stack overflow occurs), but debugging the release build shows that D_Parser is trying to evaluate the return type of object.opEquals.

Here is a snippet of the current definition:

auto opEquals(Object lhs, Object rhs)
{
    // special cases here...
    // General case => symmetric calls to method opEquals
    return lhs.opEquals(rhs) && rhs.opEquals(lhs);
}
auto opEquals(const Object lhs, const Object rhs)
{
    return opEquals(cast()lhs, cast()rhs);
} 

I suspect that return opEquals(cast()lhs, cast()rhs); matches both calls, with the first not considered "better" after casting away const. So the evaluation recurses endlessly.

[Even if the function matching is fixed, I guess there should be a recursion check somewhere.]

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions