anchor.diff:      boolExpressionVerifier.checkForNonBoolCondition(condition,
           whyNotPromoted: whyNotPromoted);
   
  -    Expression thenExpression = node.thenExpression;
  -    InferenceContext.setTypeFromNode(thenExpression, node);
  +    InferenceContext.setTypeFromNode(node.thenExpression, node);
   
       if (flow != null) {
         flow.conditional_thenBegin(condition, node);
  -      checkUnreachableNode(thenExpression);
  -    }
  -    thenExpression.accept(this);
  -    nullSafetyDeadCodeVerifier.flowEnd(thenExpression);
  +      checkUnreachableNode(node.thenExpression);
  +    }
  +    node.thenExpression.accept(this);
  +    nullSafetyDeadCodeVerifier.flowEnd(node.thenExpression);
   
       Expression elseExpression = node.elseExpression;
       InferenceContext.setTypeFromNode(elseExpression, node);
   
       if (flow != null) {
  -      flow.conditional_elseBegin(thenExpression);
  +      flow.conditional_elseBegin(node.thenExpression);
         checkUnreachableNode(elseExpression);
         elseExpression.accept(this);
         flow.conditional_end(node, elseExpression);
  
positive.code:   void visitDoStatement(DoStatement node) {
      checkUnreachableNode(node);
  
      var body = node.body;
      var condition = node.condition;
  
      flowAnalysis.flow?.doStatement_bodyBegin(node);
      body.accept(this);
  
      flowAnalysis.flow?.doStatement_conditionBegin();
      InferenceContext.setType(condition, typeProvider.boolType);
  
negative.code:     boolExpressionVerifier.checkForNonBoolCondition(node.condition,
          whyNotPromoted: whyNotPromoted);
  
      flowAnalysis.flow?.whileStatement_bodyBegin(node, condition);
      node.body.accept(this);
      flowAnalysis.flow?.whileStatement_end();
      nullSafetyDeadCodeVerifier.flowEnd(node.body);
      // TODO(brianwilkerson) If the loop can only be exited because the condition
  