From bb5c5323ac3e9bfcf6662d06bb4103adf25be117 Mon Sep 17 00:00:00 2001 From: Yunfei Li Date: Thu, 23 Mar 2023 17:24:04 +0800 Subject: [PATCH 1/2] [Gcc Compat] Add option -fgcc-compatible to clang Add -fgcc-compatible and -fno-gcc-compatible to clang compile options --- clang/include/clang/Basic/DiagnosticOptions.def | 2 ++ clang/include/clang/Basic/LangOptions.def | 2 ++ clang/include/clang/Driver/Options.td | 6 ++++++ clang/lib/Driver/ToolChains/Clang.cpp | 6 ++++++ 4 files changed, 16 insertions(+) diff --git a/clang/include/clang/Basic/DiagnosticOptions.def b/clang/include/clang/Basic/DiagnosticOptions.def index 7be81f6b6a95..4ad691188a69 100644 --- a/clang/include/clang/Basic/DiagnosticOptions.def +++ b/clang/include/clang/Basic/DiagnosticOptions.def @@ -95,6 +95,8 @@ VALUE_DIAGOPT(TabStop, 32, DefaultTabStop) /// The distance between tab stops. /// Column limit for formatting message diagnostics, or 0 if unused. VALUE_DIAGOPT(MessageLength, 32, 0) +DIAGOPT(GccCompatible, 1, 0) /// -fgcc_compatible + #undef DIAGOPT #undef ENUM_DIAGOPT #undef VALUE_DIAGOPT diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index ad366821f3cb..ee547b38130f 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -449,6 +449,8 @@ ENUM_LANGOPT(ExtendIntArgs, ExtendArgsKind, 1, ExtendArgsKind::ExtendTo32, VALUE_LANGOPT(FuchsiaAPILevel, 32, 0, "Fuchsia API level") +LANGOPT(GccCompatible, 1, 0, "Enable gcc compatibility.") + // This option will be removed in the future once the backend // supports all operations (like division or float-to-integer conversion) // on large _BitInts. diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 3cab37b21aaf..cffa38d83d0e 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -522,6 +522,12 @@ defvar std = !strconcat("LangStandard::getLangStandardForKind(", lang_std.KeyPat // Developer Driver Options +def fgcc_compatible : Flag<["-"], "fgcc-compatible">, Group, + MarshallingInfoFlag>, Flags<[CC1Option, NoArgumentUnused]>, + HelpText<"Enable gcc compatibility.">; +def fno_gcc_compatible : Flag<["-"], "fno-gcc-compatible">, Group, + Flags<[CC1Option, NoArgumentUnused]>; + def internal_Group : OptionGroup<"">, Flags<[HelpHidden]>; def internal_driver_Group : OptionGroup<"">, Group, HelpText<"DRIVER OPTIONS">; diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 3704ed858668..fc0e4752856a 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4542,6 +4542,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("-triple"); CmdArgs.push_back(Args.MakeArgString(TripleStr)); + if (Args.hasFlag(options::OPT_fgcc_compatible, + options::OPT_fno_gcc_compatible, false)) { + Args.AddLastArg(CmdArgs, options::OPT_fgcc_compatible, + options::OPT_fno_gcc_compatible); + } + if (const Arg *MJ = Args.getLastArg(options::OPT_MJ)) { DumpCompilationDatabase(C, MJ->getValue(), TripleStr, Output, Input, Args); Args.ClaimAllArgs(options::OPT_MJ); -- Gitee From 9b8d876c212f53c76ca9948051a5a1e006d6cb53 Mon Sep 17 00:00:00 2001 From: liyunfei Date: Wed, 8 Nov 2023 16:59:32 +0800 Subject: [PATCH 2/2] [GccCompat] prevent some werror option for clang with gcc compatible flag --- clang/lib/Driver/ToolChains/Clang.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index fc0e4752856a..5929f19b2759 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4544,6 +4544,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, if (Args.hasFlag(options::OPT_fgcc_compatible, options::OPT_fno_gcc_compatible, false)) { + CmdArgs.push_back("-Wno-error=unknown-warning-option"); + CmdArgs.push_back("-Wno-error=unused-command-line-argument"); Args.AddLastArg(CmdArgs, options::OPT_fgcc_compatible, options::OPT_fno_gcc_compatible); } -- Gitee