Bug 102293 - [10/11/12 Regression] ICE when compiling Boost.Xpressive (in value_dependent_expression_p, at cp/pt.c:26730)
Summary: [10/11/12 Regression] ICE when compiling Boost.Xpressive (in value_dependent_...
Status: RESOLVED DUPLICATE of bug 100161
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 10.3.0
: P3 normal
Target Milestone: 10.4
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-09-12 20:14 UTC by andysem
Modified: 2021-09-13 12:51 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work: 9.4.0
Known to fail: 10.3.0, 11.1.0
Last reconfirmed:


Attachments
Preprocessed output of the failing test. (620.10 KB, application/gzip)
2021-09-12 20:14 UTC, andysem
Details

Note You need to log in before you can comment on or make changes to this bug.
Description andysem 2021-09-12 20:14:01 UTC
Created attachment 51443 [details]
Preprocessed output of the failing test.

I'm seeing ICE with gcc 10.3.0 and gcc 11.1.0 when compiling Boost.Log tests that use Boost.Xpressive. The ICE points at Boost.Xpressive code:

$ "g++-10" -save-temps  -ftemplate-depth-1024 -std=c++03 -fPIC -m64 -pthread -O0 -fno-inline -Wall -g -fno-strict-aliasing -DBOOST_ALL_NO_LIB=1 -DBOOST_ATOMIC_DYN_LINK=1 -DBOOST_CHRONO_DYN_LINK=1 -DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_LOG_DYN_LINK=1 -DBOOST_LOG_SETUP_DYN_LINK=1 -DBOOST_LOG_USE_AVX2 -DBOOST_LOG_USE_SSSE3 -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1 -DBOOST_THREAD_BUILD_DLL=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_DLL=1 -D_XOPEN_SOURCE=600  -I"." -I"libs/log/test/common"  -c -o "bin.v2/libs/log/test/filt_matches_xpressive.test/gcc-11/debug/cxxstd-03-iso/threadapi-pthread/threading-multi/run/filt_matches_xpressive.o" "libs/log/test/run/filt_matches_xpressive.cpp"
In file included from ./boost/xpressive/detail/core/matchers.hpp:46,
                 from ./boost/xpressive/detail/core/linker.hpp:35,
                 from ./boost/xpressive/detail/static/static.hpp:19,
                 from ./boost/xpressive/detail/static/transforms/as_matcher.hpp:18,
                 from ./boost/xpressive/detail/static/grammar.hpp:21,
                 from ./boost/xpressive/basic_regex.hpp:28,
                 from ./boost/xpressive/regex_compiler.hpp:30,
                 from ./boost/xpressive/xpressive_dynamic.hpp:17,
                 from libs/log/test/run/filt_matches_xpressive.cpp:18:
./boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp: In instantiation of ‘boost::xpressive::detail::simple_repeat_matcher<Xpr, Greedy>::simple_repeat_matcher(const Xpr&, unsigned int, unsigned int, std::size_t) [with Xpr = boost::xpressive::detail::matcher_wrapper<boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > > >; Greedy = mpl_::bool_<true>; std::size_t = long unsigned int]’:
./boost/xpressive/detail/dynamic/dynamic.hpp:216:48:   required from ‘void boost::xpressive::detail::make_simple_repeat(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence<BidiIter>&, const Xpr&) [with BidiIter = const char*; Xpr = boost::xpressive::detail::matcher_wrapper<boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > > >]’
./boost/xpressive/detail/dynamic/dynamic.hpp:130:31:   required from ‘void boost::xpressive::detail::dynamic_xpression<Matcher, BidiIter>::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence<BidiIter>&, mpl_::int_<1>, mpl_::false_) const [with Matcher = boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > >; BidiIter = const char*; mpl_::false_ = mpl_::bool_<false>]’
./boost/xpressive/detail/dynamic/dynamic.hpp:96:22:   required from ‘void boost::xpressive::detail::dynamic_xpression<Matcher, BidiIter>::repeat(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence<BidiIter>&) const [with Matcher = boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > >; BidiIter = const char*]’
./boost/xpressive/detail/dynamic/dynamic.hpp:94:18:   required from here
./boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp:81:23: internal compiler error: in value_dependent_expression_p, at cp/pt.c:26730
   81 |             BOOST_ASSERT(0 != width && unknown_width() != width);
      |             ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.

$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-gDeRY6/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-gDeRY6/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1) 

I'm attaching the preprocessed output of the test.

For reference, this happens with Boost 1.77.0, as well as the current develop branch (boost superproject revision 091e69b53b55274ff81629a8e3f64ca782ca7722).
Comment 1 andysem 2021-09-12 20:15:54 UTC
I forgot to mention that the same code compiles successfully with gcc 9.4.0.

And here is the output from gcc 11.1.0:

In file included from ./boost/assert.hpp:58,
                 from ./boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp:16,
                 from ./boost/xpressive/detail/core/matchers.hpp:46,
                 from ./boost/xpressive/detail/core/linker.hpp:35,
                 from ./boost/xpressive/detail/static/static.hpp:19,
                 from ./boost/xpressive/detail/static/transforms/as_matcher.hpp:18,
                 from ./boost/xpressive/detail/static/grammar.hpp:21,
                 from ./boost/xpressive/basic_regex.hpp:28,
                 from ./boost/xpressive/regex_compiler.hpp:30,
                 from ./boost/xpressive/xpressive_dynamic.hpp:17,
                 from libs/log/test/run/filt_matches_xpressive.cpp:18:
./boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp: In instantiation of ‘boost::xpressive::detail::simple_repeat_matcher<Xpr, Greedy>::simple_repeat_matcher(const Xpr&, unsigned int, unsigned int, std::size_t) [with Xpr = boost::xpressive::detail::matcher_wrapper<boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > > >; Greedy = mpl_::bool_<true>; std::size_t = long unsigned int]’:
./boost/xpressive/detail/dynamic/dynamic.hpp:216:48:   required from ‘void boost::xpressive::detail::make_simple_repeat(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence<BidiIter>&, const Xpr&) [with BidiIter = const char*; Xpr = boost::xpressive::detail::matcher_wrapper<boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > > >]’
./boost/xpressive/detail/dynamic/dynamic.hpp:130:31:   required from ‘void boost::xpressive::detail::dynamic_xpression<Matcher, BidiIter>::repeat_(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence<BidiIter>&, mpl_::int_<1>, mpl_::false_) const [with Matcher = boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > >; BidiIter = const char*; mpl_::false_ = mpl_::bool_<false>]’
./boost/xpressive/detail/dynamic/dynamic.hpp:96:22:   required from ‘void boost::xpressive::detail::dynamic_xpression<Matcher, BidiIter>::repeat(const boost::xpressive::detail::quant_spec&, boost::xpressive::detail::sequence<BidiIter>&) const [with Matcher = boost::xpressive::detail::charset_matcher<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> >, mpl_::bool_<false>, boost::xpressive::detail::compound_charset<boost::xpressive::regex_traits<char, boost::xpressive::cpp_regex_traits<char> > > >; BidiIter = const char*]’
./boost/xpressive/detail/dynamic/dynamic.hpp:94:18:   required from here
./boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp:81:37: internal compiler error: in value_dependent_expression_p, at cp/pt.c:26978
   81 |             BOOST_ASSERT(0 != width && unknown_width() != width);
      |                          ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
./boost/xpressive/detail/core/matcher/simple_repeat_matcher.hpp:81:13: note: in expansion of macro ‘BOOST_ASSERT’
   81 |             BOOST_ASSERT(0 != width && unknown_width() != width);
      |             ^~~~~~~~~~~~
0xe306b3 internal_error(char const*, ...)
	???:0
0xe27039 fancy_abort(char const*, int, char const*)
	???:0
0xf5208e value_dependent_expression_p(tree_node*)
	???:0
0xf520a9 value_dependent_expression_p(tree_node*)
	???:0
0x10ed97e tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
	???:0
0x10eddd9 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
	???:0
0x10ee17a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool)
	???:0
0x1178f37 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	???:0
0x117910c tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	???:0
0x1179047 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	???:0
0x1178f95 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	???:0
0x1179047 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	???:0
0x1178f95 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
	???:0
0x122150a instantiate_decl(tree_node*, bool, bool)
	???:0
0xfa3850 instantiate_pending_templates(int)
	???:0
0xf9f8f3 c_parse_final_cleanups()
	???:0
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <file:///usr/share/doc/gcc-11/README.Bugs> for instructions.

    "g++-11"  -ftemplate-depth-1024 -std=c++03 -fPIC -m64 -pthread -O0 -fno-inline -Wall -g -fno-strict-aliasing -DBOOST_ALL_NO_LIB=1 -DBOOST_ATOMIC_DYN_LINK=1 -DBOOST_CHRONO_DYN_LINK=1 -DBOOST_FILESYSTEM_DYN_LINK=1 -DBOOST_LOG_DYN_LINK=1 -DBOOST_LOG_SETUP_DYN_LINK=1 -DBOOST_LOG_USE_AVX2 -DBOOST_LOG_USE_SSSE3 -DBOOST_TEST_DYN_LINK=1 -DBOOST_TEST_NO_AUTO_LINK=1 -DBOOST_THREAD_BUILD_DLL=1 -DBOOST_THREAD_POSIX -DBOOST_THREAD_USE_DLL=1 -D_XOPEN_SOURCE=600  -I"." -I"libs/log/test/common"  -c -o "bin.v2/libs/log/test/filt_matches_xpressive.test/gcc-11/debug/cxxstd-03-iso/threadapi-pthread/threading-multi/run/filt_matches_xpressive.o" "libs/log/test/run/filt_matches_xpressive.cpp"
Comment 2 andysem 2021-09-12 20:22:24 UTC
The code compiles if -std=c++03 is replaced with e.g. -std=c++11.
Comment 3 Martin Liška 2021-09-13 11:09:43 UTC
Dup.

*** This bug has been marked as a duplicate of bug 100161 ***
Comment 4 andysem 2021-09-13 12:38:56 UTC
(In reply to Martin Liška from comment #3)
> Dup.
> 
> *** This bug has been marked as a duplicate of bug 100161 ***

This bug isn't about a warning but about an ICE. Are you positive this is a duplicate?
Comment 5 Martin Liška 2021-09-13 12:40:54 UTC
Yes, please. It was fixed with the commit that belongs to the PR. Moreover, there's one more boost ICE report that was also marked as duplicate of the mentioned PR.
Comment 6 andysem 2021-09-13 12:51:43 UTC
Ok, thanks for confirming.