aboutsummaryrefslogtreecommitdiff
path: root/tccpp.c
diff options
context:
space:
mode:
authorPhilip <pipcet@gmail.com>2015-05-02 12:33:45 +0000
committerPhilip <pipcet@gmail.com>2015-05-02 12:33:45 +0000
commita3d78b95d7564c92afa09604fde6387a03d3acde (patch)
tree987c4b55f57ce7954603f75de09fd446cf226181 /tccpp.c
parent1e878200f7bbabeb36f5d0e941402fed12148cc7 (diff)
downloadtinycc-a3d78b95d7564c92afa09604fde6387a03d3acde.tar.gz
tinycc-a3d78b95d7564c92afa09604fde6387a03d3acde.tar.bz2
tccpp.c: fix endless loop
Perhaps a better fix would be to ensure tok is set to TOK_EOF rather than 0 at the end of a macro stream. This partially fixes test2 of the examples given in: http://lists.nongnu.org/archive/html/tinycc-devel/2015-05/msg00002.html It's still failing, but at least it's not running out of memory now.
Diffstat (limited to 'tccpp.c')
-rw-r--r--tccpp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/tccpp.c b/tccpp.c
index d097776..56779e0 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -2930,8 +2930,9 @@ static int macro_subst_tok(TokenString *tok_str,
/* NOTE: non zero sa->t indicates VA_ARGS */
while ((parlevel > 0 ||
(tok != ')' &&
- (tok != ',' || sa->type.t))) &&
- tok != -1) {
+ (tok != ',' || sa->type.t)))) {
+ if (tok == TOK_EOF || tok == 0)
+ break;
if (tok == '(')
parlevel++;
else if (tok == ')')