[PATCH] D64780: Disallow most calling convention attributes on PS4.

Reid Kleckner via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jul 16 13:24:30 PDT 2019

rnk added a comment.

Some suggestions, you don't have to take all of them.

Comment at: include/clang/Basic/DiagnosticSemaKinds.td:2961
+def error_cconv_unsupported : Error<
+  "%0 calling convention not supported %select{"
+  // Use CallingConventionIgnoredReason Enum to specify these.
This duplication merely to say "not supported" instead of "ignored" seems unfortunate. We could reasonable change "ignored" to "unsupported" and then you could use the warn_cconv_ignored.Text accessor to share the text.

Comment at: include/clang/Basic/TargetInfo.h:1271
+    CCCR_Error,
I feel like perhaps a cleaner way of implementing this would be to have the driver pass down -Werror=unknown-calling-conv (sp) on PS4. That would also allow users to tell clang to ignore their CC annotations by disabling the warning, which could be useful when porting a codebase widely annotated with __stdcall, for example.

Comment at: lib/Basic/Targets/X86.h:646-647
   CallingConvCheckResult checkCallingConvention(CallingConv CC) const override {
+    if (getTriple().isPS4()) 
+       return (CC == CC_C) ? CCCR_OK : CCCR_Error;
     switch (CC) {
For better separation of concerns, I would suggest putting this in PS4OSTargetInfo::checkCallingConvention, so that the main x64 code doesn't have to consider that OS-specific concern.

  rC Clang



More information about the cfe-commits mailing list