From d9fd7647e286723d100db4cfeab31ec022eec629 Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Tue, 7 Apr 2009 14:18:33 +0000 Subject: [PATCH] Change the type of ObjC @ string constants (from NSConstantString->NSString). This fixes clang type for @"xxx" is "NSConstantString *" (GCC type is "NSString *"). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68514 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExprObjC.cpp | 8 +++--- test/SemaObjC/objc-string-constant.m | 39 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 test/SemaObjC/objc-string-constant.m diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index bd94f007ba..cfa279aa31 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -69,19 +69,21 @@ Sema::ExprResult Sema::ParseObjCStringLiteral(SourceLocation *AtLocs, return true; // Initialize the constant string interface lazily. This assumes - // the NSConstantString interface is seen in this translation unit. + // the NSString interface is seen in this translation unit. Note: We + // don't use NSConstantString, since the runtime team considers this + // interface private (even though it appears in the header files). QualType Ty = Context.getObjCConstantStringInterface(); if (!Ty.isNull()) { Ty = Context.getPointerType(Ty); } else { - IdentifierInfo *NSIdent = &Context.Idents.get("NSConstantString"); + IdentifierInfo *NSIdent = &Context.Idents.get("NSString"); NamedDecl *IF = LookupName(TUScope, NSIdent, LookupOrdinaryName); if (ObjCInterfaceDecl *StrIF = dyn_cast_or_null(IF)) { Context.setObjCConstantStringInterface(StrIF); Ty = Context.getObjCConstantStringInterface(); Ty = Context.getPointerType(Ty); } else { - // If there is no NSConstantString interface defined then treat constant + // If there is no NSString interface defined then treat constant // strings as untyped objects and let the runtime figure it out later. Ty = Context.getObjCIdType(); } diff --git a/test/SemaObjC/objc-string-constant.m b/test/SemaObjC/objc-string-constant.m new file mode 100644 index 0000000000..8baa149bbd --- /dev/null +++ b/test/SemaObjC/objc-string-constant.m @@ -0,0 +1,39 @@ +// RUN: clang-cc %s -verify -fsyntax-only && + +#define nil 0 /* id of Nil instance */ + +@interface NSObject +@end + +@interface NSString : NSObject + +@end + +@interface NSMutableString : NSString + +@end + +@interface NSSimpleCString : NSString { +@protected + char *bytes; + int numBytes; +} +@end + +@interface NSConstantString : NSSimpleCString +@end + + +@interface Subclass : NSObject +- (NSString *)token; +@end + +@implementation Subclass +- (NSString *)token; +{ + NSMutableString *result = nil; + + return (result != nil) ? result : @""; +} +@end + -- 2.40.0