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> 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_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 > > <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