Check active expansions before expanding a function-like macro invocation.
authorCarl Worth <cworth@cworth.org>
Wed, 26 May 2010 15:01:42 +0000 (08:01 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 26 May 2010 15:01:42 +0000 (08:01 -0700)
With this fix, test 32 no longer recurses infinitely, but now passes.

glcpp-parse.y

index 60eaf215b8b3d83dfc048e98aba709f581627e16..a2bff6e0adaa6643400383f50c31c602d595a786 100644 (file)
@@ -654,11 +654,6 @@ _glcpp_parser_print_expanded_token (glcpp_parser_t *parser,
                return 0;
        }
 
-       /* For function-like macros return 1 for further processing. */
-       if (macro->is_function) {
-               return 1;
-       }
-
        /* Finally, don't expand this macro if we're already actively
         * expanding it, (to avoid infinite recursion). */
        if (_string_list_contains (parser->active, identifier, NULL)) {
@@ -666,6 +661,11 @@ _glcpp_parser_print_expanded_token (glcpp_parser_t *parser,
                return 0;
        }
 
+       /* For function-like macros return 1 for further processing. */
+       if (macro->is_function) {
+               return 1;
+       }
+
        _string_list_push (parser->active, identifier);
        _glcpp_parser_print_expanded_token_list (parser,
                                                 macro->replacements);