This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/24928] New: Trivial static const objects should go to .rodata
- From: "msharov at hotmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 18 Nov 2005 00:32:02 -0000
- Subject: [Bug c++/24928] New: Trivial static const objects should go to .rodata
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
If a class has a trivial constructor that can be completely inlined and
consists of simply initializing member variables, then static const instances
of this class can be initialized at compile time and placed into .rodata. This
would be the same behaviour that C has for static const structs and arrays.
Example:
struct A {
public:
inline A (int v) : m_v (v) {}
private:
int m_v;
};
int main (void)
{
static const A s_v (42);
return (0);
}
Compiles to (with -fno-threadsafe-statics):
.globl main
.type main, @function
main:
.LFB5:
cmpb $0, _ZGVZ4mainE3s_v
jne .L2
movl $42, _ZZ4mainE3s_v
movb $1, _ZGVZ4mainE3s_v
.L2:
xorl %eax, %eax
ret
With the object being initialized at runtime as if it mattered. Because the
values of the member variables can not be changed after initialization, there
is no reason to do this at runtime. Because the constructor doesn't do
anything, this would not conflict with C++'s create-on-call mandate.
Because of this behaviour there is no way to create compiled-in const objects
just like creating const structs or arrays in C.
--
Summary: Trivial static const objects should go to .rodata
Product: gcc
Version: 4.0.2
Status: UNCONFIRMED
Severity: enhancement
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: msharov at hotmail dot com
GCC build triplet: athlon-gnu-linux
GCC host triplet: athlon-gnu-linux
GCC target triplet: athlon-gnu-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24928