Store output and input operands as well as clobber information in the AsmStmt. Ted, could you please review the serialization/deserialization code?

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44266 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Sema/SemaStmt.cpp b/Sema/SemaStmt.cpp
index ad3d2e4..f7aa6a9 100644
--- a/Sema/SemaStmt.cpp
+++ b/Sema/SemaStmt.cpp
@@ -645,11 +645,29 @@
 }
 
 Sema::StmtResult Sema::ActOnAsmStmt(SourceLocation AsmLoc,
+                                    unsigned NumOutputs,
+                                    unsigned NumInputs,
+                                    std::string *Names,
+                                    ExprTy **Constraints,
+                                    ExprTy **Exprs,
                                     ExprTy *AsmString,
+                                    unsigned NumClobbers,
+                                    ExprTy **Clobbers,
                                     SourceLocation RParenLoc) {
   Expr *E = (Expr *)AsmString;
     
-  return new AsmStmt(AsmLoc, cast<StringLiteral>(E), RParenLoc);
+  // FIXME: Make sure that the expressions are valid.
+  
+  return new AsmStmt(AsmLoc,
+                     NumOutputs,
+                     NumInputs, 
+                     Names,
+                     reinterpret_cast<StringLiteral**>(Constraints),
+                     reinterpret_cast<Expr**>(Exprs),
+                     cast<StringLiteral>(E),
+                     NumClobbers,
+                     reinterpret_cast<StringLiteral**>(Clobbers),
+                     RParenLoc);
 }
 
 Action::StmtResult