diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index 8ea0b015e5fbf057d51179ae6187c35e24742512..c53505d10ab13da171c19e9e429e62fc04617dad 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -11174,6 +11174,9 @@ TreeTransform<Derived>::TransformObjCMessageExpr(ObjCMessageExpr *E) {
   }
   else if (E->getReceiverKind() == ObjCMessageExpr::SuperClass ||
            E->getReceiverKind() == ObjCMessageExpr::SuperInstance) {
+    if (!E->getMethodDecl())
+      return ExprError();
+
     // Build a new class message send to 'super'.
     SmallVector<SourceLocation, 16> SelLocs;
     E->getSelectorLocs(SelLocs);
diff --git a/test/SemaObjC/call-super-2.m b/test/SemaObjC/call-super-2.m
index 8927f3b528648fa794edcae55e2b038dc27d675f..01acff70c2301257acc13ff2bbc9ef671d997ad6 100644
--- a/test/SemaObjC/call-super-2.m
+++ b/test/SemaObjC/call-super-2.m
@@ -106,3 +106,18 @@ id objc_getClass(const char *s);
 }
 @end
 
+@class C;
+@interface A // expected-note {{receiver is instance of class declared here}}
+- (instancetype)initWithCoder:(A *)coder;
+@end
+
+@interface B : A
+@end
+
+@implementation B
+- (instancetype)initWithCoder:(C *)coder {
+  if (0 != (self = [super initWithCode:code])) // expected-error {{use of undeclared identifier 'code'}} expected-warning {{instance method '-initWithCode:' not found}}
+    return (void *)0;
+  return (void *)0;
+}
+@end