[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Octave-bug-tracker] [bug #48185] mexCallMATLAB doesn't exit mex file on
From: |
Joseph Young |
Subject: |
[Octave-bug-tracker] [bug #48185] mexCallMATLAB doesn't exit mex file on error on first call |
Date: |
Thu, 9 Jun 2016 01:57:34 +0000 (UTC) |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0 |
URL:
<http://savannah.gnu.org/bugs/?48185>
Summary: mexCallMATLAB doesn't exit mex file on error on
first call
Project: GNU Octave
Submitted by: josyoun
Submitted on: Thu 09 Jun 2016 01:57:32 AM GMT
Category: Interpreter
Severity: 3 - Normal
Priority: 5 - Normal
Item Group: Incorrect Result
Status: None
Assigned to: None
Originator Name: josyoun
Originator Email:
Open/Closed: Open
Discussion Lock: Any
Release: 4.0.0
Operating System: GNU/Linux
_______________________________________________________
Details:
It doesn't look like mexCallMATLAB exits the routine when an error occurs on
the first call. Subsequent calls exit normally. In general, mexCallMATLAB
should immediately exit the mex file on error, which makes the return value a
little superfluous. Consider the code:
$ cat test01.cpp
#include "mex.h"
#include <array>
#include <iostream>
void mexFunction(
int nOutput,mxArray* pOutput[],
int nInput,mxArray const * pInput[]
) try {
// Calling convention should be
// f_x = test01(f,x)
auto f = const_cast <mxArray*> (pInput[0]);
auto x = const_cast <mxArray*> (pInput[1]);
// Call the function
auto input = std::array <mxArray *,2> {f,x};
auto output = std::array <mxArray *,1> ();
auto err=mexCallMATLAB(1,output.data(),2,input.data(),"feval");
if(err)
throw std::runtime_error("There's a MATLAB/Octave error");
// Assign the return value
pOutput[0]=output[0];
// Return nothing
return;
} catch(std::runtime_error const & e) {
std::cerr << "Exception!!!!!" << std::endl;
return;
}
which is compiled with:
g++ -std=c++14 -g -fPIC -I /usr/include/octave-4.0.0/octave/ test01.cpp
-shared -o test01.mex
And the driver code:
$ cat driver01.m
f = @(x)x+1
x = {1}
y = test01(f,x)
This should error since we can't add a cell array to a number. When we run
the routine:
$ octave
octave: no graphical display found
octave: disabling GUI features
GNU Octave, version 4.0.0
Copyright (C) 2015 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. For details, type 'warranty'.
Octave was configured for "x86_64-pc-linux-gnu".
Additional information about Octave is available at http://www.octave.org.
Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html
Read http://www.octave.org/bugs.html to learn how to submit bug reports.
For information about changes from previous versions, type 'news'.
octave:1> driver01
f =
@(x) x + 1
x =
{
[1,1] = 1
}
error: binary operator '+' not implemented for 'cell' by 'scalar' operations
error: called from
driver01> at line -1 column -1
driver01 at line 3 column 3
Exception!!!!!
y = [](0x0)
We see that the exception is thrown and that y is assigned a null value. If
we run the routine a second time:
octave:2> driver01
f =
@(x) x + 1
x =
{
[1,1] = 1
}
error: binary operator '+' not implemented for 'cell' by 'scalar' operations
error: called from
driver01> at line -1 column -1
driver01 at line 3 column 3
The exception is not thrown and y is not assigned a value. I believe the
behavior in the second case to be correct and the behavior in the first case
to be a bug.
_______________________________________________________
Reply to this item at:
<http://savannah.gnu.org/bugs/?48185>
_______________________________________________
Message sent via/by Savannah
http://savannah.gnu.org/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Octave-bug-tracker] [bug #48185] mexCallMATLAB doesn't exit mex file on error on first call,
Joseph Young <=