mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-02 05:50:26 +08:00
re PR preprocessor/69869 (internal compiler error: Segmentation fault in call to skip_macro_block_comment when using '-traditional-cpp')
PR preprocessor/69869 * traditional.c (skip_macro_block_comment): Return bool, true if the macro block comment is unterminated. (copy_comment): Use return value from skip_macro_block_comment instead of always false. * gcc.dg/cpp/trad/pr69869.c: New test. From-SVN: r257220
This commit is contained in:
parent
7b56ebc347
commit
1306a81d81
@ -1,5 +1,8 @@
|
||||
2018-01-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/69869
|
||||
* gcc.dg/cpp/trad/pr69869.c: New test.
|
||||
|
||||
PR c/84100
|
||||
* gcc.dg/pr84100.c: New test.
|
||||
|
||||
|
8
gcc/testsuite/gcc.dg/cpp/trad/pr69869.c
Normal file
8
gcc/testsuite/gcc.dg/cpp/trad/pr69869.c
Normal file
@ -0,0 +1,8 @@
|
||||
/* PR preprocessor/69869 */
|
||||
/* { dg-do preprocess } */
|
||||
/* { dg-options "-traditional-cpp" } */
|
||||
|
||||
#define C(a,b)a/**/b
|
||||
C (foo/,**/)
|
||||
C (foo/,*)
|
||||
/* { dg-error "-:unterminated comment" "" {target "*-*-*"} .-1 } */
|
@ -1,3 +1,11 @@
|
||||
2018-01-31 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR preprocessor/69869
|
||||
* traditional.c (skip_macro_block_comment): Return bool, true if
|
||||
the macro block comment is unterminated.
|
||||
(copy_comment): Use return value from skip_macro_block_comment instead
|
||||
of always false.
|
||||
|
||||
2018-01-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* include/cpplib.h (enum cpp_builtin_type): Change BT_LAST_USER from
|
||||
|
@ -119,8 +119,11 @@ check_output_buffer (cpp_reader *pfile, size_t n)
|
||||
}
|
||||
|
||||
/* Skip a C-style block comment in a macro as a result of -CC.
|
||||
Buffer->cur points to the initial asterisk of the comment. */
|
||||
static void
|
||||
PFILE->buffer->cur points to the initial asterisk of the comment,
|
||||
change it to point to after the '*' and '/' characters that terminate it.
|
||||
Return true if the macro has not been termined, in that case set
|
||||
PFILE->buffer->cur to the end of the buffer. */
|
||||
static bool
|
||||
skip_macro_block_comment (cpp_reader *pfile)
|
||||
{
|
||||
const uchar *cur = pfile->buffer->cur;
|
||||
@ -131,10 +134,15 @@ skip_macro_block_comment (cpp_reader *pfile)
|
||||
|
||||
/* People like decorating comments with '*', so check for '/'
|
||||
instead for efficiency. */
|
||||
while(! (*cur++ == '/' && cur[-2] == '*') )
|
||||
;
|
||||
while (! (*cur++ == '/' && cur[-2] == '*'))
|
||||
if (cur[-1] == '\n')
|
||||
{
|
||||
pfile->buffer->cur = cur - 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
pfile->buffer->cur = cur;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* CUR points to the asterisk introducing a comment in the current
|
||||
@ -158,7 +166,7 @@ copy_comment (cpp_reader *pfile, const uchar *cur, int in_define)
|
||||
|
||||
buffer->cur = cur;
|
||||
if (pfile->context->prev)
|
||||
unterminated = false, skip_macro_block_comment (pfile);
|
||||
unterminated = skip_macro_block_comment (pfile);
|
||||
else
|
||||
unterminated = _cpp_skip_block_comment (pfile);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user