[clang] [clang][dataflow] Make optional checker work for types derived from optional. (PR #84138)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 18 04:00:12 PDT 2024
================
@@ -129,19 +207,19 @@ auto inPlaceClass() {
auto isOptionalNulloptConstructor() {
return cxxConstructExpr(
- hasOptionalType(),
+ hasOptionalOrDerivedType(),
----------------
martinboehme wrote:
> I would think that we don't know (and therefore can't model) the definition of constructors, methods, operators on the derived class.
I agree in principle, but here we're looking specifically at a constructor that takes a `std::nullopt_t`. I'd say it's a pretty safe bet to assume this constructor is initializing the optional to be empty, even in a derived class (it would be _very_ confusing if it did anything else).
I believe it's also reasonable to conjecture about the behavior of the cases below that use `hasOptionalOrDerivedType()`, i.e. the `std::in_place_t` case and the "value or conversion constructor / assignment" cases.
`llvm::MaybeAlign` has [methods](https://github.com/llvm/llvm-project/blob/3e6db602918435b6a5ac476f63f8b259e7e73af4/llvm/include/llvm/Support/Alignment.h#L131) that correspond to these cases, and it seems desirable to model them correctly.
https://github.com/llvm/llvm-project/pull/84138
More information about the cfe-commits
mailing list