From: Nick Clifton <nickc@redhat.com>
Date: Tue, 20 Apr 2010 15:54:48 +0000 (+0000)
Subject:         PR gas/11507
X-Git-Url: https://repo.jachan.dev/binutils.git/commitdiff_plain/aa27de954944df9e1af7c689ed6bbdf07a7b3ad0

    PR gas/11507
        * macro.c (macro_expand_body): Do not treat LOCAL as a keyword in
        altmacro mode if found inside a quoted string.

        * gas/macros/altmacro.s: New test.
        * gas/macros/altmacro.d: Expected output.
---

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