Charusso added inline comments.
================ Comment at: clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h:24 + DynamicTypeInfo(QualType ty, bool CanBeSub = true) + : Ty(ty), CanBeASubClass(CanBeSub) {} ---------------- NoQ wrote: > `Ty(Ty)` is the idiom here. Good to know, thanks! ================ Comment at: clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp:126 + + // If the casts have a common anchestor it could not be a succeeded downcast. + for (const auto &PreviousBase : PreviousRD->bases()) ---------------- NoQ wrote: > Counterexample: > > ``` > struct A {}; > struct B : A {}; > struct C : A, B {}; > ``` > > Downcast from `C` to `B` should succeed, even though they have a common > ancestor `A` (which has the same `CXXRecordDecl` but currently isn't the same > object within `C`, but can be, if `B` declares `A` as a virtual base). So, even it is some kind of anti-pattern as a warning arrive immediately, now I allow `B` to `C` downcasts. Could you explain me more about that virtual idea, please? Based on this possible use-case in my mind two classes are on the same level as every of their bases/vbases are equals. ================ Comment at: clang/lib/StaticAnalyzer/Checkers/CastValueChecker.cpp:174 + +constexpr llvm::StringLiteral Vowels = "aeiou"; + ---------------- NoQ wrote: > Omg lol nice. Did you try to figure out how do other people normally do it? There is no function for that in `ADT/StringExtras.h` + `grep` did not help, so I realized it is a common way to match vowels. Do you know a better solution? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D67079/new/ https://reviews.llvm.org/D67079 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits