diff --git a/clang/lib/Sema/SemaCast.cpp b/clang/lib/Sema/SemaCast.cpp index 6f3937353c89..28b58279a528 100644 --- a/clang/lib/Sema/SemaCast.cpp +++ b/clang/lib/Sema/SemaCast.cpp @@ -1479,6 +1479,8 @@ void Sema::CheckCompatibleReinterpretCast(QualType SrcType, QualType DestType, 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()) if (SrcPtrTy->isObjCSelType()) { QualType DT = DestType; diff --git a/clang/test/SemaObjC/warn-cast-of-sel-expr.m b/clang/test/SemaObjC/warn-cast-of-sel-expr.m index 97915a0094ef..1253db95d5af 100644 --- a/clang/test/SemaObjC/warn-cast-of-sel-expr.m +++ b/clang/test/SemaObjC/warn-cast-of-sel-expr.m @@ -18,4 +18,7 @@ int main() { (void *const)s; // ok (const void *const)s; // ok + +// rdar://12859590 +(SEL)sel_registerName("foo"); // ok }