> On Apr 3, 2016, at 10:57 AM, Yaron Keren <yaron.ke...@gmail.com> wrote: > > I look at many AST dumps for small reduced code so it's mostly weird to see > this in the AST (and takes a bit of screen real estate) as it's not something > that originated in the code. > By now I'm used to ignoring it but would expect NSConstantString would baffle > new clang programmers. It would be nice if we won't see it... > How is NSConstantString used outside ObjectiveC ?
A builtin that uses this type is exposed as the CFSTR() macro in CoreFoundation on Darwin platforms - this is a C framework that needs to be usable from C, Objective C and C++. Sorry for the slow reply! > > > > > 2016-04-03 20:39 GMT+03:00 Ben Langmuir <blangm...@apple.com > <mailto:blangm...@apple.com>>: > 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? > >> On Apr 3, 2016, at 5:21 AM, Yaron Keren <yaron.ke...@gmail.com >> <mailto:yaron.ke...@gmail.com>> wrote: >> >> +1, if possible. There is a if (getLangOpts().ObjC1) block just before this. >> >> 2016-04-03 14:21 GMT+03:00 Vassil Vassilev via cfe-commits >> <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>>: >> On 04/02/16 01:55, Ben Langmuir via cfe-commits wrote: >> Author: benlangmuir >> Date: Wed Feb 3 18:55:24 2016 >> New Revision: 259734 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=259734&view=rev >> <http://llvm.org/viewvc/llvm-project?rev=259734&view=rev> >> Log: >> Fix predefine for __NSConstantString struct type >> >> Per review feedback the name was wrong and it can be used outside >> Objective-C. >> >> Unfortunately, making the internal struct visible broke some ASTMatchers >> tests that assumed that the first record decl would be from user code, >> rather than a builtin type. I'm worried that this will also affect >> users' code. So this patch adds a typedef to wrap the internal struct >> and only makes the typedef visible to namelookup. This is sufficient to >> allow the ASTReader to merge the decls we need without making the struct >> itself visible. >> >> rdar://problem/24425801 <> >> >> Modified: >> cfe/trunk/include/clang/AST/ASTContext.h >> cfe/trunk/include/clang/Serialization/ASTBitCodes.h >> cfe/trunk/lib/AST/ASTContext.cpp >> cfe/trunk/lib/Sema/Sema.cpp >> cfe/trunk/lib/Serialization/ASTReader.cpp >> cfe/trunk/lib/Serialization/ASTWriter.cpp >> cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m >> cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m >> cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m >> cfe/trunk/test/Modules/Inputs/builtin.h >> cfe/trunk/test/Modules/builtins.m >> >> Modified: cfe/trunk/include/clang/AST/ASTContext.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ASTContext.h?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/include/clang/AST/ASTContext.h (original) >> +++ cfe/trunk/include/clang/AST/ASTContext.h Wed Feb 3 18:55:24 2016 >> @@ -253,8 +253,9 @@ class ASTContext : public RefCountedBase >> mutable IdentifierInfo *MakeIntegerSeqName = nullptr; >> QualType ObjCConstantStringType; >> - mutable RecordDecl *CFConstantStringTypeDecl; >> - >> + mutable RecordDecl *CFConstantStringTagDecl; >> + mutable TypedefDecl *CFConstantStringTypeDecl; >> + >> mutable QualType ObjCSuperType; >> QualType ObjCNSStringType; >> @@ -1381,11 +1382,12 @@ public: >> /// if it hasn't yet been built. >> QualType getRawCFConstantStringType() const { >> if (CFConstantStringTypeDecl) >> - return getTagDeclType(CFConstantStringTypeDecl); >> + return getTypedefType(CFConstantStringTypeDecl); >> return QualType(); >> } >> void setCFConstantStringType(QualType T); >> - TagDecl *getCFConstantStringDecl() const; >> + TypedefDecl *getCFConstantStringDecl() const; >> + RecordDecl *getCFConstantStringTagDecl() const; >> // This setter/getter represents the ObjC type for an NSConstantString. >> void setObjCConstantStringInterface(ObjCInterfaceDecl *Decl); >> >> Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original) >> +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Wed Feb 3 18:55:24 >> 2016 >> @@ -988,15 +988,18 @@ namespace clang { >> /// \brief The internal '__make_integer_seq' template. >> PREDEF_DECL_MAKE_INTEGER_SEQ_ID = 13, >> - /// \brief The internal '__NSConstantString' type. >> + /// \brief The internal '__NSConstantString' typedef. >> PREDEF_DECL_CF_CONSTANT_STRING_ID = 14, >> + >> + /// \brief The internal '__NSConstantString' tag type. >> + PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID = 15, >> }; >> /// \brief The number of declaration IDs that are predefined. >> /// >> /// For more information about predefined declarations, see the >> /// \c PredefinedDeclIDs type and the PREDEF_DECL_*_ID constants. >> - const unsigned int NUM_PREDEF_DECL_IDS = 15; >> + const unsigned int NUM_PREDEF_DECL_IDS = 16; >> /// \brief Record code for a list of local redeclarations of a >> declaration. >> const unsigned int LOCAL_REDECLARATIONS = 50; >> >> Modified: cfe/trunk/lib/AST/ASTContext.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/lib/AST/ASTContext.cpp (original) >> +++ cfe/trunk/lib/AST/ASTContext.cpp Wed Feb 3 18:55:24 2016 >> @@ -738,12 +738,13 @@ ASTContext::ASTContext(LangOptions &LOpt >> BuiltinVaListDecl(nullptr), BuiltinMSVaListDecl(nullptr), >> ObjCIdDecl(nullptr), ObjCSelDecl(nullptr), ObjCClassDecl(nullptr), >> ObjCProtocolClassDecl(nullptr), BOOLDecl(nullptr), >> - CFConstantStringTypeDecl(nullptr), ObjCInstanceTypeDecl(nullptr), >> - FILEDecl(nullptr), jmp_bufDecl(nullptr), sigjmp_bufDecl(nullptr), >> - ucontext_tDecl(nullptr), BlockDescriptorType(nullptr), >> - BlockDescriptorExtendedType(nullptr), cudaConfigureCallDecl(nullptr), >> - FirstLocalImport(), LastLocalImport(), ExternCContext(nullptr), >> - MakeIntegerSeqDecl(nullptr), SourceMgr(SM), LangOpts(LOpts), >> + CFConstantStringTagDecl(nullptr), CFConstantStringTypeDecl(nullptr), >> + ObjCInstanceTypeDecl(nullptr), FILEDecl(nullptr), >> jmp_bufDecl(nullptr), >> + sigjmp_bufDecl(nullptr), ucontext_tDecl(nullptr), >> + BlockDescriptorType(nullptr), BlockDescriptorExtendedType(nullptr), >> + cudaConfigureCallDecl(nullptr), FirstLocalImport(), LastLocalImport(), >> + ExternCContext(nullptr), MakeIntegerSeqDecl(nullptr), SourceMgr(SM), >> + LangOpts(LOpts), >> SanitizerBL(new SanitizerBlacklist(LangOpts.SanitizerBlacklistFiles, >> SM)), >> AddrSpaceMap(nullptr), Target(nullptr), AuxTarget(nullptr), >> PrintingPolicy(LOpts), Idents(idents), Selectors(sels), >> @@ -4868,12 +4869,12 @@ int ASTContext::getIntegerTypeOrder(Qual >> return 1; >> } >> -TagDecl *ASTContext::getCFConstantStringDecl() const { >> +TypedefDecl *ASTContext::getCFConstantStringDecl() const { >> if (!CFConstantStringTypeDecl) { >> - // This type is designed to be compatible with NSConstantString, but >> cannot >> - // use the same name, since NSConstantString is an interface. >> - CFConstantStringTypeDecl = buildImplicitRecord("__NSConstantString"); >> - CFConstantStringTypeDecl->startDefinition(); >> + assert(!CFConstantStringTagDecl && >> + "tag and typedef should be initialized together"); >> + CFConstantStringTagDecl = buildImplicitRecord("__NSConstantString_tag"); >> + CFConstantStringTagDecl->startDefinition(); >> QualType FieldTypes[4]; >> @@ -4888,7 +4889,7 @@ TagDecl *ASTContext::getCFConstantString >> // Create fields >> for (unsigned i = 0; i < 4; ++i) { >> - FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTypeDecl, >> + FieldDecl *Field = FieldDecl::Create(*this, CFConstantStringTagDecl, >> SourceLocation(), >> SourceLocation(), nullptr, >> FieldTypes[i], >> /*TInfo=*/nullptr, >> @@ -4896,18 +4897,29 @@ TagDecl *ASTContext::getCFConstantString >> /*Mutable=*/false, >> ICIS_NoInit); >> Field->setAccess(AS_public); >> - CFConstantStringTypeDecl->addDecl(Field); >> + CFConstantStringTagDecl->addDecl(Field); >> } >> - CFConstantStringTypeDecl->completeDefinition(); >> + CFConstantStringTagDecl->completeDefinition(); >> + // This type is designed to be compatible with NSConstantString, but >> cannot >> + // use the same name, since NSConstantString is an interface. >> + auto tagType = getTagDeclType(CFConstantStringTagDecl); >> + CFConstantStringTypeDecl = >> + buildImplicitTypedef(tagType, "__NSConstantString"); >> } >> return CFConstantStringTypeDecl; >> } >> +RecordDecl *ASTContext::getCFConstantStringTagDecl() const { >> + if (!CFConstantStringTagDecl) >> + getCFConstantStringDecl(); // Build the tag and the typedef. >> + return CFConstantStringTagDecl; >> +} >> + >> // getCFConstantStringType - Return the type used for constant CFStrings. >> QualType ASTContext::getCFConstantStringType() const { >> - return getTagDeclType(getCFConstantStringDecl()); >> + return getTypedefType(getCFConstantStringDecl()); >> } >> QualType ASTContext::getObjCSuperType() const { >> @@ -4920,9 +4932,13 @@ QualType ASTContext::getObjCSuperType() >> } >> void ASTContext::setCFConstantStringType(QualType T) { >> - const RecordType *Rec = T->getAs<RecordType>(); >> - assert(Rec && "Invalid CFConstantStringType"); >> - CFConstantStringTypeDecl = Rec->getDecl(); >> + const TypedefType *TD = T->getAs<TypedefType>(); >> + assert(TD && "Invalid CFConstantStringType"); >> + CFConstantStringTypeDecl = cast<TypedefDecl>(TD->getDecl()); >> + auto TagType = >> + CFConstantStringTypeDecl->getUnderlyingType()->getAs<RecordType>(); >> + assert(TagType && "Invalid CFConstantStringType"); >> + CFConstantStringTagDecl = TagType->getDecl(); >> } >> QualType ASTContext::getBlockDescriptorType() const { >> >> Modified: cfe/trunk/lib/Sema/Sema.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/Sema.cpp?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/lib/Sema/Sema.cpp (original) >> +++ cfe/trunk/lib/Sema/Sema.cpp Wed Feb 3 18:55:24 2016 >> @@ -189,12 +189,13 @@ void Sema::Initialize() { >> DeclarationName Protocol = &Context.Idents.get("Protocol"); >> if (IdResolver.begin(Protocol) == IdResolver.end()) >> PushOnScopeChains(Context.getObjCProtocolDecl(), TUScope); >> - >> - DeclarationName ConstantString = >> &Context.Idents.get("NSConstantString"); >> - if (IdResolver.begin(ConstantString) == IdResolver.end()) >> - PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); >> } >> + // Create the internal type for the *StringMakeConstantString builtins. >> + DeclarationName ConstantString = >> &Context.Idents.get("__NSConstantString"); >> + if (IdResolver.begin(ConstantString) == IdResolver.end()) >> + PushOnScopeChains(Context.getCFConstantStringDecl(), TUScope); >> + >> 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: >> |-TypedefDecl 0x10b8131a8 <<invalid sloc>> <invalid sloc> implicit >> __NSConstantString 'struct __NSConstantString_tag' >> | `-RecordType 0x10b812f60 'struct __NSConstantString_tag' >> | `-CXXRecord 0x10b812eb8 '__NSConstantString_tag' >> >> // Initialize Microsoft "predefined C++ types". >> if (getLangOpts().MSVCCompat) { >> if (getLangOpts().CPlusPlus && >> >> Modified: cfe/trunk/lib/Serialization/ASTReader.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTReader.cpp Wed Feb 3 18:55:24 2016 >> @@ -6447,6 +6447,9 @@ static Decl *getPredefinedDecl(ASTContex >> case PREDEF_DECL_CF_CONSTANT_STRING_ID: >> return Context.getCFConstantStringDecl(); >> + >> + case PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID: >> + return Context.getCFConstantStringTagDecl(); >> } >> llvm_unreachable("PredefinedDeclIDs unknown enum value"); >> } >> >> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) >> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Wed Feb 3 18:55:24 2016 >> @@ -4154,6 +4154,8 @@ uint64_t ASTWriter::WriteASTCore(Sema &S >> PREDEF_DECL_MAKE_INTEGER_SEQ_ID); >> RegisterPredefDecl(Context.CFConstantStringTypeDecl, >> PREDEF_DECL_CF_CONSTANT_STRING_ID); >> + RegisterPredefDecl(Context.CFConstantStringTagDecl, >> + PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID); >> // Build a record containing all of the tentative definitions in this >> file, in >> // TentativeDefinitions order. Generally, this record will be empty for >> >> Modified: cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m >> URL: >> 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 >> >> <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> >> ============================================================================== >> --- cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m (original) >> +++ cfe/trunk/test/CodeGenObjC/2010-02-01-utf16-with-null.m Wed Feb 3 >> 18:55:24 2016 >> @@ -2,6 +2,6 @@ >> // rdar://7589850 <> >> // 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 >> -// 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" >> -// CHECK: @P = global i8* bitcast (%struct.__NSConstantString* >> @_unnamed_cfstring_ to i8*), align 4 >> +// 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" >> +// CHECK: @P = global i8* bitcast (%struct.__NSConstantString_tag* >> @_unnamed_cfstring_ to i8*), align 4 >> void *P = @"good\0bye"; >> >> Modified: cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m (original) >> +++ cfe/trunk/test/CodeGenObjC/arc-no-arc-exceptions.m Wed Feb 3 18:55:24 >> 2016 >> @@ -34,7 +34,7 @@ void test1(id x) { >> void NSLog(id, ...); >> // CHECK-LABEL: define void @test2( >> -// CHECK: invoke void (i8*, ...) @NSLog(i8* bitcast >> (%struct.__NSConstantString* @_unnamed_cfstring_ to i8*), i32* %{{.*}}) >> +// CHECK: invoke void (i8*, ...) @NSLog(i8* bitcast >> (%struct.__NSConstantString_tag* @_unnamed_cfstring_ to i8*), i32* %{{.*}}) >> // CHECK: to label %{{.*}} unwind label %{{.*}}, !clang.arc.no >> <http://clang.arc.no/>_objc_arc_exceptions ! >> // NO-METADATA-LABEL: define void @test2( >> // NO-METADATA-NOT: !clang.arc.no >> <http://clang.arc.no/>_objc_arc_exceptions >> >> Modified: cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m (original) >> +++ cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m Wed Feb 3 >> 18:55:24 2016 >> @@ -32,12 +32,11 @@ static inline void _inlineFunction() { >> @end >> // CHECK: @__CFConstantStringClassReference = common global [24 x i32] >> zeroinitializer, align 16 >> -// CHECK: @_unnamed_cfstring_{{.*}} = private constant >> %struct.__NSConstantString { i32* getelementptr inbounds ([24 x i32], [24 x >> i32]* @__CFConstantStringClassReference, i32 0, i32 0) >> +// CHECK: @_unnamed_cfstring_{{.*}} = private constant >> %struct.__NSConstantString_tag { i32* getelementptr inbounds ([24 x i32], >> [24 x i32]* @__CFConstantStringClassReference, i32 0, i32 0) >> // CHECK-LABEL: define internal void @_inlineFunction() >> // CHECK: [[ZERO:%.*]] = load %struct._class_t*, %struct._class_t** >> @"OBJC_CLASSLIST_REFERENCES_ >> // CHECK-NEXT: [[ONE:%.*]] = load i8*, i8** @OBJC_SELECTOR_REFERENCES_ >> // CHECK-NEXT: [[TWO:%.*]] = bitcast %struct._class_t* [[ZERO]] to i8* >> -// 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:%.*]]*)) >> +// 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:%.*]]*)) >> // CHECK-NEXT: ret void >> - >> >> Modified: cfe/trunk/test/Modules/Inputs/builtin.h >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/builtin.h?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/builtin.h?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/test/Modules/Inputs/builtin.h (original) >> +++ cfe/trunk/test/Modules/Inputs/builtin.h Wed Feb 3 18:55:24 2016 >> @@ -1,10 +1,7 @@ >> int i; >> int *p = &i; >> -#ifdef __OBJC__ >> void use_constant_string_builtins(void) { >> (void)__builtin___CFStringMakeConstantString(""); >> (void)__builtin___NSStringMakeConstantString(""); >> } >> -#endif >> - >> >> Modified: cfe/trunk/test/Modules/builtins.m >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/builtins.m?rev=259734&r1=259733&r2=259734&view=diff >> >> <http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/builtins.m?rev=259734&r1=259733&r2=259734&view=diff> >> ============================================================================== >> --- cfe/trunk/test/Modules/builtins.m (original) >> +++ cfe/trunk/test/Modules/builtins.m Wed Feb 3 18:55:24 2016 >> @@ -1,5 +1,7 @@ >> // RUN: rm -rf %t >> // RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules >> -fimplicit-module-maps -I %S/Inputs %s -verify >> +// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps >> -I %S/Inputs -x c %s -verify >> +// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps >> -I %S/Inputs -x objective-c++ %s -verify >> // RUN: rm -rf %t.pch.cache >> // 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 >> @@ -12,13 +14,13 @@ void use_constant_string_builtins1(void) >> (void)__builtin___NSStringMakeConstantString(""); >> } >> -@import builtin; >> +#include "builtin.h" >> int foo() { >> return __builtin_object_size(p, 0); >> } >> -@import builtin.sub; >> +#include "builtin_sub.h" >> int bar() { >> return __builtin_object_size(p, 0); >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits> >> > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits