[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