PR c++/3948 -- C++ ABI change, followup to 2001-12-18 patch.
* class.c (finish_struct_bits): Also set TREE_ADDRESSABLE for a type with a nontrivial destructor. From-SVN: r50959
This commit is contained in:
parent
38cb4e8407
commit
ffd696af84
|
@ -1,3 +1,9 @@
|
|||
2002-03-18 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/3948 -- C++ ABI change, followup to 2001-12-18 patch.
|
||||
* class.c (finish_struct_bits): Also set TREE_ADDRESSABLE for a
|
||||
type with a nontrivial destructor.
|
||||
|
||||
2002-03-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/4460
|
||||
|
|
|
@ -1879,15 +1879,16 @@ finish_struct_bits (t)
|
|||
}
|
||||
}
|
||||
|
||||
/* If this type has a copy constructor, force its mode to be BLKmode, and
|
||||
force its TREE_ADDRESSABLE bit to be nonzero. This will cause it to
|
||||
be passed by invisible reference and prevent it from being returned in
|
||||
a register.
|
||||
/* If this type has a copy constructor or a destructor, force its mode to
|
||||
be BLKmode, and force its TREE_ADDRESSABLE bit to be nonzero. This
|
||||
will cause it to be passed by invisible reference and prevent it from
|
||||
being returned in a register.
|
||||
|
||||
Also do this if the class has BLKmode but can still be returned in
|
||||
registers, since function_cannot_inline_p won't let us inline
|
||||
functions returning such a type. This affects the HP-PA. */
|
||||
if (! TYPE_HAS_TRIVIAL_INIT_REF (t)
|
||||
|| TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
|
||||
|| (TYPE_MODE (t) == BLKmode && ! aggregate_value_p (t)
|
||||
&& CLASSTYPE_NON_AGGREGATE (t)))
|
||||
{
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
// PR c++/3948
|
||||
// Test that the destructor call for a value parameter gets the
|
||||
// right address.
|
||||
|
||||
// { dg-do run }
|
||||
|
||||
void *p[2];
|
||||
int i;
|
||||
int r;
|
||||
|
||||
struct C
|
||||
{
|
||||
int m;
|
||||
|
||||
C() { p[i++] = this; }
|
||||
~C() { if (p[--i] != this) r = 1; }
|
||||
};
|
||||
|
||||
|
||||
void Foo (C c)
|
||||
{
|
||||
p[i++] = &c;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
C c;
|
||||
|
||||
Foo (c);
|
||||
return r;
|
||||
}
|
Loading…
Reference in New Issue