diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-10-26 19:06:56 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2011-10-26 19:06:56 +0000 |
commit | cab9a7d51c174b13498ebd75ceda801692198755 (patch) | |
tree | a504b3bf233bdba62fafff4af467a5e19a8b0502 /clang/lib/Sema/SemaExprMember.cpp | |
parent | 16133782dc4a94793aa4b0488ac5ea097648a88f (diff) | |
download | bcm5719-llvm-cab9a7d51c174b13498ebd75ceda801692198755.tar.gz bcm5719-llvm-cab9a7d51c174b13498ebd75ceda801692198755.zip |
Pull out conversion on LHS of -> and . into its own function. This happens
implicitly in LookupMemberExpr and explicitly in cases where template
instantiation doesn't redo the lookup.
llvm-svn: 143046
Diffstat (limited to 'clang/lib/Sema/SemaExprMember.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExprMember.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/clang/lib/Sema/SemaExprMember.cpp b/clang/lib/Sema/SemaExprMember.cpp index 25d3c2a4254..5696e2386d5 100644 --- a/clang/lib/Sema/SemaExprMember.cpp +++ b/clang/lib/Sema/SemaExprMember.cpp @@ -970,6 +970,17 @@ static bool isPointerToRecordType(QualType T) { return false; } +/// Perform conversions on the LHS of a member access expression. +ExprResult +Sema::PerformMemberExprBaseConversion(Expr *Base, bool IsArrow) { + ExprResult BaseResult = DefaultFunctionArrayConversion(Base); + + if (!BaseResult.isInvalid() && IsArrow) + BaseResult = DefaultLvalueConversion(BaseResult.take()); + + return BaseResult; +} + /// Look up the given member of the given non-type-dependent /// expression. This can return in one of two ways: /// * If it returns a sentinel null-but-valid result, the caller will @@ -988,16 +999,10 @@ Sema::LookupMemberExpr(LookupResult &R, ExprResult &BaseExpr, assert(BaseExpr.get() && "no base expression"); // Perform default conversions. - BaseExpr = DefaultFunctionArrayConversion(BaseExpr.take()); + BaseExpr = PerformMemberExprBaseConversion(BaseExpr.take(), IsArrow); if (BaseExpr.isInvalid()) return ExprError(); - if (IsArrow) { - BaseExpr = DefaultLvalueConversion(BaseExpr.take()); - if (BaseExpr.isInvalid()) - return ExprError(); - } - QualType BaseType = BaseExpr.get()->getType(); assert(!BaseType->isDependentType()); |