From: Fariborz Jahanian Date: Thu, 17 Jan 2008 01:36:09 +0000 (+0000) Subject: Computed length of a __func__ identifier used in an objective-c method correctly, X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=847794a7620bfd5fda09ee06bc0205d30e17e2aa;p=clang Computed length of a __func__ identifier used in an objective-c method correctly, when creating its type. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46109 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/AST/Decl.cpp b/AST/Decl.cpp index bf1ffee832..d80b5eea80 100644 --- a/AST/Decl.cpp +++ b/AST/Decl.cpp @@ -549,6 +549,15 @@ ObjCMethodDecl *ObjCProtocolDecl::lookupClassMethod(Selector Sel) { return NULL; } +int ObjCMethodDecl::getSynthesizedSelectorSize() const { + // syntesized method name is a concatenation of -/+[class-name selector] + // Get length of this name. + int length = 4; // for '+' or '-', '[', space in between and ']' + length += getSelector().getName().size(); // for selector name. + length += strlen(getMethodContext()->getName()); // for its class name + return length; +} + ObjCInterfaceDecl *const ObjCMethodDecl::getClassInterface() const { if (ObjCInterfaceDecl *ID = dyn_cast(MethodContext)) return ID; diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index c88985f75a..81376a6500 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -131,7 +131,7 @@ Sema::ExprResult Sema::ActOnPreDefinedExpr(SourceLocation Loc, if (CurFunctionDecl) Length = CurFunctionDecl->getIdentifier()->getLength(); else - Length = CurMethodDecl->getSelector().getName().size(); + Length = CurMethodDecl->getSynthesizedSelectorSize(); llvm::APInt LengthI(32, Length + 1); QualType ResTy = Context.CharTy.getQualifiedType(QualType::Const); diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 34abdb06a8..f46f324e57 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -116,6 +116,7 @@ public: ObjCInterfaceDecl *const getClassInterface() const; Selector getSelector() const { return SelName; } + int getSynthesizedSelectorSize() const; QualType getResultType() const { return MethodDeclType; } // Iterator access to formal parameters.