public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization
@ 2022-11-01 11:16 redi at gcc dot gnu.org
  2022-11-01 15:40 ` [Bug c++/107492] " mpolacek at gcc dot gnu.org
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-01 11:16 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

            Bug ID: 107492
           Summary: Unhelpful -Wignored-qualifiers warning in template
                    specialization
           Product: gcc
           Version: 12.2.1
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

GCC warns about this with -Wextra:

template<typename T> struct S { };
template<> struct S<void(*)()> { };
template<> struct S<const void(*)()> { };

template<typename T, typename U> constexpr bool is_same_v = false;
template<typename T> constexpr bool is_same_v<T, T> = true;

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


spec.cc:3:21: warning: type qualifiers ignored on function return type
[-Wignored-qualifiers]
    3 | template<> struct S<const void(*)()> { };
      |                     ^~~~~
spec.cc:8:40: warning: type qualifiers ignored on function return type
[-Wignored-qualifiers]
    8 | static_assert( ! is_same_v< void(*)(), const void(*)() > );
      |                                        ^~~~~


The warning is wrong, the qualifiers are not ignored here. The two types are
distinct, as shown by the fact that the explicit specializations are not
redefinitions of each other, and the static assert passes.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
@ 2022-11-01 15:40 ` mpolacek at gcc dot gnu.org
  2022-11-01 16:52 ` mpolacek at gcc dot gnu.org
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-11-01 15:40 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
                 CC|                            |mpolacek at gcc dot gnu.org
   Last reconfirmed|                            |2022-11-01

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
I suspect we want to disable the warning while parsing a template argument,
like this:

--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -24334,6 +24334,7 @@ cp_parser_template_type_arg (cp_parser *parser)
   const char *saved_message = parser->type_definition_forbidden_message;
   parser->type_definition_forbidden_message
     = G_("types may not be defined in template arguments");
+  warning_sentinel w (warn_ignored_qualifiers);
   r = cp_parser_type_id_1 (parser, CP_PARSER_FLAGS_NONE, true, false, NULL);
   parser->type_definition_forbidden_message = saved_message;
   if (cxx_dialect >= cxx14 && !flag_concepts && type_uses_auto (r))

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
  2022-11-01 15:40 ` [Bug c++/107492] " mpolacek at gcc dot gnu.org
@ 2022-11-01 16:52 ` mpolacek at gcc dot gnu.org
  2022-11-02 12:56 ` cvs-commit at gcc dot gnu.org
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-11-01 16:52 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |mpolacek at gcc dot gnu.org

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
  2022-11-01 15:40 ` [Bug c++/107492] " mpolacek at gcc dot gnu.org
  2022-11-01 16:52 ` mpolacek at gcc dot gnu.org
@ 2022-11-02 12:56 ` cvs-commit at gcc dot gnu.org
  2022-11-03 19:05 ` jason at gcc dot gnu.org
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-11-02 12:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <redi@gcc.gnu.org>:

https://gcc.gnu.org/g:cf35818a390e7cb4b1a4fa70c243ede59d6cbbac

commit r13-3607-gcf35818a390e7cb4b1a4fa70c243ede59d6cbbac
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Nov 1 11:17:35 2022 +0000

    libstdc++: Ignore -Wignored-qualifiers warning in <variant>

    The warning is wrong here, the qualifier serves a purpose and is not
    ignored (c.f. PR c++/107492).

    libstdc++-v3/ChangeLog:

            * include/std/variant (__variant::_Multi_array::__untag_result):
            Use pragma to suppress warning.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2022-11-02 12:56 ` cvs-commit at gcc dot gnu.org
@ 2022-11-03 19:05 ` jason at gcc dot gnu.org
  2022-11-03 20:11 ` redi at gcc dot gnu.org
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: jason at gcc dot gnu.org @ 2022-11-03 19:05 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at gcc dot gnu.org

--- Comment #3 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to CVS Commits from comment #2)
>     The warning is wrong here, the qualifier serves a purpose and is not
>     ignored (c.f. PR c++/107492).

OK, I'm curious: what is its purpose?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2022-11-03 19:05 ` jason at gcc dot gnu.org
@ 2022-11-03 20:11 ` redi at gcc dot gnu.org
  2022-11-15 22:44 ` cvs-commit at gcc dot gnu.org
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-03 20:11 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I ... don't remember. It was needed to avoid some error, maybe from
std::visit<const void>(vis, var) of something like that. But either we never
added a test for it or something changed. I can't reproduce an error without
that partial specialization now.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2022-11-03 20:11 ` redi at gcc dot gnu.org
@ 2022-11-15 22:44 ` cvs-commit at gcc dot gnu.org
  2022-11-15 22:45 ` mpolacek at gcc dot gnu.org
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-11-15 22:44 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

--- Comment #5 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Marek Polacek <mpolacek@gcc.gnu.org>:

https://gcc.gnu.org/g:ed1797ddf8285f59a50d9c883beb97705279d980

commit r13-4077-ged1797ddf8285f59a50d9c883beb97705279d980
Author: Marek Polacek <polacek@redhat.com>
Date:   Tue Nov 1 11:49:03 2022 -0400

    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.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2022-11-15 22:44 ` cvs-commit at gcc dot gnu.org
@ 2022-11-15 22:45 ` mpolacek at gcc dot gnu.org
  2022-11-15 22:47 ` redi at gcc dot gnu.org
  2022-11-28 22:21 ` pinskia at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2022-11-15 22:45 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
             Status|ASSIGNED                    |RESOLVED

--- Comment #6 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Resolved.  Do we want to revert r13-3607?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2022-11-15 22:45 ` mpolacek at gcc dot gnu.org
@ 2022-11-15 22:47 ` redi at gcc dot gnu.org
  2022-11-28 22:21 ` pinskia at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: redi at gcc dot gnu.org @ 2022-11-15 22:47 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I think clang warns there too, but we could.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug c++/107492] Unhelpful -Wignored-qualifiers warning in template specialization
  2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
                   ` (7 preceding siblings ...)
  2022-11-15 22:47 ` redi at gcc dot gnu.org
@ 2022-11-28 22:21 ` pinskia at gcc dot gnu.org
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu.org @ 2022-11-28 22:21 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107492

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |13.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-11-28 22:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-01 11:16 [Bug c++/107492] New: Unhelpful -Wignored-qualifiers warning in template specialization redi at gcc dot gnu.org
2022-11-01 15:40 ` [Bug c++/107492] " mpolacek at gcc dot gnu.org
2022-11-01 16:52 ` mpolacek at gcc dot gnu.org
2022-11-02 12:56 ` cvs-commit at gcc dot gnu.org
2022-11-03 19:05 ` jason at gcc dot gnu.org
2022-11-03 20:11 ` redi at gcc dot gnu.org
2022-11-15 22:44 ` cvs-commit at gcc dot gnu.org
2022-11-15 22:45 ` mpolacek at gcc dot gnu.org
2022-11-15 22:47 ` redi at gcc dot gnu.org
2022-11-28 22:21 ` pinskia at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).