From: Douglas Yung Date: Sat, 12 May 2018 00:06:59 +0000 (+0000) Subject: Force the PS4 clang ABI version to 6. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a9f47524d104716f95ee3adaae77573369e10e0f;p=clang Force the PS4 clang ABI version to 6. 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 --- diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td index 003450d951..21e00ed2b1 100644 --- a/include/clang/Basic/DiagnosticDriverKinds.td +++ b/include/clang/Basic/DiagnosticDriverKinds.td @@ -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; +def warn_drv_ignored_clang_abi_version : Warning< + "target requires clang ABI version %0, ignoring requested version">, + InGroup; def warn_drv_ycyu_no_arg_clang_cl : Warning< "support for '%0' without a filename not implemented yet; flag ignored">, diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 05e5196e32..b8e05b523e 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -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) { diff --git a/test/CodeGenCXX/alignment.cpp b/test/CodeGenCXX/alignment.cpp index 2549afda88..6956637aae 100644 --- a/test/CodeGenCXX/alignment.cpp +++ b/test/CodeGenCXX/alignment.cpp @@ -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 index 0000000000..9f1789867b --- /dev/null +++ b/test/Driver/clang-abi-compat.cpp @@ -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 +