Make value of initialized_objects_ a pointer.
PiperOrigin-RevId: 458418975
diff --git a/lifetime_analysis/object_repository.cc b/lifetime_analysis/object_repository.cc
index 2e1fee2..96ace42 100644
--- a/lifetime_analysis/object_repository.cc
+++ b/lifetime_analysis/object_repository.cc
@@ -48,7 +48,7 @@
bool VisitReturnStmt(clang::ReturnStmt* stmt) {
const clang::Expr* expr = stmt->getRetValue();
if (IsInitExprInitializingARecordObject(expr)) {
- PropagateInitializedObject(expr, *object_repository_.return_object_);
+ PropagateInitializedObject(expr, object_repository_.return_object_);
}
return true;
}
@@ -253,7 +253,7 @@
}
if (var->hasInit() && var->getType()->isRecordType()) {
- PropagateInitializedObject(var->getInit(), *object);
+ PropagateInitializedObject(var->getInit(), object);
}
}
@@ -277,7 +277,7 @@
/*transitive=*/false);
if (type->isRecordType()) {
- PropagateInitializedObject(expr, *object);
+ PropagateInitializedObject(expr, object);
}
return object;
}
@@ -297,7 +297,8 @@
//
// The mapping from a terminating expression to the object it initializes
// is stored in `object_repository_.initialized_objects_`.
- void PropagateInitializedObject(const clang::Expr* expr, Object object) {
+ void PropagateInitializedObject(const clang::Expr* expr,
+ const Object* object) {
// TODO(danakj): Use StmtVisitor to implement this method.
// copybara:begin_strip
// Context and hints:
@@ -430,14 +431,14 @@
const Object* field_object =
object_repository_.GetFieldObject(*this_object, init->getMember());
- PropagateInitializedObject(init_expr, *field_object);
+ PropagateInitializedObject(init_expr, field_object);
} else if (init->getBaseClass()) {
std::optional<Object> this_object = object_repository_.GetThisObject();
assert(this_object.has_value());
const Object* base_object = object_repository_.GetBaseClassObject(
*this_object, init->getBaseClass());
- PropagateInitializedObject(init_expr, *base_object);
+ PropagateInitializedObject(init_expr, base_object);
}
// Traverse after finishing with the outer expression, including
@@ -623,7 +624,7 @@
llvm::errs() << "\n" << DebugString();
llvm::report_fatal_error("Didn't find object for initializer");
}
- return iter->second;
+ return *iter->second;
}
ObjectRepository::ObjectValueType ObjectRepository::GetObjectValueType(
diff --git a/lifetime_analysis/object_repository.h b/lifetime_analysis/object_repository.h
index 80a18a1..aea6b59 100644
--- a/lifetime_analysis/object_repository.h
+++ b/lifetime_analysis/object_repository.h
@@ -232,7 +232,7 @@
// An object in this map may occur in other places too: `object_repository_`
// if it is an lvalue, or `return_object_`. Or it may be a temporary in which
// case it is only found in this map.
- llvm::DenseMap<const clang::Expr*, Object> initialized_objects_;
+ llvm::DenseMap<const clang::Expr*, const Object*> initialized_objects_;
std::optional<const Object*> this_object_;
const Object* return_object_;