![]() |
|
Message-Id: <C629E8CF-503B-4A32-A1CD-A2CD6ECA3602@palsenberg.com> Date: Mon, 6 Jun 2011 12:47:38 +0200 From: Igmar Palsenberg <musl@...senberg.com> To: musl@...ts.openwall.com Subject: Re: Musl git 0d......455eee8 and recent compilers > * Igmar Palsenberg <musl@...senberg.com> [2011-06-06 10:48:08 +0200]: >> I was using Musle as a test for.. > > musl Sorry.... It's also the name of a cleaning substance here, so I usually het the name wrong :) > >> 1) The struct dirent in include/dirent.h uses a 1 byte array for d_name. In reality, it's larger : We allocate more space than the struct. Since muscle requires a C99 compiler anyway, what's keeping use from using d_name[0] or d_name[] ? If a C89 compiler includes dirent.h, we're screwed anyway :). That will probably silence GCC 4.5 and clang, and severely reduce the warnings it gives in similar cases. >> > > what kind of warnings do you get? Array out of bounds : src/misc/nftw.c:77:11: warning: array index of '1' indexes past the end of an array (that contains 1 elements) [-Warray-bounds] && (!de->d_name[1] The compiler is strictly speaking right in this case. > char foo[1] gives warning but a flexible array member char foo[] does not? Correct. >> 2) The NULL pointer dereference in src/time/__asctime.c won't work with clang : It removes it. I suggest using either __builtin_trap() or an abort(). If you get to that point, you're in trouble anyway. >> > > i guess __builtin_trap is compiler specific > i don't think it's a big deal.. > there could be 0/0 as well i guess > i wonder what > main(){ return *(int*)0; } > or even > main(){ return ((int(*)())0)(); } > does on clang.. Hmm.. Despite the warning : int main(int argc, char **argv) { *(int*)0 = 0; printf("XXX\n"); return 0; } segfaults. Clang is allowed to remove the dereference, we might to use abort() in this case. With O3, it gives an illegal instruction (probably an ud2). I either misread the warning, or clang doesn't do what it says :). > >> 3) Clang does't seem to grasp the weak_alias thingy. It need to check if those parts actually are correct >> > > well it uses the alias __attribute__ extension of gcc I need to check if the offending function / alias is there, or as clang says, isn't emitted. >> 4) Is there a muscl testsuite somewhere ? >> > > musl > > http://git.etalabs.net/cgi-bin/gitweb.cgi I'll try that. Regards, Igmar
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.