diff --git lib/Sema/SemaChecking.cpp lib/Sema/SemaChecking.cpp
index d9d26e2..9d7f054 100644
--- lib/Sema/SemaChecking.cpp
+++ lib/Sema/SemaChecking.cpp
@@ -8907,6 +8907,11 @@ void Sema::CheckObjCCircularContainer(ObjCMessageExpr *Message) {
     return;
   }
 
+  // do not check for circular container when message sends to a `super`
+  if (Message->getReceiverKind() == ObjCMessageExpr::SuperInstance) {
+    return;
+  }
+
   Optional<int> ArgOpt;
 
   if (!(ArgOpt = GetNSMutableArrayArgumentIndex(*this, Message)) &&
diff --git test/SemaObjC/circular-container.m test/SemaObjC/circular-container.m
index 1a2a24e..f6991e3 100644
--- test/SemaObjC/circular-container.m
+++ test/SemaObjC/circular-container.m
@@ -144,3 +144,12 @@ void checkNSMutableOrderedSet() {
   [s replaceObjectAtIndex:0 withObject:s]; // expected-warning {{adding 's' to 's' might cause circular dependency in container}}
 }
 
+@interface Test1 : NSCountedSet
+@end
+
+@implementation Test1
+- (void)meth {
+  [super addObject:nil]; // no-warning
+}
+@end
+
