diff -r 218d28dbcf0b tcc.c --- a/tcc.c Fri Nov 16 12:16:14 2007 +0800 +++ b/tcc.c Sat Nov 24 13:10:54 2007 +0100 @@ -3264,6 +3264,9 @@ static int macro_subst_tok(TokenString * get_tok_str(s->v, 0)); tok_str_new(&str); parlevel = 0; + /* XXX: hack to avoid an endless loop in -E (preprocess) mode */ + int saved_parse_flags = parse_flags; + parse_flags &= ~PARSE_FLAG_LINEFEED; /* NOTE: non zero sa->t indicates VA_ARGS */ while ((parlevel > 0 || (tok != ')' && @@ -3276,6 +3279,7 @@ static int macro_subst_tok(TokenString * tok_str_add2(&str, tok, tok_flags, &tokc); next_nomacro(); } + parse_flags = saved_parse_flags; tok_str_add(&str, 0, 0); sym_push2(&args, sa->v & ~SYM_FIELD, sa->type.t, (int)str.str); sa = sa->next;