mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 12:26:52 +08:00
When deciding whether to complain about the type of a boolean condition, use
the type of the expression *after* array/function decay. llvm-svn: 120895
This commit is contained in:
@@ -9037,12 +9037,12 @@ bool Sema::CheckBooleanCondition(Expr *&E, SourceLocation Loc) {
|
||||
return Diag(E->getLocStart(), diag::err_invalid_use_of_bound_member_func)
|
||||
<< E->getSourceRange();
|
||||
|
||||
QualType T = E->getType();
|
||||
|
||||
if (getLangOptions().CPlusPlus)
|
||||
return CheckCXXBooleanCondition(E); // C++ 6.4p4
|
||||
|
||||
DefaultFunctionArrayLvalueConversion(E);
|
||||
|
||||
QualType T = E->getType();
|
||||
if (!T->isScalarType()) // C99 6.8.4.1p1
|
||||
return Diag(Loc, diag::err_typecheck_statement_requires_scalar)
|
||||
<< T << E->getSourceRange();
|
||||
|
||||
@@ -157,3 +157,12 @@ void test21(volatile struct Test21 *ptr) {
|
||||
(test21_help(), *ptr); // expected-error {{incomplete type 'struct Test21' where a complete type is required}}
|
||||
(*ptr, test21_help()); // expected-error {{incomplete type 'struct Test21' where a complete type is required}}
|
||||
}
|
||||
|
||||
// Make sure we do function/array decay.
|
||||
void test22() {
|
||||
if ("help")
|
||||
(void) 0;
|
||||
|
||||
if (test22)
|
||||
(void) 0;
|
||||
}
|
||||
|
||||
@@ -42,3 +42,12 @@ void test2() {
|
||||
if (int *ip = ip) {
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure we do function/array decay.
|
||||
void test3() {
|
||||
if ("help")
|
||||
(void) 0;
|
||||
|
||||
if (test3)
|
||||
(void) 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user