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
> >

Reply via email to