@@ -938,19 +938,6 @@ BuildMSPropertyRefExpr(Sema &S, Expr *BaseExpr, bool IsArrow,
938
938
NameInfo.getLoc ());
939
939
}
940
940
941
- MemberExpr *Sema::BuildMemberExpr (
942
- Expr *Base, bool IsArrow, SourceLocation OpLoc, const CXXScopeSpec *SS,
943
- SourceLocation TemplateKWLoc, ValueDecl *Member, DeclAccessPair FoundDecl,
944
- bool HadMultipleCandidates, const DeclarationNameInfo &MemberNameInfo,
945
- QualType Ty, ExprValueKind VK, ExprObjectKind OK,
946
- const TemplateArgumentListInfo *TemplateArgs) {
947
- NestedNameSpecifierLoc NNS =
948
- SS ? SS->getWithLocInContext (Context) : NestedNameSpecifierLoc ();
949
- return BuildMemberExpr (Base, IsArrow, OpLoc, NNS, TemplateKWLoc, Member,
950
- FoundDecl, HadMultipleCandidates, MemberNameInfo, Ty,
951
- VK, OK, TemplateArgs);
952
- }
953
-
954
941
MemberExpr *Sema::BuildMemberExpr (
955
942
Expr *Base, bool IsArrow, SourceLocation OpLoc, NestedNameSpecifierLoc NNS,
956
943
SourceLocation TemplateKWLoc, ValueDecl *Member, DeclAccessPair FoundDecl,
@@ -1168,7 +1155,8 @@ Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType,
1168
1155
OpLoc);
1169
1156
1170
1157
if (VarDecl *Var = dyn_cast<VarDecl>(MemberDecl)) {
1171
- return BuildMemberExpr (BaseExpr, IsArrow, OpLoc, &SS, TemplateKWLoc, Var,
1158
+ return BuildMemberExpr (BaseExpr, IsArrow, OpLoc,
1159
+ SS.getWithLocInContext (Context), TemplateKWLoc, Var,
1172
1160
FoundDecl, /* HadMultipleCandidates=*/ false ,
1173
1161
MemberNameInfo, Var->getType ().getNonReferenceType (),
1174
1162
VK_LValue, OK_Ordinary);
@@ -1185,17 +1173,18 @@ Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType,
1185
1173
type = MemberFn->getType ();
1186
1174
}
1187
1175
1188
- return BuildMemberExpr (BaseExpr, IsArrow, OpLoc, &SS, TemplateKWLoc,
1176
+ return BuildMemberExpr (BaseExpr, IsArrow, OpLoc,
1177
+ SS.getWithLocInContext (Context), TemplateKWLoc,
1189
1178
MemberFn, FoundDecl, /* HadMultipleCandidates=*/ false ,
1190
1179
MemberNameInfo, type, valueKind, OK_Ordinary);
1191
1180
}
1192
1181
assert (!isa<FunctionDecl>(MemberDecl) && " member function not C++ method?" );
1193
1182
1194
1183
if (EnumConstantDecl *Enum = dyn_cast<EnumConstantDecl>(MemberDecl)) {
1195
- return BuildMemberExpr (BaseExpr, IsArrow, OpLoc, &SS, TemplateKWLoc, Enum,
1196
- FoundDecl, /* HadMultipleCandidates= */ false ,
1197
- MemberNameInfo , Enum-> getType (), VK_PRValue ,
1198
- OK_Ordinary);
1184
+ return BuildMemberExpr (
1185
+ BaseExpr, IsArrow, OpLoc, SS. getWithLocInContext (Context) ,
1186
+ TemplateKWLoc , Enum, FoundDecl, /* HadMultipleCandidates= */ false ,
1187
+ MemberNameInfo, Enum-> getType (), VK_PRValue, OK_Ordinary);
1199
1188
}
1200
1189
1201
1190
if (VarTemplateDecl *VarTempl = dyn_cast<VarTemplateDecl>(MemberDecl)) {
@@ -1219,7 +1208,8 @@ Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType,
1219
1208
if (!Var->getTemplateSpecializationKind ())
1220
1209
Var->setTemplateSpecializationKind (TSK_ImplicitInstantiation, MemberLoc);
1221
1210
1222
- return BuildMemberExpr (BaseExpr, IsArrow, OpLoc, &SS, TemplateKWLoc, Var,
1211
+ return BuildMemberExpr (BaseExpr, IsArrow, OpLoc,
1212
+ SS.getWithLocInContext (Context), TemplateKWLoc, Var,
1223
1213
FoundDecl, /* HadMultipleCandidates=*/ false ,
1224
1214
MemberNameInfo, Var->getType ().getNonReferenceType (),
1225
1215
VK_LValue, OK_Ordinary, TemplateArgs);
@@ -1323,11 +1313,11 @@ static ExprResult LookupMemberExpr(Sema &S, LookupResult &R,
1323
1313
if (IsArrow) {
1324
1314
if (const PointerType *Ptr = BaseType->getAs <PointerType>())
1325
1315
BaseType = Ptr->getPointeeType ();
1316
+ else if (const ObjCObjectPointerType *Ptr =
1317
+ BaseType->getAs <ObjCObjectPointerType>())
1318
+ BaseType = Ptr->getPointeeType ();
1326
1319
else if (!BaseType->isDependentType ()) {
1327
- if (const ObjCObjectPointerType *Ptr =
1328
- BaseType->getAs <ObjCObjectPointerType>())
1329
- BaseType = Ptr->getPointeeType ();
1330
- else if (BaseType->isRecordType ()) {
1320
+ if (BaseType->isRecordType ()) {
1331
1321
// Recover from arrow accesses to records, e.g.:
1332
1322
// struct MyRecord foo;
1333
1323
// foo->bar
@@ -1924,10 +1914,10 @@ Sema::BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
1924
1914
}
1925
1915
}
1926
1916
1927
- return BuildMemberExpr (Base. get (), IsArrow, OpLoc, &SS,
1928
- /* TemplateKWLoc= */ SourceLocation (), Field, FoundDecl ,
1929
- /* HadMultipleCandidates =*/ false , MemberNameInfo ,
1930
- MemberType, VK, OK);
1917
+ return BuildMemberExpr (
1918
+ Base. get (), IsArrow, OpLoc, SS. getWithLocInContext (Context) ,
1919
+ /* TemplateKWLoc =*/ SourceLocation (), Field, FoundDecl ,
1920
+ /* HadMultipleCandidates= */ false , MemberNameInfo, MemberType, VK, OK);
1931
1921
}
1932
1922
1933
1923
// / Builds an implicit member access expression. The current context
0 commit comments