From 96a7a225f5f99b1145687dc678c08663bd3b9370 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 2 Aug 2019 05:04:27 +0000 Subject: Add a comment for --vs-diagnostics. llvm-svn: 367650 --- lld/Common/ErrorHandler.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'lld/Common/ErrorHandler.cpp') diff --git a/lld/Common/ErrorHandler.cpp b/lld/Common/ErrorHandler.cpp index 592b5b508da..f22de2531f9 100644 --- a/lld/Common/ErrorHandler.cpp +++ b/lld/Common/ErrorHandler.cpp @@ -85,6 +85,27 @@ void lld::checkError(Error e) { [&](ErrorInfoBase &eib) { error(eib.message()); }); } +// This is for --vs-diagnostics. +// +// Normally, lld's error message starts with argv[0]. Therefore, it usually +// looks like this: +// +// ld.lld: error: ... +// +// This error message style is unfortunately unfriendly to Visual Studio +// IDE. VS interprets the first word of the first line as an error location +// and make it clickable, thus "ld.lld" in the above message would become a +// clickable text. When you click it, VS opens "ld.lld" executable file with +// a binary editor. +// +// As a workaround, we print out an error location instead of "ld.lld" if +// lld is running in VS diagnostics mode. As a result, error message will +// look like this: +// +// src/foo.c(35): error: ... +// +// This function returns an error location string. An error location is +// extracted from an error message using regexps. std::string ErrorHandler::getLocation(const Twine &msg) { if (!vsDiagnostics) return logName; -- cgit v1.2.3