[Insight-developers] MedialNodeCorrespondencesTest, Intel C++
fixed
Miller, James V (Research)
millerjv at crd . ge . com
Thu, 14 Aug 2003 14:04:34 -0400
This was on the Intel C++ compiler on Linux, version 7.
> -----Original Message-----
> From: Bill Hoffman [mailto:bill . hoffman at kitware . com]
> Sent: Thursday, August 14, 2003 1:59 PM
> To: Miller, James V (Research); Insight-developers (E-mail)
> Subject: Re: [Insight-developers] MedialNodeCorrespondencesTest, Intel
> C++ fixed
>
>
> This change was made so that the fixed versions did not have
> the overhead
> of having the extra data associated with the non-fixed
> versions. (8 bytes)
>
>
> From what I can tell, you are saying that the following crashes:
>
>
> #include <vnl/vnl_matrix.h>
> #include <vnl/vnl_matrix_fixed.h>
> void foo(vnl_matrix<double> m)
> {
> vnl_matrix<double> mm = m;
> }
>
> main()
> {
> vnl_matrix_fixed<double,3,3> m;
> foo(m);
> return 0;
> }
>
> Which intel compiler is this? Windows or Linux?
>
> It is using this operator:
>
> //: Cheap conversion to vnl_matrix_ref
> // Sometimes, such as with templated functions, the compiler cannot
> // use this user-defined conversion. For those cases, use the
> // explicit as_ref() method instead.
> operator const vnl_matrix_ref<T>() const { return
> vnl_matrix_ref<T>( num_rows, num_cols,
> const_cast<T*>(data_block()) ); }
>
> Sounds like a bug in the compiler. This is going to be hard
> to track down in all the
> code, and should work.
>
> If you let me know which intel compiler it is crashing on, I
> can take a look.
>
> -Bill
>
>
> >It looks like the vnl_matrix_fixed and vnl_matrix classes
> are no longer related via inheritence. Instead, there are
> some converter routines ( mat_fixed.as_ref() returns a vnl_matrix).
> >
> >The Intel compiler builds were crashing on the deallocation
> of a vnl_matrix. Bill changed the code in
> Ellipsoid*SpatialFunction to take a reference to a
> vnl_matrix_fixed instead of taking a vnl_matrix by value.
> This clears up the problem on the Intel compiler. I am
> guessing the other systems are relying on some other type
> conversion operators that may be flawed on the Intel compiler.
> >
> >Two things to look out for:
> >
> >1. vnl_matrix and vnl_matrix_fixed mismatches.
> >2. function that take matrix types by value as opposed to by
> reference.
> >
>
>
>