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

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



Je constate une bizarrerie avec LinuxPPC et g++ et je voudrais confirmer
que ce n'est pas spécifique à ma machine. Un throw devrait être attrapé
par un catch mais ne l'est pas.

Si vous téléchargez l'archive
  http://www3.sympatico.ca/sarrazip/bug-throw-linuxppc.tar.gz
vous aurez un petit programme illustrant le
problème. Il faut que g++ soit installé. Voici comment vous pouvez
l'essayer pour me dire comment il se comporte:

- déployez l'archive dans un répertoire quelconque; ceci va créer un
  sous-répertoire 'bug-throw-linuxppc' et quelques fichiers dans ce
  dernier:
  tar xzf bug-throw-linuxppc.tar.gz

- cd bug-throw-linuxppc

- make

- ./go

Cette dernière commande devrait afficher les lignes suivantes:

try: correcteurd.cpp:16
catch!
apres catch: correcteurd.cpp:18
avant new
apres new
correction
fin

Si votre LinuxPPC a cependant le même problème que le mien, la commande
devrait plutôt afficher les deux lignes suivantes:

try: correcteurd.cpp:16
Aborted

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" << end