diff --git a/math/vecops/inc/ROOT/RVec.hxx b/math/vecops/inc/ROOT/RVec.hxx index fdf9d42d011f0..7a1f89194e86f 100644 --- a/math/vecops/inc/ROOT/RVec.hxx +++ b/math/vecops/inc/ROOT/RVec.hxx @@ -219,7 +219,12 @@ class R__CLING_PTRCHECK(off) SmallVectorTemplateCommon : public SmallVectorBase // Space after 'FirstEl' is clobbered, do not add any instance vars after it. protected: - SmallVectorTemplateCommon(size_t Size) : Base(getFirstEl(), Size) {} + SmallVectorTemplateCommon(size_t Size) : Base(nullptr, Size) + { + // We delay the initialization of fBeginX until the constructor of the derived class, to avoid doing pointer math + // on an object that is not yet fully constructed. + fBeginX = getFirstEl(); + } void grow_pod(size_t MinSize, size_t TSize) { Base::grow_pod(getFirstEl(), MinSize, TSize); } diff --git a/roottest/root/aclic/rvec_uninitialized/CMakeLists.txt b/roottest/root/aclic/rvec_uninitialized/CMakeLists.txt new file mode 100644 index 0000000000000..59f1ddcb2cddb --- /dev/null +++ b/roottest/root/aclic/rvec_uninitialized/CMakeLists.txt @@ -0,0 +1,3 @@ +ROOTTEST_ADD_TEST(rvec_uninitialized + MACRO rvec_uninitialized.C+ + OUTREF rvec_uninitialized.ref) diff --git a/roottest/root/aclic/rvec_uninitialized/rvec_uninitialized.C b/roottest/root/aclic/rvec_uninitialized/rvec_uninitialized.C new file mode 100644 index 0000000000000..609befd86e7b5 --- /dev/null +++ b/roottest/root/aclic/rvec_uninitialized/rvec_uninitialized.C @@ -0,0 +1,7 @@ +#include + +struct RVecUninitialized { + ROOT::RVec v; +}; + +void rvec_uninitialized() {} diff --git a/roottest/root/aclic/rvec_uninitialized/rvec_uninitialized.ref b/roottest/root/aclic/rvec_uninitialized/rvec_uninitialized.ref new file mode 100644 index 0000000000000..e69de29bb2d1d