[PATCH] D74735: [analyzer] Add support for CXXInheritedCtorInitExpr.
Richard Smith - zygoloid via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 4 17:59:13 PST 2020
rsmith added a comment.
> There are also no argument expressions, even though the inherited constructor for `A` takes one argument `x`. The current patch takes argument expressions from the topmost `CXXConstructExpr`, which also requires a different location context to access. As far as i can see, the result of such substitution is always correct, i.e., the resulting argument `SVal` obtained from the `Environment` this way will always be `evalBinOp`-equal to the correct argument value.
Just in case this isn't clear: the reason why `CXXInheritedCtorInitExpr` doesn't take arguments and doesn't model parameter initialization is 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.
Eg, 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`.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D74735/new/
https://reviews.llvm.org/D74735
More information about the cfe-commits
mailing list