re PR c++/10091 ([parisc] ICE in cp_expr_size, at cp/cp-lang.c:307)

PR c++/10091
        * expr.c (expand_expr) [ADDR_EXPR]: Disallow taking the address of
        an unaligned member of TREE_ADDRESSABLE type.
        * cp/typeck.c (build_class_member_access_expr): Compare
        TYPE_MAIN_VARIANTs.

From-SVN: r64523
This commit is contained in:
Jason Merrill 2003-03-17 23:36:03 -05:00
parent 10326855ab
commit 82efaf43d8

View File

@ -0,0 +1,30 @@
// PR c++/10091
// Bug: We were dying because in general, B::a doesn't have enough
// alignment for us to take its address. But if the B is C::b, it does
// have enough alignment, and we should be able to determine that.
// This only failed on STRICT_ALIGNMENT targets (i.e. not i686)
struct A {
int i;
A();
A(const A&);
A& operator=(const A&);
};
struct B {
A a;
} __attribute__ ((packed));
struct C {
B b;
int j;
};
void f (const A&);
void g (const C& c)
{
f (c.b.a);
}