summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog6
-rw-r--r--gas/macro.c4
-rw-r--r--gas/testsuite/ChangeLog6
-rw-r--r--gas/testsuite/gas/macros/altmacro.d3
-rw-r--r--gas/testsuite/gas/macros/altmacro.s26
5 files changed, 44 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 78920e6749..660daad352 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2010-04-20 Nick Clifton <nickc@redhat.com>
+
+ PR gas/11507
+ * macro.c (macro_expand_body): Do not treat LOCAL as a keyword in
+ altmacro mode if found inside a quoted string.
+
2010-04-20 Mike Frysinger <vapier@gentoo.org>
* config/bfin-lex.l (parse_int): Change index() to strchr().
diff --git a/gas/macro.c b/gas/macro.c
index b5c1824d2f..97f341473d 100644
--- a/gas/macro.c
+++ b/gas/macro.c
@@ -868,7 +868,9 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
if (! macro
|| src + 5 >= in->len
|| strncasecmp (in->ptr + src, "LOCAL", 5) != 0
- || ! ISWHITE (in->ptr[src + 5]))
+ || ! ISWHITE (in->ptr[src + 5])
+ /* PR 11507: Skip keyword LOCAL if it is found inside a quoted string. */
+ || inquote)
{
sb_reset (&t);
src = sub_actual (src, in, &t, formal_hash,
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 797a2b4f78..f5522ad3e1 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2010-04-20 Nick Clifton <nickc@redhat.com>
+
+ PR gas/11507
+ * gas/macros/altmacro.s: New test.
+ * gas/macros/altmacro.d: Expected output.
+
2010-04-16 Nick Clifton <nickc@redhat.com>
PR gas/11395
diff --git a/gas/testsuite/gas/macros/altmacro.d b/gas/testsuite/gas/macros/altmacro.d
new file mode 100644
index 0000000000..49c04aa3f7
--- /dev/null
+++ b/gas/testsuite/gas/macros/altmacro.d
@@ -0,0 +1,3 @@
+local
+.LL0001
+.LL0002
diff --git a/gas/testsuite/gas/macros/altmacro.s b/gas/testsuite/gas/macros/altmacro.s
new file mode 100644
index 0000000000..bb3a05d857
--- /dev/null
+++ b/gas/testsuite/gas/macros/altmacro.s
@@ -0,0 +1,26 @@
+# Check use of LOCAL directive inside .altmacro.
+# Test derived from PR 11507.
+
+ .altmacro
+
+ .macro ABC
+ .print "local "
+ .endm
+
+ .macro DEF
+ LOCAL fred
+ .print "fred"
+ .endm
+
+# This one is just being perverse, but it should work.
+ .macro GHI
+ local local
+ .print "local"
+ .endm
+
+
+ ABC
+
+ DEF
+
+ GHI