Hi, I've been trying to get GNUstep up and running on my powerpc setup for a little while, and I figure this is the best place to ask for advice, or if anybody knows some trick I'm not aware of!
The problem: Using 'va_arg()' with type 'id' just doesn't work, you certainly don't get back the arguments to the function, at least. For example, consider the following program: #include <stdio.h> #include <Foundation/Foundation.h> id test(id first, ...) { va_list ap; id second, third; va_start(ap, first); second = va_arg(ap, id); third = va_arg(ap, id); return third; } int main(int argc, char **argv) { NSString *str1 = @"test1"; NSString *str2 = @"test2"; NSString *str3 = @"test3"; id res = test(str3, str2, str3); printf("%x\n", res); if (str3 == res) { printf("works\n"); } else { printf("broken\n"); } return 0; } When run, this prints out: netty$ ./obj/Hello 0 broken And actually, debugging this shows that va_arg is returning the same data each for 'second' and 'third'. Breakpoint 1, test (first=0x382b48f8) at main.m:11 11 return third; Current language: auto; currently minimal (gdb) p first $1 = 0x382b48f8 (gdb) p second $2 = 0x3fe00000 (gdb) p third $3 = 0x0 (gdb) 'second' and 'third' are always 0x3fe00000, and 0x0 on every single run. Replacing 'va_arg(ap, id)' with 'va_arg(ap, void*)' makes the program run as exected. Outputing: netty$ ./obj/Hello 1e5a4910 works For the moment, I've got everything working just by replacing all occurrances of 'id' when used with va_arg with 'void*'. And everything seems to work just fine. The funny thing is, this seems to be specific to 'id' - is it given special treatment somehow? I'm running OpenBSD 6.7, building from a slightly modified ports tree (it's disabled on macppc by default) CC/CXX is set to base clang. Anyone got ideas what's going on here? Cheers, Anthony.