This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/55128] New: auto changes storage from .data to .rodata


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]