GCC modified for the FreeChainXenon project
Find a file
David Malcolm 0141ab44c5 diagnostics: add minimum width to left margin for line numbers
This patch adds a minimum width to the left margin used for printing
line numbers.   I set the default to 6.  Hence rather than:

some-filename:9:1: some message
9 | some source text
  | ^~~~~~~~~~~~~~~~
some-filename:10:1: another message
10 | more source text
   | ^~~~~~~~~~~~~~~~

we now print:

some-filename:9:42: some message
    9 | some source text
      | ^~~~~~~~~~~~~~~~
some-filename:10:42: another message
   10 | more source text
      | ^~~~~~~~~~~~~~~~

This implicitly fixes issues with margins failing to line up due
to different lengths of the number when we haven't read the full
file yet and so don't know the highest possible line number, for
line numbers up to 99999.

Doing so adds some whitespace on the left-hand side, for non-huge
files, at least.  I believe that this makes it easier to see where each
diagnostic starts, by visually breaking things up at the leftmost
column; my hope is to make it easier for the eye to see the different
diagnostics as if they were different "paragraphs".

gcc/ChangeLog:
	* common.opt (fdiagnostics-minimum-margin-width=): New option.
	* diagnostic-show-locus.c (layout::layout): Apply the minimum
	margin width.
	(layout::start_annotation_line): Only print up to 3 of the
	margin character, to avoid touching the left-hand side.
	(selftest::test_diagnostic_show_locus_fixit_lines): Update for
	minimum margin width, as set by test_diagnostic_context's ctor.
	(selftest::test_fixit_insert_containing_newline): Likewise.
	(selftest::test_fixit_insert_containing_newline_2): Likewise.
	(selftest::test_line_numbers_multiline_range): Clear
	dc.min_margin_width.
	* diagnostic.c (diagnostic_initialize): Initialize
	min_margin_width.
	* diagnostic.h (struct diagnostic_context): Add field
	"min_margin_width".
	* doc/invoke.texi: Add -fdiagnostics-minimum-margin-width=.
	* opts.c (common_handle_option): Handle
	OPT_fdiagnostics_minimum_margin_width_.
	* selftest-diagnostic.c
	(selftest::test_diagnostic_context::test_diagnostic_context):
	Initialize min_margin_width to 6.
	* toplev.c (general_init): Initialize global_dc->min_margin_width.

gcc/testsuite/ChangeLog:
	* gcc.dg/missing-header-fixit-3.c: Update expected indentation
	to reflect minimum margin width.
	* gcc.dg/missing-header-fixit-4.c: Likewise.
	* gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers.c:
	Likewise.
	* gcc.dg/plugin/diagnostic-test-show-locus-color-line-numbers.c:
	Likewise.
	* gcc.dg/plugin/diagnostic-test-show-locus-bw-line-numbers-2.c:
	New test.
	* gcc.dg/plugin/plugin.exp (plugin_test_list): Add it.

From-SVN: r265178
2018-10-15 22:16:59 +00:00
config
contrib contrib: unused_functions.py: Handle archives 2018-10-05 00:28:18 +02:00
fixincludes
gcc diagnostics: add minimum width to left margin for line numbers 2018-10-15 22:16:59 +00:00
gnattools
gotools Ignore chmod errors during mostlyclean-local, check-go-tool 2018-09-26 12:56:09 +00:00
include
INSTALL
intl
libada
libatomic
libbacktrace re PR libbacktrace/87529 (libbacktrace API forces users to have memory leaks) 2018-10-05 14:09:07 +00:00
libcc1
libcpp libcpp: show macro definition when used with wrong argument count 2018-10-11 13:21:28 +00:00
libdecnumber
libffi
libgcc tighten the toplevel guard on ibm-ldouble.c 2018-10-12 21:25:46 +00:00
libgfortran Use gfc_charlen_type instead of int for string lenghts 2018-10-06 21:21:00 +03:00
libgo runtime: skip testSetPanicOnFault for gollvm 2018-10-09 16:51:10 +00:00
libgomp
libhsail-rt
libiberty [libiberty] Use pipe inside pex_run 2018-10-01 18:46:51 +00:00
libitm
libobjc
liboffloadmic
libquadmath
libsanitizer
libssp
libstdc++-v3 Adjust test to pass with latest glibc 2018-10-15 14:55:42 +01:00
libvtv
lto-plugin
maintainer-scripts
zlib
.dir-locals.el
.gitattributes
.gitignore
ABOUT-NLS
ChangeLog * MAINTAINERS: Update my email address. 2018-10-14 09:45:35 +00:00
ChangeLog.jit
ChangeLog.tree-ssa
compile
config-ml.in
config.guess
config.rpath
config.sub
configure
configure.ac
COPYING
COPYING.LIB
COPYING.RUNTIME
COPYING3
COPYING3.LIB
depcomp
install-sh
libtool-ldflags
libtool.m4
ltgcc.m4
ltmain.sh
ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
MAINTAINERS * MAINTAINERS: Update my email address. 2018-10-14 09:45:35 +00:00
Makefile.def
Makefile.in
Makefile.tpl
missing
mkdep
mkinstalldirs
move-if-change
README
symlink-tree
ylwrap

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.