[clang] Use CPlusPlus language option instead of Bool (#80975)
As it was pointed out in https://github.com/llvm/llvm-project/pull/80724, we should not be checking `getLangOpts().Bool` when determining something related to logical operators, since it only indicates that bool keyword is present, not which semantic logical operators have. As a side effect a missing `-Wpointer-bool-conversion` in OpenCL C was restored since like C23, OpenCL C has bool keyword but logical operators still return int.
This commit is contained in:
parent
72f04fa073
commit
8697bbe2d4
@ -16129,10 +16129,10 @@ static void CheckConditionalOperator(Sema &S, AbstractConditionalOperator *E,
|
||||
/// Check conversion of given expression to boolean.
|
||||
/// Input argument E is a logical expression.
|
||||
static void CheckBoolLikeConversion(Sema &S, Expr *E, SourceLocation CC) {
|
||||
// While C23 does have bool as a keyword, we still need to run the bool-like
|
||||
// conversion checks as bools are still not used as the return type from
|
||||
// "boolean" operators or as the input type for conditional operators.
|
||||
if (S.getLangOpts().Bool && !S.getLangOpts().C23)
|
||||
// Run the bool-like conversion checks only for C since there bools are
|
||||
// still not used as the return type from "boolean" operators or as the input
|
||||
// type for conditional operators.
|
||||
if (S.getLangOpts().CPlusPlus)
|
||||
return;
|
||||
if (E->IgnoreParenImpCasts()->getType()->isAtomicType())
|
||||
return;
|
||||
|
@ -118,6 +118,6 @@ kernel void pointer_ops(){
|
||||
bool b = !p;
|
||||
b = p==0;
|
||||
int i;
|
||||
b = !&i;
|
||||
b = !&i; // expected-warning {{address of 'i' will always evaluate to 'true'}}
|
||||
b = &i==(int *)1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user