On Apr 15, 2013, at 8:53 PM, [email protected] wrote: > Last problem: >> 2. In Sema/SemaExpr.cpp, ActOnCallExpr(): >> I admit that I'm not very thorough about this one... >> But here the CheckPlaceholderExpr() call does solve the follwing problem. >> === Code Start === >> // If compiled with -ggdb, clang will crash and saying something about >> // "unexpected builtin-type" in some CG code. >> >> struct S2 { >> template <class T> >> void f(T t) {} >> }; >> >> template <class T> >> struct S >> { >> __declspec(property(get=GetV)) int V; >> int GetV() { return 123; } >> void f() { S2 s2; s2.f(V); } >> }; >> >> int main() { >> S<int> s; >> s.f(); >> } >> === Code End === > > Ah, I think the problem here is that overload resolution and especially > template argument deduction aren't lowering out placeholder types. Please > hoist this loop out of the C++ block (for obscure reasons; just trust me) > and check: > hasPlaceholderType(BuiltinType::PseudoObject) > instead of checking for a particular expression kind. > > And please add this as a test case. :) > > This change leads to a test failure: > test/SemaObjc/property-user-setter.m, Line 88: > void g(int); // expected-note {{passing argument to parameter here}} > this note is no longer printed. > If it's fine, wen can just remove the expected-note comment, but I don't know > if it's appropriate.
The note's not particularly important, no. The context of initializing a parameter doesn't really have much to do with the failure to load the property. This looked really good, so I spent a little time tweaking it and then committed it as r179585, thanks! The main changes I made were: - I tweaked a lot of the diagnostic text to just talk about properties instead of saying __declspec(property). - I also changed the diagnostic names to make it clear that they were specific to MS properties. - I reworked the parsing code to avoid some redundant diagnostics and recover nicely in some ways. For example, if you try to say set=setX, it'll tell you to write put=setX. - Properties have to be bare identifiers, so there is no point in storing a full DeclarationNameInfo; it's always just a SourceLocation. Please don't let the number of changes dishearten you; it was all just small tweaks, and this was really great work! Are you planning to work on subscriptable properties, or was this enough to get your project ported? John.
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
