Index: test/Parser/cxx-decl.cpp
===================================================================
--- test/Parser/cxx-decl.cpp	(revision 105687)
+++ test/Parser/cxx-decl.cpp	(working copy)
@@ -37,6 +37,10 @@
   }
 };
 
+class asm_class_test {
+  void foo() __asm__("baz");
+};
+
 enum { fooenum = 1 };
 
 struct a {
Index: lib/Parse/ParseDeclCXX.cpp
===================================================================
--- lib/Parse/ParseDeclCXX.cpp	(revision 105687)
+++ lib/Parse/ParseDeclCXX.cpp	(working copy)
@@ -1403,6 +1403,18 @@
       }
     }
 
+    // If a simple-asm-expr is present, parse it.
+    if (Tok.is(tok::kw_asm)) {
+      SourceLocation Loc;
+      OwningExprResult AsmLabel(ParseSimpleAsm(&Loc));
+      if (AsmLabel.isInvalid()) {
+        SkipUntil(tok::comma, true, true);
+      }
+ 
+      DeclaratorInfo.setAsmLabel(AsmLabel.release());
+      DeclaratorInfo.SetRangeEnd(Loc);
+    }
+
     // If attributes exist after the declarator, parse them.
     if (Tok.is(tok::kw___attribute)) {
       SourceLocation Loc;
