public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/99672] std::source_location yield different column numbers between free function and template functions
Date: Thu, 25 Mar 2021 20:36:11 +0000	[thread overview]
Message-ID: <bug-99672-4-eS947GVqhu@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-99672-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <jakub@gcc.gnu.org>:

https://gcc.gnu.org/g:2132a36370e282d8c0ed0c97e5bfb952e23dbfa1

commit r11-7836-g2132a36370e282d8c0ed0c97e5bfb952e23dbfa1
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Thu Mar 25 21:35:11 2021 +0100

    c++: Fix source_location inconsistency between calls from templates and
non-templates [PR99672]

    The srcloc19.C testcase shows inconsistency in
    std::source_location::current() locations between calls from
    templates and non-templates.  The location used by
__builtin_source_location
    comes in both cases from input_location which is set on it by bot_manip
    when handling the default argument, called during finish_call_expr.
    The problem is that in templates that input_location comes from the
    CALL_EXPR we built earlier and that has the combined locus with
    range between first character of the function name and closing paren
    with caret on the opening paren, so something printed as caret as:
    foobar ();
    ~~~~~~^~
    But outside of templates, finish_call_expr is called when input_location
    is just the closing paren token, i.e.
    foobar ();
            ^
    and only after that returns we create the combined location and set
    the CALL_EXPR location to that.  So, it means
std::source_location::current()
    reports in templates the column of opening (, while outside of templates
    closing ).

    The following patch makes it consistent by creating the combined location
    already before calling finish_call_expr and temporarily overriding
    input_location to that.

    2021-03-25  Jakub Jelinek  <jakub@redhat.com>

            PR c++/99672
            * parser.c (cp_parser_postfix_expression): For calls, create
            combined_loc and temporarily set input_location to it before
            calling finish_call_expr.

            * g++.dg/concepts/diagnostic2.C: Adjust expected caret line.
            * g++.dg/cpp1y/builtin_location.C (f4, n6): Move #line directives
            to match locus changes.
            * g++.dg/cpp2a/srcloc1.C: Adjust expected column numbers.
            * g++.dg/cpp2a/srcloc2.C: Likewise.
            * g++.dg/cpp2a/srcloc15.C: Likewise.
            * g++.dg/cpp2a/srcloc16.C: Likewise.
            * g++.dg/cpp2a/srcloc19.C: New test.
            * g++.dg/modules/adhoc-1_b.C: Adjust expected column numbers
            and caret line.
            * g++.dg/modules/macloc-1_c.C: Adjust expected column numbers.
            * g++.dg/modules/macloc-1_d.C: Likewise.
            * g++.dg/plugin/diagnostic-test-expressions-1.C: Adjust expected
            caret line.

            * testsuite/18_support/source_location/consteval.cc (main): Adjust
            expected column numbers.
            * testsuite/18_support/source_location/1.cc (main): Likewise.

  parent reply	other threads:[~2021-03-25 20:36 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-19 15:25 [Bug c++/99672] New: " hewillk at gmail dot com
2021-03-19 16:36 ` [Bug c++/99672] " jakub at gcc dot gnu.org
2021-03-19 16:55 ` jakub at gcc dot gnu.org
2021-03-21  9:18 ` hewillk at gmail dot com
2021-03-25 20:36 ` cvs-commit at gcc dot gnu.org [this message]
2021-03-25 20:38 ` jakub at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-99672-4-eS947GVqhu@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).