From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 29500 invoked by alias); 11 Feb 2010 13:40:23 -0000 Received: (qmail 29475 invoked by uid 22791); 11 Feb 2010 13:40:20 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from comm.purplecow.org (HELO comm.purplecow.org) (210.87.62.131) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 11 Feb 2010 13:40:14 +0000 MIME-version: 1.0 Content-transfer-encoding: 7BIT Content-type: text/plain; charset=iso-8859-1 Received: from interact.purplecow.org ([127.0.0.1]) by comm.purplecow.org (Sun Java(tm) System Messaging Server 6.3-6.03 (built Mar 14 2008; 32bit)) with ESMTPA id <0KXO00DVLJAZCSB0@comm.purplecow.org> for gcc-help@gcc.gnu.org; Fri, 12 Feb 2010 00:40:11 +1100 (EST) Received: from interact.purplecow.org ([10.0.66.17] helo=interact.purplecow.org) with IPv4:25 by ASSP.nospam; Fri, 12 Feb 2010 00:40:11 +1100 Received: from 10.0.66.17 (proxying for unknown) (SquirrelMail authenticated user dclarke@blastwave.org) by interact.purplecow.org with HTTP; Thu, 11 Feb 2010 08:40:11 -0500 (EST) Message-id: <50871.10.0.66.17.1265895611.squirrel@interact.purplecow.org> Date: Thu, 11 Feb 2010 13:44:00 -0000 Subject: Re: Why is gcc going to default to "GNU dialect of ISO C99?" From: Dennis Clarke To: Alexey Salmin Cc: gcc-help@gcc.gnu.org, dclarke@blastwave.org, aph@redhat.com, david.kirkby@onetel.net, ams@gnu.org Reply-to: dclarke@blastwave.org User-Agent: SquirrelMail/1.4.11 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org X-SW-Source: 2010-02/txt/msg00161.txt.bz2 > It all reminds me a story when I won a bottle of beer from my > scientific adviser back in 2005. We had a bet: will gcc compile this > code: > #include > int main() { > printf("a"); > int a; > printf("b"); > return 0; > } > He was so sure that gcc won't allow it that didn't ever tried :) Thus, > I think gnu extensions by default are not so bad :) > > Alexey Let's have a look at that. I don't see any issues really. You call printf() with a literal string, then define some simple integer, then print another literal string with a call to printf() and finally return back to the calling process with a status of 0. Very nice. $ date Thu Feb 11 13:28:17 GMT 2010 $ uname -a SunOS aequitas 5.11 snv_130 i86pc i386 i86pc $ $ cat /etc/release Solaris Express Community Edition snv_130 X86 Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 14 December 2009 $ $ /opt/csw/gcc4/bin/gcc --version gcc (GCC) 4.3.4 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. $ ls sample1.c $ $ cat -n sample1.c 1 /******************************************************************** 2 From "Alexey Salmin" email message 3 posted to gcc-help@gcc.gnu.org Thu, February 11, 2010 04:43 4 Subject Re: Why is gcc going to default to "GNU dialect of ISO C99?" 5 *********************************************************************/ 6 #include 7 int main() { 8 printf("a"); 9 int a; 10 printf("b"); 11 return 0; 12 } $ $ /opt/csw/gcc4/bin/gcc -v -std=iso9899:1990 -c -o sample1.o sample1.c Using built-in specs. Target: i386-pc-solaris2.10 Configured with: /export/medusa/dclarke/build/GCC/gcc-4.3.4/configure --build=i386-pc-solaris2.10 --with-gnu-as --with-as=/opt/csw/bin/gas --without-gnu-ld --with-ld=/usr/ccs/bin/ld --with-cpu-32=i386 --with-cpu-64=opteron --with-arch-32=i386 --with-arch-64=opteron --enable-stage1-languages=c --enable-nls --with-libiconv-prefix=/opt/csw --enable-threads=posix --prefix=/opt/csw/gcc4 --with-local-prefix=/opt/csw --enable-shared --enable-multilib --with-included-gettext --with-system-zlib --with-gmp=/opt/csw --with-mpfr=/opt/csw --enable-languages=c,c++,objc,fortran --enable-bootstrap Thread model: posix gcc version 4.3.4 (GCC) COLLECT_GCC_OPTIONS='-v' '-std=iso9899:1990' '-c' '-o' 'sample1.o' '-mtune=generic' /opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/4.3.4/cc1 -quiet -v sample1.c -quiet -dumpbase sample1.c -mtune=generic -auxbase-strip sample1.o -std=iso9899:1990 -version -o /var/tmp//ccGRlbZX.s ignoring nonexistent directory "/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/../../../../i386-pc-solaris2.10/include" #include "..." search starts here: #include <...> search starts here: /opt/csw/include /opt/csw/gcc4/include /opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/include /opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/include-fixed /usr/include End of search list. GNU C (GCC) version 4.3.4 (i386-pc-solaris2.10) compiled by GNU C version 4.3.4, GMP version 4.3.1, MPFR version 2.4.2-rc1. warning: MPFR header version 2.4.2-rc1 differs from library version 2.4.2. GGC heuristics: --param ggc-min-expand=95 --param ggc-min-heapsize=122687 Compiler executable checksum: 9ba7f205b9cefa6eae48c8f511c89b44 COLLECT_GCC_OPTIONS='-v' '-std=iso9899:1990' '-c' '-o' 'sample1.o' '-mtune=generic' /opt/csw/bin/gas -v -V -Qy -s -o sample1.o /var/tmp//ccGRlbZX.s GNU assembler version 2.19.1 (i386-pc-solaris2.8) using BFD version (GNU Binutils) 2.19.1 COMPILER_PATH=/opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/:/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/:/usr/ccs/bin/ LIBRARY_PATH=/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-std=iso9899:1990' '-c' '-o' 'sample1.o' '-mtune=generic' $ $ ls -lap total 8 drwxr-xr-x 2 dclarke csw 512 Feb 11 13:29 ./ drwxr-xr-x 3 dclarke csw 512 Feb 11 13:23 ../ -rw-r--r-- 1 dclarke csw 420 Feb 11 13:28 sample1.c -rw-r--r-- 1 dclarke csw 712 Feb 11 13:29 sample1.o $ /opt/csw/gcc4/bin/gcc -v -std=iso9899:1990 -o sample1 sample1.o Using built-in specs. Target: i386-pc-solaris2.10 Configured with: /export/medusa/dclarke/build/GCC/gcc-4.3.4/configure --build=i386-pc-solaris2.10 --with-gnu-as --with-as=/opt/csw/bin/gas --without-gnu-ld --with-ld=/usr/ccs/bin/ld --with-cpu-32=i386 --with-cpu-64=opteron --with-arch-32=i386 --with-arch-64=opteron --enable-stage1-languages=c --enable-nls --with-libiconv-prefix=/opt/csw --enable-threads=posix --prefix=/opt/csw/gcc4 --with-local-prefix=/opt/csw --enable-shared --enable-multilib --with-included-gettext --with-system-zlib --with-gmp=/opt/csw --with-mpfr=/opt/csw --enable-languages=c,c++,objc,fortran --enable-bootstrap Thread model: posix gcc version 4.3.4 (GCC) COMPILER_PATH=/opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/:/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/:/usr/ccs/bin/ LIBRARY_PATH=/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/:/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/../../../:/lib/:/usr/lib/ COLLECT_GCC_OPTIONS='-v' '-std=iso9899:1990' '-o' 'sample1' '-mtune=generic' /opt/csw/gcc4/libexec/gcc/i386-pc-solaris2.10/4.3.4/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o sample1 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/values-Xa.o /opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/crtbegin.o -L/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4 -L/opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/../../.. sample1.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh /opt/csw/gcc4/lib/gcc/i386-pc-solaris2.10/4.3.4/crtend.o /usr/lib/crtn.o ld: Software Generation Utilities - Solaris Link Editors: 5.11-1.1688 $ $ ls -lap total 24 drwxr-xr-x 2 dclarke csw 512 Feb 11 13:30 ./ drwxr-xr-x 3 dclarke csw 512 Feb 11 13:23 ../ -rwxr-xr-x 1 dclarke csw 8096 Feb 11 13:30 sample1 -rw-r--r-- 1 dclarke csw 420 Feb 11 13:28 sample1.c -rw-r--r-- 1 dclarke csw 712 Feb 11 13:29 sample1.o $ $ elfdump -d sample1 Dynamic Section: .dynamic index tag value [0] NEEDED 0x1e8 libc.so.1 [1] INIT 0x8050d20 [2] FINI 0x8050d40 [3] HASH 0x8050144 [4] STRTAB 0x80504f4 [5] STRSZ 0x40e [6] SYMTAB 0x8050304 [7] SYMENT 0x10 [8] SUNW_SYMTAB 0x8050244 [9] SUNW_SYMSZ 0x2b0 [10] SUNW_SORTENT 0x4 [11] SUNW_SYMSORT 0x8050974 [12] SUNW_SYMSORTSZ 0x3c [13] CHECKSUM 0x6176 [14] VERNEED 0x8050904 [15] VERNEEDNUM 0x1 [16] PLTRELSZ 0x40 [17] PLTREL 0x11 [18] JMPREL 0x80509d8 [19] REL 0x80509b0 [20] RELSZ 0x68 [21] RELENT 0x8 [22] DEBUG 0 [23] FEATURE_1 0x1 [ PARINIT ] [24] SUNW_CAP 0x8050128 [25] FLAGS 0 0 [26] FLAGS_1 0 0 [27] SUNW_STRPAD 0x200 [28] SUNW_LDMACH 0x3 EM_386 [29] PLTGOT 0x8060d5c [30-40] NULL 0 $ $ ./sample1 ab$ $ $ ./sample1 | od -Ax -t x1 0000000 61 62 0000002 $ No problem there at all. Let's try the same thing with Sun Studio 12 on Solaris 10 : $ uname -a SunOS vanth 5.10 Generic_142901-03 i86pc i386 i86pc $ cat /etc/release Solaris 10 5/09 s10x_u7wos_08 X86 Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. Use is subject to license terms. Assembled 30 March 2009 $ $ which cc /opt/studio/SOS12/SUNWspro/bin/cc $ $ cc -V cc: Sun C 5.9 SunOS_i386 Patch 124868-11 2009/11/21 usage: cc [ options] files. Use 'cc -flags' for details $ $ ls sample1.c $ $ cc -\# -H -Qy -Xc -xbuiltin=%none -Kpic -xildoff -xregs=no%frameptr -xs -xstrconst -g -D_TS_ERRNO -D_POSIX_SOURCE -c -o sample1.o sample1.c ### Note: NLSPATH = /opt/studio/SOS12/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/studio/SOS12/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat ### command line files and options (expanded): ### -c -D_TS_ERRNO -D_POSIX_SOURCE -g -H -Kpic -Xc -features=no%typeof -xregs=no%frameptr -xs -xstrconst sample1.c -o sample1.o /opt/studio/SOS12/SUNWspro/prod/bin/acomp -dg -xldscope=global -i sample1.c -y-fbe -y/opt/studio/SOS12/SUNWspro/prod/bin/fbe -y-pic -y-xarch=generic -y-g -y-o -ysample1.o -y-verbose -y-xthreadvar=dynamic -y-comdat -xdbggen=no%stabs+dwarf2+usedonly -H -strconst -D_TS_ERRNO -D_POSIX_SOURCE -xdbggen=incl -y-s -2k -m32 -fparam_ir -Qy -D__SunOS_5_10 -D__SUNPRO_C=0x590 -D__SVR4 -D__sun -D__SunOS -D__unix -D__i386 -D__BUILTIN_VA_ARG_INCR -D__C99FEATURES__ -Xc -D__PRAGMA_REDEFINE_EXTNAME -xc99=%all,no%lib -D__FLT_EVAL_METHOD__=-1 -features=no%typeof -I/opt/studio/SOS12/SUNWspro/prod/include/cc "-g/opt/studio/SOS12/SUNWspro/prod/bin/cc -H -Qy -Xc -xbuiltin=%none -Kpic -xildoff -xregs=no%frameptr -xs -xstrconst -g -D_TS_ERRNO -D_POSIX_SOURCE -c -o sample1.o " -fsimple=0 -D__SUN_PREFETCH -destination_ir=yabe /usr/include/stdio.h /usr/include/sys/feature_tests.h /usr/include/sys/ccompile.h /usr/include/sys/isa_defs.h /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h /usr/include/stdio_tag.h /usr/include/stdio_impl.h /usr/include/iso/stdio_c99.h /opt/studio/SOS12/SUNWspro/prod/bin/fbe -s -o sample1.o -warn=%none -Qy /tmp/yabeAAARnaqit rm /tmp/yabeAAARnaqit $ $ ls -l total 3 -rw-r--r-- 1 dclarke csw 420 Feb 11 13:35 sample1.c -rw-r--r-- 1 dclarke csw 3888 Feb 11 13:37 sample1.o $ $ cc -\# -H -Qy -Xc -xbuiltin=%none -Kpic -xildoff -xregs=no%frameptr -xs -xstrconst -g -D_TS_ERRNO -D_POSIX_SOURCE -o sample1 sample1.c ### Note: NLSPATH = /opt/studio/SOS12/SUNWspro/prod/bin/../lib/locale/%L/LC_MESSAGES/%N.cat:/opt/studio/SOS12/SUNWspro/prod/bin/../../lib/locale/%L/LC_MESSAGES/%N.cat ### command line files and options (expanded): ### -D_TS_ERRNO -D_POSIX_SOURCE -g -H -Kpic -Xc -features=no%typeof -xregs=no%frameptr -xs -xstrconst sample1.c -o sample1 /opt/studio/SOS12/SUNWspro/prod/bin/acomp -dg -xldscope=global -i sample1.c -y-fbe -y/opt/studio/SOS12/SUNWspro/prod/bin/fbe -y-pic -y-xarch=generic -y-g -y-o -ysample1.o -y-verbose -y-xthreadvar=dynamic -y-comdat -xdbggen=no%stabs+dwarf2+usedonly -H -strconst -D_TS_ERRNO -D_POSIX_SOURCE -xdbggen=incl -y-s -2k -m32 -fparam_ir -Qy -D__SunOS_5_10 -D__SUNPRO_C=0x590 -D__SVR4 -D__sun -D__SunOS -D__unix -D__i386 -D__BUILTIN_VA_ARG_INCR -D__C99FEATURES__ -Xc -D__PRAGMA_REDEFINE_EXTNAME -xc99=%all,no%lib -D__FLT_EVAL_METHOD__=-1 -features=no%typeof -I/opt/studio/SOS12/SUNWspro/prod/include/cc "-g/opt/studio/SOS12/SUNWspro/prod/bin/cc -H -Qy -Xc -xbuiltin=%none -Kpic -xildoff -xregs=no%frameptr -xs -xstrconst -g -D_TS_ERRNO -D_POSIX_SOURCE -c " -fsimple=0 -D__SUN_PREFETCH -destination_ir=yabe /usr/include/stdio.h /usr/include/sys/feature_tests.h /usr/include/sys/ccompile.h /usr/include/sys/isa_defs.h /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h /usr/include/stdio_tag.h /usr/include/stdio_impl.h /usr/include/iso/stdio_c99.h /opt/studio/SOS12/SUNWspro/prod/bin/fbe -s -o sample1.o -warn=%none -Qy /tmp/yabeAAA_BaWit rm /tmp/yabeAAA_BaWit ### Note: LD_LIBRARY_PATH = ### Note: LD_RUN_PATH = /usr/ccs/bin/ld /opt/studio/SOS12/SUNWspro/prod/lib/crti.o /opt/studio/SOS12/SUNWspro/prod/lib/crt1.o /opt/studio/SOS12/SUNWspro/prod/lib/values-xc.o -o sample1 sample1.o -Y "P,/opt/studio/SOS12/SUNWspro/prod/lib:/usr/ccs/lib:/lib:/usr/lib" -Qy -lc /opt/studio/SOS12/SUNWspro/prod/lib/crtn.o $ $ ls -l total 3 -rwxr-xr-x 1 dclarke csw 7520 Feb 11 13:37 sample1 -rw-r--r-- 1 dclarke csw 420 Feb 11 13:35 sample1.c $ $ file sample1 sample1: ELF 32-bit LSB executable 80386 Version 1 [FPU], dynamically linked, not stripped $ $ elfdump -d sample1 Dynamic Section: .dynamic index tag value [0] NEEDED 0x114 libc.so.1 [1] INIT 0x8050738 [2] FINI 0x8050754 [3] RUNPATH 0x13a /opt/csw/lib/amd64 [4] RPATH 0x13a /opt/csw/lib/amd64 [5] HASH 0x8050118 [6] STRTAB 0x805039c [7] STRSZ 0x14d [8] SYMTAB 0x80501fc [9] SYMENT 0x10 [10] CHECKSUM 0x7ef0 [11] VERNEED 0x80504ec [12] VERNEEDNUM 0x1 [13] PLTRELSZ 0x30 [14] PLTREL 0x11 [15] JMPREL 0x8050524 [16] REL 0x805051c [17] RELSZ 0x38 [18] RELENT 0x8 [19] DEBUG 0 [20] FEATURE_1 0x1 [ PARINIT ] [21] SUNW_CAP 0x8050108 [22] FLAGS 0 0 [23] FLAGS_1 0 0 [24] PLTGOT 0x806077c [25] NULL 0 $ $ ./sample1 ab$ $ $ ./sample1 | od -Ax -t x1 0000000 61 62 0000002 $ No problems there either. -- Dennis Clarke dclarke@opensolaris.ca <- Email related to the open source Solaris dclarke@blastwave.org <- Email related to open source for Solaris