Have __func__ and siblings point to block's implementation function
name. Fixes radar 7860965. llvm-svn: 107044
This commit is contained in:
parent
0d94d7af78
commit
36ad0e99d5
|
@ -840,11 +840,22 @@ CodeGenFunction::GenerateBlockFunction(GlobalDecl GD, const BlockExpr *BExpr,
|
|||
|
||||
CGM.SetInternalFunctionAttributes(BD, Fn, FI);
|
||||
|
||||
QualType FnType(BlockFunctionType, 0);
|
||||
bool HasPrototype = (dyn_cast<FunctionProtoType>(BlockFunctionType) != 0);
|
||||
|
||||
IdentifierInfo *ID = &getContext().Idents.get(Name.getString());
|
||||
CurCodeDecl = FunctionDecl::Create(getContext(),
|
||||
getContext().getTranslationUnitDecl(),
|
||||
SourceLocation(), ID, FnType,
|
||||
0,
|
||||
FunctionDecl::Static,
|
||||
FunctionDecl::None,
|
||||
false, HasPrototype);
|
||||
|
||||
StartFunction(BD, ResultType, Fn, Args,
|
||||
BExpr->getBody()->getLocEnd());
|
||||
|
||||
CurFuncDecl = OuterFuncDecl;
|
||||
CurCodeDecl = BD;
|
||||
|
||||
// If we have a C++ 'this' reference, go ahead and force it into
|
||||
// existence now.
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -emit-llvm -o - %s | FileCheck %s
|
||||
// rdar: // 7860965
|
||||
|
||||
extern void PRINTF(const char *);
|
||||
extern void B(void (^)(void));
|
||||
|
||||
int main()
|
||||
{
|
||||
PRINTF(__func__);
|
||||
B(
|
||||
^{
|
||||
PRINTF(__func__);
|
||||
}
|
||||
);
|
||||
return 0; // not reached
|
||||
}
|
||||
|
||||
// CHECK: call void @PRINTF({{.*}}@__func__.__main_block_invoke_
|
Loading…
Reference in New Issue