Improvements to Sema of asm statements. Fixes <rdar://problem/6156893>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@62609 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Sema/asm.c b/test/Sema/asm.c
index 3bb7d78..312b800 100644
--- a/test/Sema/asm.c
+++ b/test/Sema/asm.c
@@ -37,3 +37,14 @@
   asm("foo" : L"=r"(x)); // expected-error {{wide string}}
 }
 
+// <rdar://problem/6156893>
+void test4(const volatile void *addr)
+{
+    asm ("nop" : : "r"(*addr)); // expected-error {{invalid type 'void const volatile' in asm input for constraint 'r'}}
+    asm ("nop" : : "m"(*addr));
+
+    asm ("nop" : : "r"(test4(addr))); // expected-error {{invalid type 'void' in asm input for constraint 'r'}}
+    asm ("nop" : : "m"(test4(addr))); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
+
+    asm("nop" : : "m"(f())); // expected-error {{invalid lvalue in asm input for constraint 'm'}}
+}