diff --git a/clang-tools-extra/clang-tidy/ClangTidy.cpp b/clang-tools-extra/clang-tidy/ClangTidy.cpp --- a/clang-tools-extra/clang-tidy/ClangTidy.cpp +++ b/clang-tools-extra/clang-tidy/ClangTidy.cpp @@ -110,6 +110,9 @@ DiagOpts->ShowColors = Context.getOptions().UseColor.getValueOr( llvm::sys::Process::StandardOutHasColors()); DiagPrinter->BeginSourceFile(LangOpts); + if (DiagOpts->ShowColors && !llvm::sys::Process::StandardOutIsDisplayed()) { + llvm::sys::Process::UseANSIEscapeCodes(true); + } } SourceManager &getSourceManager() { return SourceMgr; } diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/use-color.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/use-color.cpp --- a/clang-tools-extra/test/clang-tidy/infrastructure/use-color.cpp +++ b/clang-tools-extra/test/clang-tidy/infrastructure/use-color.cpp @@ -5,7 +5,6 @@ // RUN: clang-tidy -config='UseColor: false' -dump-config | FileCheck -check-prefix=CHECK-CONFIG-NO-COLOR %s // RUN: clang-tidy -help | FileCheck -check-prefix=CHECK-OPT-PRESENT %s -// REQUIRES: ansi-escape-sequences // RUN: clang-tidy -checks='-*, modernize-use-override' -extra-arg=-std=c++11 -use-color=false %s | FileCheck -check-prefix=CHECK-NO-COLOR %s // RUN: clang-tidy -checks='-*, modernize-use-override' -extra-arg=-std=c++11 %s | FileCheck -check-prefix=CHECK-NO-COLOR %s // RUN: clang-tidy -checks='-*, modernize-use-override' -extra-arg=-std=c++11 -use-color %s | FileCheck -check-prefix=CHECK-COLOR %s diff --git a/llvm/lib/Support/Windows/Process.inc b/llvm/lib/Support/Windows/Process.inc --- a/llvm/lib/Support/Windows/Process.inc +++ b/llvm/lib/Support/Windows/Process.inc @@ -327,9 +327,10 @@ if (enable) { HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE); DWORD Mode; - GetConsoleMode(Console, &Mode); - Mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; - SetConsoleMode(Console, Mode); + if (GetConsoleMode(Console, &Mode) != 0) { + Mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; + SetConsoleMode(Console, Mode); + } } #endif UseANSI = enable;