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

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

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

commit r15-329-gd9318caed3bbff8136d13e00dcfc020a59d10f78
Author: Marek Polacek <pola...@redhat.com>
Date:   Wed Jan 24 18:06:48 2024 -0500

    c++: #pragma doesn't disable -Wunused-label [PR113582]

    The PR complains that

      void do_something(){
        #pragma GCC diagnostic push
        #pragma GCC diagnostic ignored "-Wunused-label"
        start:;
        #pragma GCC diagnostic pop
      } #1

    doesn't work.  That's because we warn_for_unused_label only while we're
    in finish_function, meaning we're at #1 where we're outside the #pragma
    region.  We can use suppress_warning + warning_suppressed_p to fix this.

    Note that I'm not using TREE_USED.  Propagating it in
tsubst_stmt/LABEL_EXPR
    from decl to label would mean that we don't warn in do_something2, but
    I think we want the warning there: we're in a template and the goto is
    a discarded statement.

            PR c++/113582

    gcc/c-family/ChangeLog:

            * c-warn.cc (warn_for_unused_label): Don't warn if -Wunused-label
has
            been suppressed for the label.

    gcc/cp/ChangeLog:

            * parser.cc (cp_parser_label_for_labeled_statement):
suppress_warning
            if it's not enabled at input_location.
            * pt.cc (tsubst_stmt): Call copy_warning.

    gcc/testsuite/ChangeLog:

            * g++.dg/warn/Wunused-label-4.C: New test.
  • [Bug c++/113582] incorrect warn... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to