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? 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