]> granicus.if.org Git - clang/commitdiff
allow __func__ in objc methods.
authorChris Lattner <sabre@nondot.org>
Sat, 12 Jan 2008 19:32:28 +0000 (19:32 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 12 Jan 2008 19:32:28 +0000 (19:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@45915 91177308-0d34-0410-b5e6-96231b3b80d8

Sema/SemaExpr.cpp

index 1e81d5c24290b2fbd0b5dbfdd97cead5799b8bd2..73c1687d11e313666ee40288b65253bfa9633966 100644 (file)
@@ -122,16 +122,20 @@ Sema::ExprResult Sema::ActOnPreDefinedExpr(SourceLocation Loc,
   }
 
   // Verify that this is in a function context.
-  if (CurFunctionDecl == 0)
+  if (CurFunctionDecl == 0 && CurMethodDecl == 0)
     return Diag(Loc, diag::err_predef_outside_function);
   
   // Pre-defined identifiers are of type char[x], where x is the length of the
   // string.
-  llvm::APSInt Length(32);
-  Length = CurFunctionDecl->getIdentifier()->getLength() + 1;
+  unsigned Length;
+  if (CurFunctionDecl)
+    Length = CurFunctionDecl->getIdentifier()->getLength();
+  else
+    Length = CurMethodDecl->getSelector().getName().size();
   
+  llvm::APInt LengthI(32, Length + 1);
   QualType ResTy = Context.CharTy.getQualifiedType(QualType::Const);
-  ResTy = Context.getConstantArrayType(ResTy, Length, ArrayType::Normal, 0);
+  ResTy = Context.getConstantArrayType(ResTy, LengthI, ArrayType::Normal, 0);
   return new PreDefinedExpr(Loc, ResTy, IT);
 }