re PR preprocessor/58844 (ICE with invalid use of ##)
PR preprocessor/58844 * macro.c (enter_macro_context): Only push macro_real_token_count (macro) tokens rather than macro->count tokens, regardless of CPP_OPTION (pfile, track-macro-expansion). * c-c++-common/cpp/pr58844-1.c: New test. * c-c++-common/cpp/pr58844-2.c: New test. From-SVN: r207871
This commit is contained in:
parent
0cfe1b4698
commit
179652df33
5 changed files with 41 additions and 14 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-02-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/58844
|
||||
* c-c++-common/cpp/pr58844-1.c: New test.
|
||||
* c-c++-common/cpp/pr58844-2.c: New test.
|
||||
|
||||
2014-02-18 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/60225
|
||||
|
|
8
gcc/testsuite/c-c++-common/cpp/pr58844-1.c
Normal file
8
gcc/testsuite/c-c++-common/cpp/pr58844-1.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* PR preprocessor/58844 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-ftrack-macro-expansion=0" } */
|
||||
|
||||
#define A x######x
|
||||
int A = 1;
|
||||
#define A x######x /* { dg-message "previous definition" } */
|
||||
#define A x##x /* { dg-warning "redefined" } */
|
8
gcc/testsuite/c-c++-common/cpp/pr58844-2.c
Normal file
8
gcc/testsuite/c-c++-common/cpp/pr58844-2.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* PR preprocessor/58844 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-ftrack-macro-expansion=2" } */
|
||||
|
||||
#define A x######x
|
||||
int A = 1;
|
||||
#define A x######x /* { dg-message "previous definition" } */
|
||||
#define A x##x /* { dg-warning "redefined" } */
|
|
@ -1,3 +1,11 @@
|
|||
2014-02-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/58844
|
||||
* macro.c (enter_macro_context): Only push
|
||||
macro_real_token_count (macro) tokens rather than
|
||||
macro->count tokens, regardless of
|
||||
CPP_OPTION (pfile, track-macro-expansion).
|
||||
|
||||
2014-02-07 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/56824
|
||||
|
|
|
@ -1115,21 +1115,22 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
|
|||
|
||||
if (macro->paramc == 0)
|
||||
{
|
||||
unsigned tokens_count = macro_real_token_count (macro);
|
||||
if (CPP_OPTION (pfile, track_macro_expansion))
|
||||
{
|
||||
unsigned int i, count = macro->count;
|
||||
unsigned int i;
|
||||
const cpp_token *src = macro->exp.tokens;
|
||||
const struct line_map *map;
|
||||
source_location *virt_locs = NULL;
|
||||
_cpp_buff *macro_tokens =
|
||||
tokens_buff_new (pfile, count, &virt_locs);
|
||||
_cpp_buff *macro_tokens
|
||||
= tokens_buff_new (pfile, tokens_count, &virt_locs);
|
||||
|
||||
/* Create a macro map to record the locations of the
|
||||
tokens that are involved in the expansion. LOCATION
|
||||
is the location of the macro expansion point. */
|
||||
map = linemap_enter_macro (pfile->line_table,
|
||||
node, location, count);
|
||||
for (i = 0; i < count; ++i)
|
||||
map = linemap_enter_macro (pfile->line_table,
|
||||
node, location, tokens_count);
|
||||
for (i = 0; i < tokens_count; ++i)
|
||||
{
|
||||
tokens_buff_add_token (macro_tokens, virt_locs,
|
||||
src, src->src_loc,
|
||||
|
@ -1141,16 +1142,12 @@ enter_macro_context (cpp_reader *pfile, cpp_hashnode *node,
|
|||
virt_locs,
|
||||
(const cpp_token **)
|
||||
macro_tokens->base,
|
||||
count);
|
||||
num_macro_tokens_counter += count;
|
||||
tokens_count);
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned tokens_count = macro_real_token_count (macro);
|
||||
_cpp_push_token_context (pfile, node, macro->exp.tokens,
|
||||
tokens_count);
|
||||
num_macro_tokens_counter += tokens_count;
|
||||
}
|
||||
_cpp_push_token_context (pfile, node, macro->exp.tokens,
|
||||
tokens_count);
|
||||
num_macro_tokens_counter += tokens_count;
|
||||
}
|
||||
|
||||
if (pragma_buff)
|
||||
|
|
Loading…
Add table
Reference in a new issue