[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