c++: Disable -Wignored-qualifiers for template args [PR107492]
commited1797ddf8285f59a50d9c883beb97705279d980
authorMarek Polacek <polacek@redhat.com>
Tue, 1 Nov 2022 15:49:03 +0000 (1 11:49 -0400)
committerMarek Polacek <polacek@redhat.com>
Tue, 15 Nov 2022 22:44:13 +0000 (15 17:44 -0500)
tree45f3b83dded8a3da2c41821a18ce8cdd6604dd05
parentc717a92dd89321eeb74aaa3daeb32354ac588d20
c++: Disable -Wignored-qualifiers for template args [PR107492]

It seems wrong to issue a -Wignored-qualifiers warning for code like:

  static_assert(!is_same_v<void(*)(), const void(*)()>);

because there the qualifier matters.  Likewise in template
specialization:

  template<typename T> struct S { };
  template<> struct S<void(*)()> { };
  template<> struct S<const void(*)()> { }; // OK, not a redefinition

And likewise in other type-id contexts such as trailing-return-type:

  auto g() -> const void (*)();

This patch limits the warning to the function declaration context only.

PR c++/107492

gcc/cp/ChangeLog:

* decl.cc (grokdeclarator): Only emit a -Wignored-qualifiers warning
when funcdecl_p.

gcc/testsuite/ChangeLog:

* g++.dg/warn/Wignored-qualifiers3.C: New test.
gcc/cp/decl.cc
gcc/testsuite/g++.dg/warn/Wignored-qualifiers3.C [new file with mode: 0644]