> On Jul 17, 2018, at 9:36 AM, 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).
>> ...
>> 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.

I trimmed the file a bit.

Managed to find where public_flag is cleared.  It is in cp/expr.c 
maybe_commonize_var, line 5619, here:

          else
            {
              /* While for initialized variables, we must use internal
                 linkage -- which means that multiple copies will not
                 be merged.  */
              TREE_PUBLIC (decl) = 0;
              DECL_COMMON (decl) = 0;

Could it be related to the fact that I have an a.out (rather than ELF) target?

        paul

Reply via email to