GCC Version: Using built-in specs. COLLECT_GCC=/Apps/gcc45/bin/gcc COLLECT_LTO_WRAPPER=/Apps/gcc45/libexec/gcc/x86_64-unknown-linux-gnu/4.5.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ./configure --prefix=/Apps/gcc45/ --enable-languages=c Thread model: posix gcc version 4.5.0 20091217 (experimental) (GCC)
System: Linux localhost 2.6.30-1-amd64 #1 SMP Sat Aug 15 18:09:19 UTC 2009 x86_64 GNU/Linux Description: The following source: extern int strlen3 (const char *) __attribute ((pure)); int z5 (const char *x) { if (!(strlen3(x) < 10)) __builtin_unreachable (); return 0; } produces the following result with gcc -O2 t.c -S -Wall without any warnings nor errors: .file "t.c" .text .p2align 4,,15 .globl z5 .type z5, @function z5: .LFB0: .cfi_startproc subq $8, %rsp .cfi_def_cfa_offset 16 call strlen3 xorl %eax, %eax addq $8, %rsp .cfi_def_cfa_offset 8 ret .cfi_endproc .LFE0: .size z5, .-z5 .ident "GCC: (GNU) 4.5.0 20091217 (experimental)" .section .note.GNU-stack,"",@progbits GCC should be able to remove the call to strlen3 from z5, since the only effect of strlen3 is its return value which is no longer used by z5. -- Summary: Missed optimisation for pure functions with __builtin_unreachable Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: patrick dot pelissier at gmail dot com GCC build triplet: x86_64-unknown-linux-gnu GCC host triplet: x86_64-unknown-linux-gnu GCC target triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42461