r259734 - Fix predefine for __NSConstantString struct type
Yaron Keren via cfe-commits
cfe-commits at lists.llvm.org
Mon Apr 11 07:58:43 PDT 2016
If used only for Darwin, could this depend
on Target.getTriple().isOSDarwin() ?
2016-04-11 17:18 GMT+03:00 Ben Langmuir <blangmuir at apple.com>:
>
> On Apr 3, 2016, at 10:57 AM, Yaron Keren <yaron.keren at 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 <blangmuir at 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.keren at 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 at 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
>>>> 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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_objc_arc_exceptions
>>>> !
>>>> // NO-METADATA-LABEL: define void @test2(
>>>> // NO-METADATA-NOT: !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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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
>>>>
>>>> ==============================================================================
>>>> --- 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("");
>>>> }
>>>> - at import builtin;
>>>> +#include "builtin.h"
>>>> int foo() {
>>>> return __builtin_object_size(p, 0);
>>>> }
>>>> - at import builtin.sub;
>>>> +#include "builtin_sub.h"
>>>> int bar() {
>>>> return __builtin_object_size(p, 0);
>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160411/11a659ff/attachment-0001.html>
More information about the cfe-commits
mailing list