Version 1.21.1

Cherry-pick 53e93e8b053674b1a260d01156c92165438f8d36 to stable
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 141f621..8f8b775 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 1.21.1 - 2017-01-13
+
+Patch release, resolves one issue:
+
+* Dart VM: Snapshots of generic functions fail. [Issue 28072](https://github.com/dart-lang/sdk/issues/28072)
+
 ## 1.21.0 - 2016-12-07
 
 ### Language
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index ac586d9..daa2198 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -17608,7 +17608,7 @@
 
 void TypeParameter::set_parameterized_class(const Class& value) const {
   // Set value may be null.
-  classid_t cid = kIllegalCid;
+  classid_t cid = kFunctionCid;  // Denotes a function type parameter.
   if (!value.IsNull()) {
     cid = value.id();
   }
@@ -17623,7 +17623,7 @@
 
 RawClass* TypeParameter::parameterized_class() const {
   classid_t cid = parameterized_class_id();
-  if (cid == kIllegalCid) {
+  if (cid == kFunctionCid) {
     return Class::null();
   }
   return Isolate::Current()->class_table()->At(cid);
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 61a2866..ee6c10c 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -6057,7 +6057,7 @@
     return raw_ptr()->parameterized_function_;
   }
   bool IsClassTypeParameter() const {
-    return parameterized_class_id() != kIllegalCid;
+    return parameterized_class_id() != kFunctionCid;
   }
   bool IsFunctionTypeParameter() const {
     return parameterized_function() != Function::null();
diff --git a/tools/VERSION b/tools/VERSION
index fef80b6..2d040d1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,3 @@
-
 # This file is used by tools/utils.py to generate version strings.
 # The numbers are changed as follows:
 #
@@ -27,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 21
-PATCH 0
+PATCH 1
 PRERELEASE 0
 PRERELEASE_PATCH 0