diff --git a/llvm/include/llvm/Support/FileCheck.h b/llvm/include/llvm/Support/FileCheck.h --- a/llvm/include/llvm/Support/FileCheck.h +++ b/llvm/include/llvm/Support/FileCheck.h @@ -71,13 +71,13 @@ /// \returns this variable's value. Optional getValue() const { return Value; } - /// Sets value of this numeric variable if not defined. \returns whether the - /// variable was already defined. - bool setValue(uint64_t Value); + /// Sets value of this numeric variable, if undefined. Triggers an assertion + /// failure if the variable is actually defined. + void setValue(uint64_t Value); - /// Clears value of this numeric variable. \returns whether the variable was - /// already undefined. - bool clearValue(); + /// Clears value of this numeric variable, regardless of whether it is + /// currently defined or not. + void clearValue(); /// \returns the line number where this variable's value becomes available. size_t getAvailLineNumber() { return AvailLineNumber; } diff --git a/llvm/lib/Support/FileCheck.cpp b/llvm/lib/Support/FileCheck.cpp --- a/llvm/lib/Support/FileCheck.cpp +++ b/llvm/lib/Support/FileCheck.cpp @@ -24,18 +24,15 @@ using namespace llvm; -bool FileCheckNumericVariable::setValue(uint64_t NewValue) { - if (Value) - return true; +void FileCheckNumericVariable::setValue(uint64_t NewValue) { + assert(!Value && "Overwriting numeric variable's value"); Value = NewValue; - return false; } -bool FileCheckNumericVariable::clearValue() { +void FileCheckNumericVariable::clearValue() { if (!Value) - return true; + return; Value = None; - return false; } Expected FileCheckExpression::eval() const { @@ -624,8 +621,7 @@ if (MatchedValue.getAsInteger(10, Val)) return FileCheckErrorDiagnostic::get(SM, MatchedValue, "Unable to represent numeric value"); - if (DefinedNumericVariable->setValue(Val)) - llvm_unreachable("Numeric variable redefined"); + DefinedNumericVariable->setValue(Val); } // Like CHECK-NEXT, CHECK-EMPTY's match range is considered to start after diff --git a/llvm/unittests/Support/FileCheckTest.cpp b/llvm/unittests/Support/FileCheckTest.cpp --- a/llvm/unittests/Support/FileCheckTest.cpp +++ b/llvm/unittests/Support/FileCheckTest.cpp @@ -15,28 +15,23 @@ class FileCheckTest : public ::testing::Test {}; TEST_F(FileCheckTest, NumericVariable) { - // Undefined variable: getValue and clearValue fails, setValue works. + // Undefined variable: getValue fails, setValue does not trigger assert. FileCheckNumericVariable FooVar = FileCheckNumericVariable("FOO", 1); EXPECT_EQ("FOO", FooVar.getName()); llvm::Optional Value = FooVar.getValue(); EXPECT_FALSE(Value); - EXPECT_TRUE(FooVar.clearValue()); - EXPECT_FALSE(FooVar.setValue(42)); + FooVar.clearValue(); + FooVar.setValue(42); - // Defined variable: getValue returns value set, setValue fails. - Value = FooVar.getValue(); - EXPECT_TRUE(Value); - EXPECT_EQ(42U, *Value); - EXPECT_TRUE(FooVar.setValue(43)); + // Defined variable: getValue returns value set. Value = FooVar.getValue(); EXPECT_TRUE(Value); EXPECT_EQ(42U, *Value); - // Clearing variable: getValue fails, clearValue again fails. - EXPECT_FALSE(FooVar.clearValue()); + // Clearing variable: getValue fails. + FooVar.clearValue(); Value = FooVar.getValue(); EXPECT_FALSE(Value); - EXPECT_TRUE(FooVar.clearValue()); } uint64_t doAdd(uint64_t OpL, uint64_t OpR) { return OpL + OpR; }