[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



Tes chances de trouver une réponse dans cette section de discussion sont
plutôt minces, tu devrais aller voir dans des groupes plus
spécialisés...

Pierre Sarrazin wrote:

> (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