pmatos marked 4 inline comments as done.
pmatos added a comment.

Thanks @aaron.ballman . I think I have now address all outstanding comments.



================
Comment at: clang/include/clang/Basic/Attr.td:4129
+  let Documentation = [WebAssemblyExportNameDocs];
+  let Subjects = SubjectList<[TypedefName], ErrorDiag>;
+}
----------------
aaron.ballman wrote:
> pmatos wrote:
> > aaron.ballman wrote:
> > > erichkeane wrote:
> > > > pmatos wrote:
> > > > > erichkeane wrote:
> > > > > > pmatos wrote:
> > > > > > > erichkeane wrote:
> > > > > > > > Note that it seems this is likely not going to work correctly 
> > > > > > > > on template type aliases!  You probably want to make sure that 
> > > > > > > > is acceptable to you.
> > > > > > > Documentation says about Subject:
> > > > > > > 
> > > > > > > ```
> > > > > > >   // The things to which an attribute can appertain
> > > > > > >   SubjectList Subjects;
> > > > > > > ```
> > > > > > > 
> > > > > > > Given this can be attached to function pointer types, is the 
> > > > > > > subject then just Type ?
> > > > > > IIRC, the list of subjects are the Decls and Stmt types that are 
> > > > > > possibly allowed.  I don't thnk it would be just 'Type' there.
> > > > > > 
> > > > > > As you have it, it is only allowed on TypedefNameDecl.
> > > > > > 
> > > > > > See the SubsetSubject's at the top of this file for some examples 
> > > > > > on how you could constrain a special matcher to only work on 
> > > > > > function pointer decls.
> > > > > Good point @erichkeane . What do you think of FunctionPointer 
> > > > > implementation here?
> > > > That seems acceptable to me.
> > > That makes sense to me as well, but FWIW, type attributes don't currently 
> > > have much of any tablegen automation (unlike decl and stmt attributes), 
> > > so the subject list isn't strictly necessary here. But it's still 
> > > appreciated because 1) it's documentation, and 2) we want to tablegen 
> > > more and this helps us with that goal.
> > @erichkeane Yes, you're right. Something like 
> > 
> > ```
> > using IntIntFuncref = int(*)(int) __funcref;
> > ```
> > 
> > doesn't work. Why is this not accepted? Is it due to the Subjects listed?
> Not due to the subjects -- keyword attributes require manual parsing and type 
> attributes require manual processing (we don't tablegen as much as I'd like 
> for type attributes). But that code should be accepted (you should add a test 
> case for it as well).
Seems to be fine now.  Test added.


================
Comment at: clang/include/clang/Basic/AttrDocs.td:6930
+def WebAssemblyFuncrefDocs : Documentation {
+  let Category = DocCatFunction;
+  let Content = [{
----------------
aaron.ballman wrote:
> `DocCatType`, right?
Yes.


================
Comment at: clang/test/Sema/wasm-refs.c:50
+typedef void (*__funcref funcref_t)();
+typedef void (*__funcref __funcref funcref_fail_t)(); // expected-warning 
{{attribute '__funcref' is already applied}}
 
----------------
aaron.ballman wrote:
> Should we also test two-level application of the qualifier, as in?
> ```
> using uh_oh = funcref_t __funcref;
> ```
Double qualification shouldn't be an issue - adding this to 
`SemaCXX/wasm-funcref.cpp`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D128440

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

Reply via email to