CXXScopeSpec SS;
SS.Adopt(QualifierLoc);
- if (BaseE && IsArrow) {
- ExprResult BaseResult = getSema().DefaultLvalueConversion(BaseE);
+ if (BaseE) {
+ ExprResult BaseResult = getSema().DefaultFunctionArrayConversion(BaseE);
if (BaseResult.isInvalid())
return ExprError();
+ if (IsArrow) {
+ BaseResult = getSema().DefaultLvalueConversion(BaseResult.take());
+ if (BaseResult.isInvalid())
+ return ExprError();
+ }
BaseE = BaseResult.take();
+ BaseType = BaseE->getType();
}
return SemaRef.BuildMemberReferenceExpr(BaseE, BaseType,
Base = getDerived().TransformExpr(Old->getBase());
if (Base.isInvalid())
return ExprError();
- BaseType = ((Expr*) Base.get())->getType();
} else {
BaseType = getDerived().TransformType(Old->getBaseType());
}
template struct ArrowMemRef0<ArrowWrapper<MemInt*>, float&>; // expected-note{{instantiation}}
template struct ArrowMemRef0<ArrowWrapper<ArrowWrapper<MemInt*> >, int&>;
+struct UnresolvedMemRefArray {
+ int f(int);
+ int f(char);
+};
+UnresolvedMemRefArray Arr[10];
+template<typename U> int UnresolvedMemRefArrayT(U u) {
+ return Arr->f(u);
+}
+template int UnresolvedMemRefArrayT<int>(int);
+
// FIXME: we should be able to return a MemInt without the reference!
MemInt &createMemInt(int);