gcc cannot build correctly famous hello program, clang does it correctly

Alex Ernst alex.ernst19@gmail.com
Wed Sep 7 10:36:22 GMT 2022


$ gcc -v
gcc version 10.2.1 20210110 (Debian 10.2.1-6)

$ clang -v
Debian clang version 11.0.1-2

$ cat hello.c
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"Hell\
o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}

$ gcc -ansi -o hello hello.c
$ strace hello
. . .
write(1, 0x416c9004, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9005, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9006, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9007, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9008, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9009, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c900a, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c900b, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c900c, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c900d, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c900e, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c900f, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9010, 1)                 = -1 EFAULT (Bad address)
write(1, 0x416c9011, 1)                 = -1 EFAULT (Bad address)
exit_group(0)                           = ?
+++ exited with 0 +++

$ clang -ansi -o hello hello.c
$ strace hello
. . .
write(1, "H", 1H)                        = 1
write(1, "e", 1e)                        = 1
write(1, "l", 1l)                        = 1
write(1, "l", 1l)                        = 1
write(1, "o", 1o)                        = 1
write(1, ",", 1,)                        = 1
write(1, " ", 1 )                        = 1
write(1, "w", 1w)                        = 1
write(1, "o", 1o)                        = 1
write(1, "r", 1r)                        = 1
write(1, "l", 1l)                        = 1
write(1, "d", 1d)                        = 1
write(1, "!", 1!)                        = 1
write(1, "\n", 1
)                       = 1
exit_group(0)                           = ?
+++ exited with 0 +++


More information about the Gcc-bugs mailing list