steakhal planned changes to this revision. steakhal added inline comments.
================ Comment at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h:98-104 + const auto IsIntegralOrUnscopedCompleteEnumerationType = [](QualType Ty) { + const Type *CanonicalType = Ty.getCanonicalType().getTypePtr(); + if (const auto *ET = dyn_cast<EnumType>(CanonicalType)) + return ET->getDecl()->isComplete() && !ET->getDecl()->isScoped(); + + return Ty->isIntegralOrEnumerationType(); + }; ---------------- vsavchenko wrote: > I don't really see any reasons why is this a lambda and not a free function It's somewhat domain-specific that we require: - `bool-uint128` builtin types - complete, scoped `enum` types ((I think we need completeness for the analysis)) --- The one that comes quite close to these requirements was the `isIntegralOrEnumerationType`, but that does not check if the enum is //unscoped//. We can extend the `Type` header with this. Should we go on that route? ================ Comment at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h:101 + if (const auto *ET = dyn_cast<EnumType>(CanonicalType)) + return ET->getDecl()->isComplete() && !ET->getDecl()->isScoped(); + ---------------- vsavchenko wrote: > I think it's better to add tests for this condition. You are right, I will add such cases as well. ================ Comment at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h:106-107 + // FIXME: Remove the second disjunct when we support symbolic // truncation/extension. + const bool BothHaveSameCanonicalTypes = ---------------- vsavchenko wrote: > Maybe this comment should be moved closer to the `return` statement? Yes, I will move it closer. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D85528/new/ https://reviews.llvm.org/D85528 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits