]> granicus.if.org Git - clang/commitdiff
Rename NamedDecl::getIdentifierName() to ::getNameAsCString() and make it
authorChris Lattner <sabre@nondot.org>
Mon, 24 Nov 2008 03:54:41 +0000 (03:54 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 24 Nov 2008 03:54:41 +0000 (03:54 +0000)
assert if the name is not an identifier.  Update callers to do the right
thing and avoid this method in unsafe cases.  This also fixes an objc
warning that was missing a space, and migrates a couple more to taking
IdentifierInfo and QualTypes instead of std::strings.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59936 91177308-0d34-0410-b5e6-96231b3b80d8

15 files changed:
Driver/RewriteBlocks.cpp
Driver/RewriteObjC.cpp
include/clang/AST/Decl.h
include/clang/Basic/DiagnosticKinds.def
lib/AST/DeclObjC.cpp
lib/AST/StmtDumper.cpp
lib/CodeGen/CGDebugInfo.cpp
lib/CodeGen/CGDecl.cpp
lib/CodeGen/CGObjCGNU.cpp
lib/CodeGen/CGObjCMac.cpp
lib/CodeGen/CodeGenFunction.cpp
lib/Sema/Sema.h
lib/Sema/SemaDeclObjC.cpp
test/SemaObjC/property-3.m
test/SemaObjC/property-4.m

index 11d7e36e6c1688e95ce59c1d07f4bf14f97b1016..d07fb2c7188e37a878b5eb7343d2ab723c3c251b 100644 (file)
@@ -618,7 +618,7 @@ void RewriteBlocks::SynthesizeBlockLiterals(SourceLocation FunLocStart,
 
 void RewriteBlocks::InsertBlockLiteralsWithinFunction(FunctionDecl *FD) {
   SourceLocation FunLocStart = FD->getTypeSpecStartLoc();
-  const char *FuncName = FD->getIdentifierName();
+  const char *FuncName = FD->getNameAsCString();
   
   SynthesizeBlockLiterals(FunLocStart, FuncName);
 }
@@ -675,13 +675,13 @@ std::string RewriteBlocks::SynthesizeBlockCall(CallExpr *Exp) {
   const BlockPointerType *CPT = 0;
   
   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Exp->getCallee())) {
-    closureName = DRE->getDecl()->getIdentifierName();
+    closureName = DRE->getDecl()->getNameAsCString();
     CPT = DRE->getType()->getAsBlockPointerType();
   } else if (BlockDeclRefExpr *CDRE = dyn_cast<BlockDeclRefExpr>(Exp->getCallee())) {
-    closureName = CDRE->getDecl()->getIdentifierName();
+    closureName = CDRE->getDecl()->getNameAsCString();
     CPT = CDRE->getType()->getAsBlockPointerType();
   } else if (MemberExpr *MExpr = dyn_cast<MemberExpr>(Exp->getCallee())) {
-    closureName = MExpr->getMemberDecl()->getIdentifierName();
+    closureName = MExpr->getMemberDecl()->getNameAsCString();
     CPT = MExpr->getType()->getAsBlockPointerType();
   } else {
     assert(1 && "RewriteBlockClass: Bad type");
@@ -1110,7 +1110,7 @@ void RewriteBlocks::HandleDeclInMainFile(Decl *D) {
           // Do the rewrite, using S.size() which contains the rewritten size.
           ReplaceText(CBE->getLocStart(), S.size(), Init.c_str(), Init.size());
           SynthesizeBlockLiterals(VD->getTypeSpecStartLoc(), 
-                                  VD->getIdentifierName());
+                                  VD->getNameAsCString());
         } else if (CastExpr *CE = dyn_cast<CastExpr>(VD->getInit())) {
           RewriteCastExpr(CE);
         }
index 3acb6dd94e68e7ff37baefced4f303510ea386fb..1ff778e24eeac65a16e11968e1194c0a5b3a35aa 100644 (file)
@@ -505,7 +505,7 @@ void RewriteObjC::HandleTopLevelDecl(Decl *D) {
     RewriteFunctionDecl(FD);
   } else if (VarDecl *FVD = dyn_cast<VarDecl>(D)) {
     // declared in <Foundation/NSString.h>
-    if (strcmp(FVD->getIdentifierName(), "_NSConstantStringClassReference") == 0) {
+    if (strcmp(FVD->getNameAsCString(), "_NSConstantStringClassReference") == 0) {
       ConstantStringClassReference = FVD;
       return;
     }
@@ -1085,13 +1085,13 @@ Stmt *RewriteObjC::RewriteObjCForCollectionStmt(ObjCForCollectionStmt *S,
     elementTypeAsString = ElementType.getAsString();
     buf += elementTypeAsString;
     buf += " ";
-    elementName = D->getIdentifierName();
+    elementName = D->getNameAsCString();
     buf += elementName;
     buf += ";\n\t";
   }
   else {
     DeclRefExpr *DR = cast<DeclRefExpr>(S->getElement());
-    elementName = DR->getDecl()->getIdentifierName();
+    elementName = DR->getDecl()->getNameAsCString();
     elementTypeAsString 
       = cast<ValueDecl>(DR->getDecl())->getType().getAsString();
   }
@@ -1703,7 +1703,7 @@ void RewriteObjC::SynthGetProtocolFunctionDecl() {
 
 void RewriteObjC::RewriteFunctionDecl(FunctionDecl *FD) {
   // declared in <objc/objc.h>
-  if (strcmp(FD->getIdentifierName(), "sel_registerName") == 0) {
+  if (strcmp(FD->getNameAsCString(), "sel_registerName") == 0) {
     SelGetUidFunctionDecl = FD;
     return;
   }
@@ -2308,8 +2308,8 @@ Stmt *RewriteObjC::RewriteObjCProtocolExpr(ObjCProtocolExpr *Exp) {
   // Create a call to objc_getProtocol("ProtocolName").
   llvm::SmallVector<Expr*, 8> ProtoExprs;
   QualType argType = Context->getPointerType(Context->CharTy);
-  ProtoExprs.push_back(new StringLiteral(Exp->getProtocol()->getIdentifierName(),
-                                       strlen(Exp->getProtocol()->getIdentifierName()),
+  ProtoExprs.push_back(new StringLiteral(Exp->getProtocol()->getNameAsCString(),
+                                       strlen(Exp->getProtocol()->getNameAsCString()),
                                        false, argType, SourceLocation(),
                                        SourceLocation()));
   CallExpr *ProtoExp = SynthesizeCallToFunctionDecl(GetProtocolFunctionDecl,
@@ -2352,7 +2352,7 @@ bool RewriteObjC::BufferContainsPPDirectives(const char *startBuf,
 void RewriteObjC::SynthesizeObjCInternalStruct(ObjCInterfaceDecl *CDecl,
                                                std::string &Result) {
   assert(CDecl && "Class missing in SynthesizeObjCInternalStruct");
-  assert(CDecl->getIdentifierName() && 
+  assert(CDecl->getNameAsCString() && 
          "Name missing in SynthesizeObjCInternalStruct");
   // Do not synthesize more than once.
   if (ObjCSynthesizedStructs.count(CDecl))
@@ -2932,15 +2932,15 @@ void RewriteObjC::RewriteObjCClassMetaData(ObjCImplementationDecl *IDecl,
   
   // Build _objc_method_list for class's instance methods if needed
   RewriteObjCMethodsMetaData(IDecl->instmeth_begin(), IDecl->instmeth_end(), 
-                             true, "", IDecl->getIdentifierName(), Result);
+                             true, "", IDecl->getNameAsCString(), Result);
   
   // Build _objc_method_list for class's class methods if needed
   RewriteObjCMethodsMetaData(IDecl->classmeth_begin(), IDecl->classmeth_end(),
-                             false, "", IDecl->getIdentifierName(), Result);
+                             false, "", IDecl->getNameAsCString(), Result);
     
   // Protocols referenced in class declaration?
   RewriteObjCProtocolsMetaData(CDecl->getReferencedProtocols(),
-                               "CLASS", CDecl->getIdentifierName(), Result);
+                               "CLASS", CDecl->getNameAsCString(), Result);
     
   
   // Declaration of class/meta-class metadata
@@ -3439,7 +3439,7 @@ void RewriteObjC::SynthesizeBlockLiterals(SourceLocation FunLocStart,
 
 void RewriteObjC::InsertBlockLiteralsWithinFunction(FunctionDecl *FD) {
   SourceLocation FunLocStart = FD->getTypeSpecStartLoc();
-  const char *FuncName = FD->getIdentifierName();
+  const char *FuncName = FD->getNameAsCString();
   
   SynthesizeBlockLiterals(FunLocStart, FuncName);
 }
@@ -3499,13 +3499,13 @@ Stmt *RewriteObjC::SynthesizeBlockCall(CallExpr *Exp) {
   const BlockPointerType *CPT = 0;
   
   if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Exp->getCallee())) {
-    closureName = DRE->getDecl()->getIdentifierName();
+    closureName = DRE->getDecl()->getNameAsCString();
     CPT = DRE->getType()->getAsBlockPointerType();
   } else if (BlockDeclRefExpr *CDRE = dyn_cast<BlockDeclRefExpr>(Exp->getCallee())) {
-    closureName = CDRE->getDecl()->getIdentifierName();
+    closureName = CDRE->getDecl()->getNameAsCString();
     CPT = CDRE->getType()->getAsBlockPointerType();
   } else if (MemberExpr *MExpr = dyn_cast<MemberExpr>(Exp->getCallee())) {
-    closureName = MExpr->getMemberDecl()->getIdentifierName();
+    closureName = MExpr->getMemberDecl()->getNameAsCString();
     CPT = MExpr->getType()->getAsBlockPointerType();
   } else {
     assert(1 && "RewriteBlockClass: Bad type");
@@ -3822,15 +3822,15 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp) {
          E = BlockByCopyDecls.end(); I != E; ++I) {
       if (isObjCType((*I)->getType())) {
         // FIXME: Conform to ABI ([[obj retain] autorelease]).
-        FD = SynthBlockInitFunctionDecl((*I)->getIdentifierName());
+        FD = SynthBlockInitFunctionDecl((*I)->getNameAsCString());
         Exp = new DeclRefExpr(FD, FD->getType(), SourceLocation());
       } else if (isBlockPointerType((*I)->getType())) {
-        FD = SynthBlockInitFunctionDecl((*I)->getIdentifierName());
+        FD = SynthBlockInitFunctionDecl((*I)->getNameAsCString());
         Arg = new DeclRefExpr(FD, FD->getType(), SourceLocation());
         Exp = new CStyleCastExpr(Context->VoidPtrTy, Arg, 
                                  Context->VoidPtrTy, SourceLocation(), SourceLocation());
       } else {
-        FD = SynthBlockInitFunctionDecl((*I)->getIdentifierName());
+        FD = SynthBlockInitFunctionDecl((*I)->getNameAsCString());
         Exp = new DeclRefExpr(FD, FD->getType(), SourceLocation());
       }
       InitExprs.push_back(Exp); 
@@ -3838,7 +3838,7 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp) {
     // Output all "by ref" declarations.
     for (llvm::SmallPtrSet<ValueDecl*,8>::iterator I = BlockByRefDecls.begin(), 
          E = BlockByRefDecls.end(); I != E; ++I) {
-      FD = SynthBlockInitFunctionDecl((*I)->getIdentifierName());
+      FD = SynthBlockInitFunctionDecl((*I)->getNameAsCString());
       Exp = new DeclRefExpr(FD, FD->getType(), SourceLocation());
       Exp = new UnaryOperator(Exp, UnaryOperator::AddrOf,
                               Context->getPointerType(Exp->getType()), 
@@ -4075,7 +4075,7 @@ void RewriteObjC::HandleDeclInMainFile(Decl *D) {
       GlobalVarDecl = VD;
       RewriteFunctionBodyOrGlobalInitializer(VD->getInit());
       SynthesizeBlockLiterals(VD->getTypeSpecStartLoc(), 
-                              VD->getIdentifierName());
+                              VD->getNameAsCString());
       GlobalVarDecl = 0;
 
       // This is needed for blocks.
index 46cbe7ab546675cf0d793144652b36c1a7c5a452..00bfac37eb936eaca6218145e4ee019f4db7e370 100644 (file)
@@ -79,15 +79,12 @@ public:
   /// name (C++ constructor, Objective-C selector, etc.).
   IdentifierInfo *getIdentifier() const { return Name.getAsIdentifierInfo(); }
 
-  /// getIdentifierName - Get the name of identifier for this
-  /// declaration as a string. If the declaration has no name, or if
-  /// the name is a special name (C++ constructor, Objective-C
-  /// selector, etc.), returns NULL.
-  const char *getIdentifierName() const {
-    if (IdentifierInfo *II = getIdentifier())
-      return II->getName();
-    else
-      return 0;
+  /// getNameAsCString - Get the name of identifier for this declaration as a
+  /// C string (const char*).  This requires that the declaration have a name
+  /// and that it be a simple identifier.
+  const char *getNameAsCString() const {
+    assert(getIdentifier() && "Name is not a simple identifier");
+    return getIdentifier()->getName();
   }
 
   /// getDeclName - Get the actual, stored name of the declaration,
index 249b92e6087286fbbef4e0fa0d4660fb4b25d2da..840100a5538c7cd08978a2e14c9dd8a1929302ee 100644 (file)
@@ -557,12 +557,12 @@ DIAG(error_nosetter_property_assignment, ERROR,
      "setter method is needed to assign to object using property"
      " assignment syntax")
 DIAG(warn_readonly_property, WARNING,
-     "attribute 'readonly' of property '%0' restricts attribute "
-     "'readwrite' of property inherited from '%1'")
+     "attribute 'readonly' of property %0 restricts attribute "
+     "'readwrite' of property inherited from %1")
 DIAG(warn_property_attribute, WARNING,
-     "property '%0' '%1' attribute does not match the property inherited from'%2' ")
+     "property %0 '%1' attribute does not match the property inherited from %2")
 DIAG(warn_property_type, WARNING,
-     "property type '%0' does not match property type inherited from '%1'")
+     "property type %0 does not match property type inherited from %1")
 
 /// C++ parser diagnostics
 DIAG(err_expected_unqualified_id, ERROR,
index e69526e241c8fd1573bfa38b653563150488e7ab..040a921908757d0bdced5f221fc2ab7df6922914 100644 (file)
@@ -758,11 +758,11 @@ unsigned ObjCMethodDecl::getSynthesizedMethodSize() const {
   // syntesized method name is a concatenation of -/+[class-name selector]
   // Get length of this name.
   unsigned length = 3;  // _I_ or _C_
-  length += strlen(getClassInterface()->getIdentifierName()) +1; // extra for _
+  length += getClassInterface()->getNameAsString().size()+1; // extra for _
   NamedDecl *MethodContext = getMethodContext();
   if (ObjCCategoryImplDecl *CID = 
       dyn_cast<ObjCCategoryImplDecl>(MethodContext))
-    length += strlen(CID->getIdentifierName()) +1;
+    length += CID->getNameAsString().size()+1;
   length += getSelector().getAsString().size(); // selector name
   return length; 
 }
index f7330c2a9dcfde5b4f65b73b1f9a19649a2d09f4..b73dc534dcff32034036df3a68bce020b5c4ff64 100644 (file)
@@ -203,7 +203,7 @@ void StmtDumper::DumpDeclarator(Decl *D) {
   if (TypedefDecl *localType = dyn_cast<TypedefDecl>(D)) {
     fprintf(F, "\"typedef %s %s\"",
             localType->getUnderlyingType().getAsString().c_str(),
-            localType->getIdentifierName());
+            localType->getNameAsString().c_str());
   } else if (ValueDecl *VD = dyn_cast<ValueDecl>(D)) {
     fprintf(F, "\"");
     // Emit storage class for vardecls.
@@ -304,8 +304,7 @@ void StmtDumper::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) {
   DumpExpr(Node);
 
   fprintf(F, " %sDecl='%s' %p", Node->getDecl()->getDeclKindName(), 
-                            Node->getDecl()->getIdentifierName(), 
-          (void*)Node->getDecl());
+          Node->getDecl()->getNameAsString().c_str(), (void*)Node->getDecl());
   if (Node->isFreeIvar())
     fprintf(F, " isFreeIvar");
 }
@@ -464,14 +463,14 @@ void StmtDumper::VisitObjCProtocolExpr(ObjCProtocolExpr *Node) {
   DumpExpr(Node);
   
   fprintf(F, " ");
-  fprintf(F, "%s", Node->getProtocol()->getIdentifierName());
+  fprintf(F, "%s", Node->getProtocol()->getNameAsString().c_str());
 }
 
 void StmtDumper::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) {
   DumpExpr(Node);
 
   fprintf(F, " Kind=PropertyRef Property=\"%s\"", 
-          Node->getProperty()->getIdentifierName());
+          Node->getProperty()->getNameAsString().c_str());
 }
 
 void StmtDumper::VisitObjCKVCRefExpr(ObjCKVCRefExpr *Node) {
index 55ce237e14f8e63dfb6a0024aaeb0e535a58b62e..444ee7c4005afef4fc7678792bcafd7561da901c 100644 (file)
@@ -152,7 +152,7 @@ llvm::DIType CGDebugInfo::CreateType(const TypedefType *Ty,
   
   // We don't set size information, but do specify where the typedef was
   // declared.
-  const char *TyName = Ty->getDecl()->getIdentifierName();
+  std::string TyName = Ty->getDecl()->getNameAsString();
   SourceLocation DefLoc = Ty->getDecl()->getLocation();
   llvm::DICompileUnit DefUnit = getOrCreateCompileUnit(DefLoc);
 
@@ -206,8 +206,7 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty,
   SourceManager &SM = M->getContext().getSourceManager();
 
   // Get overall information about the record type for the debug info.
-  const char *Name = Decl->getIdentifierName();
-  if (Name == 0) Name = "";
+  std::string Name = Decl->getNameAsString();
 
   llvm::DICompileUnit DefUnit = getOrCreateCompileUnit(Decl->getLocation());
   uint64_t Line = SM.getLogicalLineNumber(Decl->getLocation());
@@ -241,9 +240,8 @@ llvm::DIType CGDebugInfo::CreateType(const RecordType *Ty,
        E = Decl->field_end(); I != E; ++I, ++FieldNo) {
     FieldDecl *Field = *I;
     llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit);
-    
-    const char *FieldName = Field->getIdentifierName();
-    if (FieldName == 0) FieldName = "";
+
+    std::string FieldName = Field->getNameAsString();
 
     // Get the location for the field.
     SourceLocation FieldDefLoc = Field->getLocation();
@@ -301,8 +299,7 @@ llvm::DIType CGDebugInfo::CreateType(const EnumType *Ty,
   llvm::DIArray EltArray =
     DebugFactory.GetOrCreateArray(&Enumerators[0], Enumerators.size());
 
-  const char *EnumName 
-    = Decl->getIdentifierName() ? Decl->getIdentifierName() : "";
+  std::string EnumName = Decl->getNameAsString();
   SourceLocation DefLoc = Decl->getLocation();
   llvm::DICompileUnit DefUnit = getOrCreateCompileUnit(DefLoc);
   SourceManager &SM = M->getContext().getSourceManager();
@@ -516,7 +513,8 @@ void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
   llvm::DICompileUnit Unit = getOrCreateCompileUnit(Decl->getLocation());
   SourceManager &SM = M->getContext().getSourceManager();
   uint64_t LineNo = SM.getLogicalLineNumber(Decl->getLocation());
-  const char *Name = Decl->getIdentifierName();
+
+  std::string Name = Decl->getNameAsString();
   
   DebugFactory.CreateGlobalVariable(Unit, Name, Name, "", Unit, LineNo,
                                     getOrCreateType(Decl->getType(), Unit),
index 7a86d24801f1f1afd02da12cca19b07454ed78cc..77ef57750e64bb815ccb2a321e9e212e20dc928b 100644 (file)
@@ -146,7 +146,8 @@ void CodeGenFunction::EmitLocalBlockVarDecl(const VarDecl &D) {
     if (!Target.useGlobalsForAutomaticVariables()) {
       // A normal fixed sized variable becomes an alloca in the entry block.
       const llvm::Type *LTy = ConvertType(Ty);
-      llvm::AllocaInst * Alloc = CreateTempAlloca(LTy, D.getIdentifierName());
+      llvm::AllocaInst *Alloc =
+        CreateTempAlloca(LTy, D.getIdentifier()->getName());
       unsigned align = getContext().getTypeAlign(Ty);
       if (const AlignedAttr* AA = D.getAttr<AlignedAttr>())
         align = std::max(align, AA->getAlignment());
@@ -164,7 +165,8 @@ void CodeGenFunction::EmitLocalBlockVarDecl(const VarDecl &D) {
     // FIXME: VLA: Add VLA support. For now just make up enough to let
     // the compile go through.
     const llvm::Type *LTy = ConvertType(Ty);
-    llvm::AllocaInst * Alloc = CreateTempAlloca(LTy, D.getIdentifierName());
+    llvm::AllocaInst *Alloc = 
+      CreateTempAlloca(LTy, D.getIdentifier()->getName());
     DeclPtr = Alloc;
   }
   
index 9bcd816c6d8f083ffe73bdab1c0801c4b14e907f..32da770ba60e967f9b4af978ec510d96a9aab606 100644 (file)
@@ -570,7 +570,7 @@ llvm::Value *CGObjCGNU::GenerateProtocolRef(CGBuilderTy &Builder,
 
 void CGObjCGNU::GenerateProtocol(const ObjCProtocolDecl *PD) {
   ASTContext &Context = CGM.getContext();
-  const char *ProtocolName = PD->getIdentifierName();
+  std::string ProtocolName = PD->getNameAsString();
   llvm::SmallVector<std::string, 16> Protocols;
   for (ObjCProtocolDecl::protocol_iterator PI = PD->protocol_begin(),
        E = PD->protocol_end(); PI != E; ++PI)
@@ -625,8 +625,8 @@ void CGObjCGNU::GenerateProtocol(const ObjCProtocolDecl *PD) {
 }
 
 void CGObjCGNU::GenerateCategory(const ObjCCategoryImplDecl *OCD) {
-  const char *ClassName = OCD->getClassInterface()->getIdentifierName();
-  const char *CategoryName = OCD->getIdentifierName();
+  std::string ClassName = OCD->getClassInterface()->getNameAsString();
+  std::string CategoryName = OCD->getNameAsString();
   // Collect information about instance methods
   llvm::SmallVector<Selector, 16> InstanceMethodSels;
   llvm::SmallVector<llvm::Constant*, 16> InstanceMethodTypes;
@@ -682,14 +682,13 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) {
   // Get the superclass name.
   const ObjCInterfaceDecl * SuperClassDecl = 
     OID->getClassInterface()->getSuperClass();
-  const char * SuperClassName = NULL;
-  if (SuperClassDecl) {
-    SuperClassName = SuperClassDecl->getIdentifierName();
-  }
+  std::string SuperClassName;
+  if (SuperClassDecl)
+    SuperClassName = SuperClassDecl->getNameAsString();
 
   // Get the class name
   ObjCInterfaceDecl * ClassDecl = (ObjCInterfaceDecl*)OID->getClassInterface();
-  const char * ClassName = ClassDecl->getIdentifierName();
+  std::string ClassName = ClassDecl->getNameAsString();
 
   // Get the size of instances.  For runtimes that support late-bound instances
   // this should probably be something different (size just of instance
@@ -758,7 +757,7 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) {
 
   // Get the superclass pointer.
   llvm::Constant *SuperClass;
-  if (SuperClassName) {
+  if (!SuperClassName.empty()) {
     SuperClass = MakeConstantString(SuperClassName, ".super_class_name");
   } else {
     SuperClass = llvm::ConstantPointerNull::get(
@@ -778,8 +777,9 @@ void CGObjCGNU::GenerateClass(const ObjCImplementationDecl *OID) {
       NULLPtr, 0x2L, /*name*/"", 0, Zeros[0], GenerateIvarList(
         empty, empty, empty), ClassMethodList, NULLPtr);
   // Generate the class structure
-  llvm::Constant *ClassStruct = GenerateClassStructure(MetaClassStruct,
-      SuperClass, 0x1L, ClassName, 0,
+  llvm::Constant *ClassStruct =
+    GenerateClassStructure(MetaClassStruct, SuperClass, 0x1L,
+                           ClassName.c_str(), 0,
       llvm::ConstantInt::get(llvm::Type::Int32Ty, instanceSize), IvarList,
       MethodList, GenerateProtocolList(Protocols));
   // Add class structure to list to be added to the symtab later
index f9a4d7792573b6b80553347febea88c64b14aed2..975e386c705316a2dbcf44275b6ed66e49ae930f 100644 (file)
@@ -664,7 +664,7 @@ llvm::Constant *CGObjCMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) {
   // over.
   LazySymbols.insert(&CGM.getContext().Idents.get("Protocol"));
 
-  const char *ProtocolName = PD->getIdentifierName();
+  const char *ProtocolName = PD->getNameAsCString();
 
   // Construct method lists.
   std::vector<llvm::Constant*> InstanceMethods, ClassMethods;
@@ -1076,7 +1076,7 @@ static bool IsClassHidden(const ObjCInterfaceDecl *ID) {
 void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) {
   DefinedSymbols.insert(ID->getIdentifier());
 
-  const char *ClassName = ID->getIdentifierName();
+  std::string ClassName = ID->getNameAsString();
   // FIXME: Gross
   ObjCInterfaceDecl *Interface = 
     const_cast<ObjCInterfaceDecl*>(ID->getClassInterface());
@@ -1169,7 +1169,6 @@ llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
                                          llvm::Constant *Protocols,
                                          const llvm::Type *InterfaceTy,
                                          const ConstantVector &Methods) {
-  const char *ClassName = ID->getIdentifierName();
   unsigned Flags = eClassFlags_Meta;
   unsigned Size = CGM.getTargetData().getABITypeSize(ObjCTypes.ClassTy);
 
@@ -1215,7 +1214,7 @@ llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
                                                    Values);
 
   std::string Name("\01L_OBJC_METACLASS_");
-  Name += ClassName;
+  Name += ID->getNameAsCString();
 
   // Check for a forward reference.
   llvm::GlobalVariable *GV = CGM.getModule().getGlobalVariable(Name);
index b56b050c144374efe856d01c4145d01f7ae7df7c..534adfe5bb4968e13b06e9aa77ea434aec35e62c 100644 (file)
@@ -121,7 +121,8 @@ void CodeGenFunction::StartFunction(const Decl *D, QualType RetTy,
   if (CGDebugInfo *DI = CGM.getDebugInfo()) {
     DI->setLocation(StartLoc);
     if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
-      DI->EmitFunctionStart(FD->getIdentifierName(), RetTy, CurFn, Builder);
+      DI->EmitFunctionStart(FD->getIdentifier()->getName(),
+                            RetTy, CurFn, Builder);
     } else {
       // Just use LLVM function name.
       DI->EmitFunctionStart(Fn->getName().c_str(), 
index de588c58fb8300fcf81cad424e1412d5c44e32d7..1b37051a7b96daacd8e48c355911f2e06d03552b 100644 (file)
@@ -1029,7 +1029,7 @@ public:
                                    unsigned &Attributes);
   void DiagnosePropertyMismatch(ObjCPropertyDecl *Property, 
                                 ObjCPropertyDecl *SuperProperty,
-                                const char *Name);
+                                const IdentifierInfo *Name);
   void ComparePropertiesInBaseAndSuper(ObjCInterfaceDecl *IDecl);
   
   void MergeProtocolPropertiesIntoClass(ObjCInterfaceDecl *IDecl,
index 64fd6c515d7fa85928332ae62c3d5958056eacaf..9141cb5b9e5616aebb6b7481c4fbcf5371198ea4 100644 (file)
@@ -242,7 +242,7 @@ Sema::FindProtocolDeclaration(bool WarnOnDeclarations,
 void
 Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property, 
                                ObjCPropertyDecl *SuperProperty,
-                               const char *inheritedName) {
+                               const IdentifierInfo *inheritedName) {
   ObjCPropertyDecl::PropertyAttributeKind CAttr = 
   Property->getPropertyAttributes();
   ObjCPropertyDecl::PropertyAttributeKind SAttr = 
@@ -250,31 +250,31 @@ Sema::DiagnosePropertyMismatch(ObjCPropertyDecl *Property,
   if ((CAttr & ObjCPropertyDecl::OBJC_PR_readonly)
       && (SAttr & ObjCPropertyDecl::OBJC_PR_readwrite))
     Diag(Property->getLocation(), diag::warn_readonly_property)
-      << Property->getName() << inheritedName;
+      << Property->getDeclName() << inheritedName;
   if ((CAttr & ObjCPropertyDecl::OBJC_PR_copy)
       != (SAttr & ObjCPropertyDecl::OBJC_PR_copy))
     Diag(Property->getLocation(), diag::warn_property_attribute)
-      << Property->getName() << "copy" << inheritedName;
+      << Property->getDeclName() << "copy" << inheritedName;
   else if ((CAttr & ObjCPropertyDecl::OBJC_PR_retain)
            != (SAttr & ObjCPropertyDecl::OBJC_PR_retain))
     Diag(Property->getLocation(), diag::warn_property_attribute)
-      << Property->getName() << "retain" << inheritedName;
+      << Property->getDeclName() << "retain" << inheritedName;
   
   if ((CAttr & ObjCPropertyDecl::OBJC_PR_nonatomic)
       != (SAttr & ObjCPropertyDecl::OBJC_PR_nonatomic))
     Diag(Property->getLocation(), diag::warn_property_attribute)
-      << Property->getName() << "atomic" << inheritedName;
+      << Property->getDeclName() << "atomic" << inheritedName;
   if (Property->getSetterName() != SuperProperty->getSetterName())
     Diag(Property->getLocation(), diag::warn_property_attribute)
-      << Property->getName() << "setter" << inheritedName; 
+      << Property->getDeclName() << "setter" << inheritedName; 
   if (Property->getGetterName() != SuperProperty->getGetterName())
     Diag(Property->getLocation(), diag::warn_property_attribute)
-      << Property->getName() << "getter" << inheritedName;
+      << Property->getDeclName() << "getter" << inheritedName;
   
   if (Context.getCanonicalType(Property->getType()) != 
           Context.getCanonicalType(SuperProperty->getType()))
     Diag(Property->getLocation(), diag::warn_property_type)
-      << Property->getType().getAsString() << inheritedName;
+      << Property->getType() << inheritedName;
   
 }
 
@@ -297,7 +297,7 @@ Sema::ComparePropertiesInBaseAndSuper(ObjCInterfaceDecl *IDecl) {
       ObjCPropertyDecl *PDecl = (*I);
       if (SuperPDecl->getIdentifier() == PDecl->getIdentifier())
           DiagnosePropertyMismatch(PDecl, SuperPDecl, 
-                                   SDecl->getIdentifierName());
+                                   SDecl->getIdentifier());
     }
   }
 }
@@ -307,8 +307,7 @@ Sema::ComparePropertiesInBaseAndSuper(ObjCInterfaceDecl *IDecl) {
 /// of properties for current class if it is not there already.
 void
 Sema::MergeOneProtocolPropertiesIntoClass(ObjCInterfaceDecl *IDecl,
-                                          ObjCProtocolDecl *PDecl)
-{
+                                          ObjCProtocolDecl *PDecl) {
   llvm::SmallVector<ObjCPropertyDecl*, 16> mergeProperties;
   for (ObjCProtocolDecl::classprop_iterator P = PDecl->classprop_begin(),
        E = PDecl->classprop_end(); P != E; ++P) {
@@ -324,7 +323,7 @@ Sema::MergeOneProtocolPropertiesIntoClass(ObjCInterfaceDecl *IDecl,
       mergeProperties.push_back(Pr);
     else
       // Property protocol already exist in class. Diagnose any mismatch.
-      DiagnosePropertyMismatch((*CP), Pr, PDecl->getIdentifierName());
+      DiagnosePropertyMismatch((*CP), Pr, PDecl->getIdentifier());
     }
   IDecl->mergeProperties(&mergeProperties[0], mergeProperties.size());
 }
index b22059c238234e90502bead5c5036210b8aaa27c..ed1d1bd244360b69b0b19618b45a36cba1cef9c7 100644 (file)
@@ -9,6 +9,6 @@
 @end
 
 @interface NOW : I
-@property (readonly, retain) id d1; // expected-warning {{attribute 'readonly' of property 'd1' restricts attribute 'readwrite' of property inherited from 'I'}} expected-warning {{property 'd1' 'copy' attribute does not match the property inherited from'I'}}
+@property (readonly, retain) id d1; // expected-warning {{attribute 'readonly' of property 'd1' restricts attribute 'readwrite' of property inherited from 'I'}} expected-warning {{property 'd1' 'copy' attribute does not match the property inherited from 'I'}}
 @property (readwrite, copy) I* d2; // expected-warning {{property type 'I *' does not match property type inherited from 'I'}}
 @end
index b5a8f8b1ccb32de212f5dfb7fb3586283ad0fe78..0fcc67d05d0d0e71a196c54b797c6b89d244fe37 100644 (file)
@@ -24,7 +24,7 @@
    int newO;
    int oldO;
 }
-@property (retain) id MayCauseError;  // expected-warning {{property 'MayCauseError' 'copy' attribute does not match the property inherited from'GCObject'}} \
-                                     expected-warning {{property 'MayCauseError' 'copy' attribute does not match the property inherited from'ProtocolObject'}}
+@property (retain) id MayCauseError;  // expected-warning {{property 'MayCauseError' 'copy' attribute does not match the property inherited from 'GCObject'}} \
+                                     expected-warning {{property 'MayCauseError' 'copy' attribute does not match the property inherited from 'ProtocolObject'}}
 @end