[clang] [clang] Remove a pointer union from the lifetime bound analysis (PR #97327)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jul 1 10:32:35 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Gábor Horváth (Xazax-hun)
<details>
<summary>Changes</summary>
Since all callers of the API is called with the same type, we do not actually need the pointer union.
---
Full diff: https://github.com/llvm/llvm-project/pull/97327.diff
1 Files Affected:
- (modified) clang/lib/Sema/CheckExprLifetime.cpp (+13-23)
``````````diff
diff --git a/clang/lib/Sema/CheckExprLifetime.cpp b/clang/lib/Sema/CheckExprLifetime.cpp
index be77949e8b547..fea0239f7bc36 100644
--- a/clang/lib/Sema/CheckExprLifetime.cpp
+++ b/clang/lib/Sema/CheckExprLifetime.cpp
@@ -966,27 +966,11 @@ static bool pathOnlyInitializesGslPointer(IndirectLocalPath &Path) {
return false;
}
-static void checkExprLifetimeImpl(
- Sema &SemaRef,
- llvm::PointerUnion<const InitializedEntity *, const AssignedEntity *>
- CEntity,
- Expr *Init) {
- LifetimeKind LK = LK_FullExpression;
-
- const AssignedEntity *AEntity = nullptr;
- // Local variables for initialized entity.
- const InitializedEntity *InitEntity = nullptr;
- const InitializedEntity *ExtendingEntity = nullptr;
- if (CEntity.is<const InitializedEntity *>()) {
- InitEntity = CEntity.get<const InitializedEntity *>();
- auto LTResult = getEntityLifetime(InitEntity);
- LK = LTResult.getInt();
- ExtendingEntity = LTResult.getPointer();
- } else {
- AEntity = CEntity.get<const AssignedEntity *>();
- if (AEntity->LHS->getType()->isPointerType()) // builtin pointer type
- LK = LK_Extended;
- }
+static void checkExprLifetimeImpl(Sema &SemaRef,
+ const InitializedEntity *InitEntity,
+ const InitializedEntity *ExtendingEntity,
+ LifetimeKind LK,
+ const AssignedEntity *AEntity, Expr *Init) {
// If this entity doesn't have an interesting lifetime, don't bother looking
// for temporaries within its initializer.
if (LK == LK_FullExpression)
@@ -1292,12 +1276,18 @@ static void checkExprLifetimeImpl(
void checkExprLifetime(Sema &SemaRef, const InitializedEntity &Entity,
Expr *Init) {
- checkExprLifetimeImpl(SemaRef, &Entity, Init);
+ auto LTResult = getEntityLifetime(&Entity);
+ LifetimeKind LK = LTResult.getInt();
+ const InitializedEntity *ExtendingEntity = LTResult.getPointer();
+ checkExprLifetimeImpl(SemaRef, &Entity, ExtendingEntity, LK, nullptr, Init);
}
void checkExprLifetime(Sema &SemaRef, const AssignedEntity &Entity,
Expr *Init) {
- checkExprLifetimeImpl(SemaRef, &Entity, Init);
+ LifetimeKind LK = LK_FullExpression;
+ if (Entity.LHS->getType()->isPointerType()) // builtin pointer type
+ LK = LK_Extended;
+ checkExprLifetimeImpl(SemaRef, nullptr, nullptr, LK, &Entity, Init);
}
} // namespace clang::sema
``````````
</details>
https://github.com/llvm/llvm-project/pull/97327
More information about the cfe-commits
mailing list