> On 04/17/2018 08:58 AM, Jakub Jelinek wrote: > > On Tue, Apr 17, 2018 at 07:39:20AM +0200, Martin Liška wrote: > >> + 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 ")); > > > > I think all the G_ uses don't put a space in between G_ and ( > > Also, please avoid the trailing space in the message. > > Sure. I see other format violations, should I fix that in follow up patch: > > gcc/c-family/c-warn.c: ? G_ ("floating point overflow in expression > %qE " > gcc/c-family/c-warn.c: : G_ ("floating point overflow in expression > of type %qT " > gcc/gimple-ssa-sprintf.c: ? G_ ("%<%.*s%> directive > output between %wu and " > gcc/gimple-ssa-sprintf.c: : G_ ("%<%.*s%> directive > output between %wu and " > gcc/testsuite/gcc.dg/plugin/ggcplug.c: warning (0, G_ ("option > '-fplugin-arg-%s-count-ggc-start=%s'" > gcc/testsuite/gcc.dg/plugin/ggcplug.c: warning (0, G_ ("option > '-fplugin-arg-%s-count-ggc-end=%s'" > gcc/testsuite/gcc.dg/plugin/ggcplug.c: warning (0, G_ ("option > '-fplugin-arg-%s-count-ggc-mark=%s'" > gcc/testsuite/gcc.dg/plugin/ggcplug.c: warning (0, G_ ("option > '-fplugin-arg-%s-test-extra-root=%s'" > > ? > > > > > Do you diagnose if both are bit-fields, but with different bitcount, e.g. if > > in your testcase you replace bool mbDisposed : 1; with int mbDisposed : 3; > > and bool mbDisposed; with int mbDisposed : 7; ? > > Good point, I add a new test-case, done in patch. > Is it OK to install the patch? OK, thanks! (and sorry for the whitespace errors) Honza > > Martin > > > > >> + return false; > >> + } > >> + else > >> + gcc_assert (DECL_NONADDRESSABLE_P (f1) > >> + == DECL_NONADDRESSABLE_P (f2)); > >> } > >> > >> /* If one aggregate has more fields than the other, they > >> diff --git a/gcc/testsuite/g++.dg/lto/pr85405_0.C > >> b/gcc/testsuite/g++.dg/lto/pr85405_0.C > >> new file mode 100644 > >> index 00000000000..1a41d81099c > >> --- /dev/null > >> +++ b/gcc/testsuite/g++.dg/lto/pr85405_0.C > >> @@ -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; } > >> diff --git a/gcc/testsuite/g++.dg/lto/pr85405_1.C > >> b/gcc/testsuite/g++.dg/lto/pr85405_1.C > >> new file mode 100644 > >> index 00000000000..78606185624 > >> --- /dev/null > >> +++ b/gcc/testsuite/g++.dg/lto/pr85405_1.C > >> @@ -0,0 +1,9 @@ > >> +class VclReferenceBase { > >> + int mnRefCnt; > >> + bool mbDisposed; > >> + > >> +protected: > >> + virtual ~VclReferenceBase(); > >> +}; > >> +class : VclReferenceBase { > >> +} a; > >> > > > > Jakub > > >
> From 87380235f9b81bea4cf910e702192586c072ce93 Mon Sep 17 00:00:00 2001 > From: marxin <mli...@suse.cz> > Date: Tue, 17 Apr 2018 10:11:07 +0200 > Subject: [PATCH] Fix coding style and add a new test-case (PR lto/85405). > > gcc/ChangeLog: > > 2018-04-17 Martin Liska <mli...@suse.cz> > > PR lto/85405 > * ipa-devirt.c (odr_types_equivalent_p): > > gcc/testsuite/ChangeLog: > > 2018-04-17 Martin Liska <mli...@suse.cz> > > PR lto/85405 > * g++.dg/lto/pr85405b_0.C: New test. > * g++.dg/lto/pr85405b_1.C: New test. > --- > gcc/ipa-devirt.c | 2 +- > gcc/testsuite/g++.dg/lto/pr85405b_0.C | 18 ++++++++++++++++++ > gcc/testsuite/g++.dg/lto/pr85405b_1.C | 9 +++++++++ > 3 files changed, 28 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/g++.dg/lto/pr85405b_0.C > create mode 100644 gcc/testsuite/g++.dg/lto/pr85405b_1.C > > diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c > index 85b8ef175f3..cc9b5e347e6 100644 > --- a/gcc/ipa-devirt.c > +++ b/gcc/ipa-devirt.c > @@ -1599,7 +1599,7 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, > bool *warned, > 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 ")); > + G_("one field is bitfield while other is not")); > return false; > } > else > diff --git a/gcc/testsuite/g++.dg/lto/pr85405b_0.C > b/gcc/testsuite/g++.dg/lto/pr85405b_0.C > new file mode 100644 > index 00000000000..a692abb7715 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/lto/pr85405b_0.C > @@ -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; > + int mbDisposed : 3; > + virtual ~VclReferenceBase(); > +}; > +class a; > +class b { > + a &e; > + bool c(); > +}; > +class B { > + VclReferenceBase d; > +}; > +class a : B {}; > +bool b::c() { return false; } > diff --git a/gcc/testsuite/g++.dg/lto/pr85405b_1.C > b/gcc/testsuite/g++.dg/lto/pr85405b_1.C > new file mode 100644 > index 00000000000..fd98e631d56 > --- /dev/null > +++ b/gcc/testsuite/g++.dg/lto/pr85405b_1.C > @@ -0,0 +1,9 @@ > +class VclReferenceBase { > + int mnRefCnt; > + int mbDisposed: 7; // { dg-lto-message "19: a field of same name but > different type is defined in another translation unit" } > + > +protected: > + virtual ~VclReferenceBase(); > +}; > +class : VclReferenceBase { > +} a; > -- > 2.16.3 >