void TransferFunctions::VisitBinaryOperator(BinaryOperator *BO) { if (BO->getOpcode() == BO_Assign) { FindVarResult Var = findVar(BO->getLHS()); if (const VarDecl *VD = Var.getDecl()) vals[VD] = Initialized; } }
void ClassifyRefs::classify(const Expr *E, Class C) { // The result of a ?: could also be an lvalue. E = E->IgnoreParens(); if (const ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) { const Expr *TrueExpr = CO->getTrueExpr(); if (!isa<OpaqueValueExpr>(TrueExpr)) classify(TrueExpr, C); classify(CO->getFalseExpr(), C); return; } FindVarResult Var = findVar(E, DC); if (const DeclRefExpr *DRE = Var.getDeclRefExpr()) Classification[DRE] = std::max(Classification[DRE], C); }
void ClassifyRefs::classify(const Expr *E, Class C) { // The result of a ?: could also be an lvalue. E = E->IgnoreParens(); if (const ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) { classify(CO->getTrueExpr(), C); classify(CO->getFalseExpr(), C); return; } if (const BinaryConditionalOperator *BCO = dyn_cast<BinaryConditionalOperator>(E)) { classify(BCO->getFalseExpr(), C); return; } if (const OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E)) { classify(OVE->getSourceExpr(), C); return; } if (const MemberExpr *ME = dyn_cast<MemberExpr>(E)) { if (VarDecl *VD = dyn_cast<VarDecl>(ME->getMemberDecl())) { if (!VD->isStaticDataMember()) classify(ME->getBase(), C); } return; } if (const BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) { switch (BO->getOpcode()) { case BO_PtrMemD: case BO_PtrMemI: classify(BO->getLHS(), C); return; case BO_Comma: classify(BO->getRHS(), C); return; default: return; } } FindVarResult Var = findVar(E, DC); if (const DeclRefExpr *DRE = Var.getDeclRefExpr()) Classification[DRE] = std::max(Classification[DRE], C); }
void ClassifyRefs::classify(const Expr *E, Class C) { FindVarResult Var = findVar(E, DC); if (const DeclRefExpr *DRE = Var.getDeclRefExpr()) Classification[DRE] = std::max(Classification[DRE], C); }