> I will take a look if I can improve type_in_anonymous_namepsace somehow.  So
> Ada produces TYPE_DECL with DECL_ABSTRACT that do have TYPE_STUB_DECL with
> TREE_PUBLIC NULL I suppose.

Do you mean DECL_ARTIFICIAL instead of DECL_ABSTRACT?  If so, presumably, yes, 
why wouldn't it do that?  That seems the natural description of an artificial 
private type with file scope.

And I don't really understand why DECL_ARTIFICIAL is allowed to make such a 
difference in semantics here.  That looks dangerous to me.


Note that the problematic assertions:

  gcc_assert (!type_with_linkage_p (t1) || !type_in_anonymous_namespace_p 
(t1));
  gcc_assert (!type_with_linkage_p (t2) || !type_in_anonymous_namespace_p 
(t2));

make the following code unreachable:

  if ((type_with_linkage_p (t1) && type_in_anonymous_namespace_p (t1))
      || (type_with_linkage_p (t2) && type_in_anonymous_namespace_p (t2)))
    {
      /* We can not trip this when comparing ODR types, only when trying to
         match different ODR derivations from different declarations.
         So WARN should be always false.  */
      gcc_assert (!warn);
      return false;
    }

-- 
Eric Botcazou

Reply via email to