@@ -1009,12 +1009,15 @@ bool Environment::allows(const Formula &F) const {
1009
1009
}
1010
1010
1011
1011
void Environment::dump (raw_ostream &OS) const {
1012
- // FIXME: add printing for remaining fields and allow caller to decide what
1013
- // fields are printed.
1014
- OS << " DeclToLoc:\n " ;
1015
- for (auto [D, L] : DeclToLoc)
1016
- OS << " [" << D->getNameAsString () << " , " << L << " ]\n " ;
1012
+ llvm::DenseMap<const StorageLocation *, std::string> LocToName;
1013
+ if (ThisPointeeLoc != nullptr )
1014
+ LocToName[ThisPointeeLoc] = " this" ;
1017
1015
1016
+ OS << " DeclToLoc:\n " ;
1017
+ for (auto [D, L] : DeclToLoc) {
1018
+ auto Iter = LocToName.insert ({L, D->getNameAsString ()}).first ;
1019
+ OS << " [" << Iter->second << " , " << L << " ]\n " ;
1020
+ }
1018
1021
OS << " ExprToLoc:\n " ;
1019
1022
for (auto [E, L] : ExprToLoc)
1020
1023
OS << " [" << E << " , " << L << " ]\n " ;
@@ -1025,7 +1028,28 @@ void Environment::dump(raw_ostream &OS) const {
1025
1028
1026
1029
OS << " LocToVal:\n " ;
1027
1030
for (auto [L, V] : LocToVal) {
1028
- OS << " [" << L << " , " << V << " : " << *V << " ]\n " ;
1031
+ OS << " [" << L;
1032
+ if (auto Iter = LocToName.find (L); Iter != LocToName.end ())
1033
+ OS << " (" << Iter->second << " )" ;
1034
+ OS << " , " << V << " : " << *V << " ]\n " ;
1035
+ }
1036
+
1037
+ if (const FunctionDecl *Func = getCurrentFunc ()) {
1038
+ if (Func->getReturnType ()->isReferenceType ()) {
1039
+ OS << " ReturnLoc: " << ReturnLoc;
1040
+ if (auto Iter = LocToName.find (ReturnLoc); Iter != LocToName.end ())
1041
+ OS << " (" << Iter->second << " )" ;
1042
+ OS << " \n " ;
1043
+ } else if (!Func->getReturnType ()->isVoidType ()) {
1044
+ if (ReturnVal == nullptr )
1045
+ OS << " ReturnVal: nullptr\n " ;
1046
+ else
1047
+ OS << " ReturnVal: " << *ReturnVal << " \n " ;
1048
+ }
1049
+
1050
+ if (isa<CXXMethodDecl>(Func)) {
1051
+ OS << " ThisPointeeLoc: " << ThisPointeeLoc << " \n " ;
1052
+ }
1029
1053
}
1030
1054
1031
1055
OS << " \n " ;
0 commit comments