[cfe-commits] r110988 - in /cfe/trunk: lib/CodeGen/CGBlocks.cpp test/CodeGen/func-in-block.c
Fariborz Jahanian
fjahanian at apple.com
Thu Aug 12 17:19:55 PDT 2010
Author: fjahanian
Date: Thu Aug 12 19:19:55 2010
New Revision: 110988
URL: http://llvm.org/viewvc/llvm-project?rev=110988&view=rev
Log:
Make use of __func__ in a block actually refer to
block's helper function. Fixes radar 7860965.
Modified:
cfe/trunk/lib/CodeGen/CGBlocks.cpp
cfe/trunk/test/CodeGen/func-in-block.c
Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=110988&r1=110987&r2=110988&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Thu Aug 12 19:19:55 2010
@@ -790,7 +790,11 @@
Name.getString(), &CGM.getModule());
CGM.SetInternalFunctionAttributes(BD, Fn, FI);
-
+ StartFunction(BD, ResultType, Fn, Args,
+ BExpr->getBody()->getLocEnd());
+
+ CurFuncDecl = OuterFuncDecl;
+
QualType FnType(BlockFunctionType, 0);
bool HasPrototype = isa<FunctionProtoType>(BlockFunctionType);
@@ -802,12 +806,19 @@
FunctionDecl::Static,
FunctionDecl::None,
false, HasPrototype);
+ if (FunctionProtoType *FT = dyn_cast<FunctionProtoType>(FnType)) {
+ const FunctionDecl *CFD = dyn_cast<FunctionDecl>(CurCodeDecl);
+ FunctionDecl *FD = const_cast<FunctionDecl *>(CFD);
+ llvm::SmallVector<ParmVarDecl*, 16> Params;
+ for (unsigned i = 0, e = FT->getNumArgs(); i != e; ++i)
+ Params.push_back(ParmVarDecl::Create(getContext(), FD,
+ SourceLocation(), 0,
+ FT->getArgType(i), /*TInfo=*/0,
+ VarDecl::None, VarDecl::None, 0));
+ FD->setParams(Params.data(), Params.size());
+ }
+
- StartFunction(BD, ResultType, Fn, Args,
- BExpr->getBody()->getLocEnd());
-
- CurFuncDecl = OuterFuncDecl;
-
// If we have a C++ 'this' reference, go ahead and force it into
// existence now.
if (Info.CXXThisRef) {
Modified: cfe/trunk/test/CodeGen/func-in-block.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/func-in-block.c?rev=110988&r1=110987&r2=110988&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/func-in-block.c (original)
+++ cfe/trunk/test/CodeGen/func-in-block.c Thu Aug 12 19:19:55 2010
@@ -15,4 +15,5 @@
return 0; // not reached
}
+// CHECK: @__func__.__main_block_invoke_0 = private constant [22 x i8] c"__main_block_invoke_0\00"
// CHECK: call void @PRINTF({{.*}}@__func__.__main_block_invoke_
More information about the cfe-commits
mailing list