Skip to content

Commit

Permalink
[YAML] Make std::array available (#116059)
Browse files Browse the repository at this point in the history
`std::array` will be handled like `MutableArrayRef`;

- Extending elements is not acceptable.
- For applying fewer sequence, trailing elements will be initialized by
default.

Not like;

- `std::array` is not the reference but holds values. Supposing to hold
small count of elements.
  • Loading branch information
chapuni authored Nov 14, 2024
1 parent 287a343 commit 941f704
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
5 changes: 5 additions & 0 deletions llvm/include/llvm/Support/YAMLTraits.h
Original file line number Diff line number Diff line change
Expand Up @@ -2006,6 +2006,11 @@ struct SequenceTraits<
std::enable_if_t<CheckIsBool<SequenceElementTraits<T>::flow>::value>>
: SequenceTraitsImpl<std::vector<T>, SequenceElementTraits<T>::flow> {};
template <typename T, unsigned N>
struct SequenceTraits<
std::array<T, N>,
std::enable_if_t<CheckIsBool<SequenceElementTraits<T>::flow>::value>>
: SequenceTraitsImpl<std::array<T, N>, SequenceElementTraits<T>::flow> {};
template <typename T, unsigned N>
struct SequenceTraits<
SmallVector<T, N>,
std::enable_if_t<CheckIsBool<SequenceElementTraits<T>::flow>::value>>
Expand Down
29 changes: 24 additions & 5 deletions llvm/unittests/Support/YAMLIOTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3366,6 +3366,15 @@ struct FixedArray {
int values[4];
};

struct StdArray {
StdArray() {
// Initialize to int max as a sentinel value.
for (auto &v : values)
v = std::numeric_limits<int>::max();
}
std::array<int, 4> values;
};

namespace llvm {
namespace yaml {
template <> struct MappingTraits<FixedArray> {
Expand All @@ -3374,11 +3383,21 @@ template <> struct MappingTraits<FixedArray> {
io.mapRequired("Values", array);
}
};
template <> struct MappingTraits<StdArray> {
static void mapping(IO &io, StdArray &st) {
io.mapRequired("Values", st.values);
}
};
} // namespace yaml
} // namespace llvm

TEST(YAMLIO, FixedSizeArray) {
FixedArray faval;
using TestTypes = ::testing::Types<FixedArray, StdArray>;

template <typename T> class YAMLIO : public testing::Test {};
TYPED_TEST_SUITE(YAMLIO, TestTypes, );

TYPED_TEST(YAMLIO, FixedSizeArray) {
TypeParam faval;
Input yin("---\nValues: [ 1, 2, 3, 4 ]\n...\n");
yin >> faval;

Expand All @@ -3400,9 +3419,9 @@ TEST(YAMLIO, FixedSizeArray) {
ASSERT_EQ(serialized, expected);
}

TEST(YAMLIO, FixedSizeArrayMismatch) {
TYPED_TEST(YAMLIO, FixedSizeArrayMismatch) {
{
FixedArray faval;
TypeParam faval;
Input yin("---\nValues: [ 1, 2, 3 ]\n...\n");
yin >> faval;

Expand All @@ -3415,7 +3434,7 @@ TEST(YAMLIO, FixedSizeArrayMismatch) {
}

{
FixedArray faval;
TypeParam faval;
Input yin("---\nValues: [ 1, 2, 3, 4, 5 ]\n...\n");
yin >> faval;

Expand Down

0 comments on commit 941f704

Please sign in to comment.