r217530 - Objective-C arc. Fixes a crash when issuing diagnostic for

Fariborz Jahanian fjahanian at apple.com
Wed Sep 10 11:23:34 PDT 2014


Author: fjahanian
Date: Wed Sep 10 13:23:34 2014
New Revision: 217530

URL: http://llvm.org/viewvc/llvm-project?rev=217530&view=rev
Log:
Objective-C arc. Fixes a crash when issuing diagnostic for
passing parameter to an audited CF API. rdar://18222007

Added:
    cfe/trunk/test/SemaObjC/objc-cf-audited-warning.m
Modified:
    cfe/trunk/lib/Sema/SemaExpr.cpp

Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=217530&r1=217529&r2=217530&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Sep 10 13:23:34 2014
@@ -10994,7 +10994,7 @@ bool Sema::DiagnoseAssignmentResult(Assi
 
   PartialDiagnostic FDiag = PDiag(DiagKind);
   if (Action == AA_Passing_CFAudited)
-    FDiag << FirstType << SecondType << SrcExpr->getSourceRange();
+    FDiag << FirstType << SecondType << AA_Passing << SrcExpr->getSourceRange();
   else
     FDiag << FirstType << SecondType << Action << SrcExpr->getSourceRange();
 

Added: cfe/trunk/test/SemaObjC/objc-cf-audited-warning.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/objc-cf-audited-warning.m?rev=217530&view=auto
==============================================================================
--- cfe/trunk/test/SemaObjC/objc-cf-audited-warning.m (added)
+++ cfe/trunk/test/SemaObjC/objc-cf-audited-warning.m Wed Sep 10 13:23:34 2014
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1  -fobjc-arc -verify %s
+// rdar://18222007
+
+#if __has_feature(arc_cf_code_audited)
+#define CF_IMPLICIT_BRIDGING_ENABLED _Pragma("clang arc_cf_code_audited begin")
+#define CF_IMPLICIT_BRIDGING_DISABLED _Pragma("clang arc_cf_code_audited end")
+#endif
+#define CF_BRIDGED_TYPE(T)              __attribute__((objc_bridge(T)))
+
+typedef const struct CF_BRIDGED_TYPE(NSURL) __CFURL * CFURLRef;
+typedef signed long long CFIndex;
+typedef unsigned char           Boolean;
+typedef unsigned char                   UInt8;
+typedef const struct __CFAllocator * CFAllocatorRef;
+const CFAllocatorRef kCFAllocatorDefault;
+
+CF_IMPLICIT_BRIDGING_ENABLED
+CFURLRef CFURLCreateFromFileSystemRepresentation(CFAllocatorRef allocator, const UInt8 *buffer, CFIndex bufLen, Boolean isDirectory); // expected-note {{passing argument to parameter 'buffer' here}}
+CF_IMPLICIT_BRIDGING_DISABLED
+
+void saveImageToJPG(const char *filename)
+{
+    CFURLRef url = CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, filename, 10, 0); // expected-warning {{passing 'const char *' to parameter of type 'const UInt8 *' (aka 'const unsigned char *') converts between pointers to integer types with different sign}}
+}





More information about the cfe-commits mailing list