------- Comment #3 from ebotcazou at gcc dot gnu dot org 2009-10-15 10:20 ------- The problem comes from cp/layout_class_type: it creates the version of the class to be used for virtual bases before laying out the virtual base classes of the class itself, in particular its alignment is set to the current alignment:
TYPE_ALIGN (base_t) = rli->record_align; which may not be the final alignment if virtual base classes are more aligned, i.e. if layout_virtual_bases (rli, empty_base_offsets); bumps rli->record_align. As a result, TYPE_ALIGN > CLASSTYPE_ALIGN for the class type so virtual bases that have this class type aren't aligned enough when they are passed as 'this' to the methods of the class. Jason, any ideas to solve this? -- ebotcazou at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jason at gcc dot gnu dot | |org, ebotcazou at gcc dot | |gnu dot org AssignedTo|ebotcazou at gcc dot gnu dot|unassigned at gcc dot gnu |org |dot org Status|ASSIGNED |NEW Component|target |c++ Known to fail|3.4.3 4.2.4 4.3.4 4.4.0 |3.4.3 4.2.4 4.3.4 4.4.0 | |4.5.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37798