[3dprinter-general] Bug#1056897: Bug#1056897: FTBFS: Plater.cpp:5313: error: call of overloaded ‘load_files?=?=(<brace-enclosed initializer list>)=?UTF-8?Q?=?UTF-8?Q?’ is ambiguous
Gregor Riepl
onitake at gmail.com
Mon Dec 4 01:36:56 GMT 2023
> Gah, looks like some arch-dependent glitch. Which explains why it didn't
> happen to either of us (we probably both used amd64 machines, I
> definitely did) and then the failure did happen upon publishing.
>
> Thanks for your help, I'll try to help get the next fix in once it's ready.
Ok, so I have a preliminary status report.
I debugged the issue on i386 first, because that's the easiest to do
with standard PC hardware.
In contrast with the other architectures, the value reported by the
failed unit test is off by several orders of magnitude on i386, while it
seems to be "only" a sign issue on other architectures.
I've isolated the issue to make debugging easier, and that revealed
incomplete initialization of the Slic3r::arr2::GravityKernel object -
this object is allocated on the stack by the unit test, and while the
constructors of all fields are called, the field active_sink remains
uninitialized.
This is apparently by design, as stated in the Eigen documentation (the
LA library used by Slicer):
https://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html
> A default constructor is always available, never performs any dynamic
memory allocation, and **never initializes the matrix coefficients**.
So, this is most definitely a bug in PrusaSlicer, because it doesn't
explicitly assign an initial value to
Slic3r::arr2::GravityKernel.active_sink - but uses it later anyway.
I don't know why this only causes issues on i386, but it's certainly
dangerous on all architectures.
The fix quite easy, though.
Modify line 20 and 21 in
src/libslic3r/Arrange/Core/NFP/Kernels/GravityKernel.hpp as follows:
- GravityKernel(Vec2crd gravity_center) : sink{gravity_center} {}
- GravityKernel() = default;
+ GravityKernel(Vec2crd gravity_center) : sink{gravity_center},
active_sink{0, 0} {}
+ GravityKernel() : active_sink{0, 0} {};
I'll file separate bug report + corresponding upstream report later.
Now, I don't know if this will fix the issues on the other
architectures, but I'll try to reproduce them on an arm64 device at
least. It's very likely that the issue is the same everywhere.
More information about the 3dprinter-general
mailing list