[PATCH] D58365: [attributes] Add a MIG server routine attribute.

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 19 12:27:10 PST 2019


aaron.ballman added a comment.

> @aaron.ballman, are you actually interested in reviewing these attributes? 'Cause George added you on his reviews but i totally understand that these are fairly exotic.

Yeah, I'd like to review these attributes -- thanks for double-checking with me!



================
Comment at: clang/include/clang/Basic/Attr.td:1310
 
+def MIGServerRoutine : InheritableAttr {
+  let Spellings = [Clang<"mig_server_routine">];
----------------
Should this be limited to specific targets, or is this a general concept that applies to all targets?


================
Comment at: clang/include/clang/Basic/Attr.td:1312
+  let Spellings = [Clang<"mig_server_routine">];
+  let Subjects = SubjectList<[Function]>;
+  let Documentation = [MIGCallingConventionDocs];
----------------
Objective-C methods as well?


================
Comment at: clang/include/clang/Basic/Attr.td:1313
+  let Subjects = SubjectList<[Function]>;
+  let Documentation = [MIGCallingConventionDocs];
+}
----------------
This isn't really a calling convention though, is it? It doesn't change codegen, impact function types, or anything like that.


================
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>;
----------------
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).


================
Comment at: clang/lib/Sema/SemaDeclAttr.cpp:7142
+
+  // Mach Interface Generator annotations.
+  case ParsedAttr::AT_MIGServerRoutine:
----------------
This comment doesn't add a ton of value, I'd probably remove it.


================
Comment at: clang/test/Sema/attr-mig.c:6
+
+__attribute__((mig_server_routine)) kern_return_t var = KERN_SUCCESS; // expected-warning-re{{'mig_server_routine' attribute only applies to functions{{$}}}}
+
----------------
Can you also add a test showing that the attribute doesn't accept arguments.


================
Comment at: clang/test/Sema/attr-mig.c:17
+}
+
+kern_return_t bar_forward() { // no-warning
----------------
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?


================
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}}
----------------
Can you use the C++ spelling for the attribute, so we have a bit of coverage for that?


Repository:
  rC Clang

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

https://reviews.llvm.org/D58365





More information about the cfe-commits mailing list