objc: DOn't complain if a (SEL) expression is typecast
to (SEL). Fixes // rdar://12859590


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170058 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaCast.cpp b/lib/Sema/SemaCast.cpp
index 6f39373..28b5827 100644
--- a/lib/Sema/SemaCast.cpp
+++ b/lib/Sema/SemaCast.cpp
@@ -1479,6 +1479,8 @@
 static void DiagnoseCastOfObjCSEL(Sema &Self, const ExprResult &SrcExpr,
                                   QualType DestType) {
   QualType SrcType = SrcExpr.get()->getType();
+  if (Self.Context.hasSameType(SrcType, DestType))
+    return;
   if (const PointerType *SrcPtrTy = SrcType->getAs<PointerType>())
     if (SrcPtrTy->isObjCSelType()) {
       QualType DT = DestType;
diff --git a/test/SemaObjC/warn-cast-of-sel-expr.m b/test/SemaObjC/warn-cast-of-sel-expr.m
index 97915a0..1253db9 100644
--- a/test/SemaObjC/warn-cast-of-sel-expr.m
+++ b/test/SemaObjC/warn-cast-of-sel-expr.m
@@ -18,4 +18,7 @@
 (void *const)s; // ok
 
 (const void *const)s; // ok
+
+// rdar://12859590
+(SEL)sel_registerName("foo");  // ok
 }