summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2013-06-19 16:37:23 +0000
committerReid Kleckner <reid@kleckner.net>2013-06-19 16:37:23 +0000
commit0a0c8895ea768fc3a0a5789dc99447b0487456c8 (patch)
tree2eea4d38a4bcb7c759a129fa4ee3db873bc1d9f3
parentb5375cd1b6798f6309126ed008da86f260e22e8f (diff)
downloadbcm5719-llvm-0a0c8895ea768fc3a0a5789dc99447b0487456c8.tar.gz
bcm5719-llvm-0a0c8895ea768fc3a0a5789dc99447b0487456c8.zip
[Windows] Fix __declspec(property) when the getter returns a ref
This fixes an issue when parsing atlbase.h. Patch by Will Wilson! llvm-svn: 184319
-rw-r--r--clang/lib/Sema/SemaExpr.cpp3
-rw-r--r--clang/test/SemaCXX/MicrosoftExtensions.cpp17
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);
+}
OpenPOWER on IntegriCloud