void BlockStmt::verify() { Expr::verify(); if (astTag != E_BlockStmt) { INT_FATAL(this, "BlockStmt::verify. Bad astTag"); } if (body.parent != this) INT_FATAL(this, "BlockStmt::verify. Bad body.parent"); for_alist(expr, body) { if (expr->parentExpr != this) INT_FATAL(this, "BlockStmt::verify. Bad body.expr->parentExpr"); } if (blockInfo != NULL && blockInfo->parentExpr != this) { INT_FATAL(this, "BlockStmt::verify. Bad blockInfo->parentExpr"); } if (useList != NULL && useList->parentExpr != this) { INT_FATAL(this, "BlockStmt::verify. Bad useList->parentExpr"); } if (byrefVars) { if (byrefVars->parentExpr != this) { INT_FATAL(this, "BlockStmt::verify. Bad byrefVars->parentExpr"); } if (!byrefVars->isPrimitive(PRIM_ACTUALS_LIST)) { INT_FATAL(this, "BlockStmt::byrefVars not PRIM_ACTUALS_LIST"); } for_actuals(varExp, byrefVars) { if (!isSymExpr(varExp) && !isUnresolvedSymExpr(varExp)) { INT_FATAL(this, "BlockStmt::verify. Bad expression kind in byrefVars"); } } } verifyNotOnList(useList); verifyNotOnList(byrefVars); verifyNotOnList(blockInfo); }
void ForallIntents::verifyFI(BlockStmt* parentB) { Expr* parentE = (Expr*)parentB; int nv = numVars(); INT_ASSERT((int)(fiVars.size()) == nv); INT_ASSERT((int)(fIntents.size()) == nv); INT_ASSERT((int)(riSpecs.size()) == nv); for (int i = 0; i < nv; i++) { Expr* fiVar = fiVars[i]; if (SymExpr* fiVarSE = toSymExpr(fiVar)) { INT_ASSERT(isVarSymbol(fiVarSE->symbol()) || isArgSymbol(fiVarSE->symbol())); // no modules, fns, etc. } else { // fiVars[i] is either resolved or unresolved sym expr; never NULL. INT_ASSERT(isUnresolvedSymExpr(fiVar)); // These should be resolved during scopeResolve. INT_ASSERT(!normalized); } verifyNotOnList(fiVar); INT_ASSERT(fiVar->parentExpr == parentE); Expr* ri = riSpecs[i]; INT_ASSERT(isReduce(i) == !!ri); if (ri) { // ri can be UnresolvedSymExpr, SymExpr, CallExpr, ... (?) verifyNotOnList(ri); INT_ASSERT(ri->parentExpr == parentE); } } INT_ASSERT(!iterRec || iterRec->parentExpr == parentE); INT_ASSERT(!leadIdx || leadIdx->parentExpr == parentE); INT_ASSERT(!leadIdxCopy || leadIdxCopy->parentExpr == parentE); verifyNotOnList(iterRec); verifyNotOnList(leadIdx); verifyNotOnList(leadIdxCopy); // ForallIntents are gone during resolve(). INT_ASSERT(!resolved); }