On Wed, 25 Sep 2002, Leopold Toetsch wrote: > This patch obsoletes all previous imcc 0.0.9 patches and contains all > current fixes and improvements. > I suppose, problems Andy has, to be related with the parser.
Actually, the core dump I got in reg_sort_f turned out to be a simple bug in reg_sort_f! That's probably one of the few times I've ever encountered where a core dump occurred near the bug that caused it :-). The problem is that the qsort() function wasn't being called with a correct comparison function. The supplied comparison function only ever returned 0 or 1, instead of the required -1, 0, 1. Why your qsort was happy anyway, I don't know. What Solaris's qsort ended up doing was walking off the front of the reglist[] array, effectively trying to sort reglist[-1], which, of course, didn't exist. (*Why* it did that is a bit of a mystery; I'd have to look at the detailed implementation of Sun's qsort to say for sure.) Here's the patch that fixes it. --- parrot-orig/languages/imcc/imc.c Mon Sep 23 14:05:20 2002 +++ parrot-andy/languages/imcc/imc.c Wed Sep 25 13:18:34 2002 @@ -153,7 +153,15 @@ static int reg_sort_f(const void *a, const void *b) { SymReg *ra = *(SymReg**) a; SymReg *rb = *(SymReg**) b; - return ra->first_ins->index > rb->first_ins->index ? 1 : 0; + if (ra->first_ins->index < rb->first_ins->index) { + return -1; + } + else if (ra->first_ins->index == rb->first_ins->index) { + return 0; + } + else { + return 1; + } } static void sort_reglist() -- Andy Dougherty [EMAIL PROTECTED]