aaron.ballman edited reviewers, added: aaron.ballman; removed: lattner. aaron.ballman added a comment.
Can you also add a test case to `TestMiscStmts()` in clang\test\AST\ast-dump-stmt.c that demonstrates we calculate the correct resulting type and don't lose the extra null statements from the AST? ================ Comment at: clang/lib/Parse/ParseStmt.cpp:962 if (Actions.isCurCompoundStmtAStmtExpr()) { - // Look to see if the next two tokens close the statement expression; - // if so, this expression statement is the last statement in a - // statment expression. - return Tok.isNot(tok::r_brace) || NextToken().isNot(tok::r_paren); + // For gcc compatibility we skip past NullStmts + int LookAhead = 0; ---------------- gcc -> GCC Also, add a full stop to the end of the comment. ================ Comment at: clang/lib/Parse/ParseStmt.cpp:963 + // For gcc compatibility we skip past NullStmts + int LookAhead = 0; + while (GetLookAheadToken(LookAhead).is(tok::semi)) { ---------------- This should be `unsigned` rather than `int`. ================ Comment at: clang/lib/Parse/ParseStmt.cpp:965 + while (GetLookAheadToken(LookAhead).is(tok::semi)) { + LookAhead++; + } ---------------- Prefer `++LookHead;` since the result isn't needed. ================ Comment at: clang/lib/Parse/ParseStmt.cpp:971 + // expression. + + return GetLookAheadToken(LookAhead).isNot(tok::r_brace) || ---------------- Remove spurious newline. ================ Comment at: clang/lib/Sema/SemaExpr.cpp:13324 + // as the type of the stmtexpr. For GCC compatibility this excludes trailing + // NullStmts QualType Ty = Context.VoidTy; ---------------- Add full stop to the end of the sentence. ================ Comment at: clang/lib/Sema/SemaExpr.cpp:13328 if (!Compound->body_empty()) { - Stmt *LastStmt = Compound->body_back(); + // GCC ignores empty statements at the end of compound expressions + // i.e. ({ 5;;; }) ---------------- Add full stop to the end of the sentence. ================ Comment at: clang/lib/Sema/SemaExpr.cpp:13331 + // ^^ ignored + // This code skips past these NullStmts + Stmt *LastStmt = nullptr; ---------------- Add full stop to the end of the sentence. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D57086/new/ https://reviews.llvm.org/D57086 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits