public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH, libcpp] Fix cpp_peek_token behaviour (PR bootstrap/50778)
@ 2011-10-21 19:26 Dodji Seketeli
  2011-10-22 16:21 ` Jason Merrill
  0 siblings, 1 reply; 3+ messages in thread
From: Dodji Seketeli @ 2011-10-21 19:26 UTC (permalink / raw)
  To: Tom Tromey, Jason Merrill; +Cc: GCC Patches

Hello,

cpp_peek_token can fail to peek tokens sometimes because
_cpp_remaining_tokens_num_in_context counts tokens only from the current
context; worse, _cpp_token_from_context_at also get tokens only from the
context context.  They should both operate on the context given by
cpp_peek_token.  I did the mistake in the first place.

This was breaking bootstrap on ppc-darwin.

Fixed thus, bootstrapped on x86_64-unknown-linux-gnu, tested on
ppc-darwin and a full (very slow) bootstrap is on-going on ppc-darwin.

OK for trunk when ppc-darwin finishes? (or even before?)

libcpp/

	* include/internal.h (_cpp_remaining_tokens_num_in_context): Take the
	context to act upon.
	* lex.c (_cpp_remaining_tokens_num_in_context): Likewise.  Update
	comment.
	(cpp_token_from_context_at): Likewise.
	(cpp_peek_token): Use the context to peek tokens from.
---
 libcpp/internal.h |    2 +-
 libcpp/lex.c      |   16 +++++++---------
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/libcpp/internal.h b/libcpp/internal.h
index 6fb2606..e60330df 100644
--- a/libcpp/internal.h
+++ b/libcpp/internal.h
@@ -652,7 +652,7 @@ extern cpp_token *_cpp_lex_direct (cpp_reader *);
 extern int _cpp_equiv_tokens (const cpp_token *, const cpp_token *);
 extern void _cpp_init_tokenrun (tokenrun *, unsigned int);
 extern cpp_hashnode *_cpp_lex_identifier (cpp_reader *, const char *);
-extern int _cpp_remaining_tokens_num_in_context (cpp_reader *);
+extern int _cpp_remaining_tokens_num_in_context (cpp_context *);
 
 /* In init.c.  */
 extern void _cpp_maybe_push_include_file (cpp_reader *);
diff --git a/libcpp/lex.c b/libcpp/lex.c
index 527368b..896a3be 100644
--- a/libcpp/lex.c
+++ b/libcpp/lex.c
@@ -1703,12 +1703,11 @@ next_tokenrun (tokenrun *run)
   return run->next;
 }
 
-/* Return the number of not yet processed token in the the current
+/* Return the number of not yet processed token in a given
    context.  */
 int
-_cpp_remaining_tokens_num_in_context (cpp_reader *pfile)
+_cpp_remaining_tokens_num_in_context (cpp_context *context)
 {
-  cpp_context *context = pfile->context;
   if (context->tokens_kind == TOKENS_KIND_DIRECT)
     return (LAST (context).token - FIRST (context).token);
   else if (context->tokens_kind == TOKENS_KIND_INDIRECT
@@ -1718,12 +1717,11 @@ _cpp_remaining_tokens_num_in_context (cpp_reader *pfile)
       abort ();
 }
 
-/* Returns the token present at index INDEX in the current context.
-   If INDEX is zero, the next token to be processed is returned.  */
+/* Returns the token present at index INDEX in a given context.  If
+   INDEX is zero, the next token to be processed is returned.  */
 static const cpp_token*
-_cpp_token_from_context_at (cpp_reader *pfile, int index)
+_cpp_token_from_context_at (cpp_context *context, int index)
 {
-  cpp_context *context = pfile->context;
   if (context->tokens_kind == TOKENS_KIND_DIRECT)
     return &(FIRST (context).token[index]);
   else if (context->tokens_kind == TOKENS_KIND_INDIRECT
@@ -1744,10 +1742,10 @@ cpp_peek_token (cpp_reader *pfile, int index)
   /* First, scan through any pending cpp_context objects.  */
   while (context->prev)
     {
-      ptrdiff_t sz = _cpp_remaining_tokens_num_in_context (pfile);
+      ptrdiff_t sz = _cpp_remaining_tokens_num_in_context (context);
 
       if (index < (int) sz)
-        return _cpp_token_from_context_at (pfile, index);
+        return _cpp_token_from_context_at (context, index);
       index -= (int) sz;
       context = context->prev;
     }
-- 
1.7.6.4


-- 
		Dodji

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

* Re: [PATCH, libcpp] Fix cpp_peek_token behaviour (PR bootstrap/50778)
  2011-10-21 19:26 [PATCH, libcpp] Fix cpp_peek_token behaviour (PR bootstrap/50778) Dodji Seketeli
@ 2011-10-22 16:21 ` Jason Merrill
  2011-10-22 22:43   ` Dodji Seketeli
  0 siblings, 1 reply; 3+ messages in thread
From: Jason Merrill @ 2011-10-22 16:21 UTC (permalink / raw)
  To: Dodji Seketeli; +Cc: Tom Tromey, GCC Patches

OK.

Jason

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

* Re: [PATCH, libcpp] Fix cpp_peek_token behaviour (PR bootstrap/50778)
  2011-10-22 16:21 ` Jason Merrill
@ 2011-10-22 22:43   ` Dodji Seketeli
  0 siblings, 0 replies; 3+ messages in thread
From: Dodji Seketeli @ 2011-10-22 22:43 UTC (permalink / raw)
  To: Jason Merrill; +Cc: Tom Tromey, GCC Patches

Jason Merrill <jason@redhat.com> writes:

> OK.

Thanks.  The bootstrap on powerpc-darwin completed successfully.  I have
just checked the patch in.

-- 
		Dodji

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

end of thread, other threads:[~2011-10-22 17:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-21 19:26 [PATCH, libcpp] Fix cpp_peek_token behaviour (PR bootstrap/50778) Dodji Seketeli
2011-10-22 16:21 ` Jason Merrill
2011-10-22 22:43   ` Dodji Seketeli

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).