diff --git a/clang/include/clang/Basic/DiagnosticOptions.def b/clang/include/clang/Basic/DiagnosticOptions.def index 7be81f6b6a9541546896ab5abccea553a721e3b3..4ad691188a69e892f3dfbd19692c53d3cc184b72 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 ad366821f3cbff1153654f2bcad21381fa14313c..ee547b38130f1c2ef82264dc0d67cecf61411fc9 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 3cab37b21aaf3f4bee4daecb21bd90d3cb5cf069..cffa38d83d0e3b55740a1050cd18d49506ac634b 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 3704ed8586682677882acb8e1b82bfc14b1d07a5..5929f19b27593d81313e52981d060046f6d0f8a9 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4542,6 +4542,14 @@ 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)) { + 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); + } + if (const Arg *MJ = Args.getLastArg(options::OPT_MJ)) { DumpCompilationDatabase(C, MJ->getValue(), TripleStr, Output, Input, Args); Args.ClaimAllArgs(options::OPT_MJ);