diff --git a/lib/AST/TypePrinter.cpp b/lib/AST/TypePrinter.cpp
index d357b3215abf037df2b801aa18383c1e3e8f3eb1..d06bfbdb7a7912a4a2f0c74a9e608319194c7be5 100644
--- a/lib/AST/TypePrinter.cpp
+++ b/lib/AST/TypePrinter.cpp
@@ -431,6 +431,10 @@ void TypePrinter::printConstantArrayBefore(const ConstantArrayType *T,
 void TypePrinter::printConstantArrayAfter(const ConstantArrayType *T, 
                                           raw_ostream &OS) {
   OS << '[';
+  if (T->getIndexTypeQualifiers().hasQualifiers()) {
+    AppendTypeQualList(OS, T->getIndexTypeCVRQualifiers());
+    OS << ' ';
+  }
 
   if (T->getSizeModifier() == VariableArrayType::Static)
     OS << "static ";
diff --git a/test/Sema/ast-print.c b/test/Sema/ast-print.c
index e40c4dd23180810d8685dd01b607d03f7dabd31f..382f0d38962715e83a791060f897663005ed3b46 100644
--- a/test/Sema/ast-print.c
+++ b/test/Sema/ast-print.c
@@ -24,8 +24,18 @@ int arr(int a[static 3]) {
   return a[2];
 }
 
+int rarr(int a[restrict static 3]) {
+  // CHECK: int a[restrict static 3]
+  return a[2];
+}
+
 int varr(int n, int a[static n]) {
   // CHECK: int a[static n]
   return a[2];
 }
 
+int rvarr(int n, int a[restrict static n]) {
+  // CHECK: int a[restrict static n]
+  return a[2];
+}
+