[PATCH] D104616: [analyzer] Model comparision methods of std::unique_ptr
Gábor Horváth via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 5 08:45:25 PDT 2021
xazax.hun requested changes to this revision.
xazax.hun added inline comments.
This revision now requires changes to proceed.
================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:350
+ QualType Type = getInnerPointerType(C, E->getType()->getAsCXXRecordDecl());
+ std::tie(Val, NewState) = retrieveOrConjureInnerPtrVal(Reg, E, Type, C);
+ return {Val, NewState};
----------------
Nit: couldn't you just ` return retrieveOrConjureInnerPtrVal(Reg, E, Type, C);` instead of all the ceremony with `std::tie`?
================
Comment at: clang/lib/StaticAnalyzer/Checkers/SmartPtrModeling.cpp:365
+ std::tie(FirstPtrVal, State) = makeSValFor(FirstExpr, First);
+ std::tie(SecondPtrVal, State) = makeSValFor(SecondExpr, Second);
+ BinaryOperatorKind BOK =
----------------
I think we might end up losing some information here. Imagine both `makeSValFor` conjuring a new symbol. Only one of the symbols will be stored in the state since capturing happend once, when you created the lambda. Maybe it is better to ask for a state in `makeSValFor` as a parameter instead of doing a lambda capture.
Moreover, `retrieveOrConjureInnerPtrVal` will not even look at the state captured by `makeSValFor`. It will ask the `CheckerContext` to get the state, but that state is the state from the beginning of the function that does not have any of the modifications you made to it.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D104616/new/
https://reviews.llvm.org/D104616
More information about the cfe-commits
mailing list