@@ -757,20 +757,25 @@ class LabeledConditionalStmt : public LabeledStmt {
757757class IfStmt : public LabeledConditionalStmt {
758758 SourceLoc IfLoc;
759759 SourceLoc ElseLoc;
760- Stmt *Then;
760+ BraceStmt *Then;
761761 Stmt *Else;
762762
763763public:
764764 IfStmt (LabeledStmtInfo LabelInfo, SourceLoc IfLoc, StmtCondition Cond,
765- Stmt *Then, SourceLoc ElseLoc, Stmt *Else,
765+ BraceStmt *Then, SourceLoc ElseLoc, Stmt *Else,
766766 llvm::Optional<bool > implicit = llvm::None)
767767 : LabeledConditionalStmt(StmtKind::If,
768768 getDefaultImplicitFlag (implicit, IfLoc),
769769 LabelInfo, Cond),
770- IfLoc(IfLoc), ElseLoc(ElseLoc), Then(Then), Else(Else) {}
770+ IfLoc(IfLoc), ElseLoc(ElseLoc), Then(Then), Else(Else) {
771+ assert (Then && " Must have non-null 'then' statement" );
772+ assert (!Else || isa<BraceStmt>(Else) ||
773+ isa<IfStmt>(Else) &&
774+ " Else statement must either be BraceStmt or IfStmt" );
775+ }
771776
772- IfStmt (SourceLoc IfLoc, Expr *Cond, Stmt *Then, SourceLoc ElseLoc, Stmt *Else ,
773- llvm::Optional<bool > implicit, ASTContext &Ctx);
777+ IfStmt (SourceLoc IfLoc, Expr *Cond, BraceStmt *Then, SourceLoc ElseLoc,
778+ Stmt *Else, llvm::Optional<bool > implicit, ASTContext &Ctx);
774779
775780 SourceLoc getIfLoc () const { return IfLoc; }
776781 SourceLoc getElseLoc () const { return ElseLoc; }
@@ -782,8 +787,8 @@ class IfStmt : public LabeledConditionalStmt {
782787 return (Else ? Else->getEndLoc () : Then->getEndLoc ());
783788 }
784789
785- Stmt *getThenStmt () const { return Then; }
786- void setThenStmt (Stmt *s) { Then = s; }
790+ BraceStmt *getThenStmt () const { return Then; }
791+ void setThenStmt (BraceStmt *s) { Then = s; }
787792
788793 Stmt *getElseStmt () const { return Else; }
789794 void setElseStmt (Stmt *s) { Else = s; }
0 commit comments