Fix bug (and test) for an invocation using macro name as a non-macro argument
authorCarl Worth <cworth@cworth.org>
Wed, 19 May 2010 14:42:42 +0000 (07:42 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 19 May 2010 14:42:42 +0000 (07:42 -0700)
This adds a second shift/reduce conflict to our grammar. It's basically the
same conflict we had previously, (deciding to shift a '(' after a FUNC_MACRO)
but this time in the "argument" context rather than the "content" context.

It would be nice to not have these, but I think they are unavoidable
(withotu a lot of pain at least) given the preprocessor specification.

glcpp-parse.y
tests/034-define-func-self-compose-non-func.c [new file with mode: 0644]

index 8dc07483c18159f8ec168ddef1439e4610f21f36..ea27184c47c2605668a26e1342f32f3ae51cde96 100644 (file)
@@ -103,8 +103,12 @@ _argument_list_member_at (argument_list_t *list, int index);
  * 1. '(' after FUNC_MACRO name which is correctly resolved to shift
  *    to form macro invocation rather than reducing directly to
  *    content.
+ *
+ * 2. Similarly, '(' after FUNC_MACRO which is correctly resolved to
+ *    shift to form macro invocation rather than reducing directly to
+ *    argument.
  */
-%expect 1
+%expect 2
 
 %%
 
@@ -168,6 +172,10 @@ argument:
 |      macro {
                $$ = _string_list_create (parser);
        }
+|      FUNC_MACRO {
+               $$ = _string_list_create (parser);
+               _string_list_append_item ($$, $1);
+       }
 |      argument word {
                _string_list_append_item ($1, $2);
                talloc_free ($2);
diff --git a/tests/034-define-func-self-compose-non-func.c b/tests/034-define-func-self-compose-non-func.c
new file mode 100644 (file)
index 0000000..209a5f7
--- /dev/null
@@ -0,0 +1,2 @@
+#define foo(bar) bar
+foo(foo)