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.