From 8ba54b29af99a3b068a9e5f3dd6b7bb0ce3d03e9 Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Wed, 25 Apr 2018 09:41:25 +0200 Subject: [PATCH] Backport r259429 2018-04-25 Martin Liska Backport from mainline 2018-04-17 Jan Hubicka PR lto/85405 * ipa-devirt.c (odr_types_equivalent_p): Handle bit fields. From-SVN: r259633 --- gcc/ChangeLog | 8 ++++++++ gcc/ipa-devirt.c | 11 +++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c75e50dbca0a..b7bb3d436f9d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-04-25 Martin Liska + + Backport from mainline + 2018-04-17 Jan Hubicka + + PR lto/85405 + * ipa-devirt.c (odr_types_equivalent_p): Handle bit fields. + 2018-04-23 Aaron Sawdey Backport from mainline diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index 9853c4a499c2..b4d2a94858fd 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -1576,8 +1576,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 -- 2.47.2