[Pkg-octave-devel] Bug#532656: Bug#532656: Bug#532656: Bug#532656: Bug#532656: octave3.2_3.2.0-1(mips/unstable): FTBFS on mips. Segfault in regression test.
John W. Eaton
jwe at bevo.che.wisc.edu
Thu Jun 11 15:27:48 UTC 2009
On 11-Jun-2009, Rafael Laboissiere wrote:
| * Rafael Laboissiere <rafael at debian.org> [2009-06-11 16:07]:
|
| > * Rafael Laboissiere <rafael at debian.org> [2009-06-11 01:08]:
| >
| > > * Peter De Schrijver <p2 at debian.org> [2009-06-10 19:40]:
| > >
| > > > Package: octave3.2
| > > > Version: 3.2.0-1
| > > > Severity: serious
| > > >
| > > > There was an error while trying to autobuild your package:
| > > >
| > > > > Automatic build of octave3.2_3.2.0-1 on mayr by sbuild/mips 99.999
| > > > > Build started at 20090607-1015
| > >
| > > Thanks, we are already aware of it. It also heppens on mipsel.
| > >
| > > I am currently investigating the problem using mahler.debian.org.
| >
| > I got the culprit. The test of data.cc never returns because the code below
| > makes Octave 3.2.0 on mips (at least on mahler.debian.org) hangs forever:
| >
| > log2(complex(0,Inf))
|
| FWIW, the following works:
|
| octave:1> complex(0,Inf)
| ans = 0 + Infi
The log2 function is defined in src/data.cc. The relevant part is
if (args.length () == 1)
{
if (nargout < 2)
retval(0) = args(0).log2 ();
which ultimately dispatches to
Complex
xlog2 (const Complex& x)
{
#if defined (M_LN2)
static double ln2 = M_LN2;
#else
static double ln2 = log (2);
#endif
return std::log (x) / ln2;
}
So first, can you determine precisely where Octave is actually
hannging? Does the following program work, or does it also hang in
the same way?
#include <cmath>
#include <complex>
#include <iostream>
typedef std::complex<double> Complex;
Complex
xlog2 (const Complex& x)
{
#if defined (M_LN2)
static double ln2 = M_LN2;
#else
static double ln2 = log (2);
#endif
return std::log (x) / ln2;
}
int
main (void)
{
std::complex<double> inf_i (0.0, 1.0/0.0);
std::cerr << inf_i << std::endl;
std::complex<double> result = xlog2 (inf_i);
std::cerr << result << std::endl;
return 0;
}
I expect this program to print:
(0,inf)
(inf,2.26618)
but if it hangs, then I think the problem is in the C++ or C library
functions, not Octave.
jwe
More information about the Pkg-octave-devel
mailing list