diff options
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 3 | ||||
| -rw-r--r-- | clang/test/SemaCXX/MicrosoftExtensions.cpp | 17 |
2 files changed, 19 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index edeb731b83d..56ece247c6c 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -2003,7 +2003,8 @@ ExprResult Sema::ActOnIdExpression(Scope *S, MightBeImplicitMember = true; else MightBeImplicitMember = isa<FieldDecl>(R.getFoundDecl()) || - isa<IndirectFieldDecl>(R.getFoundDecl()); + isa<IndirectFieldDecl>(R.getFoundDecl()) || + isa<MSPropertyDecl>(R.getFoundDecl()); if (MightBeImplicitMember) return BuildPossibleImplicitMemberExpr(SS, TemplateKWLoc, diff --git a/clang/test/SemaCXX/MicrosoftExtensions.cpp b/clang/test/SemaCXX/MicrosoftExtensions.cpp index c0e7a5ad4c7..217fc6e6d79 100644 --- a/clang/test/SemaCXX/MicrosoftExtensions.cpp +++ b/clang/test/SemaCXX/MicrosoftExtensions.cpp @@ -344,3 +344,20 @@ union u { int *i1; int &i2; // expected-warning {{union member 'i2' has reference type 'int &', which is a Microsoft extension}} }; + +// Property getter using reference. +struct SP11 { + __declspec(property(get=GetV)) int V; + int _v; + int& GetV() { return _v; } + void UseV(); + void TakePtr(int *) {} + void TakeRef(int &) {} + void TakeVal(int) {} +}; + +void SP11::UseV() { + TakePtr(&V); + TakeRef(V); + TakeVal(V); +} |

