On Tue, Jul 17, 2018 at 3:36 PM Richard Biener <richard.guent...@gmail.com> wrote: > > On Tue, Jul 17, 2018 at 3:08 PM Paul Koning <paulkon...@comcast.net> wrote: > > > > > > > On Jul 17, 2018, at 5:46 AM, Richard Biener <richard.guent...@gmail.com> > > > wrote: > > > > > >> ... > > > > > > There is not enough information for anyone to help you without > > > reproducing the issue which is maybe too much to ask for ;) > > > > > > Can you debug_tree () the offending decl in gdb? > > > > Yes, here it is. I don't know anything about debugging in this area, so > > tools like debug_tree are good to learn about. How would I interpret its > > output? > > > > pkoning:gcc pkoning$ lldb ./cc1plus -- new_opa.ii -fno-implicit-templates > > -Wall -Wextra -Wwrite-strings -Wcast-qual -Wabi > > -fdiagnostics-show-location=once -frandom-seed=new_opa.lo -g -O2 > > -std=gnu++1z > > (lldb) target create "./cc1plus" > > Current executable set to './cc1plus' (x86_64). > > (lldb) settings set -- target.run-args "new_opa.ii" > > "-fno-implicit-templates" "-Wall" "-Wextra" "-Wwrite-strings" "-Wcast-qual" > > "-Wabi" "-fdiagnostics-show-location=once" "-frandom-seed=new_opa.lo" "-g" > > "-O2" "-std=gnu++1z" > > (lldb) b internal_error > > Breakpoint 1: where = cc1plus`internal_error(char const*, ...) + 104 at > > diagnostic.c:1441, address = 0x0000000100c21378 > > (lldb) run > > Process 10880 launched: './cc1plus' (x86_64) > > cc1plus: warning: -Wabi won't warn about anything [-Wabi] > > cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, > > which is also used by default > > cc1plus: note: use e.g. -Wabi=11 to warn about changes from GCC 7 > > long int std::abs(long int) long long int std::abs(long long int) > > constexpr double std::abs(double) constexpr float std::abs(float) constexpr > > long double std::abs(long double) ldiv_t std::div(long int, long int) > > std::exception::exception() std::exception::exception() > > std::exception::exception() std::bad_exception::bad_exception() > > std::bad_exception::bad_exception() std::bad_exception::bad_exception() > > const char* std::type_info::name() const bool > > std::type_info::operator!=(const std::type_info&) const std::size_t > > std::type_info::hash_code() const std::type_info::type_info(const char*) > > std::type_info::type_info(const char*) std::type_info::type_info(const > > char*) std::bad_cast::bad_cast() std::bad_cast::bad_cast() > > std::bad_cast::bad_cast() std::bad_typeid::bad_typeid() > > std::bad_typeid::bad_typeid() std::bad_typeid::bad_typeid() > > std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) > > std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) > > std::__exception_ptr::exception_ptr::exception_ptr(std::nullptr_t) > > std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) > > > > std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) > > > > std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr&&) > > std::__exception_ptr::exception_ptr& > > std::__exception_ptr::exception_ptr::operator=(std::__exception_ptr::exception_ptr&&) > > std::__exception_ptr::exception_ptr::operator bool() const void > > std::__exception_ptr::swap(std::__exception_ptr::exception_ptr&, > > std::__exception_ptr::exception_ptr&) void > > std::__exception_ptr::__dest_thunk(void*) > > std::__exception_ptr::exception_ptr std::make_exception_ptr(_Ex) constexpr > > _Tp* std::__addressof(_Tp&) constexpr std::integral_constant<_Tp, > > __v>::operator std::integral_constant<_Tp, __v>::value_type() const > > constexpr std::integral_constant<_Tp, __v>::value_type > > std::integral_constant<_Tp, __v>::operator()() const > > std::integral_constant<bool, false> constexpr const bool > > std::integral_constant<bool, false>::value constexpr const bool > > std::integral_constant<bool, false>::value std::integral_constant<bool, > > true> constexpr const bool std::integral_constant<bool, true>::value > > constexpr const bool std::integral_constant<bool, true>::value > > std::integral_constant<short unsigned int, 0> constexpr const short > > unsigned int std::integral_constant<short unsigned int, 0>::value constexpr > > const short unsigned int std::integral_constant<short unsigned int, > > 0>::value std::__make_unsigned_selector_base::_List<unsigned char, short > > unsigned int, unsigned int, long unsigned int, long long unsigned int> > > std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, > > long unsigned int, long long unsigned int> > > std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, > > long long unsigned int> std::__make_unsigned_selector_base::_List<long > > unsigned int, long long unsigned int> > > std::__make_unsigned_selector_base::_List<long long unsigned int> > > std::__make_unsigned_selector_base::_List<> constexpr const size_t > > std::__make_unsigned_selector_base::_List<long long unsigned int>::__size > > constexpr const size_t std::__make_unsigned_selector_base::_List<long long > > unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<long unsigned int, long long > > unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<long unsigned int, long long > > unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, > > long long unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, > > long long unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, > > long unsigned int, long long unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, > > long unsigned int, long long unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<unsigned char, short unsigned > > int, unsigned int, long unsigned int, long long unsigned int>::__size > > constexpr const size_t std::__make_unsigned_selector_base::_List<unsigned > > char, short unsigned int, unsigned int, long unsigned int, long long > > unsigned int>::__size constexpr const size_t > > std::__make_unsigned_selector_base::_List<unsigned char, short unsigned > > int, unsigned int, long unsigned int, long long unsigned int>::__size > > std::__make_unsigned_selector<wchar_t, false, true> > > std::__make_unsigned_selector_base::__select<2, > > std::__make_unsigned_selector_base::_List<unsigned char, short unsigned > > int, unsigned int, long unsigned int, long long unsigned int>, false> > > constexpr const size_t std::__make_unsigned_selector_base::_List<short > > unsigned int, unsigned int, long unsigned int, long long unsigned > > int>::__size std::__make_unsigned_selector_base::__select<2, > > std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, > > long unsigned int, long long unsigned int>, true> std::is_const<wchar_t> > > constexpr const bool std::integral_constant<bool, false>::value > > std::is_volatile<wchar_t> std::__match_cv_qualifiers<wchar_t, short > > unsigned int, false, false> std::__cv_selector<short unsigned int, false, > > false> std::__make_unsigned_selector<char16_t, false, true> > > std::is_const<char16_t> std::is_volatile<char16_t> > > std::__match_cv_qualifiers<char16_t, short unsigned int, false, false> > > std::__make_unsigned_selector<char32_t, false, true> > > std::__make_unsigned_selector_base::__select<4, > > std::__make_unsigned_selector_base::_List<unsigned char, short unsigned > > int, unsigned int, long unsigned int, long long unsigned int>, false> > > std::__make_unsigned_selector_base::__select<4, > > std::__make_unsigned_selector_base::_List<short unsigned int, unsigned int, > > long unsigned int, long long unsigned int>, false> constexpr const size_t > > std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, > > long long unsigned int>::__size > > std::__make_unsigned_selector_base::__select<4, > > std::__make_unsigned_selector_base::_List<unsigned int, long unsigned int, > > long long unsigned int>, false> constexpr const size_t > > std::__make_unsigned_selector_base::_List<long unsigned int, long long > > unsigned int>::__size std::__make_unsigned_selector_base::__select<4, > > std::__make_unsigned_selector_base::_List<long unsigned int, long long > > unsigned int>, true> std::is_const<char32_t> std::is_volatile<char32_t> > > std::__match_cv_qualifiers<char32_t, long unsigned int, false, false> > > std::__cv_selector<long unsigned int, false, false> > > std::__make_signed_selector<wchar_t, false, true> std::is_integral<wchar_t> > > std::remove_cv<wchar_t> std::remove_volatile<wchar_t> > > std::remove_const<wchar_t> constexpr const bool > > std::integral_constant<bool, true>::value std::is_enum<wchar_t> > > std::__make_unsigned_selector<wchar_t, true, false> std::is_integral<short > > unsigned int> std::remove_cv<short unsigned int> std::remove_volatile<short > > unsigned int> std::remove_const<short unsigned int> std::is_enum<short > > unsigned int> std::__make_signed_selector<short unsigned int, true, false> > > std::is_const<short unsigned int> std::is_volatile<short unsigned int> > > std::__match_cv_qualifiers<short unsigned int, short int, false, false> > > std::__cv_selector<short int, false, false> > > std::__make_signed_selector<char16_t, false, true> > > std::is_integral<char16_t> std::remove_cv<char16_t> > > std::remove_volatile<char16_t> std::remove_const<char16_t> > > std::is_enum<char16_t> std::__make_unsigned_selector<char16_t, true, false> > > std::__make_signed_selector<char32_t, false, true> > > std::is_integral<char32_t> std::remove_cv<char32_t> > > std::remove_volatile<char32_t> std::remove_const<char32_t> > > std::is_enum<char32_t> std::__make_unsigned_selector<char32_t, true, false> > > std::is_integral<long unsigned int> std::remove_cv<long unsigned int> > > std::remove_volatile<long unsigned int> std::remove_const<long unsigned > > int> std::is_enum<long unsigned int> std::__make_signed_selector<long > > unsigned int, true, false> std::is_const<long unsigned int> > > std::is_volatile<long unsigned int> std::__match_cv_qualifiers<long > > unsigned int, long int, false, false> std::__cv_selector<long int, false, > > false> decltype (__declval<_Tp>(0)) std::declval() constexpr bool > > std::__call_is_nt(std::__invoke_memfun_ref) constexpr bool > > std::__call_is_nt(std::__invoke_memfun_deref) constexpr bool > > std::__call_is_nt(std::__invoke_memobj_ref) constexpr bool > > std::__call_is_nt(std::__invoke_memobj_deref) constexpr bool > > std::__call_is_nt(std::__invoke_other) constexpr _Tp&& > > std::forward(typename std::remove_reference<_Tp>::type&) constexpr _Tp&& > > std::forward(typename std::remove_reference<_Tp>::type&&) constexpr > > typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) constexpr > > typename std::conditional<std::__move_if_noexcept_cond<_Tp>::value, const > > _Tp&, _Tp&&>::type std::move_if_noexcept(_Tp&) constexpr _Tp* > > std::addressof(_Tp&) _Tp std::__exchange(_Tp&, _Up&&) typename > > std::enable_if<std::__and_<std::__not_<std::__is_tuple_like<_Tp> >, > > std::is_move_constructible<_Tp>, std::is_move_assignable<_Tp> > > >::value>::type std::swap(_Tp&, _Tp&) typename > > std::enable_if<std::__is_swappable<_Tp>::value>::type std::swap(_Tp > > (&)[_Nm], _Tp (&)[_Nm]) std::nested_exception::nested_exception() > > std::nested_exception::nested_exception() > > std::nested_exception::nested_exception() void > > std::nested_exception::rethrow_nested() const > > std::__exception_ptr::exception_ptr std::nested_exception::nested_ptr() > > const std::_Nested_exception<_Except>::_Nested_exception(const _Except&) > > std::_Nested_exception<_Except>::_Nested_exception(_Except&&) void > > std::__throw_with_nested_impl(_Tp&&, std::true_type) void > > std::__throw_with_nested_impl(_Tp&&, std::false_type) void > > std::throw_with_nested(_Tp&&) std::__rethrow_if_nested_cond<_Ex> > > std::__rethrow_if_nested_impl(const _Ex*) void > > std::__rethrow_if_nested_impl(const void*) void > > std::rethrow_if_nested(const _Ex&) std::bad_alloc::bad_alloc() > > std::bad_alloc::bad_alloc() std::bad_alloc::bad_alloc() > > std::bad_array_new_length::bad_array_new_length() > > std::bad_array_new_length::bad_array_new_length() > > std::bad_array_new_length::bad_array_new_length() void* operator > > new(std::size_t, void*) void* operator new [](std::size_t, void*) void > > operator delete(void*, void*) void operator delete [](void*, void*) > > constexpr _Tp* std::launder(_Tp*) void* operator new(std::size_t, > > std::align_val_t)cc1plus was compiled with optimization - stepping may > > behave oddly; variables may not be available. > > Process 10880 stopped > > * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 > > frame #0: 0x0000000100c21378 cc1plus`internal_error(gmsgid="in %s, at > > %s:%d") at diagnostic.c:1441 [opt] > > 1438 internal_error (const char *gmsgid, ...) > > 1439 { > > 1440 va_list ap; > > -> 1441 va_start (ap, gmsgid); > > 1442 rich_location richloc (line_table, input_location); > > 1443 diagnostic_impl (&richloc, -1, gmsgid, &ap, DK_ICE); > > 1444 va_end (ap); > > Target 0: (cc1plus) stopped. > > (lldb) frame sel 2 > > frame #2: 0x0000000100074b36 > > cc1plus`import_export_decl(decl=0x000000014269c750) at decl2.c:2877 [opt] > > 2874 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl)); > > 2875 /* Any code that creates entities with TREE_PUBLIC cleared should > > 2876 also set DECL_INTERFACE_KNOWN. */ > > -> 2877 gcc_assert (TREE_PUBLIC (decl)); > > 2878 if (TREE_CODE (decl) == FUNCTION_DECL) > > 2879 gcc_assert (DECL_IMPLICIT_INSTANTIATION (decl) > > 2880 || DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl) > > (lldb) call debug_tree(decl) > > <var_decl 0x14269c750 value > > type <boolean_type 0x1426aa5e8 bool readonly unsigned type_6 QI > > size <integer_cst 0x142502768 constant 8> > > unit-size <integer_cst 0x142502780 constant 1> > > align:8 warn_if_not_align:0 symtab:150 alias-set -1 canonical-type > > 0x1426aa5e8 precision:1 min <integer_cst 0x1425029d8 0> max <integer_cst > > 0x142502a08 1>> > > readonly constant used static tree_1 tree_2 tree_3 unsigned nonlocal > > in_system_header read decl_1 QI > > /Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits:59:28 > > size <integer_cst 0x142502768 8> unit-size <integer_cst 0x142502780 1> > > align:8 warn_if_not_align:0 context <record_type 0x1426a7e70 > > integral_constant> initial <integer_cst 0x1425029d8 0> > > template-info 0x1426a64e0 chain <function_decl 0x1426a0600 __conv_op >> > > (lldb) > > lldb? eh ... ;) > > anyhow, this is > > namespace std > { > > # 56 > "/Users/pkoning/Documents/svn/buildpdp/pdp11-aout/libstdc++-v3/include/type_traits" > 3 > template<typename _Tp, _Tp __v> > struct integral_constant > { > static constexpr _Tp value = __v; > ^^^ > > which should have TREE_PUBLIC set. My next step would be to watch how > this flag changes (if it does...) > > break at ggc-page.c:1442 (the return stmt of ggc_internal_alloc) > conditional on result == 0x14269c750 > and then watch *&the-decl->base.public_flag printing said flag when > the watchpoint hits > (because you're watching the whole integer containing the bitfield bit). > > If that doesn't go anywhere try reducing the source file using creduce > or by other means. > > Maybe look at reset_decl_linkage () and visibility support in general.
Oh, and generally a grep for 'targetm' in cp/ might reveal bits that sound interesting. Richard. > Richard. > > > Build/configure info: > > > > pkoning:gcc pkoning$ ./xg++ --verbose > > Using built-in specs. > > COLLECT_GCC=./xg++ > > Target: pdp11-aout > > Configured with: ../gcc/configure --target=pdp11-aout > > --prefix=/usr/local/pdp11-aout --without-x target_alias=pdp11-aout > > --with-mpc=/usr/local --with-mpfr=/usr/local --with-gmp=/usr/local > > --disable-libssp --disable-shared --with-newlib > > --enable-languages=c,c++,fortran --enable-checking=rtl > > Thread model: single > > gcc version 9.0.0 20180716 (experimental) (GCC) > > > > The new_opa.ii file is attached. > > > > paul > >