libcpp: Merge fixes from upstream
GCC preprocessor/29966: * macro.c (lex_expansion_token): Save and restore cpp_reader's cur_token. (_cpp_create_definition): Don't restore cur_token here. * lex.c (_cpp_lex_token): Added assertion. GCC preprocessor/28709: * macro.c (paste_tokens): Remove PASTE_LEFT from the old lhs. GCC c/31924 * expr.c (interpret_float_suffix): Check for invalid suffix. GCC preprocessor/14331 * lex.c (_cpp_get_fresh_line): Don't warn if no newline at EOF. Fixup whitespacing Obtained from: gcc per-4.3 (rev. 121340, 124356, 124358, 124730, 125212, 125255 ; GPLv2) MFC after: 3 weeks
This commit is contained in:
parent
30ca148cf7
commit
51e28103da
@ -7,6 +7,11 @@
|
||||
* include/cpplib.h: Add CPP_N_BINARY, to be used for 0b-prefixed
|
||||
binary integer constants.
|
||||
|
||||
2007-05-31 Dave Korn <dave.korn@artimi.com> (r125212)
|
||||
|
||||
PR preprocessor/14331
|
||||
* lex.c (_cpp_get_fresh_line): Don't warn if no newline at EOF.
|
||||
|
||||
2007-05-21 Ian Lance Taylor <iant@google.com> (r124929)
|
||||
|
||||
* internal.h (struct cpp_reader): Add new fields:
|
||||
@ -23,6 +28,29 @@
|
||||
(_cpp_cleanup_files): Free pfile->nonexistent_file_hash and
|
||||
pfile->nonexistent_file_ob.
|
||||
|
||||
2007-05-14 Janis Johnson <janis187@us.ibm.com> (r124731)
|
||||
|
||||
PR c/31924
|
||||
* expr.c (interpret_float_suffix): Check for invalid suffix.
|
||||
|
||||
2007-05-02 Eric Christopher <echristo@apple.com> (r124358)
|
||||
|
||||
* expr.c (num_div_op): Don't overflow if the result is
|
||||
zero.
|
||||
|
||||
2007-05-02 Tom Tromey <tromey@redhat.com> (r124356)
|
||||
|
||||
PR preprocessor/28709:
|
||||
* macro.c (paste_tokens): Remove PASTE_LEFT from the old lhs.
|
||||
|
||||
2007-01-30 Tom Tromey <tromey@redhat.com> (r121340)
|
||||
|
||||
PR preprocessor/29966:
|
||||
* macro.c (lex_expansion_token): Save and restore cpp_reader's
|
||||
cur_token.
|
||||
(_cpp_create_definition): Don't restore cur_token here.
|
||||
* lex.c (_cpp_lex_token): Added assertion.
|
||||
|
||||
2006-12-29 Ian Lance Taylor <iant@google.com> (r120263)
|
||||
|
||||
* lex.c (_cpp_clean_line): Add uses of __builtin_expect. Don't
|
||||
|
@ -87,16 +87,19 @@ interpret_float_suffix (const uchar *s, size_t len)
|
||||
while (len--)
|
||||
switch (s[len])
|
||||
{
|
||||
case 'f': case 'F': f++; break;
|
||||
case 'l': case 'L': l++; break;
|
||||
case 'f': case 'F':
|
||||
if (d > 0)
|
||||
return 0;
|
||||
f++;
|
||||
break;
|
||||
case 'l': case 'L':
|
||||
if (d > 0)
|
||||
return 0;
|
||||
l++;
|
||||
break;
|
||||
case 'i': case 'I':
|
||||
case 'j': case 'J': i++; break;
|
||||
case 'd': case 'D':
|
||||
/* Disallow fd, ld suffixes. */
|
||||
if (d && (f || l))
|
||||
return 0;
|
||||
d++;
|
||||
break;
|
||||
case 'd': case 'D': d++; break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@ -1580,7 +1583,8 @@ num_div_op (cpp_reader *pfile, cpp_num lhs, cpp_num rhs, enum cpp_ttype op)
|
||||
{
|
||||
if (negate)
|
||||
result = num_negate (result, precision);
|
||||
result.overflow = num_positive (result, precision) ^ !negate;
|
||||
result.overflow = (num_positive (result, precision) ^ !negate
|
||||
&& !num_zerop (result));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -766,6 +766,11 @@ _cpp_lex_token (cpp_reader *pfile)
|
||||
pfile->cur_run = next_tokenrun (pfile->cur_run);
|
||||
pfile->cur_token = pfile->cur_run->base;
|
||||
}
|
||||
/* We assume that the current token is somewhere in the current
|
||||
run. */
|
||||
if (pfile->cur_token < pfile->cur_run->base
|
||||
|| pfile->cur_token >= pfile->cur_run->limit)
|
||||
abort ();
|
||||
|
||||
if (pfile->lookaheads)
|
||||
{
|
||||
@ -847,11 +852,8 @@ _cpp_get_fresh_line (cpp_reader *pfile)
|
||||
&& buffer->next_line > buffer->rlimit
|
||||
&& !buffer->from_stage3)
|
||||
{
|
||||
/* Only warn once. */
|
||||
/* Clip to buffer size. */
|
||||
buffer->next_line = buffer->rlimit;
|
||||
cpp_error_with_line (pfile, CPP_DL_PEDWARN, pfile->line_table->highest_line,
|
||||
CPP_BUF_COLUMN (buffer, buffer->cur),
|
||||
"no newline at end of file");
|
||||
}
|
||||
|
||||
return_at_eof = buffer->return_at_eof;
|
||||
|
@ -1,6 +1,7 @@
|
||||
/* Part of CPP library. (Macro and #define handling.)
|
||||
Copyright (C) 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
2006 Free Software Foundation, Inc.
|
||||
Written by Per Bothner, 1994.
|
||||
Based on CCCP program by Paul Rubin, June 1986
|
||||
Adapted to ANSI C, Richard Stallman, Jan 1987
|
||||
@ -438,19 +439,18 @@ static bool
|
||||
paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
|
||||
{
|
||||
unsigned char *buf, *end, *lhsend;
|
||||
const cpp_token *lhs;
|
||||
cpp_token *lhs;
|
||||
unsigned int len;
|
||||
|
||||
lhs = *plhs;
|
||||
len = cpp_token_len (lhs) + cpp_token_len (rhs) + 1;
|
||||
len = cpp_token_len (*plhs) + cpp_token_len (rhs) + 1;
|
||||
buf = (unsigned char *) alloca (len);
|
||||
end = lhsend = cpp_spell_token (pfile, lhs, buf, false);
|
||||
end = lhsend = cpp_spell_token (pfile, *plhs, buf, false);
|
||||
|
||||
/* Avoid comment headers, since they are still processed in stage 3.
|
||||
It is simpler to insert a space here, rather than modifying the
|
||||
lexer to ignore comments in some circumstances. Simply returning
|
||||
false doesn't work, since we want to clear the PASTE_LEFT flag. */
|
||||
if (lhs->type == CPP_DIV && rhs->type != CPP_EQ)
|
||||
if ((*plhs)->type == CPP_DIV && rhs->type != CPP_EQ)
|
||||
*end++ = ' ';
|
||||
end = cpp_spell_token (pfile, rhs, end, false);
|
||||
*end = '\n';
|
||||
@ -460,13 +460,22 @@ paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
|
||||
|
||||
/* Set pfile->cur_token as required by _cpp_lex_direct. */
|
||||
pfile->cur_token = _cpp_temp_token (pfile);
|
||||
*plhs = _cpp_lex_direct (pfile);
|
||||
lhs = _cpp_lex_direct (pfile);
|
||||
if (pfile->buffer->cur != pfile->buffer->rlimit)
|
||||
{
|
||||
source_location saved_loc = lhs->src_loc;
|
||||
|
||||
_cpp_pop_buffer (pfile);
|
||||
_cpp_backup_tokens (pfile, 1);
|
||||
*lhsend = '\0';
|
||||
|
||||
/* We have to remove the PASTE_LEFT flag from the old lhs, but
|
||||
we want to keep the new location. */
|
||||
*lhs = **plhs;
|
||||
*plhs = lhs;
|
||||
lhs->src_loc = saved_loc;
|
||||
lhs->flags &= ~PASTE_LEFT;
|
||||
|
||||
/* Mandatory error for all apart from assembler. */
|
||||
if (CPP_OPTION (pfile, lang) != CLK_ASM)
|
||||
cpp_error (pfile, CPP_DL_ERROR,
|
||||
@ -475,6 +484,7 @@ paste_tokens (cpp_reader *pfile, const cpp_token **plhs, const cpp_token *rhs)
|
||||
return false;
|
||||
}
|
||||
|
||||
*plhs = lhs;
|
||||
_cpp_pop_buffer (pfile);
|
||||
return true;
|
||||
}
|
||||
@ -1405,10 +1415,12 @@ alloc_expansion_token (cpp_reader *pfile, cpp_macro *macro)
|
||||
static cpp_token *
|
||||
lex_expansion_token (cpp_reader *pfile, cpp_macro *macro)
|
||||
{
|
||||
cpp_token *token;
|
||||
cpp_token *token, *saved_cur_token;
|
||||
|
||||
saved_cur_token = pfile->cur_token;
|
||||
pfile->cur_token = alloc_expansion_token (pfile, macro);
|
||||
token = _cpp_lex_direct (pfile);
|
||||
pfile->cur_token = saved_cur_token;
|
||||
|
||||
/* Is this a parameter? */
|
||||
if (token->type == CPP_NAME
|
||||
@ -1597,18 +1609,12 @@ _cpp_create_definition (cpp_reader *pfile, cpp_hashnode *node)
|
||||
ok = _cpp_create_trad_definition (pfile, macro);
|
||||
else
|
||||
{
|
||||
cpp_token *saved_cur_token = pfile->cur_token;
|
||||
|
||||
ok = create_iso_definition (pfile, macro);
|
||||
|
||||
/* Restore lexer position because of games lex_expansion_token()
|
||||
plays lexing the macro. We set the type for SEEN_EOL() in
|
||||
directives.c.
|
||||
/* We set the type for SEEN_EOL() in directives.c.
|
||||
|
||||
Longer term we should lex the whole line before coming here,
|
||||
and just copy the expansion. */
|
||||
saved_cur_token[-1].type = pfile->cur_token[-1].type;
|
||||
pfile->cur_token = saved_cur_token;
|
||||
|
||||
/* Stop the lexer accepting __VA_ARGS__. */
|
||||
pfile->state.va_args_ok = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user