Re: [ROOT] catching exceptions from compiled code in interpreter

From: Masaharu Goto (MXJ02154@nifty.ne.jp)
Date: Thu Nov 21 2002 - 22:49:03 MET


Hello Fons,

As long as compilation goes fine, there shouldn't be.

Thank you
Masa Goto


----- Original Message -----
From: "Fons Rademakers" <Fons.Rademakers@cern.ch>
To: "Masaharu Goto" <MXJ02154@nifty.ne.jp>
Cc: "James Peachey" <peachey@bigband.gsfc.nasa.gov>;
<roottalk@pcroot.cern.ch>
Sent: Friday, November 22, 2002 1:57 AM
Subject: Re: [ROOT] catching exceptions from compiled code in interpreter


> Hi Masa,
>
>   these CINT options have not been enabled for any platform. Are there
> any side effects to be expected?
>
> -- FOns
>
>
> On Thu, 2002-11-21 at 12:54, Masaharu Goto wrote:
> > Hello James,
> >
> > This is because  ROOT is not compiled with G__STD_EXCEPTION
> > and G__EXCEPTION flag in your makefile.
> >
> > Fons,
> > Are G__STD_EXCEPTION and G__EXCEPTION  defined for most
> > of the platforms?  Both of those macros have to be defined in order to
> > catch compiled exception.
> >
> > Thank you
> > Masa Goto
> >
> >
> > ----- Original Message -----
> > From: "James Peachey" <peachey@bigband.gsfc.nasa.gov>
> > To: "Masaharu Goto" <MXJ02154@nifty.ne.jp>
> > Cc: "Fons Rademakers" <Fons.Rademakers@cern.ch>
> > Sent: Thursday, November 21, 2002 5:44 AM
> > Subject: Re: [ROOT] catching exceptions from compiled code in
interpreter
> >
> >
> > > Hello Masa-san,
> > >
> > > I am afraid I have a second problem: exceptions thrown from inside
> > > compiled code are not caught in interpreted code. This happens both
> > > on Linux and Solaris. (On Solaris, I worked around the problem with
> > > std::exception by hand, but on Linux, like you I did not see that
> > > problem at all.)
> > >
> > > My example files are attached in a tarball. After you unpack it and
> > > build it, you should see the following phenomenon:
> > >
> > > anu [79] root_exceptions: root
> > >   *******************************************
> > >   *                                         *
> > >   *        W E L C O M E  to  R O O T       *
> > >   *                                         *
> > >   *   Version   3.03/07    15 August 2002   *
> > >   *                                         *
> > >   *  You are welcome to visit our Web site  *
> > >   *          http://root.cern.ch            *
> > >   *                                         *
> > >   *******************************************
> > >
> > > FreeType Engine v1.x used to render TrueType fonts.
> > > Compiled for linux with thread support.
> > >
> > > CINT/ROOT C/C++ Interpreter version 5.15.50, July 7 2002
> > > Type ? for help. Commands must be C++ statements.
> > > Enclose multiple statements between { }.
> > > root [0] .L libr_except.so
> > > root [1] .x r_except_test.C
> > > anu [80] root_exceptions:
> > >
> > > The message in root_excep_test.C is not printed;
> > > instead the interpreter exits.
> > >
> > > James
> > >
> > > On Wed, 20 Nov 2002, James Peachey wrote:
> > >
> > > > Hello Masa-san,
> > > >
> > > > Thanks for the quick reply. For myself I would be happy with
> > > > turning on namespace std (using -Y). I would definitely like to
> > > > try it when Fons sends the instructions. However, the software I
> > > > am working on (the INTEGRAL science analysis software developed
> > > > at ISDC) is used as a foundation for a lot of other software.
> > > > I am concerned that many other scripts will break until people
> > > > add "using" statements. Are there any other possibilities
> > > > to correct the problem?
> > > >
> > > > Thanks,
> > > > James
> > > >
> > > > On Tue, 19 Nov 2002, Masaharu Goto wrote:
> > > >
> > > > > Hello James,
> > > > >
> > > > > I could not reproduce this problem on my machine(RedHat7.3 Linux)
> > > > > But, this error can be compiler dependent at the moment. So, I can
> > > > > believe you are actually seeing this problem.
> > > > >
> > > > > Cint has a option to switch between 'using namespace std' and
> > explicitly
> > > > > qualifying every object by std::.  Your rootcint is set up as the
> > first
> > > > > case.
> > > > > But you need it to be second.
> > > > >
> > > > > Fons,
> > > > > Could you tell us how to give -Y option(turn on/off std namespace)
> > with
> > > > > rootcint? It will solve James's problem.
> > > > >
> > > > > Thank you
> > > > > Masa Goto
> > > > >
> > > > >
> > > > > ----- Original Message -----
> > > > > From: "James Peachey" <peachey@bigband.gsfc.nasa.gov>
> > > > > To: <roottalk@pcroot.cern.ch>
> > > > > Sent: Tuesday, November 19, 2002 1:56 AM
> > > > > Subject: [ROOT] catching exceptions from compiled code in
interpreter
> > > > >
> > > > >
> > > > > > Hello,
> > > > > >
> > > > > > I'm trying to create a compiled exception class I can catch in
the
> > > > > > interpreter (SunOS 5.8, WS 6.0, Root 3.03.07). My files contain:
> > > > > >
> > > > > > + begin
> > > > >
> > r_exceptLinkDef.h ------------------------------------------------------
> > > > > > #ifdef __CINT__
> > > > > >
> > > > > > #pragma link off all class;
> > > > > > #pragma link off all function;
> > > > > > #pragma link off all global;
> > > > > > #pragma link off all typedef;
> > > > > >
> > > > > > #pragma link C++ class r_exception;
> > > > > >
> > > > > > #endif
> > > > > > + end
> > > > >
> >
r_exceptLinkDef.h --------------------------------------------------------
> > > > > >
> > > > > > + begin
> > > > >
> > r_except.h -------------------------------------------------------------
> > > > > > #ifndef R_EXCEPT_H
> > > > > > #define R_EXCEPT_H
> > > > > >
> > > > > > #include <exception>
> > > > > > #include "Rtypes.h"
> > > > > >
> > > > > > class r_exception: public std::exception {
> > > > > >   public:
> > > > > >     r_exception();
> > > > > >   ClassDef(r_exception, 1)
> > > > > > };
> > > > > > #endif
> > > > > > + end
> > > > >
> >
r_except.h ---------------------------------------------------------------
> > > > > >
> > > > > > Then I execute the following:
> > > > > >
> > > > > > rootcint -f r_exceptCint.cpp -c r_except.h r_exceptLinkDef.h
> > > > > > CC -c -I/data/anu/isdc/root-3.03.07/sparc-sun-solaris2.8/include
> > > > > r_exceptCint.cpp
> > > > > > "r_exceptCint.cpp", line 326: Error: The name exception is
> > ambiguous,
> > > > > exception and std::exception.
> > > > > > "r_exceptCint.cpp", line 326: Error: The name exception is
> > ambiguous,
> > > > > exception and std::exception.
> > > > > > 2 Error(s) detected.
> > > > > > make: *** [r_exceptCint.o] Error 2
> > > > > >
> > > > > > The offending line of code is in the block:
> > > > > >
> > > > > >     316
/*********************************************************
> > > > > >     317 * Inheritance information setup/
> > > > > >     318
*********************************************************/
> > > > > >     319 extern "C" void G__cpp_setup_inheritancer_exceptCint() {
> > > > > >     320
> > > > > >     321    /* Setting up class inheritance */
> > > > > >     322
> > > > >
> >
if(0==G__getnumbaseclass(G__get_linked_tagnum(&G__r_exceptCintLN_r_exception
> > > > > ))) {
> > > > > >     323      r_exception *G__Lderived;
> > > > > >     324      G__Lderived=(r_exception*)0x1000;
> > > > > >     325      {
> > > > > >     326        exception *G__Lpbase=(exception*)G__Lderived;
> > > > > >     327
> > > > >
> >
G__inheritance_setup(G__get_linked_tagnum(&G__r_exceptCintLN_r_exception),G_
> > > > >
> >
_get_linked_tagnum(&G__r_exceptCintLN_exception),(long)G__Lpbase-(long)G__Ld
> > > > > erived,1,1);
> > > > > >     328      }
> > > > > >     329    }
> > > > > >     330 }
> > > > > >
> > > > > > After I run the rootcint command, if I change line 326 to use
> > > > > > the fully qualified "std::exception" instead of just "exception"
> > > > > > then it compiles and runs properly.
> > > > > >
> > > > > > Is this a problem with root/rootcint or am I doing something
wrong?
> > > > > >
> > > > > > Regards,
> > > > > > James
> > > > > >
> > > > >
> > > >
> > > >
> > > >
> > > >
> > >
> --
> Org:    CERN, European Laboratory for Particle Physics.
> Mail:   1211 Geneve 23, Switzerland
> E-Mail: Fons.Rademakers@cern.ch              Phone: +41 22 7679248
> WWW:    http://root.cern.ch/~rdm/            Fax:   +41 22 7679480
>



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:20 MET