Index: AST/StmtPrinter.cpp
===================================================================
--- AST/StmtPrinter.cpp	(revision 47506)
+++ AST/StmtPrinter.cpp	(working copy)
@@ -536,7 +536,7 @@
     OS << "'\\v'";
     break;
   default:
-    if (isprint(value) && value < 256) {
+    if (value < 256 && isprint(value)) {
       OS << "'" << (char)value << "'";
     } else if (value < 256) {
       OS << "'\\x" << std::hex << value << std::dec << "'";
Index: AST/StmtSerialization.cpp
===================================================================
--- AST/StmtSerialization.cpp	(revision 47506)
+++ AST/StmtSerialization.cpp	(working copy)
@@ -270,7 +270,10 @@
     std::vector<char> data;
     D.ReadCStr(data, false);
     
-    Stmt->Names.push_back(std::string(&data[0], data.size()));
+    if (data.size() == 0)
+      Stmt->Names.push_back(std::string());
+    else
+      Stmt->Names.push_back(std::string(&data[0], data.size()));
   }    
 
   Stmt->Constraints.reserve(size);
