diff options
-rw-r--r-- | clang/include/clang/AST/NSAPI.h | 3 | ||||
-rw-r--r-- | clang/lib/AST/NSAPI.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Edit/RewriteObjCFoundationAPI.cpp | 3 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-boxing.m | 7 | ||||
-rw-r--r-- | clang/test/ARCMT/objcmt-boxing.m.result | 7 |
5 files changed, 20 insertions, 4 deletions
diff --git a/clang/include/clang/AST/NSAPI.h b/clang/include/clang/AST/NSAPI.h index c643385..5673935 100644 --- a/clang/include/clang/AST/NSAPI.h +++ b/clang/include/clang/AST/NSAPI.h @@ -42,7 +42,8 @@ public: NSStr_stringWithUTF8String, NSStr_stringWithCStringEncoding, NSStr_stringWithCString, - NSStr_initWithString + NSStr_initWithString, + NSStr_initWithUTF8String }; static const unsigned NumNSStringMethods = 5; diff --git a/clang/lib/AST/NSAPI.cpp b/clang/lib/AST/NSAPI.cpp index c6afc8e..579a92c 100644 --- a/clang/lib/AST/NSAPI.cpp +++ b/clang/lib/AST/NSAPI.cpp @@ -46,6 +46,10 @@ Selector NSAPI::getNSStringSelector(NSStringMethodKind MK) const { Sel = Ctx.Selectors.getUnarySelector( &Ctx.Idents.get("stringWithUTF8String")); break; + case NSStr_initWithUTF8String: + Sel = Ctx.Selectors.getUnarySelector( + &Ctx.Idents.get("initWithUTF8String")); + break; case NSStr_stringWithCStringEncoding: { IdentifierInfo *KeyIdents[] = { &Ctx.Idents.get("stringWithCString"), diff --git a/clang/lib/Edit/RewriteObjCFoundationAPI.cpp b/clang/lib/Edit/RewriteObjCFoundationAPI.cpp index 666844c..9f71168 100644 --- a/clang/lib/Edit/RewriteObjCFoundationAPI.cpp +++ b/clang/lib/Edit/RewriteObjCFoundationAPI.cpp @@ -1149,7 +1149,8 @@ static bool rewriteToStringBoxedExpression(const ObjCMessageExpr *Msg, Selector Sel = Msg->getSelector(); if (Sel == NS.getNSStringSelector(NSAPI::NSStr_stringWithUTF8String) || - Sel == NS.getNSStringSelector(NSAPI::NSStr_stringWithCString)) { + Sel == NS.getNSStringSelector(NSAPI::NSStr_stringWithCString) || + Sel == NS.getNSStringSelector(NSAPI::NSStr_initWithUTF8String)) { if (Msg->getNumArgs() != 1) return false; return doRewriteToUTF8StringBoxedExpressionHelper(Msg, NS, commit); diff --git a/clang/test/ARCMT/objcmt-boxing.m b/clang/test/ARCMT/objcmt-boxing.m index 2ad65a1..c4b6f42 100644 --- a/clang/test/ARCMT/objcmt-boxing.m +++ b/clang/test/ARCMT/objcmt-boxing.m @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify +// RUN: %clang_cc1 -fobjc-arc -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c++ %s.result @@ -68,6 +68,7 @@ typedef NSUInteger NSStringEncoding; + (id)stringWithUTF8String:(const char *)nullTerminatedCString; + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc; + (id)stringWithCString:(const char *)bytes; +- (instancetype)initWithUTF8String:(const char *)nullTerminatedCString; @end enum MyEnm { @@ -99,4 +100,8 @@ void boxString() { static const char strarr[] = "coolbox"; s = [NSString stringWithUTF8String:strarr]; + // rdar://18080352 + const char *utf8Bytes = "blah"; + NSString *string1 = [NSString stringWithUTF8String:utf8Bytes]; + NSString *string2 = [[NSString alloc] initWithUTF8String:utf8Bytes]; } diff --git a/clang/test/ARCMT/objcmt-boxing.m.result b/clang/test/ARCMT/objcmt-boxing.m.result index f101989..59fdb88 100644 --- a/clang/test/ARCMT/objcmt-boxing.m.result +++ b/clang/test/ARCMT/objcmt-boxing.m.result @@ -1,5 +1,5 @@ // RUN: rm -rf %t -// RUN: %clang_cc1 -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify +// RUN: %clang_cc1 -fobjc-arc -objcmt-migrate-literals -objcmt-migrate-subscripting -mt-migrate-directory %t %s -x objective-c++ -verify // RUN: c-arcmt-test -mt-migrate-directory %t | arcmt-test -verify-transformed-files %s.result // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fsyntax-only -x objective-c++ %s.result @@ -68,6 +68,7 @@ typedef NSUInteger NSStringEncoding; + (id)stringWithUTF8String:(const char *)nullTerminatedCString; + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc; + (id)stringWithCString:(const char *)bytes; +- (instancetype)initWithUTF8String:(const char *)nullTerminatedCString; @end enum MyEnm { @@ -99,4 +100,8 @@ void boxString() { static const char strarr[] = "coolbox"; s = @(strarr); + // rdar://18080352 + const char *utf8Bytes = "blah"; + NSString *string1 = @(utf8Bytes); + NSString *string2 = @(utf8Bytes); } |