Revert "IR: Remove null UseList checks in hasNUses methods (#165929)" (#166500)

This reverts commit 93e860e694770f52a9eeecda88ba11173c291ef8.

hasOneUse still has the null check, and it seems bad to be logically
inconsistent across multiple of these predicate functions.
This commit is contained in:
Matt Arsenault 2025-11-04 21:11:03 -08:00 committed by GitHub
parent 849038cad1
commit 044e0f041d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 26 deletions

View File

@ -148,10 +148,18 @@ void Value::destroyValueName() {
}
bool Value::hasNUses(unsigned N) const {
if (!UseList)
return N == 0;
// TODO: Disallow for ConstantData and remove !UseList check?
return hasNItems(use_begin(), use_end(), N);
}
bool Value::hasNUsesOrMore(unsigned N) const {
// TODO: Disallow for ConstantData and remove !UseList check?
if (!UseList)
return N == 0;
return hasNItemsOrMore(use_begin(), use_end(), N);
}

View File

@ -29,8 +29,13 @@ TEST(ConstantsTest, UseCounts) {
EXPECT_TRUE(Zero->use_empty());
EXPECT_EQ(Zero->getNumUses(), 0u);
EXPECT_TRUE(Zero->hasNUses(0));
EXPECT_FALSE(Zero->hasOneUse());
EXPECT_FALSE(Zero->hasOneUser());
EXPECT_FALSE(Zero->hasNUses(1));
EXPECT_FALSE(Zero->hasNUsesOrMore(1));
EXPECT_FALSE(Zero->hasNUses(2));
EXPECT_FALSE(Zero->hasNUsesOrMore(2));
std::unique_ptr<Module> M(new Module("MyModule", Context));
@ -45,36 +50,15 @@ TEST(ConstantsTest, UseCounts) {
// Still looks like use_empty with uses.
EXPECT_TRUE(Zero->use_empty());
EXPECT_EQ(Zero->getNumUses(), 0u);
EXPECT_TRUE(Zero->hasNUses(0));
EXPECT_FALSE(Zero->hasOneUse());
EXPECT_FALSE(Zero->hasOneUser());
EXPECT_FALSE(Zero->hasNUses(1));
EXPECT_FALSE(Zero->hasNUsesOrMore(1));
EXPECT_FALSE(Zero->hasNUses(2));
EXPECT_FALSE(Zero->hasNUsesOrMore(2));
}
#ifdef GTEST_HAS_DEATH_TEST
#ifndef NDEBUG
TEST(ConstantsTest, hasNUsesInvalid) {
LLVMContext Context;
Type *Int32Ty = Type::getInt32Ty(Context);
Constant *Zero = ConstantInt::get(Int32Ty, 0);
std::unique_ptr<Module> M(new Module("MyModule", Context));
// Introduce some uses
new GlobalVariable(*M, Int32Ty, /*isConstant=*/false,
GlobalValue::ExternalLinkage, /*Initializer=*/Zero,
"gv_user0");
new GlobalVariable(*M, Int32Ty, /*isConstant=*/false,
GlobalValue::ExternalLinkage, /*Initializer=*/Zero,
"gv_user1");
for (int I = 0; I != 3; ++I) {
EXPECT_DEATH(Zero->hasNUses(I), "hasUseList\\(\\)");
EXPECT_DEATH(Zero->hasNUsesOrMore(I), "hasUseList\\(\\)");
}
}
#endif
#endif
TEST(ConstantsTest, Integer_i1) {
LLVMContext Context;
IntegerType *Int1 = IntegerType::get(Context, 1);