diff options
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 21 | 
1 files changed, 10 insertions, 11 deletions
| diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index c320cfc6701..249bebc91fc 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -397,19 +397,18 @@ Expr::isLvalueResult Expr::isLvalue(ASTContext &Ctx) const {    case BinaryOperatorClass:    case CompoundAssignOperatorClass: {      const BinaryOperator *BinOp = cast<BinaryOperator>(this); -    if (BinOp->isAssignmentOp()) { -      if (Ctx.getLangOptions().CPlusPlus) -        // C++ [expr.ass]p1:  -        //   The result of an assignment operation [...] is an lvalue. -        return LV_Valid; -      else  -        // C99 6.5.16: -        //   An assignment expression [...] is not an lvalue. -        return LV_InvalidExpression; -    } else +    if (!BinOp->isAssignmentOp())        return LV_InvalidExpression; -    break; +    if (Ctx.getLangOptions().CPlusPlus) +      // C++ [expr.ass]p1:  +      //   The result of an assignment operation [...] is an lvalue. +      return LV_Valid; + + +    // C99 6.5.16: +    //   An assignment expression [...] is not an lvalue. +    return LV_InvalidExpression;    }    case CallExprClass: {      // C++ [expr.call]p10: | 

