Re: [eigen] any remaining issues blocking beta1, speak up!

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


I really can't reproduce on linux x86-64 with GCC 4.3.

I tried compiling with -fstrict-aliasing and also with -O2
I tried both your versions, reading the program's return value like this:

##### 10:53:39 ~/build/eigen$ g++-4.3 z.cpp -o z -I ~/eigen -O2 && ./z
&& echo "zero"
zero

Benoit



2010/7/3 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:
> no warning.
>
>
> here is an simpler version:
>
> #include <iostream>
> #include <Eigen/Dense>
>
> int main()
> {
>  Eigen::Matrix<float,1,1> v;
>  v.setOnes();
>  return (v.cwiseAbs()-v).sum();
> }
>
> I have also simplified CwiseBinaryOp, such that the coeff(int)
> function is directly implemented in CwiseBinaryOp (not in the base
> class CwiseBinaryOpImpl) and such that it simply does:
>
> return m_rhs.coeff(0);
>
> which, in this example, should return v.coeff(0) == 1;
>
>  (so the left hand side and the functor are not used, but I remove
> them then the issue disappear).
>
> I've also changed the functor by an object of type:
>
> struct foo {
>  foo() : x(1) {}
>  int x;
> };
>
> just be sure the issue does not come from our empty functors. No success.
>
> If the left hand side (here v.cwiseAbs(), which is not used) is nested
> by reference, then the issue disappear.
>
> Also, m_rhs().data() is wrong.
>
> ...
>
> gael
>
> On Sat, Jul 3, 2010 at 3:55 PM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>> Can you try compiling with
>>
>>    -Wstrict-aliasing=1
>>
>> indeed, the default value is 3, and 1 is the most aggressive warning
>> level. It could however report a lot of false positives. According to
>> `man gcc`.
>>
>> Benoit
>>
>> 2010/7/3 Gael Guennebaud <gael.guennebaud@xxxxxxxxx>:
>>> here is a simplified version:
>>>
>>> #include <iostream>
>>> #include <Eigen/Dense>
>>>
>>> template<typename A, typename B> EIGEN_DONT_INLINE int foo(const A& a,
>>> const B& b)
>>> {
>>>  return (a - b).sum() <= 0;
>>> }
>>>
>>> int main()
>>> {
>>>  Eigen::Matrix<float,1,1> v;
>>>  v.setOnes();
>>>  return foo(v.colwise().maxCoeff(),v);
>>> }
>>>
>>> which, again, fails with gcc-4.3 + strict-aliasing only....
>>> investigating to see if I can find a workaround.
>>>
>>> gael
>>>
>>> On Sat, Jul 3, 2010 at 1:03 PM, Jitse Niesen <jitse@xxxxxxxxxxxxxxxxx> wrote:
>>>> On Sat, 3 Jul 2010, Benoit Jacob wrote:
>>>>
>>>>> All is in the title. Can we release beta1 this Saturday?
>>>>
>>>> There is also the stable_norm_1 test that is failing on gcc 4.3. This seems
>>>> to be a mistake in Eigen itself.
>>>>
>>>> See the previous email I wrote:
>>>>
>>>> On Thu, 1 Jul 2010, Jitse Niesen wrote:
>>>>>
>>>>> Date: Thu, 1 Jul 2010 11:02:51 +0100 (BST)
>>>>> From: Jitse Niesen <jitse@xxxxxxxxxxxxxxxxx>
>>>>> To: Eigen mailinglist <eigen@xxxxxxxxxxxxxxxxxxx>
>>>>> Subject: Failing stable_norm_1 test
>>>>>
>>>>> Hello,
>>>>>
>>>>> I just spent some time on the stable_norm_1 test, which fails on both my
>>>>> computer and Gael's computer when using gcc 4.3. It looks similar to the
>>>>> issue
>>>>> which you solved by the empty struct magic (well done!).
>>>>>
>>>>> The details are as follows. I constructed the following (fairly) minimal
>>>>> test
>>>>> example:
>>>>>
>>>>> #include <iostream>
>>>>> #include <Eigen/Dense>
>>>>>
>>>>> int main()
>>>>> {
>>>>>  Eigen::Matrix<float,1,1> v;
>>>>>  v(0,0) = 0.1;
>>>>>  std::cerr << "blue norm = " << v.colwise().blueNorm() << "\n";
>>>>>  std::cerr << "status = " <<
>>>>> v.colwise().hypotNorm().isApprox(v.colwise().norm(), 1e-4) << "\n";
>>>>> }
>>>>>
>>>>> When compiling with g++ (version 4.3.3) -O2 -g and running under valgrind,
>>>>> this
>>>>> produces:
>>>>>
>>>>> Use of uninitialised value of size 4
>>>>>    at 0x8048F28: bool
>>>>> Eigen::DenseBase<Eigen::PartialReduxExpr<Eigen::Matrix<float, 1, 1, 0, 1,
>>>>> 1>,
>>>>> Eigen::ei_member_hypotNorm<float>, 0>
>>>>> >::isApprox<Eigen::PartialReduxExpr<Eigen::Matrix<float, 1, 1, 0, 1, 1>,
>>>>> Eigen::ei_member_norm<float>, 0>
>>>>> >(Eigen::DenseBase<Eigen::PartialReduxExpr<Eigen::Matrix<float, 1, 1, 0,
>>>>> > 1, 1>,
>>>>> Eigen::ei_member_norm<float>, 0> > const&, float) const (in
>>>>> /scratch/1/users/jitse/work/c/eigen/eigenfoo)
>>>>>    by 0x8048AF5: main (in /scratch/1/users/jitse/work/c/eigen/eigenfoo)
>>>>>
>>>>> and the same error with the same stack trace a bit later, at 0x8048F2A.
>>>>>
>>>>> The result of the program is also wrong: it should print status = 1, but
>>>>> it
>>>>> says status = 0.
>>>>>
>>>>> The error goes away when compiling with -fno-strict-aliasing.
>>>>> I tried compiling with -Wstrict-aliasing=2 but that does not produce any
>>>>> warnings.
>>>>>
>>>>> Over to the gurus!
>>>>>
>>>>> Cheers,
>>>>> Jitse
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
>
>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/