* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
@ 2010-02-11 17:14 Dennis Clarke
0 siblings, 0 replies; 21+ messages in thread
From: Dennis Clarke @ 2010-02-11 17:14 UTC (permalink / raw)
To: Alexey Salmin; +Cc: gcc-help, John Love-Jensen
> BUT: WHATEVER! I was trying to tell you a funny story, nothing more.
> Don't waste your time trying to find there some fundamental statements
> or something.
ok. I owe you three beer.[1]
--
Dennis
[1] what good is just one? ;-)
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-11 12:00 ` Alexey Salmin
[not found] ` <C79952E6.1947E%eljay@adobe.com>
@ 2010-02-12 5:32 ` Patrick Horgan
1 sibling, 0 replies; 21+ messages in thread
From: Patrick Horgan @ 2010-02-12 5:32 UTC (permalink / raw)
To: Alexey Salmin; +Cc: gcc-help, dclarke, aph, david.kirkby, ams
Alexey Salmin wrote:
> 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 <stdio.h>
> 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 :)
>
if you use -pedantic it will at least whine about it.
Patrick
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-11 14:58 ` Alexey Salmin
@ 2010-02-11 15:11 ` John (Eljay) Love-Jensen
0 siblings, 0 replies; 21+ messages in thread
From: John (Eljay) Love-Jensen @ 2010-02-11 15:11 UTC (permalink / raw)
To: Alexey Salmin, GCC-help
Hi Alexey,
I stand corrected. :-)
Sincerely,
--Eljay
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
[not found] ` <C79973C1.194A3%eljay@adobe.com>
@ 2010-02-11 14:58 ` Alexey Salmin
2010-02-11 15:11 ` John (Eljay) Love-Jensen
0 siblings, 1 reply; 21+ messages in thread
From: Alexey Salmin @ 2010-02-11 14:58 UTC (permalink / raw)
To: gcc-help; +Cc: John (Eljay) Love-Jensen
On Thu, Feb 11, 2010 at 8:43 PM, John (Eljay) Love-Jensen
<eljay@adobe.com> wrote:
> Hi Alexey,
>
>> It's not ANSI C compliant.
>
> It's ISO C 1999 compliant.
>
>> And since GNU89 is default for C code...
>
> GNU99 is default of C code, with my GCC (4.0).
>
> I am not sure which GCC version switched from GNU89 to GNU99.
>
> I would expect a GCC of 2005 vintage (e.g., GCC 4.0) to compile C99 code.
>
> Sincerely,
> --Eljay
>
If you read the mail in the beginning of this thread you'll see that
http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
says:
`gnu89'
GNU dialect of ISO C90 (including some C99 features). (!) This is
the default for C code. (!)
`gnu99'
`gnu9x'
GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC,
this (!) will become the default (!). The name `gnu9x' is deprecated.
Same info is in my gcc doc (4.4.2, from Debain Sid)
BUT: WHATEVER! I was trying to tell you a funny story, nothing more.
Don't waste your time trying to find there some fundamental statements
or something.
Alexey
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
@ 2010-02-11 14:50 Dennis Clarke
0 siblings, 0 replies; 21+ messages in thread
From: Dennis Clarke @ 2010-02-11 14:50 UTC (permalink / raw)
To: Alexey Salmin; +Cc: dclarke, gcc-help, aph, david.kirkby, ams
> On Thu, Feb 11, 2010 at 8:00 PM, Dennis Clarke <dclarke@blastwave.org>
> wrote:
>>
>>> On Thu, Feb 11, 2010 at 7:40 PM, Dennis Clarke <dclarke@blastwave.org>
>>> wrote:
>>>>
>>>>> 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 <stdio.h>
>>>>> Â 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.
>>>>
>> <snip>
>>>
>>> 334 lines of research for 7 lines of code :)
>>>
>>> Alexey
>>
>> Here are 7 more :-)
>>
>> $ lint -v -Nlevel=4 -Xc99=all sample1.c
>>
>> variable unused in function
>> Â Â (9) a in main
>>
>> function returns value which is always ignored
>> Â Â printf
>>
>>
>> --
>> Dennis Clarke
>> dclarke@opensolaris.ca  <- Email related to the open source Solaris
>> dclarke@blastwave.org  <- Email related to open source for Solaris
>>
>>
>>
>
> What for? If you read my messages carefully you'll understand that I
> know it works with gcc perfectly. Actually I've won a bottle of beer
> due to that knowledge :)
> But try to compile that code with MSVS for instance (or try reading
> C89 standard) and you'll see why it was possible that it would NOT
> work.
>
> Alexey
point missing, you are
While you, as an intelligent human, may be able to understand those four
words and one punctuation mark you must agree that it is badly formed
english. In fact, it is horribly wrong from the perspective of grammer and
syntax.
The fact that some compiler somewhere may be able to compile some badly
formed code does not mean that the compiler is good. It does not even mean
that what the compiler is doing is correct.
A programming language, unlike a spoken or written language, must be
precise in its syntax and grammer in the same way that mathematics is a
precise language. A person may be able to interpret poorly formed spoken
or written language but a computer programming language should be portable
and correctly formed. Again, I may be wasting my efforts here because the
GCC developers may have left such ideals long behind them.
--
Dennis Clarke
dclarke@opensolaris.ca <- Email related to the open source Solaris
dclarke@blastwave.org <- Email related to open source for Solaris
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-11 14:14 Dennis Clarke
@ 2010-02-11 14:42 ` Alexey Salmin
0 siblings, 0 replies; 21+ messages in thread
From: Alexey Salmin @ 2010-02-11 14:42 UTC (permalink / raw)
To: dclarke; +Cc: gcc-help, aph, david.kirkby, ams
On Thu, Feb 11, 2010 at 8:00 PM, Dennis Clarke <dclarke@blastwave.org> wrote:
>
>> On Thu, Feb 11, 2010 at 7:40 PM, Dennis Clarke <dclarke@blastwave.org>
>> wrote:
>>>
>>>> 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 <stdio.h>
>>>> 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.
>>>
> <snip>
>>
>> 334 lines of research for 7 lines of code :)
>>
>> Alexey
>
> Here are 7 more :-)
>
> $ lint -v -Nlevel=4 -Xc99=all sample1.c
>
> variable unused in function
> (9) a in main
>
> function returns value which is always ignored
> printf
>
>
> --
> Dennis Clarke
> dclarke@opensolaris.ca <- Email related to the open source Solaris
> dclarke@blastwave.org <- Email related to open source for Solaris
>
>
>
What for? If you read my messages carefully you'll understand that I
know it works with gcc perfectly. Actually I've won a bottle of beer
due to that knowledge :)
But try to compile that code with MSVS for instance (or try reading
C89 standard) and you'll see why it was possible that it would NOT
work.
Alexey
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
@ 2010-02-11 14:14 Dennis Clarke
2010-02-11 14:42 ` Alexey Salmin
0 siblings, 1 reply; 21+ messages in thread
From: Dennis Clarke @ 2010-02-11 14:14 UTC (permalink / raw)
To: Alexey Salmin; +Cc: dclarke, gcc-help, aph, david.kirkby, ams
> On Thu, Feb 11, 2010 at 7:40 PM, Dennis Clarke <dclarke@blastwave.org>
> wrote:
>>
>>> 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 <stdio.h>
>>> Â 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.
>>
<snip>
>
> 334 lines of research for 7 lines of code :)
>
> Alexey
Here are 7 more :-)
$ lint -v -Nlevel=4 -Xc99=all sample1.c
variable unused in function
(9) a in main
function returns value which is always ignored
printf
--
Dennis Clarke
dclarke@opensolaris.ca <- Email related to the open source Solaris
dclarke@blastwave.org <- Email related to open source for Solaris
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-11 13:44 Dennis Clarke
@ 2010-02-11 14:00 ` Alexey Salmin
0 siblings, 0 replies; 21+ messages in thread
From: Alexey Salmin @ 2010-02-11 14:00 UTC (permalink / raw)
To: dclarke; +Cc: gcc-help, aph, david.kirkby, ams
On Thu, Feb 11, 2010 at 7:40 PM, Dennis Clarke <dclarke@blastwave.org> wrote:
>
>> 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 <stdio.h>
>> 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" <alexey.salmin@gmail.com> 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 <stdio.h>
> 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 = <null>
> ### Note: LD_RUN_PATH = <null>
> /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
>
>
334 lines of research for 7 lines of code :)
Alexey
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
[not found] ` <C79952E6.1947E%eljay@adobe.com>
@ 2010-02-11 13:48 ` Alexey Salmin
[not found] ` <C79973C1.194A3%eljay@adobe.com>
0 siblings, 1 reply; 21+ messages in thread
From: Alexey Salmin @ 2010-02-11 13:48 UTC (permalink / raw)
To: gcc-help; +Cc: John (Eljay) Love-Jensen, dclarke, aph, david.kirkby, ams
On Thu, Feb 11, 2010 at 6:23 PM, John (Eljay) Love-Jensen
<eljay@adobe.com> wrote:
> Hi Alexey,
>
>> 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 <stdio.h>
>> 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 :)
>
> Why wouldn't GCC compile that code?
>
> It is ISO 9899:1999 compliant. Even compiles with the -pedantic flag. (Or
> am I missing something?)
>
> Mmmmmm, beer. :-)
>
> Sincerely,
> --Eljay
>
It's not ANSI C compliant. And since GNU89 is default for C code it's
reasonable (in some way) for this not to work.
Fortunately I wasn't very familiar with different standarts and stuff
that time, I just knew that it works with GCC :)
This code actually gives a warning with -pedantic and error (your C.O.
:P ) with -pedantic-errors.
salmin@salmin:~/test$ gcc -o test test.c
salmin@salmin:~/test$ gcc -std=gnu89 -o test test.c
salmin@salmin:~/test$ gcc -std=c89 -o test test.c
salmin@salmin:~/test$ gcc -pedantic -o test test.c
test.c: In function ‘main’:
test.c:5: warning: ISO C90 forbids mixed declarations and code
salmin@salmin:~/test$ gcc -pedantic-errors -o test test.c
test.c: In function ‘main’:
test.c:5: error: ISO C90 forbids mixed declarations and code
salmin@salmin:~/test$ gcc -std=c89 -pedantic-errors -o test test.c
test.c: In function ‘main’:
test.c:5: error: ISO C90 forbids mixed declarations and code
salmin@salmin:~/test$ gcc -std=gnu89 -pedantic-errors -o test test.c
test.c: In function ‘main’:
test.c:5: error: ISO C90 forbids mixed declarations and code
salmin@salmin:~/test$ gcc -std=c99 -pedantic-errors -o test test.c
salmin@salmin:~/test$ gcc -std=gnu99 -pedantic-errors -o test test.c
salmin@salmin:~/test$ cat test.c
#include <stdio.h>
int main() {
printf("a");
int a;
printf("b");
return 0;
}
Alexey
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
@ 2010-02-11 13:44 Dennis Clarke
2010-02-11 14:00 ` Alexey Salmin
0 siblings, 1 reply; 21+ messages in thread
From: Dennis Clarke @ 2010-02-11 13:44 UTC (permalink / raw)
To: Alexey Salmin; +Cc: gcc-help, dclarke, aph, david.kirkby, ams
> 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 <stdio.h>
> 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" <alexey.salmin@gmail.com> 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 <stdio.h>
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 = <null>
### Note: LD_RUN_PATH = <null>
/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
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-11 9:43 ` Alfred M. Szmidt
@ 2010-02-11 12:00 ` Alexey Salmin
[not found] ` <C79952E6.1947E%eljay@adobe.com>
2010-02-12 5:32 ` Patrick Horgan
0 siblings, 2 replies; 21+ messages in thread
From: Alexey Salmin @ 2010-02-11 12:00 UTC (permalink / raw)
To: gcc-help; +Cc: dclarke, aph, david.kirkby, ams
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 <stdio.h>
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
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-11 2:40 Dennis Clarke
@ 2010-02-11 9:43 ` Alfred M. Szmidt
2010-02-11 12:00 ` Alexey Salmin
0 siblings, 1 reply; 21+ messages in thread
From: Alfred M. Szmidt @ 2010-02-11 9:43 UTC (permalink / raw)
To: dclarke; +Cc: aph, gcc-help, david.kirkby
If you wish to use a compiler that ad hers to ISO C99, then you should
use the c99 program as per POSIX 1003.1 2004; that is the proper and
standard compliant way to invoke a ISO C99 compiler. What the gcc
program will do by default is set by the GNU project, the g after all
stands for GNU, not ISO or POSIX.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 17:45 ` Dr. David Kirkby
2010-02-10 18:07 ` Alfred M. Szmidt
2010-02-10 18:39 ` Andrew Haley
@ 2010-02-11 2:46 ` Ian Lance Taylor
2 siblings, 0 replies; 21+ messages in thread
From: Ian Lance Taylor @ 2010-02-11 2:46 UTC (permalink / raw)
To: Dr. David Kirkby; +Cc: Andrew Haley, gcc-help
"Dr. David Kirkby" <david.kirkby@onetel.net> writes:
> A lot of bugs are often discovered in code by testing on multiple
> compilers and multiple platforms. What one compiler misses, another
> finds. I could point you to various cases where the Sun compiler has
> rejected erroneous code that gcc has permitted. I'm sure you could no
> doubt find counter examples too.
>
> By generating code that should build with other compilers, problems
> can be detected more easily.
You are looking for the -pedantic option, q.v.
It is extremely unlikely that this decision about gcc's default
behaviour will be changed.
Ian
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
@ 2010-02-11 2:40 Dennis Clarke
2010-02-11 9:43 ` Alfred M. Szmidt
0 siblings, 1 reply; 21+ messages in thread
From: Dennis Clarke @ 2010-02-11 2:40 UTC (permalink / raw)
To: Andrew Haley; +Cc: gcc-help, Dr. David Kirkby
> Andrew Haley wrote:
>> On 02/10/2010 04:44 PM, Dr. David Kirkby wrote:
>>> According to
>>>
>>> http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
>>>
>>> -std=foobar
>>>
>>>
>>> `gnu9x'
>>> GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC,
>>> this will become the default. The name `gnu9x' is deprecated.
>>>
>>> I really can not understand the logic of this. Why not default to ISO
>>> C99 and let people enable GNUisms if they wish to? Then code should be
>>> more portable across different compilers. With the GNUisms allowed by
>>> default, it will make porting code more difficult to other stricter
>>> compilers.
>>
>> This reasoning would make perfect sense if the primary goal of gcc's
>> users was to write code to be ported to other compilers.
>
> I thought gcc's primary aim was to be a *C* compiler. That would suggest
> to me
> that enabling GNU extensions should not be the default, but an option.
>
> A lot of bugs are often discovered in code by testing on multiple
> compilers and
> multiple platforms. What one compiler misses, another finds. I could point
> you
> to various cases where the Sun compiler has rejected erroneous code that
> gcc has
> permitted. I'm sure you could no doubt find counter examples too.
>
> By generating code that should build with other compilers, problems can be
> detected more easily.
>
>> However,
>> many of GNU C's extensions are very useful, so it makes sense to have
>> them available by default.
That seems to be a weak argument.
The standards are useful and are in place for good reasons. Not the
least of which is that we can expect consistent code input files in a
given format and dialect based on well published and industry accepted
standards. The programming language, regardless if it be assembly, C,
Fortran or Cobol, must be portable and acceptable to any compiler that
complies with the published standards. Regardless of the vendor, be it
Sun/Oracle, IBM, Microsoft, Intel or Linus's abacus basement compiler
that he coded himself. If that compiler, a program which accepts as
input files in the form of C language sources, simply abides by those
published standards then we have a world where the student, the
professional programmer and the next generation of open source
contributors can live and work without the threat of single vendor rules
which limit freedom and stifle innovation. It is only a small step on
the slippery slope of non-standard "useful" things before we have code
that simply does not work anywhere else.
>> (Having said that, many of GNU C's
>> extensions are part of C99 anyway, so the difference is smaller than
>> with C89.)
>
> Personally I feel this is a bad decision, but I'm not a gcc developer.
>
> Dave
At the risk of a significant argument, I would state rather loudly that
any compiler which defaults to non-standard, regardless of usefulness, is
at fault.
--
Dennis Clarke
dclarke@opensolaris.ca <- Email related to the open source Solaris
dclarke@blastwave.org <- Email related to open source for Solaris
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 19:25 ` Dr. David Kirkby
@ 2010-02-10 20:59 ` Kevin P. Fleming
0 siblings, 0 replies; 21+ messages in thread
From: Kevin P. Fleming @ 2010-02-10 20:59 UTC (permalink / raw)
Cc: gcc-help
Dr. David Kirkby wrote:
> I can't see how hackers can find it too hard to add an option, such as
> -allow-GNU-extensions, so they, and anyone reading the code, are well
> aware they are not writing C code, but some non-portable variant of it.
As it turns out, even many of GCC's extensions that are not part of C99
are now supported by other compilers because, as has been posted before,
they are so darn useful. That means that using them does not necessarily
make the code 'non portable', although it's not as portable as pure C99
would be.
--
Kevin P. Fleming
Digium, Inc. | Director of Software Technologies
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
skype: kpfleming | jabber: kpfleming@digium.com
Check us out at www.digium.com & www.asterisk.org
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 18:07 ` Alfred M. Szmidt
@ 2010-02-10 19:25 ` Dr. David Kirkby
2010-02-10 20:59 ` Kevin P. Fleming
0 siblings, 1 reply; 21+ messages in thread
From: Dr. David Kirkby @ 2010-02-10 19:25 UTC (permalink / raw)
To: ams; +Cc: aph, gcc-help
Alfred M. Szmidt wrote:
> I thought gcc's primary aim was to be a *C* compiler. That would
> suggest to me that enabling GNU extensions should not be the
> default, but an option.
>
> That is one of the goals, another goal is GCC is the compiler for the
> GNU system and its variant where we wish to make life easier for
> hackers by providing useful features, that might not be standard.
>
> You can usually work around these problems by calling c99/c89 instead
> of calling gcc.
>
I can't see how hackers can find it too hard to add an option, such as
-allow-GNU-extensions, so they, and anyone reading the code, are well aware they
are not writing C code, but some non-portable variant of it.
In contrast, permitting the extensions by default will lead people to be believe
they are writing C code, whereas in fact they are not.
Dave
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 17:45 ` Dr. David Kirkby
2010-02-10 18:07 ` Alfred M. Szmidt
@ 2010-02-10 18:39 ` Andrew Haley
2010-02-11 2:46 ` Ian Lance Taylor
2 siblings, 0 replies; 21+ messages in thread
From: Andrew Haley @ 2010-02-10 18:39 UTC (permalink / raw)
To: gcc-help
On 02/10/2010 05:25 PM, Dr. David Kirkby wrote:
> Andrew Haley wrote:
>> On 02/10/2010 04:44 PM, Dr. David Kirkby wrote:
>>> According to
>>>
>>> http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
>>>
>>> -std=foobar
>>>
>>> `gnu9x'
>>> GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC,
>>> this will become the default. The name `gnu9x' is deprecated.
>>>
>>> I really can not understand the logic of this. Why not default to ISO
>>> C99 and let people enable GNUisms if they wish to? Then code should be
>>> more portable across different compilers. With the GNUisms allowed by
>>> default, it will make porting code more difficult to other stricter
>>> compilers.
>>
>> This reasoning would make perfect sense if the primary goal of gcc's
>> users was to write code to be ported to other compilers.
>
> I thought gcc's primary aim was to be a *C* compiler.
The actual goals of gcc are here:
http://gcc.gnu.org/gccmission.html
Andrew.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 17:45 ` Dr. David Kirkby
@ 2010-02-10 18:07 ` Alfred M. Szmidt
2010-02-10 19:25 ` Dr. David Kirkby
2010-02-10 18:39 ` Andrew Haley
2010-02-11 2:46 ` Ian Lance Taylor
2 siblings, 1 reply; 21+ messages in thread
From: Alfred M. Szmidt @ 2010-02-10 18:07 UTC (permalink / raw)
To: Dr. David Kirkby; +Cc: aph, gcc-help
I thought gcc's primary aim was to be a *C* compiler. That would
suggest to me that enabling GNU extensions should not be the
default, but an option.
That is one of the goals, another goal is GCC is the compiler for the
GNU system and its variant where we wish to make life easier for
hackers by providing useful features, that might not be standard.
You can usually work around these problems by calling c99/c89 instead
of calling gcc.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 17:26 ` Andrew Haley
@ 2010-02-10 17:45 ` Dr. David Kirkby
2010-02-10 18:07 ` Alfred M. Szmidt
` (2 more replies)
0 siblings, 3 replies; 21+ messages in thread
From: Dr. David Kirkby @ 2010-02-10 17:45 UTC (permalink / raw)
To: Andrew Haley, gcc-help
Andrew Haley wrote:
> On 02/10/2010 04:44 PM, Dr. David Kirkby wrote:
>> According to
>>
>> http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
>>
>> -std=foobar
>>
>>
>> `gnu9x'
>> GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC,
>> this will become the default. The name `gnu9x' is deprecated.
>>
>> I really can not understand the logic of this. Why not default to ISO
>> C99 and let people enable GNUisms if they wish to? Then code should be
>> more portable across different compilers. With the GNUisms allowed by
>> default, it will make porting code more difficult to other stricter
>> compilers.
>
> This reasoning would make perfect sense if the primary goal of gcc's
> users was to write code to be ported to other compilers.
I thought gcc's primary aim was to be a *C* compiler. That would suggest to me
that enabling GNU extensions should not be the default, but an option.
A lot of bugs are often discovered in code by testing on multiple compilers and
multiple platforms. What one compiler misses, another finds. I could point you
to various cases where the Sun compiler has rejected erroneous code that gcc has
permitted. I'm sure you could no doubt find counter examples too.
By generating code that should build with other compilers, problems can be
detected more easily.
> However,
> many of GNU C's extensions are very useful, so it makes sense to have
> them available by default. (Having said that, many of GNU C's
> extensions are part of C99 anyway, so the difference is smaller than
> with C89.)
Personally I feel this is a bad decision, but I'm not a gcc developer.
Dave
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: Why is gcc going to default to "GNU dialect of ISO C99?"
2010-02-10 17:00 Dr. David Kirkby
@ 2010-02-10 17:26 ` Andrew Haley
2010-02-10 17:45 ` Dr. David Kirkby
0 siblings, 1 reply; 21+ messages in thread
From: Andrew Haley @ 2010-02-10 17:26 UTC (permalink / raw)
To: Dr. David Kirkby; +Cc: gcc-help
On 02/10/2010 04:44 PM, Dr. David Kirkby wrote:
> According to
>
> http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
>
> -std=foobar
>
>
> `gnu9x'
> GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC,
> this will become the default. The name `gnu9x' is deprecated.
>
> I really can not understand the logic of this. Why not default to ISO
> C99 and let people enable GNUisms if they wish to? Then code should be
> more portable across different compilers. With the GNUisms allowed by
> default, it will make porting code more difficult to other stricter
> compilers.
This reasoning would make perfect sense if the primary goal of gcc's
users was to write code to be ported to other compilers. However,
many of GNU C's extensions are very useful, so it makes sense to have
them available by default. (Having said that, many of GNU C's
extensions are part of C99 anyway, so the difference is smaller than
with C89.)
Andrew.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Why is gcc going to default to "GNU dialect of ISO C99?"
@ 2010-02-10 17:00 Dr. David Kirkby
2010-02-10 17:26 ` Andrew Haley
0 siblings, 1 reply; 21+ messages in thread
From: Dr. David Kirkby @ 2010-02-10 17:00 UTC (permalink / raw)
To: gcc-help
According to
http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
-std=foobar
`gnu9x'
GNU dialect of ISO C99. When ISO C99 is fully implemented in GCC, this will
become the default. The name `gnu9x' is deprecated.
I really can not understand the logic of this. Why not default to ISO C99 and
let people enable GNUisms if they wish to? Then code should be more portable
across different compilers. With the GNUisms allowed by default, it will make
porting code more difficult to other stricter compilers.
Dave
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2010-02-11 22:53 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-02-11 17:14 Why is gcc going to default to "GNU dialect of ISO C99?" Dennis Clarke
-- strict thread matches above, loose matches on Subject: below --
2010-02-11 14:50 Dennis Clarke
2010-02-11 14:14 Dennis Clarke
2010-02-11 14:42 ` Alexey Salmin
2010-02-11 13:44 Dennis Clarke
2010-02-11 14:00 ` Alexey Salmin
2010-02-11 2:40 Dennis Clarke
2010-02-11 9:43 ` Alfred M. Szmidt
2010-02-11 12:00 ` Alexey Salmin
[not found] ` <C79952E6.1947E%eljay@adobe.com>
2010-02-11 13:48 ` Alexey Salmin
[not found] ` <C79973C1.194A3%eljay@adobe.com>
2010-02-11 14:58 ` Alexey Salmin
2010-02-11 15:11 ` John (Eljay) Love-Jensen
2010-02-12 5:32 ` Patrick Horgan
2010-02-10 17:00 Dr. David Kirkby
2010-02-10 17:26 ` Andrew Haley
2010-02-10 17:45 ` Dr. David Kirkby
2010-02-10 18:07 ` Alfred M. Szmidt
2010-02-10 19:25 ` Dr. David Kirkby
2010-02-10 20:59 ` Kevin P. Fleming
2010-02-10 18:39 ` Andrew Haley
2010-02-11 2:46 ` Ian Lance Taylor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).