[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]

Re: Bug dans g++ et LinuxPPC re: throw/catch



(Désolé, mon message a été coupé. Le FBI enquête.
Revoici la fin.)


Voici le code de main(): c'est le premier throw qui appelle
terminate(), comme s'il n'y avait pas de catch(...).

int main(int argc, char *argv[])
{
  cerr << "try: " << __FILE__ << ":" << __LINE__ << endl;
  try { throw 1844; } catch (...) { cerr << "catch!" << endl; }
  cerr << "apres catch: " << __FILE__ << ":" << __LINE__ << endl;

  CService *leService = NULL;
  try
  {
    cerr << "avant new" << endl;
    leService = new CServiceCorrection();
    cerr << "apres new" << endl;
  }
  catch (int err)
  {
    cerr << "catch (int err): err = " << err << endl;
    return 99;
  }
  catch (...)
  {
    cerr << "catch (...)" << endl;
    return 111;
  }

  cerr << leService->NomService() << endl;

  cerr << "fin" << endl;
  return 0;
}

Si on enlève l'énoncé qui appelle leService->NomService() à la
fin de la fonction, alors le throw 1844 est attrapé correctement
par le catch correspondant. Je ne comprends pas comment la simple
présence de l'avant dernier énoncé de la fonction peut troubler
un énoncé qui vient avant.

J'utilise LinuxPPC R5 sur un PowerMac 7200/120. Le problème ne se
produit pas sur un RedHat 5.2 ou 6.0 sur un Pentium. Le co