svn commit: r274373 - in stable: 10/contrib/llvm/lib/MC/MCParser 10/contrib/llvm/patches 9/contrib/llvm/lib/MC/MCParser 9/contrib/llvm/patches

Dimitry Andric dim at FreeBSD.org
Tue Nov 11 08:00:51 UTC 2014


Author: dim
Date: Tue Nov 11 08:00:49 2014
New Revision: 274373
URL: https://svnweb.freebsd.org/changeset/base/274373

Log:
  MFC r274286:
  
  Pull in r201784 from upstream llvm trunk (by Benjamin Kramer):
  
    AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets.
  
    There is code in the wild that relies on $0 not being expanded.
  
  This fixes some cases of using $ signs in literals being incorrectly
  assembled.
  
  Reported by:	Richard Henderson
  Upstream PR:	http://llvm.org/PR21500
  
  MFC r274294:
  
  Add llvm patch corresponding to r274286.

Added:
  stable/10/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff
     - copied unchanged from r274294, head/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff
Modified:
  stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp
Directory Properties:
  stable/10/   (props changed)

Changes in other areas also in this revision:
Added:
  stable/9/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff
     - copied unchanged from r274294, head/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff
Modified:
  stable/9/contrib/llvm/lib/MC/MCParser/AsmParser.cpp
Directory Properties:
  stable/9/contrib/llvm/   (props changed)

Modified: stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp
==============================================================================
--- stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp	Tue Nov 11 05:55:37 2014	(r274372)
+++ stable/10/contrib/llvm/lib/MC/MCParser/AsmParser.cpp	Tue Nov 11 08:00:49 2014	(r274373)
@@ -1695,7 +1695,7 @@ bool AsmParser::expandMacro(raw_svector_
                             const MCAsmMacroParameters &Parameters,
                             const MCAsmMacroArguments &A, const SMLoc &L) {
   unsigned NParameters = Parameters.size();
-  if (NParameters != 0 && NParameters != A.size())
+  if ((!IsDarwin || NParameters != 0) && NParameters != A.size())
     return Error(L, "Wrong number of arguments");
 
   // A macro without parameters is handled differently on Darwin:
@@ -1705,7 +1705,7 @@ bool AsmParser::expandMacro(raw_svector_
     std::size_t End = Body.size(), Pos = 0;
     for (; Pos != End; ++Pos) {
       // Check for a substitution or escape.
-      if (!NParameters) {
+      if (IsDarwin && !NParameters) {
         // This macro has no parameters, look for $0, $1, etc.
         if (Body[Pos] != '$' || Pos + 1 == End)
           continue;
@@ -1728,7 +1728,7 @@ bool AsmParser::expandMacro(raw_svector_
     if (Pos == End)
       break;
 
-    if (!NParameters) {
+    if (IsDarwin && !NParameters) {
       switch (Body[Pos + 1]) {
       // $$ => $
       case '$':

Copied: stable/10/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff (from r274294, head/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/10/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff	Tue Nov 11 08:00:49 2014	(r274373, copy of r274294, head/contrib/llvm/patches/patch-r274286-llvm-r201784-asm-dollar.diff)
@@ -0,0 +1,55 @@
+Pull in r201784 from upstream llvm trunk (by Benjamin Kramer):
+
+  AsmParser: Disable Darwin-style macro argument expansion on non-darwin targets.
+
+  There is code in the wild that relies on $0 not being expanded.
+
+This fixes some cases of using $ signs in literals being incorrectly
+assembled.
+
+Reported by:	Richard Henderson
+Upstream PR:	http://llvm.org/PR21500
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/274286
+
+Index: lib/MC/MCParser/AsmParser.cpp
+===================================================================
+--- lib/MC/MCParser/AsmParser.cpp
++++ lib/MC/MCParser/AsmParser.cpp
+@@ -1695,7 +1695,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O
+                             const MCAsmMacroParameters &Parameters,
+                             const MCAsmMacroArguments &A, const SMLoc &L) {
+   unsigned NParameters = Parameters.size();
+-  if (NParameters != 0 && NParameters != A.size())
++  if ((!IsDarwin || NParameters != 0) && NParameters != A.size())
+     return Error(L, "Wrong number of arguments");
+ 
+   // A macro without parameters is handled differently on Darwin:
+@@ -1705,7 +1705,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O
+     std::size_t End = Body.size(), Pos = 0;
+     for (; Pos != End; ++Pos) {
+       // Check for a substitution or escape.
+-      if (!NParameters) {
++      if (IsDarwin && !NParameters) {
+         // This macro has no parameters, look for $0, $1, etc.
+         if (Body[Pos] != '$' || Pos + 1 == End)
+           continue;
+@@ -1728,7 +1728,7 @@ bool AsmParser::expandMacro(raw_svector_ostream &O
+     if (Pos == End)
+       break;
+ 
+-    if (!NParameters) {
++    if (IsDarwin && !NParameters) {
+       switch (Body[Pos + 1]) {
+       // $$ => $
+       case '$':
+Index: test/MC/AsmParser/exprs.s
+===================================================================
+--- test/MC/AsmParser/exprs.s
++++ test/MC/AsmParser/exprs.s
+@@ -1,4 +1,4 @@
+-// RUN: llvm-mc -triple i386-unknown-unknown %s > %t
++// RUN: llvm-mc -triple i386-apple-darwin %s
+ 
+ .macro check_expr
+   .if ($0) != ($1)


More information about the svn-src-all mailing list