Support bitfields in Wodr machinery (PR lto/85405).

2018-04-17  Jan Hubicka  <jh@suse.cz>

	PR lto/85405
	* ipa-devirt.c (odr_types_equivalent_p): Handle bit fields.
2018-04-17  Martin Liska  <mliska@suse.cz>

	PR lto/85405
	* g++.dg/lto/pr85405_0.C: New test.
	* g++.dg/lto/pr85405_1.C: New test.

From-SVN: r259429
This commit is contained in:
Martin Liska 2018-04-17 05:41:40 +00:00
parent 646cf25275
commit ec214f928c
5 changed files with 47 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2018-04-17 Jan Hubicka <jh@suse.cz>
PR lto/85405
* ipa-devirt.c (odr_types_equivalent_p): Handle bit fields.
2018-04-17 Martin Liska <mliska@suse.cz>
PR ipa/85329

View file

@ -1587,8 +1587,15 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
"in another translation unit"));
return false;
}
gcc_assert (DECL_NONADDRESSABLE_P (f1)
== DECL_NONADDRESSABLE_P (f2));
if (DECL_BIT_FIELD (f1) != DECL_BIT_FIELD (f2))
{
warn_odr (t1, t2, f1, f2, warn, warned,
G_ ("one field is bitfield while other is not "));
return false;
}
else
gcc_assert (DECL_NONADDRESSABLE_P (f1)
== DECL_NONADDRESSABLE_P (f2));
}
/* If one aggregate has more fields than the other, they

View file

@ -1,3 +1,9 @@
2018-04-17 Martin Liska <mliska@suse.cz>
PR lto/85405
* g++.dg/lto/pr85405_0.C: New test.
* g++.dg/lto/pr85405_1.C: New test.
2018-04-17 Martin Liska <mliska@suse.cz>
PR ipa/85329

View file

@ -0,0 +1,18 @@
// { dg-lto-do link }
// { dg-lto-options {{-fPIC -shared -flto}} }
class VclReferenceBase { // { dg-lto-warning "7: type 'struct VclReferenceBase' violates the C\\+\\+ One Definition Rule" }
int mnRefCnt;
bool mbDisposed : 1;
virtual ~VclReferenceBase();
};
class a;
class b {
a &e;
bool c();
};
class B {
VclReferenceBase d;
};
class a : B {};
bool b::c() { return false; }

View file

@ -0,0 +1,9 @@
class VclReferenceBase {
int mnRefCnt;
bool mbDisposed;
protected:
virtual ~VclReferenceBase();
};
class : VclReferenceBase {
} a;