<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">This type and the builtin it supports needs to work in C/C++ as well, not just Objective-C. Are you running into a problem here, or is it just “weird” to see it in the AST?<div class=""><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Apr 3, 2016, at 5:21 AM, Yaron Keren <<a href="mailto:yaron.keren@gmail.com" class="">yaron.keren@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="rtl" class=""><div dir="ltr" class="">+1, if possible. There is a if (getLangOpts().ObjC1) block just before this.</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote"><div dir="ltr" class="">2016-04-03 14:21 GMT+03:00 Vassil Vassilev via cfe-commits <span dir="ltr" class=""><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" class="">cfe-commits@lists.llvm.org</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 04/02/16 01:55, Ben Langmuir via cfe-commits wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: benlangmuir<br class="">
Date: Wed Feb 3 18:55:24 2016<br class="">
New Revision: 259734<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=259734&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=259734&view=rev</a><br class="">
Log:<br class="">
Fix predefine for __NSConstantString struct type<br class="">
<br class="">
Per review feedback the name was wrong and it can be used outside<br class="">
Objective-C.<br class="">
<br class="">
Unfortunately, making the internal struct visible broke some ASTMatchers<br class="">
tests that assumed that the first record decl would be from user code,<br class="">
rather than a builtin type. I'm worried that this will also affect<br class="">
users' code. So this patch adds a typedef to wrap the internal struct<br class="">
and only makes the typedef visible to namelookup. This is sufficient to<br class="">
allow the ASTReader to merge the decls we need without making the struct<br class="">
itself visible.<br class="">
<br class="">
<a href="rdar://problem/24425801" class="">rdar://problem/24425801</a><br class="">
<br class="">
Modified:<br class="">
cfe/trunk/include/clang/AST/ASTContext.h<br class="">
cfe/trunk/include/clang/Serialization/ASTBitCodes.h<br class="">
cfe/trunk/lib/AST/ASTContext.cpp<br class="">
cfe/trunk/lib/Sema/Sema.cpp<br class="">
cfe/trunk/lib/Serialization/ASTReader.cpp<br class="">
cfe/trunk/lib/Serialization/ASTWriter.cpp<br class="">
cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m<br class="">
cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m<br class="">
cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m<br class="">
cfe/trunk/test/Modules/Inputs/builtin.h<br class="">
cfe/trunk/test/Modules/builtins.m<br class="">
<br class="">
Modified: cfe/trunk/include/clang/AST/ASTContext.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/include/clang/AST/ASTContext.h (original)<br class="">
+++ cfe/trunk/include/clang/AST/ASTContext.h Wed Feb 3 18:55:24 2016<br class="">
@@ -253,8 +253,9 @@ class ASTContext : public RefCountedBase<br class="">
mutable IdentifierInfo *MakeIntegerSeqName = nullptr;<br class="">
QualType ObjCConstantStringType;<br class="">
- mutable RecordDecl *CFConstantStringTypeDecl;<br class="">
-<br class="">
+ mutable RecordDecl *CFConstantStringTagDecl;<br class="">
+ mutable TypedefDecl *CFConstantStringTypeDecl;<br class="">
+<br class="">
mutable QualType ObjCSuperType;<br class="">
QualType ObjCNSStringType;<br class="">
@@ -1381,11 +1382,12 @@ public:<br class="">
/// if it hasn't yet been built.<br class="">
QualType getRawCFConstantStringType() const {<br class="">
if (CFConstantStringTypeDecl)<br class="">
- return getTagDeclType(CFConstantStringTypeDecl);<br class="">
+ return getTypedefType(CFConstantStringTypeDecl);<br class="">
return QualType();<br class="">
}<br class="">
void setCFConstantStringType(QualType T);<br class="">
- TagDecl *getCFConstantStringDecl() const;<br class="">
+ TypedefDecl *getCFConstantStringDecl() const;<br class="">
+ RecordDecl *getCFConstantStringTagDecl() const;<br class="">
// This setter/getter represents the ObjC type for an NSConstantString.<br class="">
void setObjCConstantStringInterface(ObjCInterfaceDecl *Decl);<br class="">
<br class="">
Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original)<br class="">
+++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Wed Feb 3 18:55:24 2016<br class="">
@@ -988,15 +988,18 @@ namespace clang {<br class="">
/// \brief The internal '__make_integer_seq' template.<br class="">
PREDEF_DECL_MAKE_INTEGER_SEQ_ID = 13,<br class="">
- /// \brief The internal '__NSConstantString' type.<br class="">
+ /// \brief The internal '__NSConstantString' typedef.<br class="">
PREDEF_DECL_CF_CONSTANT_STRING_ID = 14,<br class="">
+<br class="">
+ /// \brief The internal '__NSConstantString' tag type.<br class="">
+ PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID = 15,<br class="">
};<br class="">
/// \brief The number of declaration IDs that are predefined.<br class="">
///<br class="">
/// For more information about predefined declarations, see the<br class="">
/// \c PredefinedDeclIDs type and the PREDEF_DECL_*_ID constants.<br class="">
- const unsigned int NUM_PREDEF_DECL_IDS = 15;<br class="">
+ const unsigned int NUM_PREDEF_DECL_IDS = 16;<br class="">
/// \brief Record code for a list of local redeclarations of a declaration.<br class="">
const unsigned int LOCAL_REDECLARATIONS = 50;<br class="">
<br class="">
Modified: cfe/trunk/lib/AST/ASTContext.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/lib/AST/ASTContext.cpp (original)<br class="">
+++ cfe/trunk/lib/AST/ASTContext.cpp Wed Feb 3 18:55:24 2016<br class="">
@@ -738,12 +738,13 @@ ASTContext::ASTContext(LangOptions &LOpt<br class="">
BuiltinVaListDecl(nullptr), BuiltinMSVaListDecl(nullptr),<br class="">
ObjCIdDecl(nullptr), ObjCSelDecl(nullptr), ObjCClassDecl(nullptr),<br class="">
ObjCProtocolClassDecl(nullptr), BOOLDecl(nullptr),<br class="">
- CFConstantStringTypeDecl(nullptr), ObjCInstanceTypeDecl(nullptr),<br class="">
- FILEDecl(nullptr), jmp_bufDecl(nullptr), sigjmp_bufDecl(nullptr),<br class="">
- ucontext_tDecl(nullptr), BlockDescriptorType(nullptr),<br class="">
- BlockDescriptorExtendedType(nullptr), cudaConfigureCallDecl(nullptr),<br class="">
- FirstLocalImport(), LastLocalImport(), ExternCContext(nullptr),<br class="">
- MakeIntegerSeqDecl(nullptr), SourceMgr(SM), LangOpts(LOpts),<br class="">
+ CFConstantStringTagDecl(nullptr), CFConstantStringTypeDecl(nullptr),<br class="">
+ ObjCInstanceTypeDecl(nullptr), FILEDecl(nullptr), jmp_bufDecl(nullptr),<br class="">
+ sigjmp_bufDecl(nullptr), ucontext_tDecl(nullptr),<br class="">
+ BlockDescriptorType(nullptr), BlockDescriptorExtendedType(nullptr),<br class="">
+ cudaConfigureCallDecl(nullptr), FirstLocalImport(), LastLocalImport(),<br class="">
+ ExternCContext(nullptr), MakeIntegerSeqDecl(nullptr), SourceMgr(SM),<br class="">
+ LangOpts(LOpts),<br class="">
SanitizerBL(new SanitizerBlacklist(LangOpts.SanitizerBlacklistFiles, SM)),<br class="">
AddrSpaceMap(nullptr), Target(nullptr), AuxTarget(nullptr),<br class="">
PrintingPolicy(LOpts), Idents(idents), Selectors(sels),<br class="">
@@ -4868,12 +4869,12 @@ int ASTContext::getIntegerTypeOrder(Qual<br class="">
return 1;<br class="">
}<br class="">
-TagDecl *ASTContext::getCFConstantStringDecl() const {<br class="">
+TypedefDecl *ASTContext::getCFConstantStringDecl() const {<br class="">
if (!CFConstantStringTypeDecl) {<br class="">
- // This type is designed to be compatible with NSConstantString, but cannot<br class="">
- // use the same name, since NSConstantString is an interface.<br class="">
- CFConstantStringTypeDecl = buildImplicitRecord("__NSConstantString");<br class="">
- CFConstantStringTypeDecl->startDefinition();<br class="">
+ assert(!CFConstantStringTagDecl &&<br class="">
+ "tag and typedef should be initialized together");<br class="">
+ CFConstantStringTagDecl = buildImplicitRecord("__NSConstantString_tag");<br class="">
+ CFConstantStringTagDecl->startDefinition();<br class="">
QualType FieldTypes[4];<br class="">
@@ -4888,7 +4889,7 @@ TagDecl *ASTContext::getCFConstantString<br class="">
// Create fields<br class="">
for (unsigned i = 0; i < 4; ++i) {<br class="">
- FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTypeDecl,<br class="">
+ FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTagDecl,<br class="">
SourceLocation(),<br class="">
SourceLocation(), nullptr,<br class="">
FieldTypes[i], /*TInfo=*/nullptr,<br class="">
@@ -4896,18 +4897,29 @@ TagDecl *ASTContext::getCFConstantString<br class="">
/*Mutable=*/false,<br class="">
ICIS_NoInit);<br class="">
Field->setAccess(AS_public);<br class="">
- CFConstantStringTypeDecl->addDecl(Field);<br class="">
+ CFConstantStringTagDecl->addDecl(Field);<br class="">
}<br class="">
- CFConstantStringTypeDecl->completeDefinition();<br class="">
+ CFConstantStringTagDecl->completeDefinition();<br class="">
+ // This type is designed to be compatible with NSConstantString, but cannot<br class="">
+ // use the same name, since NSConstantString is an interface.<br class="">
+ auto tagType = getTagDeclType(CFConstantStringTagDecl);<br class="">
+ CFConstantStringTypeDecl =<br class="">
+ buildImplicitTypedef(tagType, "__NSConstantString");<br class="">
}<br class="">
return CFConstantStringTypeDecl;<br class="">
}<br class="">
+RecordDecl *ASTContext::getCFConstantStringTagDecl() const {<br class="">
+ if (!CFConstantStringTagDecl)<br class="">
+ getCFConstantStringDecl(); // Build the tag and the typedef.<br class="">
+ return CFConstantStringTagDecl;<br class="">
+}<br class="">
+<br class="">
// getCFConstantStringType - Return the type used for constant CFStrings.<br class="">
QualType ASTContext::getCFConstantStringType() const {<br class="">
- return getTagDeclType(getCFConstantStringDecl());<br class="">
+ return getTypedefType(getCFConstantStringDecl());<br class="">
}<br class="">
QualType ASTContext::getObjCSuperType() const {<br class="">
@@ -4920,9 +4932,13 @@ QualType ASTContext::getObjCSuperType()<br class="">
}<br class="">
void ASTContext::setCFConstantStringType(QualType T) {<br class="">
- const RecordType *Rec = T->getAs<RecordType>();<br class="">
- assert(Rec && "Invalid CFConstantStringType");<br class="">
- CFConstantStringTypeDecl = Rec->getDecl();<br class="">
+ const TypedefType *TD = T->getAs<TypedefType>();<br class="">
+ assert(TD && "Invalid CFConstantStringType");<br class="">
+ CFConstantStringTypeDecl = cast<TypedefDecl>(TD->getDecl());<br class="">
+ auto TagType =<br class="">
+ CFConstantStringTypeDecl->getUnderlyingType()->getAs<RecordType>();<br class="">
+ assert(TagType && "Invalid CFConstantStringType");<br class="">
+ CFConstantStringTagDecl = TagType->getDecl();<br class="">
}<br class="">
QualType ASTContext::getBlockDescriptorType() const {<br class="">
<br class="">
Modified: cfe/trunk/lib/Sema/Sema.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/lib/Sema/Sema.cpp (original)<br class="">
+++ cfe/trunk/lib/Sema/Sema.cpp Wed Feb 3 18:55:24 2016<br class="">
@@ -189,12 +189,13 @@ void Sema::Initialize() {<br class="">
DeclarationName Protocol = &Context.Idents.get("Protocol");<br class="">
if (IdResolver.begin(Protocol) == IdResolver.end())<br class="">
PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope);<br class="">
-<br class="">
- DeclarationName ConstantString = &Context.Idents.get("NSConstantString");<br class="">
- if (IdResolver.begin(ConstantString) == IdResolver.end())<br class="">
- PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);<br class="">
}<br class="">
+ // Create the internal type for the *StringMakeConstantString builtins.<br class="">
+ DeclarationName ConstantString = &Context.Idents.get("__NSConstantString");<br class="">
+ if (IdResolver.begin(ConstantString) == IdResolver.end())<br class="">
+ PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope);<br class="">
+<br class="">
</blockquote>
Ben, maybe you replied to that somewhere else but could not find it. Could this be a conditional if lang opts are objc? This gets generated for objc independent code:<br class="">
|-TypedefDecl 0x10b8131a8 <<invalid sloc>> <invalid sloc> implicit __NSConstantString 'struct __NSConstantString_tag'<br class="">
| `-RecordType 0x10b812f60 'struct __NSConstantString_tag'<br class="">
| `-CXXRecord 0x10b812eb8 '__NSConstantString_tag'<br class="">
<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
// Initialize Microsoft "predefined C++ types".<br class="">
if (getLangOpts().MSVCCompat) {<br class="">
if (getLangOpts().CPlusPlus &&<br class="">
<br class="">
Modified: cfe/trunk/lib/Serialization/ASTReader.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/lib/Serialization/ASTReader.cpp (original)<br class="">
+++ cfe/trunk/lib/Serialization/ASTReader.cpp Wed Feb 3 18:55:24 2016<br class="">
@@ -6447,6 +6447,9 @@ static Decl *getPredefinedDecl(ASTContex<br class="">
case PREDEF_DECL_CF_CONSTANT_STRING_ID:<br class="">
return Context.getCFConstantStringDecl();<br class="">
+<br class="">
+ case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID:<br class="">
+ return Context.getCFConstantStringTagDecl();<br class="">
}<br class="">
llvm_unreachable("PredefinedDeclIDs unknown enum value");<br class="">
}<br class="">
<br class="">
Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)<br class="">
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed Feb 3 18:55:24 2016<br class="">
@@ -4154,6 +4154,8 @@ uint64_t ASTWriter::WriteASTCore(Sema &S<br class="">
PREDEF_DECL_MAKE_INTEGER_SEQ_ID);<br class="">
RegisterPredefDecl(Context.CFConstantStringTypeDecl,<br class="">
PREDEF_DECL_CF_CONSTANT_STRING_ID);<br class="">
+ RegisterPredefDecl(Context.CFConstantStringTagDecl,<br class="">
+ PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID);<br class="">
// Build a record containing all of the tentative definitions in this file, in<br class="">
// TentativeDefinitions order. Generally, this record will be empty for<br class="">
<br class="">
Modified: cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m (original)<br class="">
+++ cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m Wed Feb 3 18:55:24 2016<br class="">
@@ -2,6 +2,6 @@<br class="">
// <a href="rdar://7589850" class="">rdar://7589850</a><br class="">
// CHECK: @.str = private unnamed_addr constant [9 x i16] [i16 103, i16 111, i16 111, i16 100, i16 0, i16 98, i16 121, i16 101, i16 0], section "__TEXT,__ustring", align 2<br class="">
-// CHECK: @_unnamed_cfstring_ = private constant %struct.__NSConstantString { i32* getelementptr inbounds ([0 x i32], [0 x i32]* @__CFConstantStringClassReference, i32 0, i32 0), i32 2000, i8* bitcast ([9 x i16]* @.str to i8*), i32 8 }, section "__DATA,__cfstring"<br class="">
-// CHECK: @P = global i8* bitcast (%struct.__NSConstantString* @_unnamed_cfstring_ to i8*), align 4<br class="">
+// CHECK: @_unnamed_cfstring_ = private constant %struct.__NSConstantString_tag { i32* getelementptr inbounds ([0 x i32], [0 x i32]* @__CFConstantStringClassReference, i32 0, i32 0), i32 2000, i8* bitcast ([9 x i16]* @.str to i8*), i32 8 }, section "__DATA,__cfstring"<br class="">
+// CHECK: @P = global i8* bitcast (%struct.__NSConstantString_tag* @_unnamed_cfstring_ to i8*), align 4<br class="">
void *P = @"good\0bye";<br class="">
<br class="">
Modified: cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m (original)<br class="">
+++ cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m Wed Feb 3 18:55:24 2016<br class="">
@@ -34,7 +34,7 @@ void test1(id x) {<br class="">
void NSLog(id, ...);<br class="">
// CHECK-LABEL: define void @test2(<br class="">
-// CHECK: invoke void (i8*, ...) @NSLog(i8* bitcast (%struct.__NSConstantString* @_unnamed_cfstring_ to i8*), i32* %{{.*}})<br class="">
+// CHECK: invoke void (i8*, ...) @NSLog(i8* bitcast (%struct.__NSConstantString_tag* @_unnamed_cfstring_ to i8*), i32* %{{.*}})<br class="">
// CHECK: to label %{{.*}} unwind label %{{.*}}, !<a href="http://clang.arc.no" class="">clang.arc.no</a>_objc_arc_exceptions !<br class="">
// NO-METADATA-LABEL: define void @test2(<br class="">
// NO-METADATA-NOT: !<a href="http://clang.arc.no" class="">clang.arc.no</a>_objc_arc_exceptions<br class="">
<br class="">
Modified: cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m (original)<br class="">
+++ cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m Wed Feb 3 18:55:24 2016<br class="">
@@ -32,12 +32,11 @@ static inline void _inlineFunction() {<br class="">
@end<br class="">
// CHECK: @__CFConstantStringClassReference = common global [24 x i32] zeroinitializer, align 16<br class="">
-// CHECK: @_unnamed_cfstring_{{.*}} = private constant %struct.__NSConstantString { i32* getelementptr inbounds ([24 x i32], [24 x i32]* @__CFConstantStringClassReference, i32 0, i32 0)<br class="">
+// CHECK: @_unnamed_cfstring_{{.*}} = private constant %struct.__NSConstantString_tag { i32* getelementptr inbounds ([24 x i32], [24 x i32]* @__CFConstantStringClassReference, i32 0, i32 0)<br class="">
// CHECK-LABEL: define internal void @_inlineFunction()<br class="">
// CHECK: [[ZERO:%.*]] = load %struct._class_t*, %struct._class_t** @"OBJC_CLASSLIST_REFERENCES_<br class="">
// CHECK-NEXT: [[ONE:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_<br class="">
// CHECK-NEXT: [[TWO:%.*]] = bitcast %struct._class_t* [[ZERO]] to i8*<br class="">
-// CHECK-NEXT: call void (i8*, i8*, [[T:%.*]]*, ...) bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, [[T:%.*]]*, ...)*)(i8* [[TWO]], i8* [[ONE]], [[T:%.*]]* bitcast (%struct.__NSConstantString* @_unnamed_cfstring_{{.*}} to [[T:%.*]]*))<br class="">
+// CHECK-NEXT: call void (i8*, i8*, [[T:%.*]]*, ...) bitcast (i8* (i8*, i8*, ...)* @objc_msgSend to void (i8*, i8*, [[T:%.*]]*, ...)*)(i8* [[TWO]], i8* [[ONE]], [[T:%.*]]* bitcast (%struct.__NSConstantString_tag* @_unnamed_cfstring_{{.*}} to [[T:%.*]]*))<br class="">
// CHECK-NEXT: ret void<br class="">
-<br class="">
<br class="">
Modified: cfe/trunk/test/Modules/Inputs/builtin.h<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/builtin.h?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/builtin.h?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/test/Modules/Inputs/builtin.h (original)<br class="">
+++ cfe/trunk/test/Modules/Inputs/builtin.h Wed Feb 3 18:55:24 2016<br class="">
@@ -1,10 +1,7 @@<br class="">
int i;<br class="">
int *p = &i;<br class="">
-#ifdef __OBJC__<br class="">
void use_constant_string_builtins(void) {<br class="">
(void)__builtin___CFStringMakeConstantString("");<br class="">
(void)__builtin___NSStringMakeConstantString("");<br class="">
}<br class="">
-#endif<br class="">
-<br class="">
<br class="">
Modified: cfe/trunk/test/Modules/builtins.m<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/builtins.m?rev=259734&r1=259733&r2=259734&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/builtins.m?rev=259734&r1=259733&r2=259734&view=diff</a><br class="">
==============================================================================<br class="">
--- cfe/trunk/test/Modules/builtins.m (original)<br class="">
+++ cfe/trunk/test/Modules/builtins.m Wed Feb 3 18:55:24 2016<br class="">
@@ -1,5 +1,7 @@<br class="">
// RUN: rm -rf %t<br class="">
// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs %s -verify<br class="">
+// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs -x c %s -verify<br class="">
+// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs -x objective-c++ %s -verify<br class="">
// RUN: rm -rf %t.pch.cache<br class="">
// RUN: %clang_cc1 -fmodules-cache-path=%t.pch.cache -fmodules -fimplicit-module-maps -I %S/Inputs -emit-pch -o %t.pch -x objective-c-header %S/Inputs/use-builtin.h<br class="">
@@ -12,13 +14,13 @@ void use_constant_string_builtins1(void)<br class="">
(void)__builtin___NSStringMakeConstantString("");<br class="">
}<br class="">
-@import builtin;<br class="">
+#include "builtin.h"<br class="">
int foo() {<br class="">
return __builtin_object_size(p, 0);<br class="">
}<br class="">
-@import builtin.sub;<br class="">
+#include "builtin_sub.h"<br class="">
int bar() {<br class="">
return __builtin_object_size(p, 0);<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
cfe-commits mailing list<br class="">
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" class="">cfe-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="">
</blockquote>
<br class="">
_______________________________________________<br class="">
cfe-commits mailing list<br class="">
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank" class="">cfe-commits@lists.llvm.org</a><br class="">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="">
</blockquote></div><br class=""></div>
</div></blockquote></div><br class=""></div></div></body></html>