[lld] r287978 - Make getColorDiagnostics return a boolean value instead of an enum.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Sat Nov 26 07:10:01 PST 2016
Author: ruiu
Date: Sat Nov 26 09:10:01 2016
New Revision: 287978
URL: http://llvm.org/viewvc/llvm-project?rev=287978&view=rev
Log:
Make getColorDiagnostics return a boolean value instead of an enum.
Config->ColorDiagnostics was of type enum before. Now it is just a
boolean flag. Thanks Rafael for suggestion.
Modified:
lld/trunk/ELF/Config.h
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/Error.cpp
Modified: lld/trunk/ELF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=287978&r1=287977&r2=287978&view=diff
==============================================================================
--- lld/trunk/ELF/Config.h (original)
+++ lld/trunk/ELF/Config.h Sat Nov 26 09:10:01 2016
@@ -34,9 +34,6 @@ enum ELFKind {
// For --build-id.
enum class BuildIdKind { None, Fast, Md5, Sha1, Hexstring, Uuid };
-// For --color-diagnostics.
-enum class ColorPolicy { Auto, Always, Never };
-
// For --discard-{all,locals,none}.
enum class DiscardPolicy { Default, All, Locals, None };
@@ -100,6 +97,7 @@ struct Configuration {
bool AsNeeded = false;
bool Bsymbolic;
bool BsymbolicFunctions;
+ bool ColorDiagnostics = false;
bool Demangle = true;
bool DisableVerify;
bool EhFrameHdr;
@@ -138,7 +136,6 @@ struct Configuration {
bool ZRelro;
bool ExitEarly;
bool ZWxneeded;
- ColorPolicy ColorDiagnostics = ColorPolicy::Auto;
DiscardPolicy Discard;
SortSectionPolicy SortSection;
StripPolicy Strip = StripPolicy::None;
@@ -149,7 +146,7 @@ struct Configuration {
uint16_t DefaultSymbolVersion = llvm::ELF::VER_NDX_GLOBAL;
uint16_t EMachine = llvm::ELF::EM_NONE;
uint64_t EntryAddr = 0;
- uint64_t ErrorLimit = 20; // initialize it early so that error() won't complain
+ uint64_t ErrorLimit = 20;
uint64_t ImageBase;
uint64_t MaxPageSize;
uint64_t ZStackSize;
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=287978&r1=287977&r2=287978&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Sat Nov 26 09:10:01 2016
@@ -25,6 +25,7 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/Process.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdlib>
@@ -285,9 +286,35 @@ static uint64_t getZOptionValue(opt::Inp
return Default;
}
+// Parse -color-diagnostics={auto,always,never} or -no-color-diagnostics.
+static bool getColorDiagnostics(opt::InputArgList &Args) {
+ bool Default = (ErrorOS == &errs() && Process::StandardErrHasColors());
+
+ auto *Arg = Args.getLastArg(OPT_color_diagnostics, OPT_no_color_diagnostics);
+ if (!Arg)
+ return Default;
+ if (Arg->getOption().getID() == OPT_no_color_diagnostics)
+ return false;
+
+ StringRef S = Arg->getValue();
+ if (S == "auto")
+ return Default;
+ if (S == "always")
+ return true;
+ if (S != "never")
+ error("unknown -color-diagnostics value: " + S);
+ return false;
+}
+
void LinkerDriver::main(ArrayRef<const char *> ArgsArr, bool CanExitEarly) {
ELFOptTable Parser;
opt::InputArgList Args = Parser.parse(ArgsArr.slice(1));
+
+ // Read some flags early because error() depends on them.
+ Config->ErrorLimit = getInteger(Args, OPT_error_limit, 20);
+ Config->ColorDiagnostics = getColorDiagnostics(Args);
+
+ // Handle -help
if (Args.hasArg(OPT_help)) {
printHelp(ArgsArr[0]);
return;
@@ -392,24 +419,6 @@ static bool getArg(opt::InputArgList &Ar
return Default;
}
-// Parse -color-diagnostics={auto,always,never} or -no-color-diagnostics.
-static ColorPolicy getColorDiagnostics(opt::InputArgList &Args) {
- auto *Arg = Args.getLastArg(OPT_color_diagnostics, OPT_no_color_diagnostics);
- if (!Arg)
- return ColorPolicy::Auto;
- if (Arg->getOption().getID() == OPT_no_color_diagnostics)
- return ColorPolicy::Never;
-
- StringRef S = Arg->getValue();
- if (S == "auto")
- return ColorPolicy::Auto;
- if (S == "always")
- return ColorPolicy::Always;
- if (S != "never")
- error("unknown -color-diagnostics value: " + S);
- return ColorPolicy::Never;
-}
-
static DiscardPolicy getDiscardOption(opt::InputArgList &Args) {
auto *Arg =
Args.getLastArg(OPT_discard_all, OPT_discard_locals, OPT_discard_none);
@@ -504,13 +513,11 @@ void LinkerDriver::readConfigs(opt::Inpu
Config->AllowMultipleDefinition = Args.hasArg(OPT_allow_multiple_definition);
Config->Bsymbolic = Args.hasArg(OPT_Bsymbolic);
Config->BsymbolicFunctions = Args.hasArg(OPT_Bsymbolic_functions);
- Config->ColorDiagnostics = getColorDiagnostics(Args);
Config->Demangle = getArg(Args, OPT_demangle, OPT_no_demangle, true);
Config->DisableVerify = Args.hasArg(OPT_disable_verify);
Config->Discard = getDiscardOption(Args);
Config->EhFrameHdr = Args.hasArg(OPT_eh_frame_hdr);
Config->EnableNewDtags = !Args.hasArg(OPT_disable_new_dtags);
- Config->ErrorLimit = getInteger(Args, OPT_error_limit, 20);
Config->ExportDynamic = Args.hasArg(OPT_export_dynamic);
Config->FatalWarnings = Args.hasArg(OPT_fatal_warnings);
Config->GcSections = getArg(Args, OPT_gc_sections, OPT_no_gc_sections, false);
Modified: lld/trunk/ELF/Error.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Error.cpp?rev=287978&r1=287977&r2=287978&view=diff
==============================================================================
--- lld/trunk/ELF/Error.cpp (original)
+++ lld/trunk/ELF/Error.cpp Sat Nov 26 09:10:01 2016
@@ -13,7 +13,6 @@
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ManagedStatic.h"
-#include "llvm/Support/Process.h"
#include "llvm/Support/raw_ostream.h"
#include <mutex>
@@ -34,17 +33,9 @@ StringRef elf::Argv0;
// but outs() or errs() are not thread-safe. We protect them using a mutex.
static std::mutex Mu;
-static bool useColor() {
- if (Config->ColorDiagnostics == ColorPolicy::Always)
- return true;
- if (Config->ColorDiagnostics == ColorPolicy::Never)
- return false;
- return ErrorOS == &errs() && sys::Process::StandardErrHasColors();
-}
-
static void print(StringRef S, raw_ostream::Colors C) {
*ErrorOS << Argv0 + ": ";
- if (useColor()) {
+ if (Config->ColorDiagnostics) {
ErrorOS->changeColor(C, true);
*ErrorOS << S;
ErrorOS->resetColor();
More information about the llvm-commits
mailing list