[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.9 Java Exceptions

The Java language uses a slightly different exception handling model from C++. Normally, GNU C++ will automatically detect when you are writing C++ code that uses Java exceptions, and handle them appropriately. However, if C++ code only needs to execute destructors when Java exceptions are thrown through it, GCC will guess incorrectly. Sample problematic code:

 
  struct S { ~S(); };
  extern void bar();    // is implemented in Java and may throw exceptions
  void foo()
  {
    S s;
    bar();
  }

The usual effect of an incorrect guess is a link failure, complaining of a missing routine called `__gxx_personality_v0'.

You can inform the compiler that Java exceptions are to be used in a translation unit, irrespective of what it might think, by writing `#pragma GCC java_exceptions' at the head of the file. This `#pragma' must appear before any functions that throw or catch exceptions, or run destructors when exceptions are thrown through them.

You cannot mix Java and C++ exceptions in the same translation unit. It is believed to be safe to throw a C++ exception from one file through another file compiled for the for the Java exception model, or vice versa, but there may be bugs in this area.



This document was generated by Vincent Chung on June, 26 2001 using texi2html