From 569c20f104f7f3f661e8939fda3cd37be746655f Mon Sep 17 00:00:00 2001
From: grischka <grischka>
Date: Thu, 23 Jul 2009 19:21:14 +0200
Subject: [PATCH] tccpp: fix quirk with cached headers and #else

Such as with

    #ifndef FOO_H
    ...
    #else
    ...
    #endif
---
 tccpp.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/tccpp.c b/tccpp.c
index d03adc0f..ecdaf172 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -1392,7 +1392,7 @@ include_done:
         if (s1->ifdef_stack_ptr[-1] & 2)
             error("#else after #else");
         c = (s1->ifdef_stack_ptr[-1] ^= 3);
-        goto test_skip;
+        goto test_else;
     case TOK_ELIF:
         if (s1->ifdef_stack_ptr == s1->ifdef_stack)
             error("#elif without matching #if");
@@ -1404,6 +1404,9 @@ include_done:
             goto skip;
         c = expr_preprocess();
         s1->ifdef_stack_ptr[-1] = c;
+    test_else:
+        if (s1->ifdef_stack_ptr == file->ifdef_stack_ptr + 1)
+            file->ifndef_macro = 0;
     test_skip:
         if (!(c & 1)) {
         skip: