summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaExprMember.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2011-10-26 19:06:56 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2011-10-26 19:06:56 +0000
commitcab9a7d51c174b13498ebd75ceda801692198755 (patch)
treea504b3bf233bdba62fafff4af467a5e19a8b0502 /clang/lib/Sema/SemaExprMember.cpp
parent16133782dc4a94793aa4b0488ac5ea097648a88f (diff)
downloadbcm5719-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.cpp19
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());
OpenPOWER on IntegriCloud