mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
f9bddc40cd
A fallible iterator is one whose increment or decrement operations may fail. This would usually be supported by replacing the ++ and -- operators with methods that return error: class MyFallibleIterator { public: // ... Error inc(); Errro dec(); // ... }; The downside of this style is that it no longer conforms to the C++ iterator concept, and can not make use of standard algorithms and features such as range-based for loops. The fallible_iterator wrapper takes an iterator written in the style above and adapts it to (mostly) conform with the C++ iterator concept. It does this by providing standard ++ and -- operator implementations, returning any errors generated via a side channel (an Error reference passed into the wrapper at construction time), and immediately jumping the iterator to a known 'end' value upon error. It also marks the Error as checked any time an iterator is compared with a known end value and found to be inequal, allowing early exit from loops without redundant error checking*. Usage looks like: MyFallibleIterator I = ..., E = ...; Error Err = Error::success(); for (auto &Elem : make_fallible_range(I, E, Err)) { // Loop body is only entered when safe. // Early exits from loop body permitted without checking Err. if (SomeCondition) return; } if (Err) // Handle error. * Since failure causes a fallible iterator to jump to end, testing that a fallible iterator is not an end value implicitly verifies that the error is a success value, and so is equivalent to an error check. Reviewers: dblaikie, rupprecht Subscribers: mgorny, dexonsmith, kristina, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D57618 llvm-svn: 353237
78 lines
1.6 KiB
CMake
78 lines
1.6 KiB
CMake
set(LLVM_LINK_COMPONENTS
|
|
Support
|
|
)
|
|
|
|
add_llvm_unittest(ADTTests
|
|
AnyTest.cpp
|
|
APFloatTest.cpp
|
|
APIntTest.cpp
|
|
APSIntTest.cpp
|
|
ArrayRefTest.cpp
|
|
BitmaskEnumTest.cpp
|
|
BitVectorTest.cpp
|
|
BreadthFirstIteratorTest.cpp
|
|
BumpPtrListTest.cpp
|
|
DAGDeltaAlgorithmTest.cpp
|
|
DeltaAlgorithmTest.cpp
|
|
DenseMapTest.cpp
|
|
DenseSetTest.cpp
|
|
DepthFirstIteratorTest.cpp
|
|
EquivalenceClassesTest.cpp
|
|
FallibleIteratorTest.cpp
|
|
FoldingSet.cpp
|
|
FunctionExtrasTest.cpp
|
|
FunctionRefTest.cpp
|
|
HashingTest.cpp
|
|
IListBaseTest.cpp
|
|
IListIteratorTest.cpp
|
|
IListNodeBaseTest.cpp
|
|
IListNodeTest.cpp
|
|
IListSentinelTest.cpp
|
|
IListTest.cpp
|
|
ImmutableListTest.cpp
|
|
ImmutableMapTest.cpp
|
|
ImmutableSetTest.cpp
|
|
IntEqClassesTest.cpp
|
|
IntervalMapTest.cpp
|
|
IntrusiveRefCntPtrTest.cpp
|
|
IteratorTest.cpp
|
|
MakeUniqueTest.cpp
|
|
MappedIteratorTest.cpp
|
|
MapVectorTest.cpp
|
|
OptionalTest.cpp
|
|
PackedVectorTest.cpp
|
|
PointerEmbeddedIntTest.cpp
|
|
PointerIntPairTest.cpp
|
|
PointerSumTypeTest.cpp
|
|
PointerUnionTest.cpp
|
|
PostOrderIteratorTest.cpp
|
|
PriorityWorklistTest.cpp
|
|
RangeAdapterTest.cpp
|
|
SCCIteratorTest.cpp
|
|
STLExtrasTest.cpp
|
|
ScopeExitTest.cpp
|
|
SequenceTest.cpp
|
|
SetVectorTest.cpp
|
|
SimpleIListTest.cpp
|
|
SmallPtrSetTest.cpp
|
|
SmallSetTest.cpp
|
|
SmallStringTest.cpp
|
|
SmallVectorTest.cpp
|
|
SparseBitVectorTest.cpp
|
|
SparseMultiSetTest.cpp
|
|
SparseSetTest.cpp
|
|
StatisticTest.cpp
|
|
StringExtrasTest.cpp
|
|
StringMapTest.cpp
|
|
StringRefTest.cpp
|
|
StringSwitchTest.cpp
|
|
TinyPtrVectorTest.cpp
|
|
TripleTest.cpp
|
|
TwineTest.cpp
|
|
VariadicFunctionTest.cpp
|
|
)
|
|
|
|
target_link_libraries(ADTTests PRIVATE LLVMTestingSupport)
|
|
|
|
add_dependencies(ADTTests intrinsics_gen)
|