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++/37715] New: Different class sizes with public/private and alignments


I've been experiencing some (for me) rather unexpected behavior with some C++
code. The following is a very reduced test case:

class A
{ private: void *one;
} __attribute__((aligned(16)));

class C {};
class L { public: class M : A { C _c; }; M m; };

L x;

It's about the size of L::M. I.e. if this file is compiled, L::M has a sizeof
of 16. If the first private is changed to public, the size of L::M changes to
32 (-Dprivate=public). Is this expected behavior? When removing the alignment
contraints, the size of L::M is 8 in both cases.

I'm seeing this behavior with all gcc versions tested (3.3, 3.4, 4.1, 4.2, 4.3,
head) as well as with different target architectures (i386, x86_64, arm).

This is the script use to show the difference:
#! /bin/sh

echo 'print sizeof(L::M)' > x.cmd

echo -n "orig:        "
gcc -Wall -g -c x.cc
gdb -x x.cmd -batch x.o

echo -n "with define: " 
gcc -Dprivate=public -Wall -g -c x.cc
gdb -x x.cmd -batch x.o

Thanks


-- 
           Summary: Different class sizes with public/private and alignments
           Product: gcc
           Version: 4.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: adam at os dot inf dot tu-dresden dot de
 GCC build triplet: i486-linux-gnu
  GCC host triplet: i486-linux-gnu
GCC target triplet: i486-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37715


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