[cfe-commits] r84439 - /cfe/trunk/lib/CodeGen/CGObjCMac.cpp

Daniel Dunbar daniel at zuster.org
Sun Oct 18 13:48:59 PDT 2009


Author: ddunbar
Date: Sun Oct 18 15:48:59 2009
New Revision: 84439

URL: http://llvm.org/viewvc/llvm-project?rev=84439&view=rev
Log:
Twinify CGObjCMac, this simplifies the code and should reduce std::string
trashing.

Modified:
    cfe/trunk/lib/CodeGen/CGObjCMac.cpp

Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=84439&r1=84438&r2=84439&view=diff

==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Sun Oct 18 15:48:59 2009
@@ -900,7 +900,7 @@
 
   /// EmitPropertyList - Emit the given property list. The return
   /// value has type PropertyListPtrTy.
-  llvm::Constant *EmitPropertyList(const std::string &Name,
+  llvm::Constant *EmitPropertyList(llvm::Twine Name,
                                    const Decl *Container,
                                    const ObjCContainerDecl *OCD,
                                    const ObjCCommonTypesHelper &ObjCTypes);
@@ -924,7 +924,7 @@
   /// \param Align - The alignment for the variable, or 0.
   /// \param AddToUsed - Whether the variable should be added to
   /// "llvm.used".
-  llvm::GlobalVariable *CreateMetadataVar(const std::string &Name,
+  llvm::GlobalVariable *CreateMetadataVar(llvm::Twine Name,
                                           llvm::Constant *Init,
                                           const char *Section,
                                           unsigned Align,
@@ -1025,7 +1025,7 @@
 
   /// EmitMethodList - Emit the method list for the given
   /// implementation. The return value has type MethodListPtrTy.
-  llvm::Constant *EmitMethodList(const std::string &Name,
+  llvm::Constant *EmitMethodList(llvm::Twine Name,
                                  const char *Section,
                                  const ConstantVector &Methods);
 
@@ -1040,7 +1040,7 @@
   ///  - begin, end: The method list to output.
   ///
   /// The return value has type MethodDescriptionListPtrTy.
-  llvm::Constant *EmitMethodDescList(const std::string &Name,
+  llvm::Constant *EmitMethodDescList(llvm::Twine Name,
                                      const char *Section,
                                      const ConstantVector &Methods);
 
@@ -1066,7 +1066,7 @@
 
   /// EmitProtocolList - Generate the list of referenced
   /// protocols. The return value has type ProtocolListPtrTy.
-  llvm::Constant *EmitProtocolList(const std::string &Name,
+  llvm::Constant *EmitProtocolList(llvm::Twine Name,
                                    ObjCProtocolDecl::protocol_iterator begin,
                                    ObjCProtocolDecl::protocol_iterator end);
 
@@ -1197,7 +1197,7 @@
 
   /// EmitMethodList - Emit the method list for the given
   /// implementation. The return value has type MethodListnfABITy.
-  llvm::Constant *EmitMethodList(const std::string &Name,
+  llvm::Constant *EmitMethodList(llvm::Twine Name,
                                  const char *Section,
                                  const ConstantVector &Methods);
   /// EmitIvarList - Emit the ivar list for the given
@@ -1224,7 +1224,7 @@
 
   /// EmitProtocolList - Generate the list of referenced
   /// protocols. The return value has type ProtocolListPtrTy.
-  llvm::Constant *EmitProtocolList(const std::string &Name,
+  llvm::Constant *EmitProtocolList(llvm::Twine Name,
                                    ObjCProtocolDecl::protocol_iterator begin,
                                    ObjCProtocolDecl::protocol_iterator end);
 
@@ -1616,8 +1616,6 @@
   // resolved. Investigate. Its also wasteful to look this up over and over.
   LazySymbols.insert(&CGM.getContext().Idents.get("Protocol"));
 
-  const char *ProtocolName = PD->getNameAsCString();
-
   // Construct method lists.
   std::vector<llvm::Constant*> InstanceMethods, ClassMethods;
   std::vector<llvm::Constant*> OptInstanceMethods, OptClassMethods;
@@ -1647,17 +1645,15 @@
   Values[0] = EmitProtocolExtension(PD, OptInstanceMethods, OptClassMethods);
   Values[1] = GetClassName(PD->getIdentifier());
   Values[2] =
-    EmitProtocolList("\01L_OBJC_PROTOCOL_REFS_" + PD->getNameAsString(),
+    EmitProtocolList("\01L_OBJC_PROTOCOL_REFS_" + PD->getName(),
                      PD->protocol_begin(),
                      PD->protocol_end());
   Values[3] =
-    EmitMethodDescList("\01L_OBJC_PROTOCOL_INSTANCE_METHODS_"
-                       + PD->getNameAsString(),
+    EmitMethodDescList("\01L_OBJC_PROTOCOL_INSTANCE_METHODS_" + PD->getName(),
                        "__OBJC,__cat_inst_meth,regular,no_dead_strip",
                        InstanceMethods);
   Values[4] =
-    EmitMethodDescList("\01L_OBJC_PROTOCOL_CLASS_METHODS_"
-                       + PD->getNameAsString(),
+    EmitMethodDescList("\01L_OBJC_PROTOCOL_CLASS_METHODS_" + PD->getName(),
                        "__OBJC,__cat_cls_meth,regular,no_dead_strip",
                        ClassMethods);
   llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ProtocolTy,
@@ -1672,7 +1668,7 @@
       new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolTy, false,
                                llvm::GlobalValue::InternalLinkage,
                                Init,
-                               std::string("\01L_OBJC_PROTOCOL_")+ProtocolName);
+                               "\01L_OBJC_PROTOCOL_" + PD->getName());
     Entry->setSection("__OBJC,__protocol,regular,no_dead_strip");
     Entry->setAlignment(4);
     // FIXME: Is this necessary? Why only for protocol?
@@ -1694,7 +1690,7 @@
       new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolTy, false,
                                llvm::GlobalValue::ExternalLinkage,
                                0,
-                               "\01L_OBJC_PROTOCOL_" + PD->getNameAsString());
+                               "\01L_OBJC_PROTOCOL_" + PD->getName());
     Entry->setSection("__OBJC,__protocol,regular,no_dead_strip");
     Entry->setAlignment(4);
     // FIXME: Is this necessary? Why only for protocol?
@@ -1722,16 +1718,14 @@
   Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size);
   Values[1] =
     EmitMethodDescList("\01L_OBJC_PROTOCOL_INSTANCE_METHODS_OPT_"
-                       + PD->getNameAsString(),
+                       + PD->getName(),
                        "__OBJC,__cat_inst_meth,regular,no_dead_strip",
                        OptInstanceMethods);
   Values[2] =
-    EmitMethodDescList("\01L_OBJC_PROTOCOL_CLASS_METHODS_OPT_"
-                       + PD->getNameAsString(),
+    EmitMethodDescList("\01L_OBJC_PROTOCOL_CLASS_METHODS_OPT_" + PD->getName(),
                        "__OBJC,__cat_cls_meth,regular,no_dead_strip",
                        OptClassMethods);
-  Values[3] = EmitPropertyList("\01L_OBJC_$_PROP_PROTO_LIST_" +
-                               PD->getNameAsString(),
+  Values[3] = EmitPropertyList("\01L_OBJC_$_PROP_PROTO_LIST_" + PD->getName(),
                                0, PD, ObjCTypes);
 
   // Return null if no extension bits are used.
@@ -1743,7 +1737,7 @@
     llvm::ConstantStruct::get(ObjCTypes.ProtocolExtensionTy, Values);
 
   // No special section, but goes in llvm.used
-  return CreateMetadataVar("\01L_OBJC_PROTOCOLEXT_" + PD->getNameAsString(),
+  return CreateMetadataVar("\01L_OBJC_PROTOCOLEXT_" + PD->getName(),
                            Init,
                            0, 0, true);
 }
@@ -1756,7 +1750,7 @@
   };
 */
 llvm::Constant *
-CGObjCMac::EmitProtocolList(const std::string &Name,
+CGObjCMac::EmitProtocolList(llvm::Twine Name,
                             ObjCProtocolDecl::protocol_iterator begin,
                             ObjCProtocolDecl::protocol_iterator end) {
   std::vector<llvm::Constant*> ProtocolRefs;
@@ -1800,7 +1794,7 @@
   struct _objc_property[prop_count];
   };
 */
-llvm::Constant *CGObjCCommonMac::EmitPropertyList(const std::string &Name,
+llvm::Constant *CGObjCCommonMac::EmitPropertyList(llvm::Twine Name,
                                        const Decl *Container,
                                        const ObjCContainerDecl *OCD,
                                        const ObjCCommonTypesHelper &ObjCTypes) {
@@ -1854,7 +1848,7 @@
                                    Desc);
 }
 
-llvm::Constant *CGObjCMac::EmitMethodDescList(const std::string &Name,
+llvm::Constant *CGObjCMac::EmitMethodDescList(llvm::Twine Name,
                                               const char *Section,
                                               const ConstantVector &Methods) {
   // Return null for empty list.
@@ -1894,8 +1888,10 @@
   const ObjCInterfaceDecl *Interface = OCD->getClassInterface();
   const ObjCCategoryDecl *Category =
     Interface->FindCategoryDeclaration(OCD->getIdentifier());
-  std::string ExtName(Interface->getNameAsString() + "_" +
-                      OCD->getNameAsString());
+
+  llvm::SmallString<256> ExtName;
+  llvm::raw_svector_ostream(ExtName) << Interface->getName() << '_'
+                                     << OCD->getName();
 
   std::vector<llvm::Constant*> InstanceMethods, ClassMethods;
   for (ObjCCategoryImplDecl::instmeth_iterator
@@ -1914,17 +1910,16 @@
   Values[1] = GetClassName(Interface->getIdentifier());
   LazySymbols.insert(Interface->getIdentifier());
   Values[2] =
-    EmitMethodList(std::string("\01L_OBJC_CATEGORY_INSTANCE_METHODS_") +
-                   ExtName,
+    EmitMethodList("\01L_OBJC_CATEGORY_INSTANCE_METHODS_" + ExtName.str(),
                    "__OBJC,__cat_inst_meth,regular,no_dead_strip",
                    InstanceMethods);
   Values[3] =
-    EmitMethodList(std::string("\01L_OBJC_CATEGORY_CLASS_METHODS_") + ExtName,
+    EmitMethodList("\01L_OBJC_CATEGORY_CLASS_METHODS_" + ExtName.str(),
                    "__OBJC,__cat_cls_meth,regular,no_dead_strip",
                    ClassMethods);
   if (Category) {
     Values[4] =
-      EmitProtocolList(std::string("\01L_OBJC_CATEGORY_PROTOCOLS_") + ExtName,
+      EmitProtocolList("\01L_OBJC_CATEGORY_PROTOCOLS_" + ExtName.str(),
                        Category->protocol_begin(),
                        Category->protocol_end());
   } else {
@@ -1934,7 +1929,7 @@
 
   // If there is no category @interface then there can be no properties.
   if (Category) {
-    Values[6] = EmitPropertyList(std::string("\01l_OBJC_$_PROP_LIST_")+ExtName,
+    Values[6] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ExtName.str(),
                                  OCD, Category, ObjCTypes);
   } else {
     Values[6] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy);
@@ -1944,7 +1939,7 @@
                                                    Values);
 
   llvm::GlobalVariable *GV =
-    CreateMetadataVar(std::string("\01L_OBJC_CATEGORY_")+ExtName, Init,
+    CreateMetadataVar("\01L_OBJC_CATEGORY_" + ExtName.str(), Init,
                       "__OBJC,__category,regular,no_dead_strip",
                       4, true);
   DefinedCategories.push_back(GV);
@@ -1988,7 +1983,7 @@
   ObjCInterfaceDecl *Interface =
     const_cast<ObjCInterfaceDecl*>(ID->getClassInterface());
   llvm::Constant *Protocols =
-    EmitProtocolList("\01L_OBJC_CLASS_PROTOCOLS_" + ID->getNameAsString(),
+    EmitProtocolList("\01L_OBJC_CLASS_PROTOCOLS_" + ID->getName(),
                      Interface->protocol_begin(),
                      Interface->protocol_end());
   unsigned Flags = eClassFlags_Factory;
@@ -2046,7 +2041,7 @@
   Values[ 5] = llvm::ConstantInt::get(ObjCTypes.LongTy, Size);
   Values[ 6] = EmitIvarList(ID, false);
   Values[ 7] =
-    EmitMethodList("\01L_OBJC_INSTANCE_METHODS_" + ID->getNameAsString(),
+    EmitMethodList("\01L_OBJC_INSTANCE_METHODS_" + ID->getName(),
                    "__OBJC,__inst_meth,regular,no_dead_strip",
                    InstanceMethods);
   // cache is always NULL.
@@ -2058,7 +2053,7 @@
                                                    Values);
 
   llvm::GlobalVariable *GV =
-    CreateMetadataVar(std::string("\01L_OBJC_CLASS_")+ClassName, Init,
+    CreateMetadataVar("\01L_OBJC_CLASS_" + ClassName, Init,
                       "__OBJC,__class,regular,no_dead_strip",
                       4, true);
   DefinedClasses.push_back(GV);
@@ -2174,7 +2169,7 @@
   std::vector<llvm::Constant*> Values(3);
   Values[0] = llvm::ConstantInt::get(ObjCTypes.IntTy, Size);
   Values[1] = BuildIvarLayout(ID, false);
-  Values[2] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ID->getNameAsString(),
+  Values[2] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ID->getName(),
                                ID, ID->getClassInterface(), ObjCTypes);
 
   // Return null if no extension bits are used.
@@ -2183,7 +2178,7 @@
 
   llvm::Constant *Init =
     llvm::ConstantStruct::get(ObjCTypes.ClassExtensionTy, Values);
-  return CreateMetadataVar("\01L_OBJC_CLASSEXT_" + ID->getNameAsString(),
+  return CreateMetadataVar("\01L_OBJC_CLASSEXT_" + ID->getName(),
                            Init, "__OBJC,__class_ext,regular,no_dead_strip",
                            4, true);
 }
@@ -2243,12 +2238,11 @@
 
   llvm::GlobalVariable *GV;
   if (ForClass)
-    GV = CreateMetadataVar("\01L_OBJC_CLASS_VARIABLES_" + ID->getNameAsString(),
+    GV = CreateMetadataVar("\01L_OBJC_CLASS_VARIABLES_" + ID->getName(),
                            Init, "__OBJC,__class_vars,regular,no_dead_strip",
                            4, true);
   else
-    GV = CreateMetadataVar("\01L_OBJC_INSTANCE_VARIABLES_"
-                           + ID->getNameAsString(),
+    GV = CreateMetadataVar("\01L_OBJC_INSTANCE_VARIABLES_" + ID->getName(),
                            Init, "__OBJC,__instance_vars,regular,no_dead_strip",
                            4, true);
   return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.IvarListPtrTy);
@@ -2286,7 +2280,7 @@
   return llvm::ConstantStruct::get(ObjCTypes.MethodTy, Method);
 }
 
-llvm::Constant *CGObjCMac::EmitMethodList(const std::string &Name,
+llvm::Constant *CGObjCMac::EmitMethodList(llvm::Twine Name,
                                           const char *Section,
                                           const ConstantVector &Methods) {
   // Return null for empty list.
@@ -2325,7 +2319,7 @@
 }
 
 llvm::GlobalVariable *
-CGObjCCommonMac::CreateMetadataVar(const std::string &Name,
+CGObjCCommonMac::CreateMetadataVar(llvm::Twine Name,
                                    llvm::Constant *Init,
                                    const char *Section,
                                    unsigned Align,
@@ -2985,7 +2979,8 @@
 
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_CLASS_NAME_",
-                          llvm::ConstantArray::get(VMContext, Ident->getName()),
+                          llvm::ConstantArray::get(VMContext,
+                                                   Ident->getNameStart()),
                               "__TEXT,__cstring,cstring_literals",
                               1, true);
 
@@ -3434,7 +3429,8 @@
 
   if (!Entry)
     Entry = CreateMetadataVar("\01L_OBJC_PROP_NAME_ATTR_",
-                          llvm::ConstantArray::get(VMContext, Ident->getName()),
+                          llvm::ConstantArray::get(VMContext,
+                                                   Ident->getNameStart()),
                               "__TEXT,__cstring,cstring_literals",
                               1, true);
 
@@ -3506,11 +3502,11 @@
     llvm::raw_svector_ostream OS(Asm);
     for (llvm::SetVector<IdentifierInfo*>::iterator I = LazySymbols.begin(),
            e = LazySymbols.end(); I != e; ++I)
-      OS << "\t.lazy_reference .objc_class_name_" << (*I)->getName() << "\n";
+      OS << "\t.lazy_reference .objc_class_name_" << (*I)->getNameStr() << "\n";
     for (llvm::SetVector<IdentifierInfo*>::iterator I = DefinedSymbols.begin(),
            e = DefinedSymbols.end(); I != e; ++I)
-      OS << "\t.objc_class_name_" << (*I)->getName() << "=0\n"
-         << "\t.globl .objc_class_name_" << (*I)->getName() << "\n";
+      OS << "\t.objc_class_name_" << (*I)->getNameStr() << "=0\n"
+         << "\t.globl .objc_class_name_" << (*I)->getNameStr() << "\n";
 
     CGM.getModule().setModuleInlineAsm(OS.str());
   }
@@ -4256,7 +4252,7 @@
   const ObjCInterfaceDecl *OID = ID->getClassInterface();
   assert(OID && "CGObjCNonFragileABIMac::BuildClassRoTInitializer");
   Values[ 6] = EmitProtocolList("\01l_OBJC_CLASS_PROTOCOLS_$_"
-                                + OID->getNameAsString(),
+                                + OID->getName(),
                                 OID->protocol_begin(),
                                 OID->protocol_end());
 
@@ -4269,9 +4265,8 @@
   if (flags & CLS_META)
     Values[ 9] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy);
   else
-    Values[ 9] =
-      EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ID->getNameAsString(),
-                       ID, ID->getClassInterface(), ObjCTypes);
+    Values[ 9] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ID->getName(),
+                                  ID, ID->getClassInterface(), ObjCTypes);
   llvm::Constant *Init = llvm::ConstantStruct::get(ObjCTypes.ClassRonfABITy,
                                                    Values);
   llvm::GlobalVariable *CLASS_RO_GV =
@@ -4532,16 +4527,16 @@
   const ObjCCategoryDecl *Category =
     Interface->FindCategoryDeclaration(OCD->getIdentifier());
   if (Category) {
-    std::string ExtName(Interface->getNameAsString() + "_$_" +
-                        OCD->getNameAsString());
+    llvm::SmallString<256> ExtName;
+    llvm::raw_svector_ostream(ExtName) << Interface->getName() << "_$_"
+                                       << OCD->getName();
     Values[4] = EmitProtocolList("\01l_OBJC_CATEGORY_PROTOCOLS_$_"
-                                 + Interface->getNameAsString() + "_$_"
-                                 + Category->getNameAsString(),
+                                 + Interface->getName() + "_$_"
+                                 + Category->getName(),
                                  Category->protocol_begin(),
                                  Category->protocol_end());
-    Values[5] =
-      EmitPropertyList(std::string("\01l_OBJC_$_PROP_LIST_") + ExtName,
-                       OCD, Category, ObjCTypes);
+    Values[5] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + ExtName.str(),
+                                 OCD, Category, ObjCTypes);
   } else {
     Values[4] = llvm::Constant::getNullValue(ObjCTypes.ProtocolListnfABIPtrTy);
     Values[5] = llvm::Constant::getNullValue(ObjCTypes.PropertyListPtrTy);
@@ -4593,10 +4588,9 @@
 ///   struct _objc_method method_list[method_count];
 /// }
 ///
-llvm::Constant *CGObjCNonFragileABIMac::EmitMethodList(
-  const std::string &Name,
-  const char *Section,
-  const ConstantVector &Methods) {
+llvm::Constant *CGObjCNonFragileABIMac::EmitMethodList(llvm::Twine Name,
+                                                       const char *Section,
+                                                const ConstantVector &Methods) {
   // Return null for empty list.
   if (Methods.empty())
     return llvm::Constant::getNullValue(ObjCTypes.MethodListnfABIPtrTy);
@@ -4742,7 +4736,7 @@
     new llvm::GlobalVariable(CGM.getModule(), Init->getType(), false,
                              llvm::GlobalValue::InternalLinkage,
                              Init,
-                             Prefix + OID->getNameAsString());
+                             Prefix + OID->getName());
   GV->setAlignment(
     CGM.getTargetData().getPrefTypeAlignment(Init->getType()));
   GV->setSection("__DATA, __objc_const");
@@ -4763,7 +4757,7 @@
       new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy, false,
                                llvm::GlobalValue::ExternalLinkage,
                                0,
-                               "\01l_OBJC_PROTOCOL_$_" + PD->getNameAsString());
+                               "\01l_OBJC_PROTOCOL_$_" + PD->getName());
     Entry->setSection("__DATA,__datacoal_nt,coalesced");
   }
 
@@ -4795,8 +4789,6 @@
   if (Entry && Entry->hasInitializer())
     return Entry;
 
-  const char *ProtocolName = PD->getNameAsCString();
-
   // Construct method lists.
   std::vector<llvm::Constant*> InstanceMethods, ClassMethods;
   std::vector<llvm::Constant*> OptInstanceMethods, OptClassMethods;
@@ -4826,28 +4818,27 @@
   // isa is NULL
   Values[0] = llvm::Constant::getNullValue(ObjCTypes.ObjectPtrTy);
   Values[1] = GetClassName(PD->getIdentifier());
-  Values[2] = EmitProtocolList(
-    "\01l_OBJC_$_PROTOCOL_REFS_" + PD->getNameAsString(),
-    PD->protocol_begin(),
-    PD->protocol_end());
+  Values[2] = EmitProtocolList("\01l_OBJC_$_PROTOCOL_REFS_" + PD->getName(),
+                               PD->protocol_begin(),
+                               PD->protocol_end());
 
   Values[3] = EmitMethodList("\01l_OBJC_$_PROTOCOL_INSTANCE_METHODS_"
-                             + PD->getNameAsString(),
+                             + PD->getName(),
                              "__DATA, __objc_const",
                              InstanceMethods);
   Values[4] = EmitMethodList("\01l_OBJC_$_PROTOCOL_CLASS_METHODS_"
-                             + PD->getNameAsString(),
+                             + PD->getName(),
                              "__DATA, __objc_const",
                              ClassMethods);
   Values[5] = EmitMethodList("\01l_OBJC_$_PROTOCOL_INSTANCE_METHODS_OPT_"
-                             + PD->getNameAsString(),
+                             + PD->getName(),
                              "__DATA, __objc_const",
                              OptInstanceMethods);
   Values[6] = EmitMethodList("\01l_OBJC_$_PROTOCOL_CLASS_METHODS_OPT_"
-                             + PD->getNameAsString(),
+                             + PD->getName(),
                              "__DATA, __objc_const",
                              OptClassMethods);
-  Values[7] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + PD->getNameAsString(),
+  Values[7] = EmitPropertyList("\01l_OBJC_$_PROP_LIST_" + PD->getName(),
                                0, PD, ObjCTypes);
   uint32_t Size =
     CGM.getTargetData().getTypeAllocSize(ObjCTypes.ProtocolnfABITy);
@@ -4862,10 +4853,9 @@
     Entry->setInitializer(Init);
   } else {
     Entry =
-      new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy, false,
-                               llvm::GlobalValue::WeakAnyLinkage,
-                               Init,
-                               std::string("\01l_OBJC_PROTOCOL_$_")+ProtocolName);
+      new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABITy,
+                               false, llvm::GlobalValue::WeakAnyLinkage, Init,
+                               "\01l_OBJC_PROTOCOL_$_" + PD->getName());
     Entry->setAlignment(
       CGM.getTargetData().getPrefTypeAlignment(ObjCTypes.ProtocolnfABITy));
     Entry->setSection("__DATA,__datacoal_nt,coalesced");
@@ -4875,13 +4865,10 @@
 
   // Use this protocol meta-data to build protocol list table in section
   // __DATA, __objc_protolist
-  llvm::GlobalVariable *PTGV = new llvm::GlobalVariable(
-    CGM.getModule(),
-    ObjCTypes.ProtocolnfABIPtrTy, false,
-    llvm::GlobalValue::WeakAnyLinkage,
-    Entry,
-    std::string("\01l_OBJC_LABEL_PROTOCOL_$_")
-    +ProtocolName);
+  llvm::GlobalVariable *PTGV =
+    new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.ProtocolnfABIPtrTy,
+                             false, llvm::GlobalValue::WeakAnyLinkage, Entry,
+                             "\01l_OBJC_LABEL_PROTOCOL_$_" + PD->getName());
   PTGV->setAlignment(
     CGM.getTargetData().getPrefTypeAlignment(ObjCTypes.ProtocolnfABIPtrTy));
   PTGV->setSection("__DATA, __objc_protolist, coalesced, no_dead_strip");
@@ -4899,9 +4886,9 @@
 /// @endcode
 ///
 llvm::Constant *
-CGObjCNonFragileABIMac::EmitProtocolList(const std::string &Name,
-                                         ObjCProtocolDecl::protocol_iterator begin,
-                                         ObjCProtocolDecl::protocol_iterator end) {
+CGObjCNonFragileABIMac::EmitProtocolList(llvm::Twine Name,
+                                      ObjCProtocolDecl::protocol_iterator begin,
+                                      ObjCProtocolDecl::protocol_iterator end) {
   std::vector<llvm::Constant*> ProtocolRefs;
 
   // Just return null for empty protocol lists
@@ -4909,10 +4896,12 @@
     return llvm::Constant::getNullValue(ObjCTypes.ProtocolListnfABIPtrTy);
 
   // FIXME: We shouldn't need to do this lookup here, should we?
-  llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name, true);
+  llvm::SmallString<256> TmpName;
+  Name.toVector(TmpName);
+  llvm::GlobalVariable *GV =
+    CGM.getModule().getGlobalVariable(TmpName.str(), true);
   if (GV)
-    return llvm::ConstantExpr::getBitCast(GV,
-                                          ObjCTypes.ProtocolListnfABIPtrTy);
+    return llvm::ConstantExpr::getBitCast(GV, ObjCTypes.ProtocolListnfABIPtrTy);
 
   for (; begin != end; ++begin)
     ProtocolRefs.push_back(GetProtocolRef(*begin));  // Implemented???
@@ -5683,8 +5672,8 @@
         new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false,
                                  llvm::GlobalValue::ExternalLinkage,
                                  0,
-                                 (std::string("OBJC_EHTYPE_$_") +
-                                  ID->getIdentifier()->getName()));
+                                 ("OBJC_EHTYPE_$_" +
+                                  ID->getIdentifier()->getNameStr()));
   }
 
   // Otherwise we need to either make a new entry or fill in the
@@ -5715,8 +5704,8 @@
     Entry = new llvm::GlobalVariable(CGM.getModule(), ObjCTypes.EHTypeTy, false,
                                      llvm::GlobalValue::WeakAnyLinkage,
                                      Init,
-                                     (std::string("OBJC_EHTYPE_$_") +
-                                      ID->getIdentifier()->getName()));
+                                     ("OBJC_EHTYPE_$_" +
+                                      ID->getIdentifier()->getNameStr()));
   }
 
   if (CGM.getLangOptions().getVisibilityMode() == LangOptions::Hidden)





More information about the cfe-commits mailing list