rjmccall added inline comments. ================ Comment at: lib/Sema/SemaPseudoObject.cpp:464 @@ -461,1 +463,3 @@ + if (useSetterResultAsExprResult(result.get())) + setResultToLastSemantic(); ---------------- Sure, but that's not what I'm saying. I'm saying that the code, as you've written it, will use the value passed to the setter (if capturable) as the result of the expression if it can't capture the setter result.
That is, given: struct A { __declspec(property(get=GetX,put=PutX)) int x; int GetX() const { return 0; } void SetX(long y) {} }; this expression will have type long instead of void, because it's implicitly falling back on capturing the value passed to the setter: a.x = 5; I suspect that that's not the MSVC semantics, and the language rule is that you should always use the setter result. If that's true, you should be asking the subclass which rule to use abstractly, i.e. before constructing the setter, and then (1) suppressing the capture of the set value and (2) using the setter result (if capturable) or else nothing. http://reviews.llvm.org/D15174 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits