зеркало из https://github.com/microsoft/clang.git
Objective-C foreach selector elements must be lvalues.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55316 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
d1d66bcd69
Коммит
1fe379f0fa
|
@ -489,6 +489,8 @@ DIAG(err_collection_expr_type, ERROR,
|
|||
"collection expression type ('%0') is not a valid object")
|
||||
DIAG(err_selector_element_type, ERROR,
|
||||
"selector element type ('%0') is not a valid object")
|
||||
DIAG(err_selector_element_not_lvalue, ERROR,
|
||||
"selector element is not a valid lvalue")
|
||||
DIAG(err_toomany_element_decls, ERROR,
|
||||
"Only one element declaration is allowed")
|
||||
DIAG(warn_expected_implementation, WARNING,
|
||||
|
|
|
@ -562,11 +562,18 @@ Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc,
|
|||
return Diag(VD->getLocation(), diag::err_non_variable_decl_in_for);
|
||||
if (D->getNextDeclarator())
|
||||
return Diag(D->getLocation(), diag::err_toomany_element_decls);
|
||||
} else
|
||||
FirstType = static_cast<Expr*>(first)->getType();
|
||||
} else {
|
||||
Expr::isLvalueResult lval = cast<Expr>(First)->isLvalue(Context);
|
||||
|
||||
if (lval != Expr::LV_Valid)
|
||||
return Diag(First->getLocStart(), diag::err_selector_element_not_lvalue,
|
||||
First->getSourceRange());
|
||||
|
||||
FirstType = static_cast<Expr*>(first)->getType();
|
||||
}
|
||||
if (!Context.isObjCObjectPointerType(FirstType))
|
||||
Diag(ForLoc, diag::err_selector_element_type,
|
||||
FirstType.getAsString(), First->getSourceRange());
|
||||
FirstType.getAsString(), First->getSourceRange());
|
||||
}
|
||||
if (Second) {
|
||||
DefaultFunctionArrayConversion(Second);
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
// RUN: clang -fsyntax-only -verify %s
|
||||
|
||||
@class NSArray;
|
||||
|
||||
void f(NSArray *a)
|
||||
{
|
||||
for (int i in a); // expected-error{{selector element type ('int') is not a valid object}}
|
||||
for ((id)2 in a); // expected-error{{selector element is not a valid lvalue}}
|
||||
for (2 in a); // expected-error{{selector element is not a valid lvalue}}
|
||||
}
|
Загрузка…
Ссылка в новой задаче