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:
parent
10326855ab
commit
82efaf43d8
30
gcc/testsuite/g++.dg/ext/packed2.C
Normal file
30
gcc/testsuite/g++.dg/ext/packed2.C
Normal 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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user