From be788303763f4a953b214a5778ddd21dab600693 Mon Sep 17 00:00:00 2001 From: liyunfei Date: Tue, 19 Nov 2024 16:55:36 +0800 Subject: [PATCH] [Driver] Ignored x86 Target optionwith -fgcc-compatible enabled Including m_x86_Features, -mlong-double-*, -fextend-arguments=* and -freg-struct-return. --- .../clang/Basic/DiagnosticDriverKinds.td | 5 +++++ clang/lib/Driver/ToolChains/Clang.cpp | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 060f96118364..2860b7020556 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -16,6 +16,11 @@ def err_drv_unsupported_opt_with_suggestion : Error< "unsupported option '%0'; did you mean '%1'?">; def err_drv_unsupported_opt_for_target : Error< "unsupported option '%0' for target '%1'">; +#ifdef BUILD_FOR_OPENEULER +def warning_drv_unsupported_target_compability : Warning<"unsuportted option '%0'" + "for target '%1', ignored since -fgcc-compatible is enabled">, + InGroup; +#endif def err_drv_unsupported_opt_for_language_mode : Error< "unsupported option '%0' for language mode '%1'">; def err_drv_unsupported_option_argument : Error< diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 4e5f689498d6..9435e816eaab 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -5529,6 +5529,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (Arg *A = Args.getLastArg(options::OPT_fpcc_struct_return, options::OPT_freg_struct_return)) { if (TC.getArch() != llvm::Triple::x86) { +#ifdef BUILD_FOR_OPENEULER + if (Args.hasFlag(options::OPT_fgcc_compatible)) + D.Diag(diag::warning_drv_unsupported_target_compability) + << A->getSpelling() << RawTriple.str(); + else +#endif D.Diag(diag::err_drv_unsupported_opt_for_target) << A->getSpelling() << RawTriple.str(); } else if (A->getOption().matches(options::OPT_fpcc_struct_return)) { @@ -5625,6 +5631,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, D.Diag(diag::err_drv_invalid_argument_to_option) << A->getValue() << A->getOption().getName(); } else +#ifdef BUILD_FOR_OPENEULER + if (Args.hasFlag(options::OPT_fgcc_compatible)) + D.Diag(diag::warning_drv_unsupported_target_compability) + << A->getOption().getName() << TripleStr; + else +#endif D.Diag(diag::err_drv_unsupported_opt_for_target) << A->getOption().getName() << TripleStr; } @@ -5644,6 +5656,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, (A->getOption().getID() != options::OPT_mlong_double_80)) A->render(Args, CmdArgs); else +#ifdef BUILD_FOR_OPENEULER + if (Args.hasFlag(options::OPT_fgcc_compatible)) + D.Diag(diag::warning_drv_unsupported_target_compability) + << A->getOption().getName() << TripleStr; + else +#endif D.Diag(diag::err_drv_unsupported_opt_for_target) << A->getAsString(Args) << TripleStr; } -- Gitee