This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/55128] New: auto changes storage from .data to .rodata
- From: "ricilake at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 29 Oct 2012 20:43:41 +0000
- Subject: [Bug c++/55128] New: auto changes storage from .data to .rodata
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55128
Bug #: 55128
Summary: auto changes storage from .data to .rodata
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: ricilake@gmail.com
This is probably related to #49673 (as in, it's probably a case which was not
fixed by the fix to that bug.) I noticed it while mucking about with
compile-time array generation.
In this little extract, a and b are identical, except that b is automatically
typed. I can't see any reason why the type wouldn't be exactly the same as a's,
and the DWARF debugging information shows them as having the same type.
However, a ends up in .rodata (expected) and b in .data (unexpected). I have a
stronger expectation which is that both would be in the same section, but I'm
pretty sure that .rodata is correct.
code:
#include <array>
constexpr std::array<double, 1> makearray(double d) {
return std::array<double, 1>{{d}};
}
extern const std::array<double, 1> a = makearray(1);
extern const auto b = makearray(1);
------------------------------------------------
General ASM with -O3 -S:
.file "auto1.cc"
.globl b
.data
.align 8
.type b, @object
.size b, 8
b:
.long 0
.long 1072693248
.globl a
.section .rodata
.align 8
.type a, @object
.size a, 8
a:
.long 0
.long 1072693248
.ident "GCC: (Ubuntu/Linaro 4.7.2-4precise1) 4.7.2"
.section .note.GNU-stack,"",@progbits