]> git.ipfire.org Git - thirdparty/gcc.git/commit
diagnostics: Support for -finput-charset [PR93067]
authorLewis Hyatt <lhyatt@gmail.com>
Tue, 24 Aug 2021 23:30:44 +0000 (19:30 -0400)
committerLewis Hyatt <lhyatt@gmail.com>
Wed, 25 Aug 2021 15:15:28 +0000 (11:15 -0400)
commit3ac6b5cff1eca4e1748c671960ef7b4ca5e47fd2
tree688dfb2b2708df32fd2e6b548061eea352e79cea
parent43a5d46feabd93ba78983919234f05f5fc9a0982
diagnostics: Support for -finput-charset [PR93067]

Adds the logic to handle -finput-charset in layout_get_source_line(), so that
source lines are converted from their input encodings prior to being output by
diagnostics machinery. Also adds the ability to strip a UTF-8 BOM similarly.

gcc/c-family/ChangeLog:

PR other/93067
* c-opts.c (c_common_input_charset_cb): New function.
(c_common_post_options): Call new function
diagnostic_initialize_input_context().

gcc/d/ChangeLog:

PR other/93067
* d-lang.cc (d_input_charset_callback): New function.
(d_init): Call new function
diagnostic_initialize_input_context().

gcc/fortran/ChangeLog:

PR other/93067
* cpp.c (gfc_cpp_post_options): Call new function
diagnostic_initialize_input_context().

gcc/ChangeLog:

PR other/93067
* coretypes.h (typedef diagnostic_input_charset_callback): Declare.
* diagnostic.c (diagnostic_initialize_input_context): New function.
* diagnostic.h (diagnostic_initialize_input_context): Declare.
* input.c (default_charset_callback): New function.
(file_cache::initialize_input_context): New function.
(file_cache_slot::create): Added ability to convert the input
according to the input context.
(file_cache::file_cache): Initialize the new input context.
(class file_cache_slot): Added new m_alloc_offset member.
(file_cache_slot::file_cache_slot): Initialize the new member.
(file_cache_slot::~file_cache_slot): Handle potentially offset buffer.
(file_cache_slot::maybe_grow): Likewise.
(file_cache_slot::needs_read_p): Handle NULL fp, which is now possible.
(file_cache_slot::get_next_line): Likewise.
* input.h (class file_cache): Added input context member.

libcpp/ChangeLog:

PR other/93067
* charset.c (init_iconv_desc): Adapt to permit PFILE argument to
be NULL.
(_cpp_convert_input): Likewise. Also move UTF-8 BOM logic to...
(cpp_check_utf8_bom): ...here.  New function.
(cpp_input_conversion_is_trivial): New function.
* files.c (read_file_guts): Allow PFILE argument to be NULL.  Add
INPUT_CHARSET argument as an alternate source of this information.
(read_file): Pass the new argument to read_file_guts.
(cpp_get_converted_source): New function.
* include/cpplib.h (struct cpp_converted_source): Declare.
(cpp_get_converted_source): Declare.
(cpp_input_conversion_is_trivial): Declare.
(cpp_check_utf8_bom): Declare.

gcc/testsuite/ChangeLog:

PR other/93067
* gcc.dg/diagnostic-input-charset-1.c: New test.
* gcc.dg/diagnostic-input-utf8-bom.c: New test.
13 files changed:
gcc/c-family/c-opts.c
gcc/coretypes.h
gcc/d/d-lang.cc
gcc/diagnostic.c
gcc/diagnostic.h
gcc/fortran/cpp.c
gcc/input.c
gcc/input.h
gcc/testsuite/gcc.dg/diagnostic-input-charset-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/diagnostic-input-utf8-bom.c [new file with mode: 0644]
libcpp/charset.c
libcpp/files.c
libcpp/include/cpplib.h