Bug#803552: libeigen3-dev: Upgrade from 3.2.x to 3.3~alpha causes gnudatalanguage to FTBFS on arm64

Axel Beckert abe at debian.org
Sat Oct 31 11:20:40 UTC 2015


Package: libeigen3-dev
Version: 3.3~alpha1-2
Severity: grave
Control: affects -1 src:gnudatalanguage
Justification: Makes package unusable on one release architecture

Hi,

with the most recent upload of gnudatalanguage (which just changed
documentation stuff), it deterministically FTBFS on arm64 -- and only
there (not counting non-release architectures which have different
issues):

https://buildd.debian.org/status/package.php?p=gnudatalanguage
https://buildd.debian.org/status/fetch.php?pkg=gnudatalanguage&arch=arm64&ver=0.9.5-3&stamp=1445723100

Example log excerpt:

In function 'float64x2_t vdupq_lane_f64(float64x1_t, int)',
    inlined from 'Packet Eigen::internal::pmul(const Packet&, const Packet&) [with Packet = Eigen::internal::Packet1cd]' at /usr/include/eigen3/Eigen/src/Core/arch/NEON/Complex.h:329:22,
    inlined from 'Packet Eigen::internal::pmadd(const Packet&, const Packet&, const Packet&) [with Packet = Eigen::internal::Packet1cd]' at /usr/include/eigen3/Eigen/src/Core/GenericPacketMath.h:450:14,
    inlined from 'static void Eigen::internal::etor_product_packet_impl<0, -1, Lhs, Rhs, Packet, LoadMode>::run(Eigen::Index, Eigen::Index, const Lhs&, const Rhs&, Eigen::Index, Packet&) [with Lhs = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> > >; Rhs = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> > >; Packet = Eigen::internal::Packet1cd; int LoadMode = 0; Eigen::Index = long int]' at /usr/include/eigen3/Eigen/src/Core/ProductEvaluators.h:601:7,
    inlined from 'const PacketType Eigen::internal::product_evaluator<Eigen::Product<Lhs, Rhs, 1>, ProductTag, Eigen::DenseShape, Eigen::DenseShape, typename Lhs::Scalar, typename Rhs::Scalar>::packet(Eigen::Index, Eigen::Index) const [with int LoadMode = 0; PacketType = Eigen::internal::Packet1cd; Lhs = Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >; Rhs = Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >; int ProductTag = 8; typename Rhs::Scalar = std::complex<double>; typename Lhs::Scalar = std::complex<double>; Eigen::Index = long int]' at /usr/include/eigen3/Eigen/src/Core/ProductEvaluators.h:493:5,
    inlined from 'void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignPacket(Eigen::Index, Eigen::Index) [with int StoreMode = 16; int LoadMode = 0; PacketType = Eigen::internal::Packet1cd; DstEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> > >; SrcEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Product<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, 1> >; Functor = Eigen::internal::assign_op<std::complex<double> >; int Version = 0; Eigen::Index = long int]' at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:598:5,
    inlined from 'void Eigen::internal::generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version>::assignPacketByOuterInner(Eigen::Index, Eigen::Index) [with int StoreMode = 16; int LoadMode = 0; PacketType = Eigen::internal::Packet1cd; DstEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> > >; SrcEvaluatorTypeT = Eigen::internal::evaluator<Eigen::Product<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, 1> >; Functor = Eigen::internal::assign_op<std::complex<double> >; int Version = 0; Eigen::Index = long int]' at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:612:5,
    inlined from 'static void Eigen::internal::dense_assignment_loop<Kernel, 4, 0>::run(Kernel&) [with Kernel = Eigen::internal::generic_dense_assignment_kernel<Eigen::internal::evaluator<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> > >, Eigen::internal::evaluator<Eigen::Product<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, 1> >, Eigen::internal::assign_op<std::complex<double> >, 0>]' at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:516:9,
    inlined from 'void Eigen::internal::call_dense_assignment_loop(const DstXprType&, const SrcXprType&, const Functor&) [with DstXprType = Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >; SrcXprType = Eigen::Product<Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, Eigen::Map<Eigen::Matrix<std::complex<double>, -1, -1>, 16, Eigen::Stride<0, 0> >, 1>; Functor = Eigen::internal::assign_op<std::complex<double> >]' at /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:659:3:
/usr/lib/gcc/aarch64-linux-gnu/5/include/arm_neon.h:14027:10: error: lane 1 out of range 0 - 0
   return __aarch64_vdupq_lane_f64 (__a, __b);
          ^

Downgrading libeigen3-dev from 3.3~alpha1-2 to 3.2.5-6 from
http://snapshot.debian.org/package/eigen3/3.2.5-6/#libeigen3-dev_3.2.5-6
makes the problem vanish.

Since …

* all error messages in the build log only mention code coming from the
  libeigen3-dev package and no gnudatalanguage code,
* no code change in gnudatalanguage happened since the last upload,
* downgrading libeigen3-dev helps,
* the issues seem to be cause by architecture-specific flows in
  libeigen3-dev,
* the current version of libeigen3-dev in unstable is an alpha version,
* and the upstream changelog says "There might be some issues with
  ARM/NEON",

… I suspect that this is an issue in libeigen3-dev and not in
gnudatalanguage.

So far I would have set the severity only to "important" as only
gnudatalanguage seems affected. But since upstream knows about issues
with arm64 (see below) and they sound as broken as gnudatalanguage
currently is on arm64, IMHO "grave" is justified.

The issue described in this bug report may be upstream bug mentioned in
the upstream changelog (http://eigen.tuxfamily.org/index.php?title=3.3)
as known issue (http://eigen.tuxfamily.org/bz/show_bug.cgi?id=907;
current state "REOPENED") but could also be a different issue.

At least all of the patches I saw in that upstream bug report are either
already part of the package or -- the most recent ones -- are very
specific to clang compilers on iOS devices. Then again both issues (this
bug report as well as the mentioned upstream bug report) are (at least
partially) about Eigen/src/Core/GenericPacketMath.h, arm64, NEON and
gcc (i.e. not only clang).

(Not marking as forwarded as I'm not sure if it's the same issue.)

-- System Information:
[Bug report written on a different system than where the issue occurs,
hence no system information.]



More information about the debian-science-maintainers mailing list