From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IrGwC-000080-9r for qemu-devel@nongnu.org; Sun, 11 Nov 2007 12:49:36 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IrGwA-00007c-Q3 for qemu-devel@nongnu.org; Sun, 11 Nov 2007 12:49:34 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IrGwA-00007Z-Kb for qemu-devel@nongnu.org; Sun, 11 Nov 2007 12:49:34 -0500 Received: from bsdimp.com ([199.45.160.85] helo=harmony.bsdimp.com) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1IrGw9-0007eX-S8 for qemu-devel@nongnu.org; Sun, 11 Nov 2007 12:49:34 -0500 Date: Sun, 11 Nov 2007 10:46:31 -0700 (MST) Message-Id: <20071111.104631.756906125.imp@bsdimp.com> Subject: Re: [Qemu-devel] error compiling hw/sh7750.c From: "M. Warner Losh" In-Reply-To: <20071111172122.GA9387@tapir> References: <20071111093026.NJ0KX.29116.root@eastrmwml27.mgt.cox.net> <20071111160634.GF25322@tapir> <20071111172122.GA9387@tapir> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, carenas@sajinet.com.pe In message: <20071111172122.GA9387@tapir> Carlo Marcelo Arenas Belon writes: : On Sun, Nov 11, 2007 at 10:06:34AM -0600, Carlo Marcelo Arenas Belon wrote: : > On Sun, Nov 11, 2007 at 09:30:26AM -0500, Ben Taylor wrote: : > > So the macro turns the last _INTC_ARRAY(NULL) into : > > : > > "NULL, sizeof(NULL)/sizeof(*NULL) : > : > in my 64bit linux using gcc-4.1.2 it becomes instead : : > : > ((void *)0), sizeof(((void *)0))/sizeof(*((void *)0)) : > : > what version of gcc (gcc -v) are you using in that Solaris 10 box? (HINT: not : > all available versions of gcc compile qemu correctly) : : > : > http://www.opensolaris.org/os/project/qemu/host/gcc-failures/ : : That didn't sound as clear as it should, so I booted an OpenSolaris Nevada 70b : using the sun provided gcc : : : $ uname -a : SunOS dell 5.11 snv_70b i86pc i386 i86pc : $ gcc -v : Reading specs from /usr/sfw/lib/gcc/i386-pc-solaris2.11/3.4.3/specs : Configured with: /builds2/sfwnv-gate/usr/src/cmd/gcc/gcc-3.4.3/configure : --prefix=/usr/sfw --with-as=/usr/sfw/bin/gas --with-gnu-as : --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-languages=c,c++,f77,objc : --enable-shared : Thread model: posix : gcc version 3.4.3 (csl-sol210-3_4-20050802) : : and run a test, the problem is in /usr/include/iso/stdio_iso.h that defined : NULL as an int and not a pointer as shown by : : : fndef NULL : #if defined(_LP64) : #define NULL 0L : #else : #define NULL 0 : #endif : #endif : : contradicting (at least in spirit) the C99 (ISO/IEC 9899:TCS) standard that : says : : : "A pointer to void shall have the same representation and alignment : requirements as a pointer to a character type" NULL isn't a pointer. It is a integral constant, per section 6.3.2.3.3 of C99. So *NULL is undefined. If you want a constant thats an actual pointer, you need to define one special. 6.3.2.3 Pointers ... [#3] An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant. If a null pointer constant is assigned to or compared for equality to a pointer, the constant is converted to a pointer of that type. Such a pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function. [#4] Conversion of a null pointer to another pointer type yields a null pointer of that type. Any two null pointers shall compare equal. 7.17 Common definitions ... [#3] The macros are NULL which expands to an implementation-defined null pointer constant; and .. The root cause is of this whole problem is *NULL, an undefined, unportable construct. That's what should be fixed, not the definition of NULL if you want this code to be portable. Warner