From aa27de954944df9e1af7c689ed6bbdf07a7b3ad0 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 20 Apr 2010 15:54:48 +0000 Subject: [PATCH] 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. --- gas/ChangeLog | 6 ++++++ gas/macro.c | 4 +++- gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/macros/altmacro.d | 3 +++ gas/testsuite/gas/macros/altmacro.s | 26 ++++++++++++++++++++++++++ 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 gas/testsuite/gas/macros/altmacro.d create mode 100644 gas/testsuite/gas/macros/altmacro.s 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 + + 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 * 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 + + PR gas/11507 + * gas/macros/altmacro.s: New test. + * gas/macros/altmacro.d: Expected output. + 2010-04-16 Nick Clifton 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 -- 2.34.1