https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93387

            Bug ID: 93387
           Summary: Invalid read of size 4 in linemap_lookup with pch and
                    -std=gnu++2a
           Product: gcc
           Version: 9.2.1
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
  Target Milestone: ---

Hello.

I see a failure when building telegram-desktop package which utilizes a
pre-compiled header:

$ g++ export_output_html.ii -fmax-errors=1 -Winvalid-pch -O3 -DNDEBUG
-fno-strict-aliasing -Wall -W -fPIC -Wno-unused-variable -Wno-unused-parameter
-Wno-unused-function -Wno-switch -Wno-comment -Wno-unused-but-set-variable
-Wno-missing-field-initializers -Wno-sign-compare -Wno-attributes
-Wno-parentheses -Wno-stringop-overflow -Wno-maybe-uninitialized
-Wno-error=class-memaccess -std=gnu++2a
In file included from
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/range_fwd.hpp:22,
                 from
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/action/action.hpp:21,
                 from
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/action.hpp:17,
                 from
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/all.hpp:17,
                 from
/home/abuild/rpmbuild/BUILD/tdesktop-1.9.6-full/Telegram/SourceFiles/export/export_pch.h:29,
                 from
/home/abuild/rpmbuild/BUILD/tdesktop-1.9.6-full/build/Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx:5,
                 from <command-line>:
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/utility/semiregular_box.hpp:
In instantiation of ‘struct
ranges::semiregular_box<ranges::indirected<SerializeString(std::vector<TextPart>)::<lambda(TextPart)>
> >’:
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/view/transform.hpp:106:57:
  required from ‘struct
ranges::iter_transform_view<ranges::ref_view<std::vector<TextPart> >,
ranges::indirected<SerializeString(std::vector<TextPart>)::<lambda(TextPart)> >
>’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/view/transform.hpp:190:12:
  required from ‘struct
ranges::transform_view<ranges::ref_view<std::vector<TextPart> >,
SerializeString(std::vector<TextPart>)::<lambda(TextPart)> >’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/functional/invoke.hpp:133:40:
  required from ‘constexpr decltype
((F&&)(f)((Args&(ranges::invoke_fn::operator()::args))...))
ranges::invoke_fn::operator()(F&&, Args&& ...) const [with F = const
ranges::views::transform_base_fn&; Args = {std::vector<TextPart,
std::allocator<TextPart> >&, const
SerializeString(std::vector<TextPart>)::<lambda(TextPart)>&}; decltype
((F&&)(f)((Args&(ranges::invoke_fn::operator()::args))...)) =
ranges::transform_view<ranges::ref_view<std::vector<TextPart> >,
SerializeString(std::vector<TextPart>)::<lambda(TextPart)> >]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/functional/invoke.hpp:169:24:
  required by substitution of ‘template<class Fun, class ... Args> using
invoke_result_t = decltype (ranges::invoke(declval<Fun>(),
(declval<Args>)()...)) [with Fun = const ranges::views::transform_base_fn&;
Args = {std::vector<TextPart, std::allocator<TextPart> >&, const
SerializeString(std::vector<TextPart>)::<lambda(TextPart)>&}]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/functional/bind_back.hpp:112:28:
  required by substitution of ‘template<class ... CallArgs> constexpr
ranges::invoke_result_t<const ranges::views::transform_base_fn&, CallArgs ...,
const SerializeString(std::vector<TextPart>)::<lambda(TextPart)>&>
ranges::detail::bind_back_fn_<ranges::views::transform_base_fn,
SerializeString(std::vector<TextPart>)::<lambda(TextPart)>
>::operator()<CallArgs ...>(CallArgs&& ...) const & [with CallArgs =
{std::vector<TextPart, std::allocator<TextPart> >&}]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/functional/invoke.hpp:134:34:
  [ skipping 7 instantiation contexts, use -ftemplate-backtrace-limit=0 to
disable ]
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/concepts/concepts.hpp:743:24:
  required from ‘static constexpr bool concepts::detail::and_<T,
U>::impl(std::true_type) [with T =
concepts::detail::boolean_<<lambda(auto:235)> >; U =
concepts::detail::boolean_<<lambda(auto:272)> >; std::true_type =
std::integral_constant<bool, true>]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/concepts/concepts.hpp:747:34:
  required from ‘constexpr concepts::detail::and_<T, U>::operator bool() const
[with T = concepts::detail::boolean_<<lambda(auto:235)> >; U =
concepts::detail::boolean_<<lambda(auto:272)> >]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/concepts/concepts.hpp:747:41:
  required by substitution of ‘template<bool B> using bool_ =
std::integral_constant<bool, __v> [with bool B =
concepts::detail::and_<concepts::detail::boolean_<<lambda(auto:235)> >,
concepts::detail::boolean_<<lambda(auto:272)> >
>{}.concepts::detail::and_<concepts::detail::boolean_<<lambda(auto:235)> >,
concepts::detail::boolean_<<lambda(auto:272)> > >::operator bool()]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/concepts/concepts.hpp:747:34:
  required from ‘constexpr concepts::detail::and_<T, U>::operator bool() const
[with T = concepts::detail::and_<concepts::detail::boolean_<<lambda(auto:235)>
>, concepts::detail::boolean_<<lambda(auto:272)> > >; U =
std::integral_constant<bool, true>]’
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/view/view.hpp:112:13:
  required by substitution of ‘template<class Rng, class ViewFn, class
CPP_true_, typename std::enable_if<((viewable_range<Rng> &&
invocable_view_closure<ViewFn, Rng>) && CPP_true_{}), int>::type <anonymous> >
constexpr auto ranges::views::view_closure_base_ns::operator|(Rng&&,
ranges::views::view_closure<ViewFn>) [with Rng = std::vector<TextPart>&; ViewFn
= ranges::detail::bind_back_fn_<ranges::views::transform_base_fn,
SerializeString(std::vector<TextPart>)::<lambda(TextPart)> >; CPP_true_ =
std::integral_constant<bool, true>; typename
std::enable_if<((viewable_range<Rng> && invocable_view_closure<ViewFn, Rng>) &&
CPP_true_{}), int>::type <anonymous> = <missing>]’
export_output_html.ii:3:309:   required from here
/home/abuild/rpmbuild/BUILD/Libraries/range-v3/include/range/v3/utility/semiregular_box.hpp:138:51:
internal compiler error: Segmentation fault
0x7ff6ac95214f ???
       
/usr/src/debug/glibc-2.30-2.1.x86_64/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0
0x7ff6ac93ce0a __libc_start_main
        ../csu/libc-start.c:308
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://bugs.opensuse.org/> for instructions.

$ valgrind --trace-children=yes g++ export_output_html.ii -fmax-errors=1
-Winvalid-pch -O3 -DNDEBUG -fno-strict-aliasing -Wall -W -fPIC
-Wno-unused-variable -Wno-unused-parameter -Wno-unused-function -Wno-switch
-Wno-comment -Wno-unused-but-set-variable -Wno-missing-field-initializers
-Wno-sign-compare -Wno-attributes -Wno-parentheses -Wno-stringop-overflow
-Wno-maybe-uninitialized -Wno-error=class-memaccess -std=gnu++2a
==12867== Memcheck, a memory error detector
==12867== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12867== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==12867== Command: g++ export_output_html.ii -fmax-errors=1 -Winvalid-pch -O3
-DNDEBUG -fno-strict-aliasing -Wall -W -fPIC -Wno-unused-variable
-Wno-unused-parameter -Wno-unused-function -Wno-switch -Wno-comment
-Wno-unused-but-set-variable -Wno-missing-field-initializers -Wno-sign-compare
-Wno-attributes -Wno-parentheses -Wno-stringop-overflow
-Wno-maybe-uninitialized -Wno-error=class-memaccess -std=gnu++2a
==12867== 
==12868== Memcheck, a memory error detector
==12868== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12868== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==12868== Command: /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus -fpreprocessed
export_output_html.ii -quiet -dumpbase export_output_html.ii -mtune=generic
-march=x86-64 -auxbase export_output_html -O3 -Winvalid-pch -Wall -Wextra
-Wno-unused-variable -Wno-unused-parameter -Wno-unused-function -Wno-switch
-Wno-comment -Wno-unused-but-set-variable -Wno-missing-field-initializers
-Wno-sign-compare -Wno-attributes -Wno-parentheses -Wstringop-overflow=0
-Wno-maybe-uninitialized -Wno-error=class-memaccess -std=gnu++2a -fmax-errors=1
-fno-strict-aliasing -fPIC -o /tmp/ccWK79f8.s
==12868== 
==12868== Invalid read of size 4
==12868==    at 0xE2D356: linemap_lookup(line_maps*, unsigned int) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE3502F: linemap_resolve_location(line_maps*, unsigned int,
location_resolution_kind, line_map_ordinary const**) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE043A4: diagnostic_report_current_module(diagnostic_context*,
unsigned int) (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xEC271F: ??? (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE032CD: diagnostic_report_diagnostic(diagnostic_context*,
diagnostic_info*) (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE02C65: ??? (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0x599E50: fatal_error(unsigned int, char const*, ...) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xD63A00: gt_pch_restore(_IO_FILE*) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xDB167C: c_common_read_pch(cpp_reader*, char const*, int, char
const*) (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xDB1AD3: c_common_pch_pragma(cpp_reader*, char const*) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0x604A04: ??? (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xEB862A: c_common_parse_file() (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==  Address 0x100b37b2c0 is not stack'd, malloc'd or (recently) free'd
==12868== 

==12868== 
==12868== Process terminating with default action of signal 11 (SIGSEGV):
dumping core
==12868==  Access not within mapped region at address 0x100B37B2C0
==12868==    at 0xE2D356: linemap_lookup(line_maps*, unsigned int) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE3502F: linemap_resolve_location(line_maps*, unsigned int,
location_resolution_kind, line_map_ordinary const**) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE043A4: diagnostic_report_current_module(diagnostic_context*,
unsigned int) (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xEC271F: ??? (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE032CD: diagnostic_report_diagnostic(diagnostic_context*,
diagnostic_info*) (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE02C65: ??? (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0x9B40C9: internal_error(char const*, ...) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xCAF641: ??? (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0x48C014F: ??? (in /lib64/libc-2.30.so)
==12868==    by 0xE2D355: linemap_lookup(line_maps*, unsigned int) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE3502F: linemap_resolve_location(line_maps*, unsigned int,
location_resolution_kind, line_map_ordinary const**) (in
/usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==    by 0xE043A4: diagnostic_report_current_module(diagnostic_context*,
unsigned int) (in /usr/lib64/gcc/x86_64-suse-linux/9/cc1plus)
==12868==  If you believe this happened as a result of a stack
==12868==  overflow in your program's main thread (unlikely but
==12868==  possible), you can try to increase the size of the
==12868==  main thread stack using the --main-stacksize= flag.
==12868==  The main thread stack size used in this run was 67108864.

$ cat export_output_html.ii
#pragma GCC pch_preprocess
"/home/marxin/BIG/osc/home:tux93/telegram-desktop/cmake_pch.hxx.gch"
                struct TextPart {       };
                              QByteArray SerializeString(  
std::vector<TextPart> data) {                           data  |
ranges::view::transform([&](TextPart ) {                        auto text =
SerializeString;                        return text;                           
  }                         )  


Is there a way one can somehow reduce size of the pre-compiler header? Using
--save-temps does not work:

/usr/bin/c++  -DDESKTOP_APP_DISABLE_CRASH_REPORTS -DDESKTOP_APP_USE_PACKAGED
-DDESKTOP_APP_USE_PACKAGED_FONTS -DNDEBUG -DQT_CORE_LIB -DQT_DBUS_LIB
-DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQ_OS_LINUX64
-I../Telegram/SourceFiles -I../Telegram/lib_base -I../Telegram/lib_rpl
-I../Telegram/lib_crl -ITelegram/gen -I../Telegram/lib_tl -isystem
../Telegram/ThirdParty/GSL/include -isystem /usr/include/qt5/QtCore/5.13.1
-isystem /usr/include/qt5/QtCore/5.13.1/QtCore -isystem
/usr/include/qt5/QtGui/5.13.1 -isystem /usr/include/qt5/QtGui/5.13.1/QtGui
-isystem /usr/include/qt5 -isystem /usr/include/qt5/QtCore -isystem
/usr/lib64/qt5/mkspecs/linux-g++ -isystem /usr/include/qt5/QtGui -isystem
/usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtNetwork -isystem
/usr/include/qt5/QtDBus -isystem ../Telegram/ThirdParty/variant/include
-isystem /home/abuild/rpmbuild/BUILD/Libraries/range-v3/include -isystem
../Telegram/ThirdParty/expected/include -O3 -DNDEBUG   -fno-strict-aliasing
-pipe -Wall -W -fPIC -Wno-unused-variable -Wno-unused-parameter
-Wno-unused-function -Wno-switch -Wno-comment -Wno-unused-but-set-variable
-Wno-missing-field-initializers -Wno-sign-compare -Wno-attributes
-Wno-parentheses -Wno-stringop-overflow -Wno-maybe-uninitialized
-Wno-error=class-memaccess -std=gnu++2a -Winvalid-pch -x c++-header -include
/home/abuild/rpmbuild/BUILD/tdesktop-1.9.6-full/build/Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx
-MD -MT Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx.gch -MF
Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx.gch.d -o
Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx.gch -c
Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx.cxx --verbose --save-temps
...
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 00000000000000000000000000000000
<command-line>:1:136: warning:
/home/abuild/rpmbuild/BUILD/tdesktop-1.9.6-full/build/Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx.gch:
too short to be a PCH file
<command-line>:1:9: fatal error:
/home/abuild/rpmbuild/BUILD/tdesktop-1.9.6-full/build/Telegram/CMakeFiles/lib_export.dir/cmake_pch.hxx.gch:
PCH file was invalid
compilation terminated.

Reply via email to