--- rpl/src/instructions_d5.c 2011/11/18 21:03:24 1.79 +++ rpl/src/instructions_d5.c 2011/11/18 21:20:02 1.80 @@ -1955,6 +1955,18 @@ instruction_detach(struct_processus *s_e if ((*s_etat_processus).erreur_systeme == d_es) { + // Évite le warning variable s_copie might be clobbered by + // longjmp or vfork + struct_objet **s; + + if ((s = malloc(sizeof(struct_objet *))) == NULL) + { + (*s_etat_processus).erreur_execution = d_es_allocation_memoire; + return; + } + + (*s) = s_copie; + if (setjmp(contexte_processus) == 0) { if (variable_partagee == d_faux) @@ -1988,7 +2000,7 @@ instruction_detach(struct_processus *s_e } else { - if (evaluation(s_etat_processus, s_copie, 'E') == d_erreur) + if (evaluation(s_etat_processus, (*s), 'E') == d_erreur) { if (((*s_etat_processus).erreur_execution == d_ex) && ((*s_etat_processus).erreur_systeme == d_es)) @@ -2015,9 +2027,11 @@ instruction_detach(struct_processus *s_e } } - liberation(s_etat_processus, s_copie); + liberation(s_etat_processus, (*s)); } } + + free(s); } liberation(s_etat_processus, (*s_etat_processus).at_exit);