llvm-project/llvm/unittests/IR
Jakub Kuderski 3348b841d3 Make enum iteration with seq safe by default
By default `llvm::seq` would happily iterate over enums, which may be unsafe if the enum values are not continuous. This patch disable enum iteration with `llvm::seq` and `llvm::seq_inclusive` and adds two new functions: `enum_seq` and `enum_seq_inclusive`.

To make sure enum iteration is safe, we require users to declare their enum types as iterable by specializing `enum_iteration_traits<SomeEnum>`. Because it's not always possible to add these traits next to enum definition (e.g., for enums defined in external libraries), we provide an escape hatch to allow iteration on per-callsite basis by passing `force_iteration_on_noniterable_enum`.

The main benefit of this approach is that these global declarations via traits can appear just next to enum definitions, making easy to spot when enums are miss-labeled, e.g., after introducing new enum values, whereas `force_iteration_on_noniterable_enum` should stand out and be easy to grep for.

This emerged from a discussion with gchatelet@ about reusing llvm's `Sequence.h` in lieu of https://github.com/GPUOpen-Drivers/llpc/blob/dev/lgc/interface/lgc/EnumIterator.h.

Reviewed By: dblaikie, gchatelet, aaron.ballman

Differential Revision: https://reviews.llvm.org/D107378
2021-11-03 20:52:21 -04:00
..
AbstractCallSiteTest.cpp
AsmWriterTest.cpp
AttributesTest.cpp [NFC] Cleanup AttributeList::getStackAlignment() 2021-08-19 14:21:40 -07:00
BasicBlockTest.cpp [RGT] Recode more unreachable assertions and tautologies 2021-03-19 09:17:22 -07:00
CFGBuilder.cpp Switch from llvm::is_trivially_copyable to std::is_trivially_copyable 2020-12-02 22:02:48 -08:00
CFGBuilder.h
CMakeLists.txt [NFC] Add missing dependency in the IR unittests 2020-11-18 10:10:44 +00:00
ConstantRangeTest.cpp Make enum iteration with seq safe by default 2021-11-03 20:52:21 -04:00
ConstantsTest.cpp [IR] Refactor GlobalIFunc to inherit from GlobalObject, Remove GlobalIndirectSymbol 2021-10-20 10:29:47 -07:00
DataLayoutTest.cpp Add a default address space for globals to DataLayout 2020-11-20 15:46:52 +00:00
DebugInfoTest.cpp [DebugInfo][unittest] Fix heap-use-after-free after D76115 2021-03-29 23:31:14 -07:00
DebugTypeODRUniquingTest.cpp [DebugInfo] Skip ODRUniquing for mismatched tags 2021-10-26 15:28:25 -07:00
DemandedBitsTest.cpp
DominatorTreeBatchUpdatesTest.cpp [DomTree][NFC] Clean up nits in DomTree code 2021-10-25 16:05:34 -04:00
DominatorTreeTest.cpp [DomTree] Accept Value as Def (NFC) 2020-10-22 18:32:03 +02:00
FunctionTest.cpp
IRBuilderTest.cpp [IR] Change the default value of InstertElement to poison (1/4) 2021-09-28 22:29:16 +09:00
InstructionsTest.cpp [llvm] Migrate from getNumArgOperands to arg_size (NFC) 2021-10-05 08:29:19 -07:00
IntrinsicsTest.cpp
LegacyPassManagerTest.cpp
MDBuilderTest.cpp
ManglerTest.cpp [SystemZ][z/OS] Add GOFF Support to the DataLayout 2021-09-24 14:09:01 -04:00
MetadataTest.cpp [IR]PATCH 2/2: Add MDNode::printTree and dumpTree 2021-10-02 21:19:52 -07:00
ModuleTest.cpp
PassBuilderCallbacksTest.cpp Clean up uses of gmock Invoke in an attempt to make it work with GCC 6.2. NFCI. 2021-05-17 13:48:45 +02:00
PassManagerTest.cpp [NewPM] Hide pass manager debug logging behind -debug-pass-manager-verbose 2021-05-07 21:51:47 -07:00
PatternMatch.cpp Revert "[IR] `IRBuilderBase::CreateAdd()`: short-circuit `x + 0` --> `x`" 2021-10-27 22:21:37 +03:00
TimePassesTest.cpp
TypesTest.cpp [OpaquePtr] Forbid mixing typed and opaque pointers 2021-09-10 15:18:23 +02:00
UseTest.cpp
UserTest.cpp
VPIntrinsicTest.cpp [VP] Vector predicated vector splice intrinsic 2021-09-29 10:43:36 +02:00
ValueHandleTest.cpp Fixup Asserts+!AbiBreakingChecks fallout from db33f85c71 2021-01-07 14:18:19 -08:00
ValueMapTest.cpp Put back the trailing commas on TYPED_TEST_SUITE 2021-05-17 14:14:13 +02:00
ValueTest.cpp Reland [IR] Increase max alignment to 4GB 2021-10-06 13:29:23 -07:00
VectorTypesTest.cpp [SVE] Remove reliance on TypeSize comparison operators in unit tests 2020-10-21 08:05:55 +01:00
VerifierTest.cpp [NFC] Cleanup more AttributeList::addAttribute() 2021-08-17 21:05:41 -07:00