From d56d6b678f1cd6d34bc957a42453d1e237289048 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 31 Aug 2007 05:01:50 +0000 Subject: [PATCH] don't turn semantic errors into parse errors. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41638 91177308-0d34-0410-b5e6-96231b3b80d8 --- Parse/ParseExpr.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Parse/ParseExpr.cpp b/Parse/ParseExpr.cpp index 3e70db4c48..51ad217e31 100644 --- a/Parse/ParseExpr.cpp +++ b/Parse/ParseExpr.cpp @@ -374,15 +374,19 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, unsigned MinPrec) { } assert(NextTokPrec <= ThisPrec && "Recursion didn't work!"); - // Combine the LHS and RHS into the LHS (e.g. build AST). - if (TernaryMiddle.isInvalid) - LHS = Actions.ParseBinOp(OpToken.getLocation(), OpToken.getKind(), - LHS.Val, RHS.Val); - else - LHS = Actions.ParseConditionalOp(OpToken.getLocation(), ColonLoc, - LHS.Val, TernaryMiddle.Val, RHS.Val); - if (LHS.isInvalid) - return LHS; + if (!LHS.isInvalid) { + // Combine the LHS and RHS into the LHS (e.g. build AST). + if (TernaryMiddle.isInvalid) + LHS = Actions.ParseBinOp(OpToken.getLocation(), OpToken.getKind(), + LHS.Val, RHS.Val); + else + LHS = Actions.ParseConditionalOp(OpToken.getLocation(), ColonLoc, + LHS.Val, TernaryMiddle.Val, RHS.Val); + } else { + // We had a semantic error on the LHS. Just free the RHS and continue. + Actions.DeleteExpr(TernaryMiddle.Val); + Actions.DeleteExpr(RHS.Val); + } } } -- 2.50.1