Skip to content

Missing overloads due to virtual stub finalization order #2034

Closed
@dcodeIO

Description

@dcodeIO

Concrete class discovery when finalizing virtual stubs still has an ordering issue on cross dependencies (as it seems, we recently fixed chained dependencies), leading to some overloads to be missed in certain cases, in turn running into an assertion when the virtual stub is called. One situation I have seen looks roughly like the following (probably not 100% accurate), but only runs into issues depending on compilation and finalization order:

class Base {
  abstract foo();
  abstract bar();
}

class A extends Base {
  foo() { new B().foo(); }
  bar() { ... }
}

class B extends Base {
  foo() { new A().bar(); }
  bar() { ... }
}

// somewhere deep:
someBase.foo(); // ?

A potential fix could be to add a separate discovery phase before finalizing.

cc @Scutterman

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions