]> granicus.if.org Git - clang/commitdiff
Force the PS4 clang ABI version to 6.
authorDouglas Yung <douglas.yung@sony.com>
Sat, 12 May 2018 00:06:59 +0000 (00:06 +0000)
committerDouglas Yung <douglas.yung@sony.com>
Sat, 12 May 2018 00:06:59 +0000 (00:06 +0000)
The PS4 requires clang ABI version 6 for compatibility reasons. This change forces this and if the user specifies a different version when the PS4 target is specified, the compiler emits a warning that the specified version is being ignored.

Reviewers: probinson

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D46767

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@332160 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticDriverKinds.td
lib/Frontend/CompilerInvocation.cpp
test/CodeGenCXX/alignment.cpp
test/Driver/clang-abi-compat.cpp [new file with mode: 0644]

index 003450d951e15bcb3bb747b09f8d6c90942ebd16..21e00ed2b18e6639e97b515ecbc82b138b15582c 100644 (file)
@@ -150,6 +150,9 @@ def warn_drv_unknown_argument_clang_cl : Warning<
 def warn_drv_unknown_argument_clang_cl_with_suggestion : Warning<
   "unknown argument ignored in clang-cl '%0' (did you mean '%1'?)">,
   InGroup<UnknownArgument>;
+def warn_drv_ignored_clang_abi_version : Warning<
+  "target requires clang ABI version %0, ignoring requested version">,
+  InGroup<UnusedCommandLineArgument>;
 
 def warn_drv_ycyu_no_arg_clang_cl : Warning<
   "support for '%0' without a filename not implemented yet; flag ignored">,
index 05e5196e32d26fc40c58314972c01fdfc62fceb9..b8e05b523efae738a3ac833b59090a359459941d 100644 (file)
@@ -2751,6 +2751,16 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
           << A->getAsString(Args) << A->getValue();
     }
   }
+  // The PS4 requires version 6 of the clang ABI.
+  if (T.isPS4()) {
+    // Issue a warning if another version of the ABI was requested.
+    if (Args.getLastArg(OPT_fclang_abi_compat_EQ) &&
+        Opts.getClangABICompat() != LangOptions::ClangABI::Ver6) {
+      Diags.Report(diag::warn_drv_ignored_clang_abi_version)
+        << 6;
+    }
+    Opts.setClangABICompat(LangOptions::ClangABI::Ver6);
+  }
 }
 
 static bool isStrictlyPreprocessorAction(frontend::ActionKind Action) {
index 2549afda8828003399a89b3035d6cb3c4b7e2a47..6956637aaef5d2a6b219eea2a9c8f1facca871e4 100644 (file)
@@ -1,5 +1,8 @@
 // RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-apple-darwin10 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-NOCOMPAT
 // RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-apple-darwin10 -fclang-abi-compat=6.0 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V6COMPAT
+// Check that the PS4 target uses the 6.0 compat settings.
+// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-scei-ps4 | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V6COMPAT
+// RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-scei-ps4 -fclang-abi-compat=latest | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-V6COMPAT
 
 extern int int_source();
 extern void int_sink(int x);
diff --git a/test/Driver/clang-abi-compat.cpp b/test/Driver/clang-abi-compat.cpp
new file mode 100644 (file)
index 0000000..9f17898
--- /dev/null
@@ -0,0 +1,6 @@
+// PS4 target requires clang ABI version 6, check that a warning is emitted when a version other than 6 is requested.
+// RUN: %clang -S --target=x86_64-scei-ps4 -fclang-abi-compat=4 %s 2>&1 | FileCheck %s -check-prefix=CHECK-WARNING
+// RUN: %clang -S --target=x86_64-scei-ps4 -fclang-abi-compat=latest %s 2>&1 | FileCheck %s -check-prefix=CHECK-WARNING
+
+// CHECK-WARNING: warning: target requires clang ABI version 6, ignoring requested version
+