forked from OSchip/llvm-project
Fix an error with the declaration of block parameters that depend
on previous block parameters that crept in as part of my captures work a month or so ago. llvm-svn: 128121
This commit is contained in:
parent
122a6304ef
commit
92d627e1b0
|
@ -782,11 +782,20 @@ diagnoseUncapturableValueReference(Sema &S, SourceLocation loc,
|
|||
// diagnose this.
|
||||
if (!S.CurContext->isFunctionOrMethod()) return CR_NoCapture;
|
||||
|
||||
// This particular madness can happen in ill-formed default
|
||||
// arguments; claim it's okay and let downstream code handle it.
|
||||
if (isa<ParmVarDecl>(var) &&
|
||||
S.CurContext == var->getDeclContext()->getParent())
|
||||
return CR_NoCapture;
|
||||
// Certain madnesses can happen with parameter declarations, which
|
||||
// we want to ignore.
|
||||
if (isa<ParmVarDecl>(var)) {
|
||||
// - If the parameter still belongs to the translation unit, then
|
||||
// we're actually just using one parameter in the declaration of
|
||||
// the next. This is useful in e.g. VLAs.
|
||||
if (isa<TranslationUnitDecl>(var->getDeclContext()))
|
||||
return CR_NoCapture;
|
||||
|
||||
// - This particular madness can happen in ill-formed default
|
||||
// arguments; claim it's okay and let downstream code handle it.
|
||||
if (S.CurContext == var->getDeclContext()->getParent())
|
||||
return CR_NoCapture;
|
||||
}
|
||||
|
||||
DeclarationName functionName;
|
||||
if (FunctionDecl *fn = dyn_cast<FunctionDecl>(var->getDeclContext()))
|
||||
|
|
|
@ -40,3 +40,8 @@ void test4() {
|
|||
int (^f)() = ^((x)) { }; // expected-error {{expected ')'}} expected-warning {{type specifier missing}} expected-note {{to match this}}
|
||||
}
|
||||
|
||||
// rdar://problem/9170609
|
||||
void test5_helper(void (^)(int, int[*]));
|
||||
void test5(void) {
|
||||
test5_helper(^(int n, int array[n]) {});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue