Merge remote-tracking branch 'origin/swift-4.0-branch' into stable

* origin/swift-4.0-branch:
  Merging r294800: ------------------------------------------------------------------------ r294800 | gbiv | 2017-02-10 14:52:29 -0800 (Fri, 10 Feb 2017) | 10 lines
  Merging r294855: ------------------------------------------------------------------------ r294855 | compnerd | 2017-02-11 09:24:09 -0800 (Sat, 11 Feb 2017) | 3 lines
diff --git a/docs/AutomaticReferenceCounting.rst b/docs/AutomaticReferenceCounting.rst
index aa2a283..fbd1ba4 100644
--- a/docs/AutomaticReferenceCounting.rst
+++ b/docs/AutomaticReferenceCounting.rst
@@ -2258,16 +2258,13 @@
 
 .. code-block:: objc
 
-  id objc_storeStrong(id *object, id value) {
-    value = [value retain];
+  void objc_storeStrong(id *object, id value) {
     id oldValue = *object;
+    value = [value retain];
     *object = value;
     [oldValue release];
-    return value;
   }
 
-Always returns ``value``.
-
 .. [*] This does not imply that a ``__strong`` object of block type is an
    invalid argument to this function. Rather it implies that an ``objc_retain``
    and not an ``objc_retainBlock`` operation will be emitted if the argument is
diff --git a/lib/AST/ExprConstant.cpp b/lib/AST/ExprConstant.cpp
index 07d2086..2c0fce9 100644
--- a/lib/AST/ExprConstant.cpp
+++ b/lib/AST/ExprConstant.cpp
@@ -605,11 +605,10 @@
       EM_PotentialConstantExpressionUnevaluated,
 
       /// Evaluate as a constant expression. In certain scenarios, if:
-      /// - We find a MemberExpr with a base that can't be evaluated, or
-      /// - We find a variable initialized with a call to a function that has
+      /// - we find a MemberExpr with a base that can't be evaluated, or
+      /// - we find a variable initialized with a call to a function that has
       ///   the alloc_size attribute on it
-      ///
-      /// Then we may consider evaluation to have succeeded.
+      /// then we may consider evaluation to have succeeded.
       ///
       /// In either case, the LValue returned shall have an invalid base; in the
       /// former, the base will be the invalid MemberExpr, in the latter, the
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index 1d72b4e..36f6785 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -166,7 +166,7 @@
   /// void objc_release(id);
   llvm::Constant *objc_release;
 
-  /// id objc_storeStrong(id*, id);
+  /// void objc_storeStrong(id*, id);
   llvm::Constant *objc_storeStrong;
 
   /// id objc_storeWeak(id*, id);