<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 11/04/16 16:18, Ben Langmuir wrote:<br>
    </div>
    <blockquote
      cite="mid:ABB13EA5-E0C8-45B9-9ED6-9E516B58B18A@apple.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <br class="">
      <div>
        <blockquote type="cite" class="">
          <div class="">On Apr 3, 2016, at 10:57 AM, Yaron Keren <<a
              moz-do-not-send="true" href="mailto:yaron.keren@gmail.com"
              class=""><a class="moz-txt-link-abbreviated" href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a></a>> wrote:</div>
          <br class="Apple-interchange-newline">
          <div class="">
            <div dir="rtl" class="">
              <div dir="ltr" class="">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. </div>
              <div dir="ltr" class="">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...</div>
              <div dir="ltr" class="">How is NSConstantString used
                outside ObjectiveC ?</div>
            </div>
          </div>
        </blockquote>
        <div><br class="">
        </div>
        <div>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++.</div>
      </div>
    </blockquote>
    Ah, thanks for explaining. The name is a bit misleading and I
    thought this was just a objc builtin.<br>
    <br>
    <blockquote
      cite="mid:ABB13EA5-E0C8-45B9-9ED6-9E516B58B18A@apple.com"
      type="cite">
      <div>
        <div><br class="">
        </div>
        <div>Sorry for the slow reply!</div>
        <br class="">
        <blockquote type="cite" class="">
          <div class="">
            <div dir="rtl" class="">
              <div dir="ltr" class=""><br class="">
              </div>
              <div dir="ltr" class=""><br class="">
              </div>
              <div dir="ltr" class=""><br class="">
              </div>
            </div>
            <div class="gmail_extra"><br class="">
              <div class="gmail_quote">
                <div dir="ltr" class="">2016-04-03 20:39 GMT+03:00 Ben
                  Langmuir <span dir="ltr" class=""><<a
                      moz-do-not-send="true"
                      href="mailto:blangmuir@apple.com" target="_blank"
                      class=""><a class="moz-txt-link-abbreviated" href="mailto:blangmuir@apple.com">blangmuir@apple.com</a></a>></span>:</div>
                <blockquote class="gmail_quote" style="margin:0
                  .8ex;border-left:1px #ccc solid;border-right:1px #ccc
                  solid;padding-left:1ex;padding-right:1ex">
                  <div style="word-wrap:break-word" 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="h5">
                        <div class="">
                          <div class=""><br class="">
                            <div class="">
                              <blockquote type="cite" class="">
                                <div class="">On Apr 3, 2016, at 5:21
                                  AM, Yaron Keren <<a
                                    moz-do-not-send="true"
                                    href="mailto:yaron.keren@gmail.com"
                                    target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:yaron.keren@gmail.com">yaron.keren@gmail.com</a></a>>
                                  wrote:</div>
                                <br class="">
                                <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
                                            moz-do-not-send="true"
                                            href="mailto:cfe-commits@lists.llvm.org"
                                            target="_blank" class=""><a class="moz-txt-link-abbreviated" href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a></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
                                            moz-do-not-send="true"
                                            href="http://llvm.org/viewvc/llvm-project?rev=259734&view=rev"
                                            rel="noreferrer"
                                            target="_blank" class=""><a class="moz-txt-link-freetext" href="http://llvm.org/viewvc/llvm-project?rev=259734&view=rev">http://llvm.org/viewvc/llvm-project?rev=259734&view=rev</a></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 moz-do-not-send="true"
                                            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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" 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">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></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
                                            moz-do-not-send="true"
                                            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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
                                            href="http://clang.arc.no/"
                                            target="_blank" class="">clang.arc.no</a>_objc_arc_exceptions
                                          !<br class="">
                                            // NO-METADATA-LABEL: define
                                          void @test2(<br class="">
                                            // NO-METADATA-NOT: !<a
                                            moz-do-not-send="true"
                                            href="http://clang.arc.no/"
                                            target="_blank" class="">clang.arc.no</a>_objc_arc_exceptions<br
                                            class="">
                                          <br class="">
                                          Modified:
                                          cfe/trunk/test/CodeGenObjC/tentative-cfconstantstring.m<br
                                            class="">
                                          URL: <a
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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
                                            moz-do-not-send="true"
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=""><a class="moz-txt-link-freetext" href="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</a></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 moz-do-not-send="true"
                                            href="mailto:cfe-commits@lists.llvm.org"
                                            target="_blank" class="">cfe-commits@lists.llvm.org</a><br
                                            class="">
                                          <a moz-do-not-send="true"
                                            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 moz-do-not-send="true"
                                          href="mailto:cfe-commits@lists.llvm.org"
                                          target="_blank" class="">cfe-commits@lists.llvm.org</a><br
                                          class="">
                                        <a moz-do-not-send="true"
                                          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>
                      </div>
                    </div>
                  </div>
                </blockquote>
              </div>
              <br class="">
            </div>
          </div>
        </blockquote>
      </div>
      <br class="">
    </blockquote>
    <br>
  </body>
</html>