Skip analysis of inherited constructors as top-level functions because we
cannot model the parameters.
CXXInheritedCtorInitExpr doesn't take arguments and doesn't model
parameter initialization because there is none: the arguments in the outer
CXXConstructExpr directly initialize the parameters of the base class
constructor, and no copies are made. (Making a copy of the parameter is
incorrect, at least if it's done in an observable way.) The derived class
constructor doesn't even exist in the formal model.
E.g., in:
struct X { X *p = this; ~X() {} };
struct A { A(X x) : b(x.p == &x) {} bool b; };
struct B : A { using A::A; };
B b = X{};
... b.b is initialized to true.
That's probably the last reason why we should skip them :) I think we should focus on how these constructors don't even have a body written down in the code, so even if we find a bug, we won't be able to display it. We might as well find the bug in the inherited constructors (also /
inherited/inheriting/ in your comment).