[Bug c++/68678] New: Initialization of pointer by constant expression using static ctor.
sorganov at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Dec 3 15:16:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68678
Bug ID: 68678
Summary: Initialization of pointer by constant expression using
static ctor.
Product: gcc
Version: 5.2.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: sorganov at gmail dot com
Target Milestone: ---
g++ 5 produces initialization for the following case using static constructor,
while earlier versions of g++ as well as gcc 5 in C compilation mode do it
using simple entry in .data section.
This sounds like missed optimization.
$ cat dynamic-init.cc
typedef struct S { int x; } S;
void const* p = (void*)(0x1234 + sizeof(S));
$ ~/try/gcc-5.2.0/bin/gcc -O2 -c -save-temps dynamic-init.cc
$ cat dynamic-init.s
.file "dynamic-init.cc"
.section .text.unlikely,"ax",@progbits
.LCOLDB0:
.section .text.startup,"ax",@progbits
.LHOTB0:
.p2align 4,,15
.type _GLOBAL__sub_I_p, @function
_GLOBAL__sub_I_p:
.LFB1:
.cfi_startproc
movq $4664, p(%rip)
ret
.cfi_endproc
.LFE1:
.size _GLOBAL__sub_I_p, .-_GLOBAL__sub_I_p
.section .text.unlikely
.LCOLDE0:
.section .text.startup
.LHOTE0:
.section .init_array,"aw"
.align 8
.quad _GLOBAL__sub_I_p
.globl p
.bss
.align 8
.type p, @object
.size p, 8
p:
.zero 8
.ident "GCC: (GNU) 5.2.1 20151116"
.section .note.GNU-stack,"",@progbits
Here is what gcc 4.4.5 did:
$ gcc -O2 -c -save-temps dynamic-init.cc
$ cat dynamic-init.s
.file "dynamic-init.cc"
.globl p
.data
.align 8
.type p, @object
.size p, 8
p:
.quad 4664
.ident "GCC: (GNU) 4.4.5 20101112 (Red Hat 4.4.5-2)"
.section .note.GNU-stack,"",@progbits
$
More information about the Gcc-bugs
mailing list