[llvm] r365251 - Revert "[FileCheck] Simplify numeric variable interface"
Michael Liao via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 5 15:23:27 PDT 2019
Author: hliao
Date: Fri Jul 5 15:23:27 2019
New Revision: 365251
URL: http://llvm.org/viewvc/llvm-project?rev=365251&view=rev
Log:
Revert "[FileCheck] Simplify numeric variable interface"
This reverts commit 096600a4b073dd94a366cc8e57bff93c34ff6966.
Modified:
llvm/trunk/include/llvm/Support/FileCheck.h
llvm/trunk/lib/Support/FileCheck.cpp
llvm/trunk/unittests/Support/FileCheckTest.cpp
Modified: llvm/trunk/include/llvm/Support/FileCheck.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FileCheck.h?rev=365251&r1=365250&r2=365251&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/FileCheck.h (original)
+++ llvm/trunk/include/llvm/Support/FileCheck.h Fri Jul 5 15:23:27 2019
@@ -69,13 +69,13 @@ public:
/// \returns this variable's value.
Optional<uint64_t> getValue() const { return Value; }
- /// Sets value of this numeric variable, if undefined. Triggers an assertion
- /// failure if the variable is actually defined.
- void setValue(uint64_t Value);
+ /// Sets value of this numeric variable if not defined. \returns whether the
+ /// variable was already defined.
+ bool setValue(uint64_t Value);
- /// Clears value of this numeric variable, regardless of whether it is
- /// currently defined or not.
- void clearValue();
+ /// Clears value of this numeric variable. \returns whether the variable was
+ /// already undefined.
+ bool clearValue();
/// \returns the line number where this variable is defined.
size_t getDefLineNumber() { return DefLineNumber; }
Modified: llvm/trunk/lib/Support/FileCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/FileCheck.cpp?rev=365251&r1=365250&r2=365251&view=diff
==============================================================================
--- llvm/trunk/lib/Support/FileCheck.cpp (original)
+++ llvm/trunk/lib/Support/FileCheck.cpp Fri Jul 5 15:23:27 2019
@@ -24,15 +24,18 @@
using namespace llvm;
-void FileCheckNumericVariable::setValue(uint64_t NewValue) {
- assert(!Value && "Overwriting numeric variable's value is not allowed");
+bool FileCheckNumericVariable::setValue(uint64_t NewValue) {
+ if (Value)
+ return true;
Value = NewValue;
+ return false;
}
-void FileCheckNumericVariable::clearValue() {
+bool FileCheckNumericVariable::clearValue() {
if (!Value)
- return;
+ return true;
Value = None;
+ return false;
}
Expected<uint64_t> FileCheckExpression::eval() const {
@@ -620,7 +623,8 @@ Expected<size_t> FileCheckPattern::match
if (MatchedValue.getAsInteger(10, Val))
return FileCheckErrorDiagnostic::get(SM, MatchedValue,
"Unable to represent numeric value");
- DefinedNumericVariable->setValue(Val);
+ if (DefinedNumericVariable->setValue(Val))
+ llvm_unreachable("Numeric variable redefined");
}
// Like CHECK-NEXT, CHECK-EMPTY's match range is considered to start after
Modified: llvm/trunk/unittests/Support/FileCheckTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/FileCheckTest.cpp?rev=365251&r1=365250&r2=365251&view=diff
==============================================================================
--- llvm/trunk/unittests/Support/FileCheckTest.cpp (original)
+++ llvm/trunk/unittests/Support/FileCheckTest.cpp Fri Jul 5 15:23:27 2019
@@ -15,23 +15,28 @@ namespace {
class FileCheckTest : public ::testing::Test {};
TEST_F(FileCheckTest, NumericVariable) {
- // Undefined variable: getValue fails, setValue does not trigger assert.
+ // Undefined variable: getValue and clearValue fails, setValue works.
FileCheckNumericVariable FooVar = FileCheckNumericVariable(1, "FOO");
EXPECT_EQ("FOO", FooVar.getName());
llvm::Optional<uint64_t> Value = FooVar.getValue();
EXPECT_FALSE(Value);
- FooVar.clearValue();
- FooVar.setValue(42);
+ EXPECT_TRUE(FooVar.clearValue());
+ EXPECT_FALSE(FooVar.setValue(42));
- // Defined variable: getValue returns value set.
+ // Defined variable: getValue returns value set, setValue fails.
+ Value = FooVar.getValue();
+ EXPECT_TRUE(Value);
+ EXPECT_EQ(42U, *Value);
+ EXPECT_TRUE(FooVar.setValue(43));
Value = FooVar.getValue();
EXPECT_TRUE(Value);
EXPECT_EQ(42U, *Value);
- // Clearing variable: getValue fails.
- FooVar.clearValue();
+ // Clearing variable: getValue fails, clearValue again fails.
+ EXPECT_FALSE(FooVar.clearValue());
Value = FooVar.getValue();
EXPECT_FALSE(Value);
+ EXPECT_TRUE(FooVar.clearValue());
}
uint64_t doAdd(uint64_t OpL, uint64_t OpR) { return OpL + OpR; }
More information about the llvm-commits
mailing list