cpplib.c (do_ifdef, do_ifndef): Don't segfault if parse_ifdef returned NULL.

2000-06-06  Jakub Jelinek  <jakub@redhat.com>

	* cpplib.c (do_ifdef, do_ifndef): Don't segfault if parse_ifdef
	returned NULL.

From-SVN: r34448
This commit is contained in:
Jakub Jelinek 2000-06-08 00:27:57 +02:00 committed by Zack Weinberg
parent 69197e7e5e
commit 5af7e2c2e1
3 changed files with 31 additions and 9 deletions

View File

@ -1,3 +1,8 @@
2000-06-06 Jakub Jelinek <jakub@redhat.com>
* cpplib.c (do_ifdef, do_ifndef): Don't segfault if parse_ifdef
returned NULL.
Wed Jun 7 20:34:33 2000 Denis Chertykov <denisc@overta.ru>
* config/avr/avr.c (asm_output_section_name): output section

View File

@ -1126,10 +1126,13 @@ do_ifdef (pfile)
{
int def = 0;
const cpp_hashnode *node = parse_ifdef (pfile, dtable[T_IFDEF].name);
if (node->type == T_POISON)
cpp_error (pfile, "attempt to use poisoned `%s'", node->name);
else
def = (node->type != T_VOID);
if (node)
{
if (node->type == T_POISON)
cpp_error (pfile, "attempt to use poisoned `%s'", node->name);
else
def = (node->type != T_VOID);
}
push_conditional (pfile, !def, T_IFDEF, 0);
return 0;
}
@ -1147,11 +1150,13 @@ do_ifndef (pfile)
start_of_file = pfile->only_seen_white == 2;
cmacro = parse_ifdef (pfile, dtable[T_IFNDEF].name);
if (cmacro->type == T_POISON)
cpp_error (pfile, "attempt to use poisoned `%s'", cmacro->name);
else
def = (cmacro->type != T_VOID);
if (cmacro)
{
if (cmacro->type == T_POISON)
cpp_error (pfile, "attempt to use poisoned `%s'", cmacro->name);
else
def = (cmacro->type != T_VOID);
}
push_conditional (pfile, def, T_IFNDEF,
start_of_file ? cmacro : 0);
return 0;

View File

@ -0,0 +1,12 @@
/* Regression test: #ifdef 0 should not crash. Problem noted by
Jakub Jelinek <jakub@redhat.com>. */
/* { dg-do preprocess } */
#ifdef 0 /* { dg-error "with invalid argument" } */
#error not seen
#endif
#ifndef 0 /* { dg-error "with invalid argument" } */
#else
#error not seen
#endif