xref: /llvm-project/clang/test/Modules/Inputs/lsv-debuginfo/A/ADT.h (revision ba6fdc57b4be3d65903531a7ad734ccf417cb0a6)
1 #ifndef ADT
2 #define ADT
3 
4 #ifdef WITH_NAMESPACE
5 namespace llvm {
6 #endif
7 template <unsigned Alignment, unsigned Size>
8 struct AlignedCharArray {
9   alignas(Alignment) char buffer[Size];
10 };
11 
12 template <typename T1>
13 class AlignerImpl {
14   T1 t1;
15 };
16 
17 template <typename T1>
18 union SizerImpl {
19   char arr1[sizeof(T1)];
20 };
21 
22 template <typename T1>
23 struct AlignedCharArrayUnion
24     : AlignedCharArray<alignof(AlignerImpl<T1>), sizeof(SizerImpl<T1>)> {};
25 
26 template <typename T, unsigned N>
27 struct SmallVectorStorage {
28   AlignedCharArrayUnion<T> InlineElts[N];
29 };
30 template <typename T, unsigned N>
31 class SmallVector : SmallVectorStorage<T, N> {};
32 
33 template <typename T>
34 struct OptionalStorage {
35   AlignedCharArrayUnion<T> storage;
36 };
37 template <typename T>
38 class Optional {
39   OptionalStorage<T> Storage;
40 };
41 
42 #ifdef WITH_NAMESPACE
43 } // namespace llvm
44 #endif
45 #endif
46