forked from OSchip/llvm-project
Disallow captured arrays in blocks as well. Radar 7438948.
llvm-svn: 92677
This commit is contained in:
parent
7dafa0d048
commit
8971a86538
|
@ -1723,6 +1723,8 @@ def err_unexpected_interface : Error<
|
||||||
def err_ref_non_value : Error<"%0 does not refer to a value">;
|
def err_ref_non_value : Error<"%0 does not refer to a value">;
|
||||||
def err_ref_vm_type : Error<
|
def err_ref_vm_type : Error<
|
||||||
"cannot refer to declaration with a variably modified type inside block">;
|
"cannot refer to declaration with a variably modified type inside block">;
|
||||||
|
def err_ref_array_type : Error<
|
||||||
|
"cannot refer to declaration with an array type inside block">;
|
||||||
def err_property_not_found : Error<
|
def err_property_not_found : Error<
|
||||||
"property %0 not found on object of type %1">;
|
"property %0 not found on object of type %1">;
|
||||||
def err_duplicate_property : Error<
|
def err_duplicate_property : Error<
|
||||||
|
|
|
@ -1537,6 +1537,12 @@ Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS,
|
||||||
return ExprError();
|
return ExprError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (VD->getType()->isArrayType()) {
|
||||||
|
Diag(Loc, diag::err_ref_array_type);
|
||||||
|
Diag(D->getLocation(), diag::note_declared_at);
|
||||||
|
return ExprError();
|
||||||
|
}
|
||||||
|
|
||||||
MarkDeclarationReferenced(Loc, VD);
|
MarkDeclarationReferenced(Loc, VD);
|
||||||
QualType ExprTy = VD->getType().getNonReferenceType();
|
QualType ExprTy = VD->getType().getNonReferenceType();
|
||||||
// The BlocksAttr indicates the variable is bound by-reference.
|
// The BlocksAttr indicates the variable is bound by-reference.
|
||||||
|
|
|
@ -208,3 +208,11 @@ void test20() {
|
||||||
(void)(vm+1); // expected-error {{cannot refer to declaration with a variably modified type inside block}}
|
(void)(vm+1); // expected-error {{cannot refer to declaration with a variably modified type inside block}}
|
||||||
}();
|
}();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test21() {
|
||||||
|
int a[7]; // expected-note {{declared at}}
|
||||||
|
a[1] = 1;
|
||||||
|
^{
|
||||||
|
(void)a[1]; // expected-error {{cannot refer to declaration with an array type inside block}}
|
||||||
|
}();
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue