[clang] [clang][dataflow] Add test for crash repro and clean up const accessor handling (PR #129930)
Jan Voung via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 6 10:52:38 PST 2025
================
@@ -577,57 +580,62 @@ void handleConstMemberCall(const CallExpr *CE,
auto &ResultLoc = State.Env.getResultObjectLocation(*CE);
copyRecord(cast<RecordStorageLocation>(Loc), ResultLoc, State.Env);
}
- return;
+ return true;
}
// Cache if the const method returns a reference
- if (RecordLoc != nullptr && CE->isGLValue()) {
+ if (CE->isGLValue()) {
const FunctionDecl *DirectCallee = CE->getDirectCallee();
if (DirectCallee == nullptr)
- return;
+ return false;
StorageLocation &Loc =
State.Lattice.getOrCreateConstMethodReturnStorageLocation(
*RecordLoc, DirectCallee, State.Env, [&](StorageLocation &Loc) {
// no-op
+ // NOTE: if we want to support const ref to pointers or bools
+ // we should initialize their values here.
});
State.Env.setStorageLocation(*CE, Loc);
- return;
- }
-
- // Cache if the const method returns a boolean or pointer type.
- // We may decide to cache other return types in the future.
- if (RecordLoc != nullptr &&
- (CE->getType()->isBooleanType() || CE->getType()->isPointerType())) {
+ return true;
+ } else if (CE->getType()->isBooleanType() || CE->getType()->isPointerType()) {
----------------
jvoung wrote:
Good point -- at least in the PRValue case, did the cheaper isBooleanType/isPointerType checks first.
But still needed to check isSupportedOptionalType in the isGLValue case .
https://github.com/llvm/llvm-project/pull/129930
More information about the cfe-commits
mailing list