NoQ added inline comments.

================
Comment at: clang/include/clang/Basic/Attr.td:1310
 
+def MIGServerRoutine : InheritableAttr {
+  let Spellings = [Clang<"mig_server_routine">];
----------------
aaron.ballman wrote:
> Should this be limited to specific targets, or is this a general concept that 
> applies to all targets?
I guess it shouldn't. There are [[ 
https://en.wikipedia.org/wiki/Mach_(kernel)#Software_based_on_Mach | a lot of 
]] Darwin-inspecific forks of Mach, and restricting to a specific hardware 
architecture also doesn't seem to make much sense.


================
Comment at: clang/include/clang/Basic/Attr.td:1312
+  let Spellings = [Clang<"mig_server_routine">];
+  let Subjects = SubjectList<[Function]>;
+  let Documentation = [MIGCallingConventionDocs];
----------------
aaron.ballman wrote:
> Objective-C methods as well?
Mmm, i guess it's technically possible, even if a bit annoying to support. Let 
me try.


================
Comment at: clang/include/clang/Basic/Attr.td:1313
+  let Subjects = SubjectList<[Function]>;
+  let Documentation = [MIGCallingConventionDocs];
+}
----------------
aaron.ballman wrote:
> This isn't really a calling convention though, is it? It doesn't change 
> codegen, impact function types, or anything like that.
That's right, but for whatever reason it's often referred to as "a" calling 
convention. It makes slight sense because callee/caller-deallocated OOL 
parameters are kinda similar to callee/caller-saved registers, something like 
that. I guess i'll call it just "convention".


================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:8702
+def warn_mig_server_routine_does_not_return_kern_return_t : Warning<
+  "'%0' attribute only applies to functions that return a kernel return code">,
+  InGroup<IgnoredAttributes>;
----------------
aaron.ballman wrote:
> Will users understand "kernel return code"? Should this say `kern_return_t` 
> explicitly?
> 
> No need to use %0 here, just spell out the attribute name directly (unless 
> you expect this to be used by multiple attributes, in which case the name of 
> the diagnostic should be changed).
It should say either `kern_return_t` or `IOReturn` depending on the specific 
framework that's being used (the latter is a typedef for the former). I guess i 
could scan the AST to for a `typedef kern_return_t IOReturn` and display the 
appropriate message, but this sort of stuff always sounds like an overkill. For 
now i change the wording to an exact "a kern_return_t". I could also say "a 
kern_return_t or an IOReturn", do you have any preference here?


================
Comment at: clang/test/Sema/attr-mig.c:17
+}
+
+kern_return_t bar_forward() { // no-warning
----------------
aaron.ballman wrote:
> Here's an edge case to consider:
> ```
> __attribute__((mig_server_routine)) int foo(void);
> 
> typedef int kern_return_t;
> 
> kern_return_t foo(void) { ... }
> ```
> Do you have to care about situations like that?
> Do you have to care about situations like that?

I hope i not :) `kern_return_t` is available pretty much everywhere and most 
likely it's not a problem to update the first declaration of `foo()` with 
`kern_return_t`. Ok if i add a relaxing code later if it turns out that i have 
to?


================
Comment at: clang/test/Sema/attr-mig.cpp:10
+public:
+  virtual __attribute__((mig_server_routine)) IOReturn externalMethod();
+  virtual __attribute__((mig_server_routine)) void anotherMethod(); // 
expected-warning{{'mig_server_routine' attribute only applies to functions that 
return a kernel return code}}
----------------
aaron.ballman wrote:
> Can you use the C++ spelling for the attribute, so we have a bit of coverage 
> for that?
Is there a vision that i should also provide a namespaced C++ attribute, eg. 
`[[mig::server_routine]]`?


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

https://reviews.llvm.org/D58365



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

Reply via email to