r179728 - Add support for gcc's spelling of -fcolor-diagnostics.
Matthieu Monrocq
matthieu.monrocq at gmail.com
Thu Apr 18 10:51:50 PDT 2013
On Wed, Apr 17, 2013 at 11:52 PM, Nico Weber <nicolasweber at gmx.de> wrote:
> Author: nico
> Date: Wed Apr 17 16:52:44 2013
> New Revision: 179728
>
> URL: http://llvm.org/viewvc/llvm-project?rev=179728&view=rev
> Log:
> Add support for gcc's spelling of -fcolor-diagnostics.
>
> See http://gcc.gnu.org/onlinedocs/gcc/Language-Independent-Options.html
>
>
> Is there any reason to support both ? Or rather, any idea why gcc did not
align (since for once *they* are coming late to the party).
It seems rather wasteful to have both...
-- Matthieu
> Added:
> cfe/trunk/test/Driver/color-diagnostics.c
> Modified:
> cfe/trunk/include/clang/Driver/Options.td
> cfe/trunk/lib/Driver/Tools.cpp
>
> Modified: cfe/trunk/include/clang/Driver/Options.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=179728&r1=179727&r2=179728&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Driver/Options.td (original)
> +++ cfe/trunk/include/clang/Driver/Options.td Wed Apr 17 16:52:44 2013
> @@ -333,6 +333,8 @@ def fcatch_undefined_behavior : Flag<["-
> def fclasspath_EQ : Joined<["-"], "fclasspath=">, Group<f_Group>;
> def fcolor_diagnostics : Flag<["-"], "fcolor-diagnostics">,
> Group<f_Group>, Flags<[CC1Option]>,
> HelpText<"Use colors in diagnostics">;
> +def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">,
> Group<f_Group>;
> +def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">,
> Group<f_Group>;
> def fcomment_block_commands : CommaJoined<["-"],
> "fcomment-block-commands=">, Group<f_clang_Group>, Flags<[CC1Option]>,
> HelpText<"Treat each comma separated argument in <arg> as a
> documentation comment block command">,
> MetaVarName<"<arg>">;
> @@ -539,6 +541,7 @@ def fno_builtin : Flag<["-"], "fno-built
> def fno_caret_diagnostics : Flag<["-"], "fno-caret-diagnostics">,
> Group<f_Group>,
> Flags<[CC1Option]>;
> def fno_color_diagnostics : Flag<["-"], "fno-color-diagnostics">,
> Group<f_Group>;
> +def fno_diagnostics_color : Flag<["-"], "fno-diagnostics-color">,
> Group<f_Group>;
> def fno_common : Flag<["-"], "fno-common">, Group<f_Group>,
> Flags<[CC1Option]>,
> HelpText<"Compile common globals like normal definitions">;
> def fno_constant_cfstrings : Flag<["-"], "fno-constant-cfstrings">,
> Group<f_Group>,
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=179728&r1=179727&r2=179728&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 17 16:52:44 2013
> @@ -3200,9 +3200,42 @@ void Clang::ConstructJob(Compilation &C,
>
> // Color diagnostics are the default, unless the terminal doesn't
> support
> // them.
> - if (Args.hasFlag(options::OPT_fcolor_diagnostics,
> - options::OPT_fno_color_diagnostics,
> - llvm::sys::Process::StandardErrHasColors()))
> + // Support both clang's -f[no-]color-diagnostics and gcc's
> + // -f[no-]diagnostics-colors[=never|always|auto].
> + enum { Colors_On, Colors_Off, Colors_Auto } ShowColors = Colors_Auto;
> + for (ArgList::const_iterator it = Args.begin(), ie = Args.end();
> + it != ie; ++it) {
> + const Option &O = (*it)->getOption();
> + if (!O.matches(options::OPT_fcolor_diagnostics) &&
> + !O.matches(options::OPT_fdiagnostics_color) &&
> + !O.matches(options::OPT_fno_color_diagnostics) &&
> + !O.matches(options::OPT_fno_diagnostics_color) &&
> + !O.matches(options::OPT_fdiagnostics_color_EQ))
> + continue;
> +
> + (*it)->claim();
> + if (O.matches(options::OPT_fcolor_diagnostics) ||
> + O.matches(options::OPT_fdiagnostics_color)) {
> + ShowColors = Colors_On;
> + } else if (O.matches(options::OPT_fno_color_diagnostics) ||
> + O.matches(options::OPT_fno_diagnostics_color)) {
> + ShowColors = Colors_Off;
> + } else {
> + assert(O.matches(options::OPT_fdiagnostics_color_EQ));
> + StringRef value((*it)->getValue());
> + if (value == "always")
> + ShowColors = Colors_On;
> + else if (value == "never")
> + ShowColors = Colors_Off;
> + else if (value == "auto")
> + ShowColors = Colors_Auto;
> + else
> + getToolChain().getDriver().Diag(diag::err_drv_clang_unsupported)
> + << ("-fdiagnostics-color=" + value).str();
> + }
> + }
> + if (ShowColors == Colors_On ||
> + (ShowColors == Colors_Auto &&
> llvm::sys::Process::StandardErrHasColors()))
> CmdArgs.push_back("-fcolor-diagnostics");
>
> if (!Args.hasFlag(options::OPT_fshow_source_location,
>
> Added: cfe/trunk/test/Driver/color-diagnostics.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/color-diagnostics.c?rev=179728&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/Driver/color-diagnostics.c (added)
> +++ cfe/trunk/test/Driver/color-diagnostics.c Wed Apr 17 16:52:44 2013
> @@ -0,0 +1,53 @@
> +// RUN: %clang -fcolor-diagnostics -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=CD %s
> +// CHECK-CD: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fno-color-diagnostics -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=NCD %s
> +// CHECK-NCD-NOT: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fdiagnostics-color -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=DC %s
> +// CHECK-DC: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fno-diagnostics-color -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=NDC %s
> +// CHECK-NDC-NOT: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fdiagnostics-color=always -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=DCE_A %s
> +// CHECK-DCE_A: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fdiagnostics-color=never -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=DCE_N %s
> +// CHECK-DCE_N-NOT: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// The test doesn't run in a PTY, so "auto" defaults to off.
> +// RUN: %clang -fdiagnostics-color=auto -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=DCE_AUTO %s
> +// CHECK-DCE_AUTO-NOT: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fdiagnostics-color=foo -### -c %s 2>&1 \
> +// RUN: | FileCheck --check-prefix=DCE_FOO %s
> +// CHECK-DCE_FOO: error: the clang compiler does not support
> '-fdiagnostics-color=foo'
> +
> +// Check that the last flag wins.
> +// RUN: %clang -fno-color-diagnostics -fdiagnostics-color -### -c %s 2>&1
> \
> +// RUN: | FileCheck --check-prefix=NCD_DC_S %s
> +// CHECK-NCD_DC_S: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fcolor-diagnostics -fno-diagnostics-color -### -c %s 2>&1
> \
> +// RUN: | FileCheck --check-prefix=CD_NDC_S %s
> +// CHECK-CD_NDC_S-NOT: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fdiagnostics-color -fno-color-diagnostics -### -c %s 2>&1
> \
> +// RUN: | FileCheck --check-prefix=DC_NCD_S %s
> +// CHECK-DC_NCD_S-NOT: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fno-diagnostics-color -fcolor-diagnostics -### -c %s 2>&1
> \
> +// RUN: | FileCheck --check-prefix=NDC_CD_S %s
> +// CHECK-NDC_CD_S: clang{{.*}}" "-fcolor-diagnostics"
> +
> +// RUN: %clang -fcolor-diagnostics -fdiagnostics-color=auto -### -c %s
> 2>&1 \
> +// RUN: | FileCheck --check-prefix=CD_DCE_AUTO_S %s
> +// CHECK-CD_DCE_AUTO_S-NOT: clang{{.*}}" "-fcolor-diagnostics"
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130418/2d38a879/attachment.html>
More information about the cfe-commits
mailing list