Skip to content

Commit 39576f7

Browse files
committed
[ntuple] check/test vector item alignment limit
1 parent 36bc25f commit 39576f7

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

tree/ntuple/src/RFieldSequenceContainer.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,11 @@ ROOT::RVectorField::RVectorField(std::string_view fieldName, std::unique_ptr<RFi
516516
fItemSize(itemField->GetValueSize()),
517517
fNWritten(0)
518518
{
519+
if (itemField->GetAlignment() > kMaxItemAlignment) {
520+
throw RException(
521+
R__FAIL(std::string("Unsupported vector item alignment: ") + std::to_string(itemField->GetAlignment())));
522+
}
523+
519524
if (emulatedFromType && !emulatedFromType->empty())
520525
fTraits |= kTraitEmulatedField;
521526

tree/ntuple/test/rfield_vector.cxx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,3 +549,16 @@ TEST(RNTuple, RVecAdopted)
549549
EXPECT_FLOAT_EQ(2.0, buf[1]);
550550
EXPECT_FLOAT_EQ(0.0, buf[2]);
551551
}
552+
553+
TEST(RNTuple, OverAligned)
554+
{
555+
auto res = RFieldBase::Create("f", "std::vector<ROOT::Internal::RAlignedStorage<4096>>");
556+
if (!res)
557+
FAIL() << "Createing a vector of a 4096B aligned type should work";
558+
559+
res = RFieldBase::Create("f", "std::vector<ROOT::Internal::RAlignedStorage<8192>>");
560+
if (res)
561+
FAIL() << "Createing a vector of a 8192B aligned type should fail";
562+
563+
EXPECT_THAT(res.GetError()->GetReport(), ::testing::HasSubstr("Unsupported vector item alignment: 8192"));
564+
}

0 commit comments

Comments
 (0)