arphaman added a comment.

In D92355#2429117 <https://reviews.llvm.org/D92355#2429117>, @aaron.ballman 
wrote:

> There's no information in either the attribute definition in Attr.td or in 
> the documentation as to what subject this attribute applies to.

Added a subject list to the attribute.



================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:5950
+        Diag(Loc, diag::warn_attr_swift_name_decl_missing_params)
+            << AL << (isa<ObjCMethodDecl>(D) ? 1 : 0);
+        return false;
----------------
aaron.ballman wrote:
> Do you actually need the ?: operator here, or is the conversion from bool 
> sufficient?
Thanks, I dropped it.


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:6019
+static void handleSwiftName(Sema &S, Decl *D, const ParsedAttr &AL,
+                            bool IsAsync = false) {
   StringRef Name;
----------------
aaron.ballman wrote:
> Please do not add an additional parameter to the handle functions -- we have 
> a stretch goal of automating more of the switch behavior in SemaDeclAttr.cpp 
> someday and we can only do that if the handle* functions have the same 
> signatures.
Makes sense, thanks. I added a new function which should hopefully make it 
easier to automate in the future.


================
Comment at: clang/test/SemaObjC/attr-swift_name.m:184
+
+// expected-warning@+1 {{too many parameters in '__swift_async_name__' 
attribute (expected 1; got 2)}}
+- (void)doSomethingY:(int)x withCallback:(CallbackTy)callback 
SWIFT_ASYNC_NAME("doSomething(x:y:)");
----------------
aaron.ballman wrote:
> This diagnostic is too confusing for me -- a lot of people get 
> parameter/argument confused and so this reads a bit like the *attribute* has 
> too many arguments to it when the real issue is that the signature specified 
> by the attribute argument has too many parameters.
> 
> How about: `too many parameters in the signature specified by the 
> 'swift_async_name' attribute` or something along those lines?
> 
> Also, missing tests for the number of arguments passed to the attribute. :-)
Thanks for the suggestion, I tweaked the warning text .


================
Comment at: clang/test/SemaObjC/attr-swift_name.m:197
+void asyncNoParams(void) SWIFT_ASYNC_NAME("asyncNoParams()");
+
+// expected-warning@+1 {{'__swift_async_name__' attribute cannot be applied to 
this declaration}}
----------------
aaron.ballman wrote:
> It's not clear whether we should have additional tests around other subjects 
> - like, can I apply this attribute to a virtual class function in C++? If you 
> can apply it to a C++ class method, does the implicit `this` parameter count 
> when checking for the right parameter count?
> 
> Should also have a test that the attribute applies to a vanilla function (the 
> only test currently fails because the function has no args, but we should 
> show an explicitly accepted case as well).
That's a good point. Added a regular function test as well. We don't need C++ 
support for this right now, but it might make sense to have it in the future 
when Swift and C++ interoperate, so added a test for C++ method as well.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D92355/new/

https://reviews.llvm.org/D92355

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to