================ @@ -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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits