diff options
author | Steve Naroff <snaroff@apple.com> | 2009-04-15 19:33:47 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-04-15 19:33:47 +0000 |
commit | cd9c51433c06705645d1ee5a13da3c9a72d7d025 (patch) | |
tree | 887850cb369f23e87bfdd290e2ab503109a858eb /lib/Sema/SemaChecking.cpp | |
parent | 50c314cb045fef8d442426deb00b75be6f2a1ce3 (diff) |
Fix <rdar://problem/6786597> varargs not supported for Blocks under clang.
Teach Sema::SemaBuiltinVAStart() about blocks.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69201 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaChecking.cpp')
-rw-r--r-- | lib/Sema/SemaChecking.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index d2aec65cef..827f63cfcd 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -209,7 +209,9 @@ bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) { // Determine whether the current function is variadic or not. bool isVariadic; - if (getCurFunctionDecl()) { + if (CurBlock) + isVariadic = CurBlock->isVariadic; + else if (getCurFunctionDecl()) { if (FunctionProtoType* FTP = dyn_cast<FunctionProtoType>(getCurFunctionDecl()->getType())) isVariadic = FTP->isVariadic(); @@ -234,7 +236,9 @@ bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) { // FIXME: This isn't correct for methods (results in bogus warning). // Get the last formal in the current function. const ParmVarDecl *LastArg; - if (FunctionDecl *FD = getCurFunctionDecl()) + if (CurBlock) + LastArg = *(CurBlock->TheDecl->param_end()-1); + else if (FunctionDecl *FD = getCurFunctionDecl()) LastArg = *(FD->param_end()-1); else LastArg = *(getCurMethodDecl()->param_end()-1); |