|
6 | 6 | //
|
7 | 7 | //===----------------------------------------------------------------------===//
|
8 | 8 |
|
| 9 | +#include "llvm/ADT/FunctionExtras.h" |
| 10 | +#include "llvm/ADT/Optional.h" |
| 11 | +#include "llvm/ADT/PointerIntPair.h" |
| 12 | +#include "llvm/ADT/SmallString.h" |
| 13 | +#include "llvm/ADT/SmallVector.h" |
| 14 | +#include "llvm/ADT/StringRef.h" |
9 | 15 | #include "llvm/Support/type_traits.h"
|
10 | 16 | #include "gtest/gtest.h"
|
11 | 17 |
|
@@ -92,6 +98,26 @@ TEST(Triviality, Tester) {
|
92 | 98 | TrivialityTester<B &&, false, true>();
|
93 | 99 | }
|
94 | 100 |
|
| 101 | +// Test that the following ADT behave as expected wrt. trivially copyable trait |
| 102 | +// |
| 103 | +// NB: It is important that this trait behaves the same for (at least) these |
| 104 | +// types for all supported compilers to prevent ABI issue when llvm is compiled |
| 105 | +// with compiler A and an other project using llvm is compiled with compiler B. |
| 106 | + |
| 107 | +TEST(Triviality, ADT) { |
| 108 | + |
| 109 | + TrivialityTester<llvm::SmallVector<int>, false, false>(); |
| 110 | + TrivialityTester<llvm::SmallString<8>, false, false>(); |
| 111 | + |
| 112 | + TrivialityTester<std::function<int()>, false, false>(); |
| 113 | + TrivialityTester<std::pair<int, bool>, true, true>(); |
| 114 | + TrivialityTester<llvm::unique_function<int()>, false, false>(); |
| 115 | + TrivialityTester<llvm::StringRef, true, true>(); |
| 116 | + TrivialityTester<llvm::ArrayRef<int>, true, true>(); |
| 117 | + TrivialityTester<llvm::PointerIntPair<int *, 2>, true, true>(); |
| 118 | + TrivialityTester<llvm::Optional<int>, true, true>(); |
| 119 | +} |
| 120 | + |
95 | 121 | } // namespace triviality
|
96 | 122 |
|
97 | 123 | } // end anonymous namespace
|
0 commit comments