https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79349
Bug ID: 79349 Summary: unused std::string is not optimized away in presense of a call Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: hiraditya at msn dot com Target Milestone: --- g++ version (GCC) 7.0.0 20170118 (experimental) $ cat t.cpp #include<string> void foo(); int main() { std::string s("abc"); foo (); return 0; } $ install/bin/g++ -O3 t.cpp -S -o t.s $ cat t.s main: .LFB995: .cfi_startproc .cfi_personality 0x3,__gxx_personality_v0 .cfi_lsda 0x3,.LLSDA995 pushq %rbx .cfi_def_cfa_offset 16 .cfi_offset 3, -16 subq $32, %rsp .cfi_def_cfa_offset 48 leaq 16(%rsp), %rax movb $99, 18(%rsp) movq $3, 8(%rsp) movb $0, 19(%rsp) movq %rax, (%rsp) movl $25185, %eax movw %ax, 16(%rsp) .LEHB0: call _Z3foov .LEHE0: movq (%rsp), %rdi leaq 16(%rsp), %rax cmpq %rax, %rdi je .L6 call _ZdlPv .L6: addq $32, %rsp .cfi_remember_state .cfi_def_cfa_offset 16 xorl %eax, %eax popq %rbx .cfi_def_cfa_offset 8 ret .L5: .cfi_restore_state movq (%rsp), %rdi leaq 16(%rsp), %rdx movq %rax, %rbx cmpq %rdx, %rdi je .L4 call _ZdlPv .L4: movq %rbx, %rdi .LEHB1: call _Unwind_Resume .LEHE1: .cfi_endproc .LFE995: .globl __gxx_personality_v0 .section .gcc_except_table,"a",@progbits While clang++ optimizes it away: clang version 5.0.0 (llvm-project SHA: 28b7c19c2379e17b26571260933467b9f98b449c) $ ./bin/clang++ -O3 t.cpp -S -o t.s -stdlib=libc++ $ cat t.s main: # @main .cfi_startproc # BB#0: # %entry pushq %rax .Lcfi0: .cfi_def_cfa_offset 16 callq _Z3foov xorl %eax, %eax popq %rcx retq .Lfunc_end0: .size main, .Lfunc_end0-main .cfi_endproc .ident "clang version 5.0.0 " .section ".note.GNU-stack","",@progbits