[clang] Effect analysis: correctly detect `(f ? a : b)` as nonblocking when a and b are (PR #111224)
Doug Wyatt via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 4 18:38:14 PDT 2024
================
@@ -1048,15 +1048,14 @@ class Analyzer {
}
void checkIndirectCall(CallExpr *Call, QualType CalleeType) {
- auto *FPT =
- CalleeType->getAs<FunctionProtoType>(); // Null if FunctionType.
FunctionEffectKindSet CalleeEffects;
- if (FPT)
- CalleeEffects.insert(FPT->getFunctionEffects());
+ if (FunctionEffectsRef Effects = FunctionEffectsRef::get(CalleeType);
+ !Effects.empty())
+ CalleeEffects.insert(Effects);
auto Check1Effect = [&](FunctionEffect Effect, bool Inferring) {
- if (FPT == nullptr || Effect.shouldDiagnoseFunctionCall(
- /*direct=*/false, CalleeEffects))
+ if (Effect.shouldDiagnoseFunctionCall(
----------------
dougsonos wrote:
The check for a null FPT is/was superfluous; in that case the callee never has any declared effects and `shouldDiagnoseFunctionCall` will complain.
https://github.com/llvm/llvm-project/pull/111224
More information about the cfe-commits
mailing list