diff mbox

fix #69317 - [6 regression] wrong ABI version in -Wabi warnings

Message ID 569AE385.7010808@gmail.com
State New
Headers show

Commit Message

Martin Sebor Jan. 17, 2016, 12:42 a.m. UTC
While adding an ABI warning in the patch for bug 69277 I noticed
that the ABI version printed by GCC 6.0 in some -Wabi diagnostics
is incorrect:  while 5.1.0 prints the versions of the ABI given
by the -Wabi=X and -fabi-version=Y options (i.e., it mentions
both X and Y), 6.0 prints the same version twice (just Y).

The attached patch fixes this and adds tests to verify that the
referenced versions are as expected (it uses ABIs 2 and 3 but
tests exercising the other ABI changes should be added as well).

Martin

Comments

Martin Sebor Jan. 25, 2016, 4:56 p.m. UTC | #1
Ping: I'm looking a review/approval of the almost trivial patch
below:

    https://gcc.gnu.org/ml/gcc-patches/2016-01/msg01206.html

On 01/16/2016 05:42 PM, Martin Sebor wrote:
> While adding an ABI warning in the patch for bug 69277 I noticed
> that the ABI version printed by GCC 6.0 in some -Wabi diagnostics
> is incorrect:  while 5.1.0 prints the versions of the ABI given
> by the -Wabi=X and -fabi-version=Y options (i.e., it mentions
> both X and Y), 6.0 prints the same version twice (just Y).
>
> The attached patch fixes this and adds tests to verify that the
> referenced versions are as expected (it uses ABIs 2 and 3 but
> tests exercising the other ABI changes should be added as well).
>
> Martin
Jeff Law Jan. 27, 2016, 6:50 a.m. UTC | #2
On 01/25/2016 09:56 AM, Martin Sebor wrote:
> Ping: I'm looking a review/approval of the almost trivial patch
> below:
>
>     https://gcc.gnu.org/ml/gcc-patches/2016-01/msg01206.html
>
> On 01/16/2016 05:42 PM, Martin Sebor wrote:
>> While adding an ABI warning in the patch for bug 69277 I noticed
>> that the ABI version printed by GCC 6.0 in some -Wabi diagnostics
>> is incorrect:  while 5.1.0 prints the versions of the ABI given
>> by the -Wabi=X and -fabi-version=Y options (i.e., it mentions
>> both X and Y), 6.0 prints the same version twice (just Y).
>>
>> The attached patch fixes this and adds tests to verify that the
>> referenced versions are as expected (it uses ABIs 2 and 3 but
>> tests exercising the other ABI changes should be added as well).
OK.

Jeff
diff mbox

Patch

gcc/cp/ChangeLog:
2016-01-16  Martin Sebor  <msebor@redhat.com>

	PR c++/69317
	* mangle.c (mangle_decl): Reference the correct (saved) version
	of the ABI in -Wabi diagnostics.

gcc/testsuite/ChangeLog:
2016-01-16  Martin Sebor  <msebor@redhat.com>

	PR c++/69317
	* g++.dg/abi/Wabi-2-2.C: New test.
	* g++.dg/abi/Wabi-2-3.C: New test.
	* g++.dg/abi/Wabi-3-2.C: New test.
	* g++.dg/abi/Wabi-3-3.C: New test.

Index: gcc/cp/mangle.c
===================================================================
--- gcc/cp/mangle.c	(revision 232296)
+++ gcc/cp/mangle.c	(working copy)
@@ -3657,13 +3669,13 @@  mangle_decl (const tree decl)
 	    warning_at (DECL_SOURCE_LOCATION (G.entity), OPT_Wabi,
 			"the mangled name of %qD changed between "
 			"-fabi-version=%d (%D) and -fabi-version=%d (%D)",
-			G.entity, warn_abi_version, id2,
-			flag_abi_version, id);
+			G.entity, save_ver, id2,
+			warn_abi_version, id);
 	  else
 	    warning_at (DECL_SOURCE_LOCATION (G.entity), OPT_Wabi,
 			"the mangled name of %qD changes between "
 			"-fabi-version=%d (%D) and -fabi-version=%d (%D)",
-			G.entity, flag_abi_version, id,
+			G.entity, save_ver, id,
 			warn_abi_version, id2);
 	}
 
Index: gcc/testsuite/g++.dg/abi/Wabi-2-2.C
===================================================================
--- gcc/testsuite/g++.dg/abi/Wabi-2-2.C	(revision 0)
+++ gcc/testsuite/g++.dg/abi/Wabi-2-2.C	(working copy)
@@ -0,0 +1,14 @@ 
+// Verify that no diagnostic is issued when the version specified
+// via -Wabi= matches the version specified by -fabi-version=.
+
+// { dg-options "-Werror -Wabi=2 -fabi-version=2" }
+// { dg-do compile }
+
+// The mangling of templates with a non-type template parameter
+// of reference type changed in ABI version 3: 
+extern int N;
+template <int &> struct S { };
+
+// Expect no diagnostic.
+void foo (S<N>) { }
+
Index: gcc/testsuite/g++.dg/abi/Wabi-2-3.C
===================================================================
--- gcc/testsuite/g++.dg/abi/Wabi-2-3.C	(revision 0)
+++ gcc/testsuite/g++.dg/abi/Wabi-2-3.C	(working copy)
@@ -0,0 +1,16 @@ 
+// PR c++/69317 - [6 regression] wrong ABI version in -Wabi warnings 
+// Exercise that the correct ABI versions are referenced in the -Wabi
+// diagnostic.  See also the equivalent Wabi-3-2.C test.
+
+// { dg-options "-Wabi=2 -fabi-version=3" }
+// { dg-do compile }
+
+// The mangling of templates with a non-type template parameter
+// of reference type changed in ABI version 3: 
+extern int N;
+template <int &> struct S { };
+
+// Expect the diagnostic to reference the ABI version specified via
+// -fabi-version=3 and the ABI version specified via -Wabi=2.
+void foo (S<N>) { }   // { dg-warning "the mangled name of .void foo\\(S<N>\\). changed between -fabi-version=3 \\(_Z3foo1SILZ1NEE\\) and -fabi-version=2 \\(_Z3foo1SIL_Z1NEE\\)" }
+
Index: gcc/testsuite/g++.dg/abi/Wabi-3-2.C
===================================================================
--- gcc/testsuite/g++.dg/abi/Wabi-3-2.C	(revision 0)
+++ gcc/testsuite/g++.dg/abi/Wabi-3-2.C	(working copy)
@@ -0,0 +1,16 @@ 
+// PR c++/69317 - [6 regression] wrong ABI version in -Wabi warnings 
+// Exercise that the correct ABI versions are referenced in the -Wabi
+// diagnostic.  See also the equivalent Wabi-2-3.C test.
+
+// { dg-options "-Wabi=3 -fabi-version=2" }
+// { dg-do compile }
+
+// The mangling of templates with a non-type template parameter
+// of reference type changed in ABI version 3: 
+extern int N;
+template <int &> struct S { };
+
+// Expect the diagnostic to reference the ABI version specified via
+// -fabi-version=2 and the ABI version specified via -Wabi=3.
+void foo (S<N>) { }   // { dg-warning "the mangled name of .void foo\\(S<N>\\). changed between -fabi-version=2 \\(_Z3foo1SIL_Z1NEE\\) and -fabi-version=3 \\(_Z3foo1SILZ1NEE\\)" }
+
Index: gcc/testsuite/g++.dg/abi/Wabi-3-3.C
===================================================================
--- gcc/testsuite/g++.dg/abi/Wabi-3-3.C	(revision 0)
+++ gcc/testsuite/g++.dg/abi/Wabi-3-3.C	(working copy)
@@ -0,0 +1,14 @@ 
+// Verify that no diagnostic is issued when the version specified
+// via -Wabi= matches the version specified by -fabi-version=.
+
+// { dg-options "-Werror -Wabi=3 -fabi-version=3" }
+// { dg-do compile }
+
+// The mangling of templates with a non-type template parameter
+// of reference type changed in ABI version 3: 
+extern int N;
+template <int &> struct S { };
+
+// Expect no diagnostic.
+void foo (S<N>) { }
+