On 11/04/16 16:18, Ben Langmuir wrote:

On Apr 3, 2016, at 10:57 AM, Yaron Keren <yaron.ke...@gmail.com <mailto: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++.
Ah, thanks for explaining. The name is a bit misleading and I thought this was just a objc builtin.


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
            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 <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
            
==============================================================================
            ---
            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("");
              }
              -@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


        _______________________________________________
        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






_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to