From: Chris Lattner Date: Thu, 23 Apr 2009 07:18:56 +0000 (+0000) Subject: fix a problem producing debug info with global blocks. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4863db4266d066617a1e5ad7c0f3f28c7995c61b;p=clang fix a problem producing debug info with global blocks. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69875 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index d22cdab70d..122d9b9433 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -490,6 +490,11 @@ public: SourceLocation getLocation() const { return Loc; } void setLocation(SourceLocation L) { Loc = L; } + // FIXME: The logic for computing the value of a predefined expr should go + // into a method here that takes the inner-most code decl (a block, function + // or objc method) that the expr lives in. This would allow sema and codegen + // to be consistent for things like sizeof(__func__) etc. + virtual SourceRange getSourceRange() const { return SourceRange(Loc); } static bool classof(const Stmt *T) { diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp index a042c6a4ed..8ab4a44f40 100644 --- a/lib/CodeGen/CGBlocks.cpp +++ b/lib/CodeGen/CGBlocks.cpp @@ -672,8 +672,9 @@ CodeGenFunction::GenerateBlockFunction(const BlockExpr *BExpr, CGM.SetInternalFunctionAttributes(BD, Fn, FI); - StartFunction(OuterFuncDecl, ResultType, Fn, Args, + StartFunction(BD, ResultType, Fn, Args, BExpr->getBody()->getLocEnd()); + CurFuncDecl = OuterFuncDecl; CurCodeDecl = BD; EmitStmt(BExpr->getBody()); FinishFunction(cast(BExpr->getBody())->getRBracLoc());