aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cpplex.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/cpp/macro2.c14
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 88195b5..f218aa1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cpplex.c b/gcc/cpplex.c
index 56b8543..970b35f 100644
--- a/gcc/cpplex.c
+++ b/gcc/cpplex.c
@@ -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. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 54d0fa9..510c033 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..2265a2b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/cpp/macro2.c
@@ -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>. */