]> granicus.if.org Git - clang/commitdiff
Tests for LLVM MS inline asm change r202865
authorReid Kleckner <reid@kleckner.net>
Tue, 4 Mar 2014 17:57:56 +0000 (17:57 +0000)
committerReid Kleckner <reid@kleckner.net>
Tue, 4 Mar 2014 17:57:56 +0000 (17:57 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202866 91177308-0d34-0410-b5e6-96231b3b80d8

test/Sema/ms-inline-asm.c

index be41c81c9bb23ba1b58a2c6df6c4d824e710ab06..84346888181fd71b5e0682d192941e1e82301ec0 100644 (file)
@@ -50,3 +50,28 @@ void rdar15318432(void) {
     and ecx, ~15
   }
 }
+
+static int global;
+
+int t2(int *arr, int i) {
+  __asm {
+    mov eax, arr;
+    mov eax, arr[0];
+    mov eax, arr[1 + 2];
+    mov eax, arr[1 + (2 * 5) - 3 + 1<<1];
+  }
+
+  // expected-error@+1 {{cannot use base register with variable reference}}
+  __asm mov eax, arr[ebp + 1 + (2 * 5) - 3 + 1<<1]
+  // expected-error@+1 {{cannot use index register with variable reference}}
+  __asm mov eax, arr[esi * 4]
+  // expected-error@+1 {{cannot use more than one symbol in memory operand}}
+  __asm mov eax, arr[i]
+  // expected-error@+1 {{cannot use more than one symbol in memory operand}}
+  __asm mov eax, global[i]
+
+  // FIXME: Why don't we diagnose this?
+  // expected-Xerror@+1 {{cannot reference multiple local variables in assembly operand}}
+  //__asm mov eax, [arr + i];
+  return 0;
+}