public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "mtewoodbury at gmail dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug preprocessor/58687] "#line __LINE__ ..." changes subsequent line numbers Date: Fri, 29 Nov 2013 22:49:00 -0000 [thread overview] Message-ID: <bug-58687-4-YTN7QAhAFm@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-58687-4@http.gcc.gnu.org/bugzilla/> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58687 --- Comment #23 from Max TenEyck Woodbury <mtewoodbury at gmail dot com> --- (In reply to joseph@codesourcery.com from comment #22) > On Fri, 29 Nov 2013, mtewoodbury at gmail dot com wrote: > > > The elaborate description of the different forms of the '#line' (and other) > > directives makes it clear that <pp-token> expansion is not to take place > > until after the <end-of-line> for the directive has been seen. > > The question is not when it takes place, it's what the "current token" is > when it takes place, because "line number" is defined in terms of the > current token rather than the time of expansion. If that is what they meant, they would have said something like "the line number when the __LINE__ token is seen', but they say 'current line' and define 'current line' elsewhere. > I think the current token is clearly __LINE__ on the #line directive. But the standard says 'current line'. It says nothing about 'current token' in this context. > Consider the case where > there are no more tokens after that directive, just the newline at the end > of the directive (you can easily construct cases where the value of > __LINE__ in such a context affects the validity of the program, by > concatenating it with something else to form what might or might not be a > macro name) - it's not possible the the current token to be anything on a > subsequent line, because there aren't any subsequent tokens. So the > current token has got to be __LINE__ (or maybe, in the more complicated > cases I referred to, something else on the #line line). That's different > from > > macro > ( > __LINE__ > ) > > where all of the tokens from "macro" to ")" are involved in expansion at > the same time and you can argue for any of "macro", "__LINE__" and ")" as > being the "current token". (It's also different from the cases where > backslash-newline appears in the middle of __LINE__ so the question is > whether "to the current token" means to the start of end of that token.) > You are arguing about macro expansion again. Macro expansion is an immediate process and, as you pointed out, somewhat ambiguous. The case being argued here is the expansion of <pp-tokens> in directives where their expansion is delayed until after the form of the directive has been established. > > Accepted usage is for '#line __LINE__' to leave the line numbering > > unchanged. > > It's quite possible there's a common bug among multiple other > implementations where it does leave the line number unchanged, but I'm now > tending to that actually being a bug in those implementations rather than > an ambiguity in the standard. That is, there is no way in the standard to > leave the line number unchanged, and no defect, and it might be better to > wait until a revision process for a new major C standard version is > underway them submit a proposal for e.g. #line with just a filename and no > line number (or a #file directive - either would be a reasonable way of > achieving that goal). So everyone else is wrong? Realty, you should consider what the users of the language need to be able to do. There is need for an easy way to change __FILE__ without messing up the line number sequence. '#line __LINE__ ...' is fairly obviously that mechanism and the extra verbiage in the standard is a fairly obvious attempt to accommodate that need.
next prev parent reply other threads:[~2013-11-29 22:49 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-10-11 3:47 [Bug preprocessor/58687] New: " mtewoodbury at gmail dot com 2013-10-23 7:16 ` [Bug preprocessor/58687] " mtewoodbury at gmail dot com 2013-10-25 19:01 ` mtewoodbury at gmail dot com 2013-10-25 22:56 ` mtewoodbury at gmail dot com 2013-10-26 13:39 ` mtewoodbury at gmail dot com 2013-10-26 21:15 ` pinskia at gcc dot gnu.org 2013-10-27 13:59 ` mtewoodbury at gmail dot com 2013-10-28 17:51 ` mtewoodbury at gmail dot com 2013-10-28 18:53 ` joseph at codesourcery dot com 2013-10-30 7:39 ` mtewoodbury at gmail dot com 2013-10-30 15:08 ` manu at gcc dot gnu.org 2013-10-30 17:59 ` mtewoodbury at gmail dot com 2013-10-30 18:13 ` joseph at codesourcery dot com 2013-10-30 19:43 ` mtewoodbury at gmail dot com 2013-10-31 18:00 ` mtewoodbury at gmail dot com 2013-11-04 14:14 ` mtewoodbury at gmail dot com 2013-11-04 18:18 ` joseph at codesourcery dot com 2013-11-19 16:08 ` mtewoodbury at gmail dot com 2013-11-19 16:37 ` joseph at codesourcery dot com 2013-11-28 22:52 ` jsm28 at gcc dot gnu.org 2013-11-29 4:52 ` mtewoodbury at gmail dot com 2013-11-29 16:57 ` joseph at codesourcery dot com 2013-11-29 22:49 ` mtewoodbury at gmail dot com [this message] 2013-11-30 0:04 ` joseph at codesourcery dot com
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-58687-4-YTN7QAhAFm@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: linkBe 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).