<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Nov 14, 2013 at 12:15 PM, Geoffrey Irving <span dir="ltr"><<a href="mailto:irving@naml.us" target="_blank">irving@naml.us</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, Nov 14, 2013 at 10:06 AM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>

> On Thu, Nov 14, 2013 at 12:02 PM, Geoffrey Irving <<a href="mailto:irving@naml.us">irving@naml.us</a>> wrote:<br>
>><br>
>> Is there a safe way to make petsc throw exceptions from C++ code,<br>
>> without interfering with the same passage from errors through C code?<br>
>> The existence of PETSC_ERROR_IN_CXX and PetscPushErrorHandler seems<br>
>> promising?  Could I push a C++ error handler at the top of a C++<br>
>> function and pop it and the end, for example?<br>
><br>
><br>
> PyLith uses:<br>
><br>
> #define PYLITH_CHECK_ERROR(err) do {if (PetscUnlikely(err))<br>
> {PetscError(PETSC_COMM_SELF,__LINE__,PETSC_FUNCTION_NAME,__FILE__,err,PETSC_ERROR_IN_CXX,0);}}<br>
> while(0)<br>
><br>
> #define PYLITH_CHECK_ERROR_MSG(err, msg) \<br>
>   if (err) { \<br>
><br>
> PetscError(PETSC_COMM_SELF,__LINE__,__FUNCT__,__FILE__,err,PETSC_ERROR_IN_CXX,<br>
> 0, " "); \<br>
>     throw std::runtime_error(msg); }<br>
><br>
>    Matt<br>
<br>
Thanks, that'll work.  I guess my hope for a magical solution where I<br>
didn't have to call the check macro blinded me to the obvious "pass<br>
PETSC_ERROR_IN_CXX" myself path.<br>
<br>
Minor curiosity: why does the _MSG version not use PetscUnlikely?</blockquote><div><br></div><div>I think I wrote the other one later and did not update.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class="HOEnZb"><font color="#888888"><br>
Geoffrey<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener
</div></div>