Index: clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp +++ clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp @@ -837,7 +837,25 @@ State = bindReturnValue(Call, Pred->getLocationContext(), State); // And make the result node. - Bldr.generateNode(Call.getProgramPoint(), State, Pred); + static SimpleProgramPointTag PT("ExprEngine", "Conservative eval call"); + + ProgramPoint Loc = Pred->getLocation(); + switch (Loc.getKind()) { + case ProgramPoint::PreStmtKind: + Loc = PostStmt(Loc.getAs()->getStmt(), Pred->getLocationContext(), + &PT); + break; + case ProgramPoint::PreImplicitCallKind: { + auto PreCallPP = Loc.getAs(); + Loc = PostImplicitCall(PreCallPP->getDecl(), PreCallPP->getLocation(), + Pred->getLocationContext(), &PT); + break; + } + default: + llvm_unreachable("Unexpected program point."); + } + + Bldr.generateNode(Loc, State, Pred); } ExprEngine::CallInlinePolicy