]> granicus.if.org Git - clang/commitdiff
fix PR6780, properly handling the IR {|} escapes in inline asm strings.
authorChris Lattner <sabre@nondot.org>
Mon, 5 Apr 2010 18:44:00 +0000 (18:44 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 5 Apr 2010 18:44:00 +0000 (18:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@100449 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/Stmt.cpp
test/CodeGen/asm.c

index 8347249a466bd595f3d14e0b23fe75e24d75ba7b..97023820e247538abe4bd00051f73b767c8d722c 100644 (file)
@@ -249,14 +249,18 @@ unsigned AsmStmt::AnalyzeAsmString(llvm::SmallVectorImpl<AsmStringPiece>&Pieces,
     }
 
     char CurChar = *CurPtr++;
-    if (CurChar == '$') {
-      CurStringPiece += "$$";
-      continue;
-    } else if (CurChar != '%') {
+    switch (CurChar) {
+    case '$': CurStringPiece += "$$"; continue;
+    case '{': CurStringPiece += "$("; continue;
+    case '|': CurStringPiece += "$|"; continue;
+    case '}': CurStringPiece += "$)"; continue;
+    case '%':
+      break;
+    default:
       CurStringPiece += CurChar;
       continue;
     }
-
+    
     // Escaped "%" character in asm string.
     if (CurPtr == StrEnd) {
       // % at end of string is invalid (no escape).
index bf1c806a2c470ec910759a3789aa9248c3a9917d..ace0db9af6d4e5d638afd7a92cc4cbd8324af153 100644 (file)
@@ -135,3 +135,15 @@ int t18(unsigned data) {
 // CHECK-NEXT: extractvalue
 // CHECK-NEXT: extractvalue
 }
+
+
+// PR6780
+int t19(unsigned data) {
+  int a, b;
+  
+  asm("x{abc|def|ghi}z" :"=r"(a): "r"(data));
+  return a + b;
+  // CHECK: t19(i32
+  // CHECK: = call {{.*}}asm "x$(abc$|def$|ghi$)z"
+}
+