diff --git a/clang/AST/Expr.cpp b/clang/AST/Expr.cpp index d7b388f49c16..57de307cb2ca 100644 --- a/clang/AST/Expr.cpp +++ b/clang/AST/Expr.cpp @@ -135,23 +135,19 @@ bool Expr::isLvalue() { if (TR->isIncompleteType() && TR->isVoidType()) return false; - // now, check the expression + // the type looks fine, now check the expression switch (getStmtClass()) { case StringLiteralClass: // C99 6.5.1p4 return true; - case ArraySubscriptExprClass: + case ArraySubscriptExprClass: // C99 6.5.3p4 (e1[e2] == (*((e1)+(e2)))) return true; case DeclRefExprClass: // C99 6.5.1p2 - const DeclRefExpr *d = cast(this); - return isa(d->getDecl()); + return isa(cast(this)->getDecl()); case MemberExprClass: // C99 6.5.2.3p4 const MemberExpr *m = cast(this); - if (m->isArrow()) - return true; - return m->getBase()->isLvalue(); + return m->isArrow() ? true : m->getBase()->isLvalue(); case UnaryOperatorClass: // C99 6.5.3p4 - const UnaryOperator *u = cast(this); - return u->getOpcode() == UnaryOperator::Deref; + return cast(this)->getOpcode() == UnaryOperator::Deref; case ParenExprClass: // C99 6.5.1p5 return cast(this)->getSubExpr()->isLvalue(); default: diff --git a/clang/AST/SemaExpr.cpp b/clang/AST/SemaExpr.cpp index 18fdfbece767..3051f6f40495 100644 --- a/clang/AST/SemaExpr.cpp +++ b/clang/AST/SemaExpr.cpp @@ -780,9 +780,9 @@ static Decl *getPrimaryDeclaration(Expr *e) { QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) { Decl *dcl = getPrimaryDeclaration(op); - if (!op->isLvalue()) { // - if (dcl && isa(dcl)) - ; // C99 6.5.3.2p1: Allow function designators. + if (!op->isLvalue()) { // C99 6.5.3.2p1 + if (dcl && isa(dcl)) // allow function designators + ; else { Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof); return QualType(); diff --git a/clang/Sema/SemaExpr.cpp b/clang/Sema/SemaExpr.cpp index 18fdfbece767..3051f6f40495 100644 --- a/clang/Sema/SemaExpr.cpp +++ b/clang/Sema/SemaExpr.cpp @@ -780,9 +780,9 @@ static Decl *getPrimaryDeclaration(Expr *e) { QualType Sema::CheckAddressOfOperand(Expr *op, SourceLocation OpLoc) { Decl *dcl = getPrimaryDeclaration(op); - if (!op->isLvalue()) { // - if (dcl && isa(dcl)) - ; // C99 6.5.3.2p1: Allow function designators. + if (!op->isLvalue()) { // C99 6.5.3.2p1 + if (dcl && isa(dcl)) // allow function designators + ; else { Diag(OpLoc, diag::err_typecheck_invalid_lvalue_addrof); return QualType();