cpplex.c (push_macro_context): Set an argument's level after calling parse_args.
authorNeil Booth <neilb@earthling.net>
Sat, 16 Sep 2000 07:18:06 +0000 (07:18 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Sat, 16 Sep 2000 07:18:06 +0000 (07:18 +0000)
* cpplex.c (push_macro_context): Set an argument's level after
calling parse_args.  We could loop infinitely otherwise.
* gcc.dg/cpp/macro2.c: New testcase.

From-SVN: r36452

gcc/ChangeLog
gcc/cpplex.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/cpp/macro2.c [new file with mode: 0644]

index 88195b58f8b48da45cbd2c206024e4cdc4455e76..f218aa13f29813af6a85593925f5c6eda7d95946 100644 (file)
@@ -1,3 +1,8 @@
+Sat 16-Sep-2000 08:13:45 BST  Neil Booth  <NeilB@earthling.net>
+
+       * cpplex.c (push_macro_context): Set an argument's level after
+       calling parse_args.  We could loop infinitely otherwise.
+
 2000-09-15  Tom Tromey  <tromey@cygnus.com>
 
        * configure, config.in: Rebuilt.
index 56b8543f995dee9cb8f1e8fddf56a5459dc43b1d..970b35ff7165399717acebccbb41fe5533b17300 100644 (file)
@@ -2972,7 +2972,6 @@ push_macro_context (pfile, token)
       args->tokens = 0;
       args->capacity = 0;
       args->used = 0;
-      args->level = pfile->cur_context;
 
       prev_nme = prevent_macro_expansion (pfile);
       pfile->args = args;
@@ -2984,6 +2983,8 @@ push_macro_context (pfile, token)
          free_macro_args (args);
          return 1;
        }
+      /* Set the level after the call to parse_args.  */
+      args->level = pfile->cur_context;
     }
 
   /* Now push its context.  */
index 54d0fa9297b33263eaab1913e06364f8b3804e86..510c0333be1deca00c90c8c3ed77f886c3194a57 100644 (file)
@@ -1,3 +1,8 @@
+Sat 16-Sep-2000 08:14:58 BST  Neil Booth  <NeilB@earthling.net>
+
+       * gcc.dg/cpp/macro2.c: Testcase for multi-context arguments
+       in nested macro bug.
+
 Fri 15-Sep-2000 06:50:11 BST  Neil Booth  <NeilB@earthling.net>
 
        * gcc.dg/cpp/paste10.c: Testcase for PASTE_LEFT buglet.
diff --git a/gcc/testsuite/gcc.dg/cpp/macro2.c b/gcc/testsuite/gcc.dg/cpp/macro2.c
new file mode 100644 (file)
index 0000000..2265a2b
--- /dev/null
@@ -0,0 +1,14 @@
+/* Copyright (C) 2000 Free Software Foundation, Inc.  */
+
+/* { dg-do preprocess } */
+
+/* Tests the argument context get set at the lower level if we drop
+   contexts whilst parsing arguments.  This would enter an infinite
+   loop in is_macro_disabled previously.  */
+
+#define A Something
+#define B C
+#define C K(
+#define K(S) S  
+#define T B A )
+T                              /* Expands to <Something>.  */