diff options
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 496afd6457f..e18c27c3b5c 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -389,10 +389,12 @@ Expr::isLvalueResult Expr::isLvalue() const { if (cast<ArraySubscriptExpr>(this)->getBase()->getType()->isVectorType()) return cast<ArraySubscriptExpr>(this)->getBase()->isLvalue(); return LV_Valid; - case DeclRefExprClass: // C99 6.5.1p2 - if (isa<VarDecl>(cast<DeclRefExpr>(this)->getDecl())) + case DeclRefExprClass: { // C99 6.5.1p2 + const Decl *RefdDecl = cast<DeclRefExpr>(this)->getDecl(); + if (isa<VarDecl>(RefdDecl) || isa<ImplicitParamDecl>(RefdDecl)) return LV_Valid; break; + } case MemberExprClass: { // C99 6.5.2.3p4 const MemberExpr *m = cast<MemberExpr>(this); return m->isArrow() ? LV_Valid : m->getBase()->isLvalue(); |

