*CI = dyn_cast<CallInst>(&I))
if (Function *F = CI->getCalledFunction())
if (F->isIntrinsic())
for (auto &Op : I.operands())
if (auto *V = dyn_cast_or_null<MetadataAsValue>(Op))
if (isa<MDNode>(V->getMetadata()))
return true;
return false;
}
Как бы вы отрефакторили этот кусок?🤔
Например я бы писал так: if (smth) { return false; } return true; вместо if (!smth) { return true; } return false; Так как это сделает меньше вложенности в случае большого количества условий
В вашем случае вот так примерно: static bool isReferencingMDNode(const Instruction &I) { if ((const auto *CI = dyn_cast<CallInst>(&I)) == nullptr) { return false; } if ((Function *F = CI->getCalledFunction()) == nullptr) { return false; } ... return true; }
Ещё можно классический do-break-while(false)
if ((auto a = 1) == 2) - невалидная конструкция
return not smth; Ну или !smth если больше нравится :)
Думал такая конструкция сработает. Жаль
может тогда заменить на if (auto a = 1; a == 2) {} ?
Тогда скоуп для a будет меньше ожидаемого
Обсуждают сегодня