Author: hans Date: Fri Aug 26 10:45:36 2016 New Revision: 279827 URL: http://llvm.org/viewvc/llvm-project?rev=279827&view=rev Log: Add support for -fdiagnostics-absolute-paths: printing absolute paths in diagnostics
Differential Revision: https://reviews.llvm.org/D23816 Added: cfe/trunk/test/Frontend/Inputs/absolute-paths.h cfe/trunk/test/Frontend/absolute-paths.c Modified: cfe/trunk/include/clang/Basic/DiagnosticOptions.def cfe/trunk/include/clang/Driver/CLCompatOptions.td cfe/trunk/include/clang/Driver/Options.td cfe/trunk/include/clang/Frontend/TextDiagnostic.h cfe/trunk/lib/Driver/Tools.cpp cfe/trunk/lib/Frontend/CompilerInvocation.cpp cfe/trunk/lib/Frontend/TextDiagnostic.cpp cfe/trunk/test/Driver/cl-options.c Modified: cfe/trunk/include/clang/Basic/DiagnosticOptions.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticOptions.def?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/DiagnosticOptions.def (original) +++ cfe/trunk/include/clang/Basic/DiagnosticOptions.def Fri Aug 26 10:45:36 2016 @@ -50,6 +50,7 @@ DIAGOPT(Pedantic, 1, 0) /// -ped DIAGOPT(PedanticErrors, 1, 0) /// -pedantic-errors DIAGOPT(ShowColumn, 1, 1) /// Show column number on diagnostics. DIAGOPT(ShowLocation, 1, 1) /// Show source location information. +DIAGOPT(AbsolutePath, 1, 0) /// Use absolute paths. DIAGOPT(ShowCarets, 1, 1) /// Show carets in diagnostics. DIAGOPT(ShowFixits, 1, 1) /// Show fixit information. DIAGOPT(ShowSourceRanges, 1, 0) /// Show source ranges in numeric form. Modified: cfe/trunk/include/clang/Driver/CLCompatOptions.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/CLCompatOptions.td (original) +++ cfe/trunk/include/clang/Driver/CLCompatOptions.td Fri Aug 26 10:45:36 2016 @@ -291,8 +291,8 @@ def _SLASH_cgthreads : CLIgnoredJoined<" def _SLASH_d2FastFail : CLIgnoredFlag<"d2FastFail">; def _SLASH_d2Zi_PLUS : CLIgnoredFlag<"d2Zi+">; def _SLASH_errorReport : CLIgnoredJoined<"errorReport">; -def _SLASH_Fd : CLIgnoredJoined<"Fd">; def _SLASH_FC : CLIgnoredFlag<"FC">; +def _SLASH_Fd : CLIgnoredJoined<"Fd">; def _SLASH_FS : CLIgnoredFlag<"FS">, HelpText<"Force synchronous PDB writes">; def _SLASH_GF : CLIgnoredFlag<"GF">; def _SLASH_kernel_ : CLIgnoredFlag<"kernel-">; Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Fri Aug 26 10:45:36 2016 @@ -991,6 +991,8 @@ def fno_show_column : Flag<["-"], "fno-s HelpText<"Do not include column number on diagnostics">; def fno_show_source_location : Flag<["-"], "fno-show-source-location">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Do not include source location information with diagnostics">; +def fdiagnostics_absolute_paths : Flag<["-"], "fdiagnostics-absolute-paths">, Group<f_Group>, + Flags<[CC1Option, CoreOption]>, HelpText<"Print absolute paths in diagnostics">; def fno_spell_checking : Flag<["-"], "fno-spell-checking">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Disable spell-checking">; def fno_stack_protector : Flag<["-"], "fno-stack-protector">, Group<f_Group>, Modified: cfe/trunk/include/clang/Frontend/TextDiagnostic.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/TextDiagnostic.h?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/include/clang/Frontend/TextDiagnostic.h (original) +++ cfe/trunk/include/clang/Frontend/TextDiagnostic.h Fri Aug 26 10:45:36 2016 @@ -107,6 +107,8 @@ protected: const SourceManager &SM) override; private: + void emitFilename(StringRef Filename, const SourceManager &SM); + void emitSnippetAndCaret(SourceLocation Loc, DiagnosticsEngine::Level Level, SmallVectorImpl<CharSourceRange>& Ranges, ArrayRef<FixItHint> Hints, Modified: cfe/trunk/lib/Driver/Tools.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Tools.cpp (original) +++ cfe/trunk/lib/Driver/Tools.cpp Fri Aug 26 10:45:36 2016 @@ -5914,6 +5914,9 @@ void Clang::ConstructJob(Compilation &C, options::OPT_fno_show_source_location)) CmdArgs.push_back("-fno-show-source-location"); + if (Args.hasArg(options::OPT_fdiagnostics_absolute_paths)) + CmdArgs.push_back("-fdiagnostics-absolute-paths"); + if (!Args.hasFlag(options::OPT_fshow_column, options::OPT_fno_show_column, true)) CmdArgs.push_back("-fno-show-column"); Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original) +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Fri Aug 26 10:45:36 2016 @@ -945,6 +945,7 @@ bool clang::ParseDiagnosticArgs(Diagnost /*Default=*/true); Opts.ShowFixits = !Args.hasArg(OPT_fno_diagnostics_fixit_info); Opts.ShowLocation = !Args.hasArg(OPT_fno_show_source_location); + Opts.AbsolutePath = Args.hasArg(OPT_fdiagnostics_absolute_paths); Opts.ShowOptionNames = Args.hasArg(OPT_fdiagnostics_show_option); llvm::sys::Process::UseANSIEscapeCodes(Args.hasArg(OPT_fansi_escape_codes)); Modified: cfe/trunk/lib/Frontend/TextDiagnostic.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TextDiagnostic.cpp?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/TextDiagnostic.cpp (original) +++ cfe/trunk/lib/Frontend/TextDiagnostic.cpp Fri Aug 26 10:45:36 2016 @@ -18,6 +18,7 @@ #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/Locale.h" +#include "llvm/Support/Path.h" #include "llvm/Support/raw_ostream.h" #include <algorithm> @@ -763,6 +764,22 @@ void TextDiagnostic::printDiagnosticMess OS << '\n'; } +void TextDiagnostic::emitFilename(StringRef Filename, const SourceManager &SM) { + SmallVector<char, 128> AbsoluteFilename; + if (DiagOpts->AbsolutePath) { + const DirectoryEntry *Dir = SM.getFileManager().getDirectory( + llvm::sys::path::parent_path(Filename)); + if (Dir) { + StringRef DirName = SM.getFileManager().getCanonicalName(Dir); + llvm::sys::path::append(AbsoluteFilename, DirName, + llvm::sys::path::filename(Filename)); + Filename = StringRef(AbsoluteFilename.data(), AbsoluteFilename.size()); + } + } + + OS << Filename; +} + /// \brief Print out the file/line/column information and include trace. /// /// This method handlen the emission of the diagnostic location information. @@ -779,7 +796,7 @@ void TextDiagnostic::emitDiagnosticLoc(S if (FID.isValid()) { const FileEntry* FE = SM.getFileEntryForID(FID); if (FE && FE->isValid()) { - OS << FE->getName(); + emitFilename(FE->getName(), SM); if (FE->isInPCH()) OS << " (in PCH)"; OS << ": "; @@ -795,7 +812,7 @@ void TextDiagnostic::emitDiagnosticLoc(S if (DiagOpts->ShowColors) OS.changeColor(savedColor, true); - OS << PLoc.getFilename(); + emitFilename(PLoc.getFilename(), SM); switch (DiagOpts->getFormat()) { case DiagnosticOptions::Clang: OS << ':' << LineNo; break; case DiagnosticOptions::MSVC: OS << '(' << LineNo; break; Modified: cfe/trunk/test/Driver/cl-options.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=279827&r1=279826&r2=279827&view=diff ============================================================================== --- cfe/trunk/test/Driver/cl-options.c (original) +++ cfe/trunk/test/Driver/cl-options.c Fri Aug 26 10:45:36 2016 @@ -339,7 +339,6 @@ // RUN: /FAs \ // RUN: /FAu \ // RUN: /favor:blend \ -// RUN: /FC \ // RUN: /Fifoo \ // RUN: /Fmfoo \ // RUN: /FpDebug\main.pch \ @@ -491,6 +490,7 @@ // RUN: -fdiagnostics-color \ // RUN: -fno-diagnostics-color \ // RUN: -fdiagnostics-parseable-fixits \ +// RUN: -fdiagnostics-absolute-paths \ // RUN: -ferror-limit=10 \ // RUN: -fmsc-version=1800 \ // RUN: -fno-strict-aliasing \ Added: cfe/trunk/test/Frontend/Inputs/absolute-paths.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/Inputs/absolute-paths.h?rev=279827&view=auto ============================================================================== --- cfe/trunk/test/Frontend/Inputs/absolute-paths.h (added) +++ cfe/trunk/test/Frontend/Inputs/absolute-paths.h Fri Aug 26 10:45:36 2016 @@ -0,0 +1,3 @@ +int f() { + // Oops, no return. +} Added: cfe/trunk/test/Frontend/absolute-paths.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/absolute-paths.c?rev=279827&view=auto ============================================================================== --- cfe/trunk/test/Frontend/absolute-paths.c (added) +++ cfe/trunk/test/Frontend/absolute-paths.c Fri Aug 26 10:45:36 2016 @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -fsyntax-only -I %S/Inputs/SystemHeaderPrefix/.. %s 2>&1 | FileCheck -check-prefix=NORMAL -check-prefix=CHECK %s +// RUN: %clang_cc1 -fsyntax-only -I %S/Inputs/SystemHeaderPrefix/.. -fdiagnostics-absolute-paths %s 2>&1 | FileCheck -check-prefix=ABSOLUTE -check-prefix=CHECK %s + +#include "absolute-paths.h" + +// Check whether the diagnostic from the header above includes the dummy +// directory in the path. +// NORMAL: SystemHeaderPrefix +// ABSOLUTE-NOT: SystemHeaderPrefix +// CHECK: warning: control reaches end of non-void function + + +// For files which don't exist, just print the filename. +#line 123 "non-existant.c" +int g() {} +// NORMAL: non-existant.c:123:10: warning: control reaches end of non-void function +// ABSOLUTE: non-existant.c:123:10: warning: control reaches end of non-void function _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits